diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..51df1af Binary files /dev/null and b/.DS_Store differ diff --git a/app.py b/app.py index d8fbde0..e2e1a50 100644 --- a/app.py +++ b/app.py @@ -3,7 +3,7 @@ from flask_oauthlib.client import OAuth, OAuthRemoteApp from flask_sqlalchemy import SQLAlchemy from datetime import datetime, timedelta from icalendar import Calendar, Event -import os, requests, pytz, hashlib +import os, requests, pytz, hashlib, random from dotenv import load_dotenv load_dotenv() @@ -30,37 +30,61 @@ google = oauth.remote_app( authorize_url='https://accounts.google.com/o/oauth2/auth', ) + teams_dict = { - 1: "Lakers", - 2: "Heat", - 3: "Warriors", - 4: "Celtics", - 5: "Spurs", - 6: "Knicks", - 7: "Pistons", - 8: "Magic", - 9: "Suns", - 10: "Pacers", - 11: "Jazz", - 12: "Trail Blazers", - 13: "Raptors", - 14: "Mavericks", - 15: "Bucks", - 16: "Thunder", - 17: "Bulls", - 18: "Pelicans", - 19: "Rockets", - 20: "Kings", - 21: "Clippers", - 22: "Cavaliers", - 23: "Hawks", - 24: "Grizzlies", - 25: "Nuggets", - 26: "Hornets", - 27: "76ers", - 28: "Wizards", - 29: "Timberwolves", - 30: "Nets" + 1: { + "name": "NBA", + "teams": { + 1: "Lakers", + 2: "Heat", + 3: "Warriors", + 4: "Celtics", + 5: "Spurs", + 6: "Knicks", + 7: "Pistons", + 8: "Magic", + 9: "Suns", + 10: "Pacers", + 11: "Jazz", + 12: "Trail Blazers", + 13: "Raptors", + 14: "Mavericks", + 15: "Bucks", + 16: "Thunder", + 17: "Bulls", + 18: "Pelicans", + 19: "Rockets", + 20: "Kings", + 21: "Clippers", + 22: "Cavaliers", + 23: "Hawks", + 24: "Grizzlies", + 25: "Nuggets", + 26: "Hornets", + 27: "76ers", + 28: "Wizards", + 29: "Timberwolves", + 30: "Nets" + } + }, + 2: { + "name": "WNBA", + "teams": { + 1: "Aces", + 2: "Dream", + 3: "Sun", + 4: "Wings", + 5: "Sky", + 6: "Sparks", + 7: "Storm", + 8: "Lynx", + 9: "Mercury", + 10: "Mystics", + 11: "Fever", + 12: "Liberty" + } + } + } class User(db.Model): @@ -69,44 +93,76 @@ class User(db.Model): class Team(db.Model): id = db.Column(db.Integer, primary_key=True) - idTeam = db.Column(db.Integer, unique=True) + idTeam = db.Column(db.Integer) idUser = db.Column(db.Integer, db.ForeignKey('user.id')) + idSport = db.Column(db.Integer) -def addTeam(idUser, idTeam): - team = Team(idTeam=idTeam, idUser=idUser) +def addTeam(idUser, idTeam, idSport): + team = Team(idTeam=idTeam, idUser=idUser, idSport=idSport, id=random.randint(10000000, 99999999)) db.session.add(team) db.session.commit() -def deleteTeam(idTeam): - team = Team.query.filter_by(idTeam=idTeam).first() +def deleteTeam(idTeam, idSport): + team = Team.query.filter_by(idTeam=idTeam,idSport=idSport).first() db.session.delete(team) db.session.commit() -def getTeamName(idTeam): - return teams_dict[idTeam] +def getTeamName(idTeam, idSport): + return teams_dict[idSport]["teams"][idTeam] -def getUserTeams(idUser): - teams = Team.query.filter_by(idUser=idUser).all() +def getUserTeams(idUser,idSport): + teams = Team.query.filter_by(idUser=idUser,idSport=idSport).all() return teams -def assignTeam(idUser, idTeam): - team = Team.query.filter_by(idTeam=idTeam).first() +def assignTeam(idUser, idTeam,idSport): + team = Team.query.filter_by(idTeam=idTeam,idSport=idSport).first() if team is None: - addTeam(idUser, idTeam) + addTeam(idUser, idTeam, idSport) else: team.idUser = idUser db.session.commit() -def get_team_logo(idTeam): - return f"static/logo/team_nba/team_{idTeam}.png" -def getSchedules(): - response = requests.get("https://cdn.nba.com/static/json/staticData/scheduleLeagueV2.json") +def getWNBATeamMatches(idTeam): + result = [] + matches_info = getWNBASchedules() + for i in matches_info: + if (i['WNBA_hometeamName'] == getTeamName(idTeam) or i['WNBA_awayteamName'] == getTeamName(idTeam)): + result.append(i) + return result + + + + +def getTeamLogo(idTeam, idSport): + match idSport: + case 1: + return f"static/logo/team_nba/team_{idTeam}.png" + case 2: + return f"static/logo/team_wnba/team_{idTeam}.png" + case _: + return False + +def getOtherTeams(uid, idSport): + result = [] + for i in list(teams_dict[idSport]["teams"].keys()): + if (Team.query.filter_by(idUser=uid, idTeam=i).first() is None): + result.append(i) + + return result + +def getSchedules(idSport): + match idSport: + case 1: + response = requests.get("https://cdn.nba.com/static/json/staticData/scheduleLeagueV2.json") + case 2: + response = requests.get("https://cdn.wnba.com/static/json/staticData/scheduleLeagueV2.json") matches_info = [] for game_date in response.json()['leagueSchedule']['gameDates']: for game in game_date['games']: match_info = { + 'sportName': teams_dict[idSport]["name"], 'gameDateTimeUTC': game['gameDateTimeUTC'], 'weekNumber': game['weekNumber'], 'arenaName': game['arenaName'], @@ -123,21 +179,23 @@ def getSchedules(): matches_info.append(match_info) return matches_info -def getTeamMatches(idTeam): +def getTeamMatches(idTeam, idSport): result = [] - matches_info = getSchedules() + matches_info = getSchedules(idSport) for i in matches_info: - if (i['hometeamName'] == getTeamName(idTeam) or i['awayteamName'] == getTeamName(idTeam)): + if (i['hometeamName'] == getTeamName(idTeam, idSport) or i['awayteamName'] == getTeamName(idTeam, idSport)): result.append(i) return result def getUserMatches(idUser): result = [] - teams = getUserTeams(idUser) - for i in teams: - result += getTeamMatches(i.idTeam) + for i in range(1,len(teams_dict) + 1): + teams = getUserTeams(idUser, i) + for j in teams: + result += getTeamMatches(j.idTeam, i) return result + def convert_to_datetime(date_str): return datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.UTC) @@ -147,7 +205,7 @@ def generate_ical(events): event = Event() event.add('summary', f"{event_data['hometeamTricode']} vs {event_data['awayteamTricode']} 🏀") event.add('location', f"🏟 {event_data['arenaName']}, {event_data['arenaCity']}") - event.add("description", f"🎖️Scores: \n{event_data['hometeamName']} {event_data['hometeamScore']} - {event_data['awayteamScore']} {event_data['awayteamName']}") + event.add("description", f"Sport: {event_data['sportName']}\n🎖️Scores: \n{event_data['hometeamName']} {event_data['hometeamScore']} - {event_data['awayteamScore']} {event_data['awayteamName']}") event.add("url", event_data['url']) event.add('dtstart', datetime.strptime(event_data['gameDateTimeUTC'], '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.UTC)) event.add('dtend', datetime.strptime(event_data['gameDateTimeUTC'], '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=pytz.UTC) + timedelta(hours=3)) @@ -163,24 +221,21 @@ def index(): if (not(me.data['email'])): return redirect("/logout", code=302) user = User.query.filter_by(email=me.data['email']).first() + if user is None: user = User(email=me.data['email']) db.session.add(user) db.session.commit() - - otherTeams = [] - - for i in list(teams_dict.keys()): - if (Team.query.filter_by(idUser=user.id, idTeam=i).first() is None): - otherTeams.append(i) - - return render_template('dashboard.html', userTeams=getUserTeams(user.id), otherTeams=otherTeams, getTeamName=getTeamName, getTeamLogo=get_team_logo, userId=user.id) + sportId = int(request.args.get('sport', 1)) + user_teams = getUserTeams(user.id, sportId) + other_teams = getOtherTeams(user.id, sportId) + return render_template('dashboard.html', userTeams=user_teams, otherTeams=other_teams, getTeamName=getTeamName, getTeamLogo=getTeamLogo, userId=user.id, sportId=sportId) return render_template('index.html') -@app.route('/add/') -def addTeamRoute(idTeam): +@app.route('/add//') +def addTeamRoute(idSport,idTeam): if 'google_token' in session: me = google.get('userinfo') user = User.query.filter_by(email=me.data['email']).first() @@ -189,12 +244,12 @@ def addTeamRoute(idTeam): db.session.add(user) db.session.commit() - assignTeam(user.id, idTeam) - return redirect("/", code=302) + assignTeam(user.id, idTeam, idSport) + return redirect("/?sport=" + str(idSport), code=302) return redirect("/login", code=302) -@app.route('/del/') -def delTeamRoute(idTeam): +@app.route('/del//') +def delTeamRoute(idSport, idTeam): if 'google_token' in session: me = google.get('userinfo') user = User.query.filter_by(email=me.data['email']).first() @@ -203,8 +258,8 @@ def delTeamRoute(idTeam): db.session.add(user) db.session.commit() - deleteTeam(idTeam) - return redirect("/", code=302) + deleteTeam(idTeam, idSport) + return redirect("/?sport=" + str(idSport), code=302) return redirect("/login", code=302) @@ -235,7 +290,7 @@ def generate_ical_feed(user_id): def google_redirect(): if 'instagram' in request.headers.get('User-Agent').lower() or 'facebook' in request.headers.get('User-Agent').lower(): return render_template('open_in_browser.html') - return google.authorize(callback=url_for('authorized', _external=True, _scheme='https')) + return google.authorize(callback=url_for('authorized', _external=True, _scheme='http')) @app.route('/logout') def logout(): @@ -260,5 +315,6 @@ def get_google_oauth_token(): if __name__ == '__main__': with app.app_context(): db.create_all() + app.run(debug=True, port=8000, host='127.0.0.1') diff --git a/static/.DS_Store b/static/.DS_Store index e15ca60..83c10ff 100644 Binary files a/static/.DS_Store and b/static/.DS_Store differ diff --git a/static/logo/.DS_Store b/static/logo/.DS_Store new file mode 100644 index 0000000..f473290 Binary files /dev/null and b/static/logo/.DS_Store differ diff --git a/static/logo/team_wnba/.DS_Store b/static/logo/team_wnba/.DS_Store new file mode 100644 index 0000000..c84790d Binary files /dev/null and b/static/logo/team_wnba/.DS_Store differ diff --git a/static/logo/team_wnba/team_1.png b/static/logo/team_wnba/team_1.png new file mode 100644 index 0000000..a0de596 Binary files /dev/null and b/static/logo/team_wnba/team_1.png differ diff --git a/static/logo/team_wnba/team_10.png b/static/logo/team_wnba/team_10.png new file mode 100644 index 0000000..ba6f70f Binary files /dev/null and b/static/logo/team_wnba/team_10.png differ diff --git a/static/logo/team_wnba/team_11.png b/static/logo/team_wnba/team_11.png new file mode 100644 index 0000000..c37c72f Binary files /dev/null and b/static/logo/team_wnba/team_11.png differ diff --git a/static/logo/team_wnba/team_12.png b/static/logo/team_wnba/team_12.png new file mode 100644 index 0000000..ff1735e Binary files /dev/null and b/static/logo/team_wnba/team_12.png differ diff --git a/static/logo/team_wnba/team_2.png b/static/logo/team_wnba/team_2.png new file mode 100644 index 0000000..7979c54 Binary files /dev/null and b/static/logo/team_wnba/team_2.png differ diff --git a/static/logo/team_wnba/team_3.png b/static/logo/team_wnba/team_3.png new file mode 100644 index 0000000..d44249c Binary files /dev/null and b/static/logo/team_wnba/team_3.png differ diff --git a/static/logo/team_wnba/team_4.png b/static/logo/team_wnba/team_4.png new file mode 100644 index 0000000..e20dc98 Binary files /dev/null and b/static/logo/team_wnba/team_4.png differ diff --git a/static/logo/team_wnba/team_5.png b/static/logo/team_wnba/team_5.png new file mode 100644 index 0000000..df7eaa8 Binary files /dev/null and b/static/logo/team_wnba/team_5.png differ diff --git a/static/logo/team_wnba/team_6.png b/static/logo/team_wnba/team_6.png new file mode 100644 index 0000000..e422df8 Binary files /dev/null and b/static/logo/team_wnba/team_6.png differ diff --git a/static/logo/team_wnba/team_7.png b/static/logo/team_wnba/team_7.png new file mode 100644 index 0000000..c871b20 Binary files /dev/null and b/static/logo/team_wnba/team_7.png differ diff --git a/static/logo/team_wnba/team_8.png b/static/logo/team_wnba/team_8.png new file mode 100644 index 0000000..2867217 Binary files /dev/null and b/static/logo/team_wnba/team_8.png differ diff --git a/static/logo/team_wnba/team_9.png b/static/logo/team_wnba/team_9.png new file mode 100644 index 0000000..10e32bf Binary files /dev/null and b/static/logo/team_wnba/team_9.png differ diff --git a/templates/dashboard.html b/templates/dashboard.html index 23d166e..b47e9fb 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -38,16 +38,27 @@
+
+
+
+ + +
+
+
{% for team in userTeams %}
-
-
{{ getTeamName(team.idTeam) }}
+
+
{{ getTeamName(team.idTeam, sportId) }}
-
Remove from calendar +
Remove from calendar
{% endfor %} @@ -55,11 +66,11 @@
-
-
{{ getTeamName(team) }}
+
+
{{ getTeamName(team, sportId) }}
-
Add to calendar +
Add to calendar
{% endfor %} @@ -83,7 +94,6 @@

Copyright © 2024 So My Calendar