From 468693cec009db0cb66b4b3baa8e6f4b14963175 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 27 Oct 2017 11:53:05 +0200 Subject: [PATCH] get_or_create -> create --- db.py | 30 +++++++++++++++--------------- errors.py | 3 +++ newuser.py | 38 +++++++++++++++++++------------------- update.py | 24 ++++++++++++++++++------ webserver.py | 7 +++++-- 5 files changed, 60 insertions(+), 42 deletions(-) diff --git a/db.py b/db.py index 211df08d..fcd286c9 100644 --- a/db.py +++ b/db.py @@ -4,7 +4,7 @@ from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import Column, BigInteger, Integer, String, Numeric, DateTime, ForeignKey, Float, Enum, create_engine, UniqueConstraint import requests -from errors import RequestError, NotFoundError +from errors import RequestError, NotFoundError, AlreadyExistingError import re import enum @@ -28,10 +28,10 @@ class Royal(Base): username = Column(String, unique=True, nullable=False) @staticmethod - def get_or_create(username): + def create(username): r = session.query(Royal).filter_by(username=username).first() if r is not None: - return r + raise AlreadyExistingError(repr(r)) return Royal(username=username) def __repr__(self): @@ -85,10 +85,10 @@ class Steam(Base): return f"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/{self.avatar_hex[0:2]}/{self.avatar_hex}.jpg" @staticmethod - def get_or_create(royal_id, steam_id): + def create(royal_id, steam_id): s = session.query(Steam).get(steam_id) if s is not None: - return s + raise AlreadyExistingError(repr(s)) r = requests.get(f"https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={config['Steam']['api_key']}&steamids={steam_id}") if r.status_code != 200: raise RequestError(f"Steam returned {r.status_code}") @@ -159,10 +159,10 @@ class RocketLeague(Base): return f"" @staticmethod - def get_or_create(steam_id): + def create(steam_id): rl = session.query(RocketLeague).get(steam_id) if rl is not None: - return rl + raise AlreadyExistingError(repr(rl)) r = requests.get(f"https://api.rocketleaguestats.com/v1/player?apikey={config['Rocket League']['rlstats_api_key']}&unique_id={str(steam_id)}&platform_id=1") if r.status_code == 404: raise NotFoundError("The specified user has never played Rocket League") @@ -241,10 +241,10 @@ class Dota(Base): losses = Column(Integer, nullable=False) @staticmethod - def get_or_create(steam_id): + def create(steam_id): d = session.query(Dota).get(steam_id) if d is not None: - return d + raise AlreadyExistingError(repr(d)) r = requests.get(f"https://api.opendota.com/api/players/{Steam.to_steam_id_3(steam_id)}") if r.status_code != 200: raise RequestError("OpenDota returned {r.status_code}") @@ -313,7 +313,7 @@ class LeagueOfLegends(Base): twtr_rank = Column(Enum(RomanNumerals)) @staticmethod - def get_or_create(royal_id, summoner_name=None, summoner_id=None): + def create(royal_id, summoner_name=None, summoner_id=None): if summoner_name: lol = session.query(LeagueOfLegends).filter(LeagueOfLegends.summoner_name == summoner_name).first() elif summoner_id: @@ -321,7 +321,7 @@ class LeagueOfLegends(Base): else: raise SyntaxError("Neither summoner_name or summoner_id are specified") if lol is not None: - return lol + raise AlreadyExistingError(repr(lol)) # Get the summoner_id if summoner_name: r = requests.get(f"https://euw1.api.riotgames.com/lol/summoner/v3/summoners/by-name/{summoner_name}?api_key={config['League of Legends']['riot_api_key']}") @@ -394,10 +394,10 @@ class Osu(Base): mania_pp = Column(Float) @staticmethod - def get_or_create(royal_id, osu_name): + def create(royal_id, osu_name): o = session.query(Osu).filter(Osu.osu_name == osu_name).first() if o is not None: - return o + raise AlreadyExistingError(repr(o)) r0 = requests.get(f"https://osu.ppy.sh/api/get_user?k={config['Osu!']['ppy_api_key']}&u={osu_name}&m=0") r1 = requests.get(f"https://osu.ppy.sh/api/get_user?k={config['Osu!']['ppy_api_key']}&u={osu_name}&m=1") r2 = requests.get(f"https://osu.ppy.sh/api/get_user?k={config['Osu!']['ppy_api_key']}&u={osu_name}&m=2") @@ -483,12 +483,12 @@ class Overwatch(Base): return f"" @staticmethod - def get_or_create(royal_id, battletag, discriminator=None): + def create(royal_id, battletag, discriminator=None): if discriminator is None: battletag, discriminator = battletag.split("#", 1) o = session.query(Overwatch).filter_by(battletag=battletag, discriminator=discriminator).first() if o is not None: - return o + raise AlreadyExistingError(repr(o)) r = requests.get(f"https://owapi.net/api/v3/u/{battletag}-{discriminator}/stats", headers={ "User-Agent": "Royal-Bot/4.0", "From": "ste.pigozzi@gmail.com" diff --git a/errors.py b/errors.py index a4e187f3..ef5d5127 100644 --- a/errors.py +++ b/errors.py @@ -2,4 +2,7 @@ class RequestError(Exception): pass class NotFoundError(Exception): + pass + +class AlreadyExistingError(Exception): pass \ No newline at end of file diff --git a/newuser.py b/newuser.py index a6c292b5..3c809889 100644 --- a/newuser.py +++ b/newuser.py @@ -1,42 +1,42 @@ import db -user = db.Royal.get_or_create(input("Nome account: ")) +user = db.Royal.create(input("Nome account: ")) db.session.add(user) db.session.commit() try: - steam = db.Steam.get_or_create(user.id, input("Steam ID 1: ")) -except KeyboardInterrupt: - pass + steam = db.Steam.create(user.id, input("Steam ID 1: ")) +except Exception as e: + print(e) else: db.session.add(steam) try: - dota = db.Dota.get_or_create(steam.steam_id) -except: - pass + dota = db.Dota.create(steam.steam_id) +except Exception as e: + print(e) else: db.session.add(dota) try: - rl = db.RocketLeague.get_or_create(steam.steam_id) -except: - pass + rl = db.RocketLeague.create(steam.steam_id) +except Exception as e: + print(e) else: db.session.add(rl) try: - osu = db.Osu.get_or_create(user.id, input("Osu! username: ")) -except KeyboardInterrupt: - pass + osu = db.Osu.create(user.id, input("Osu! username: ")) +except Exception as e: + print(e) else: db.session.add(osu) try: - overwatch = db.Overwatch.get_or_create(user.id, input("Battle.net battletag: ")) -except KeyboardInterrupt: - pass + overwatch = db.Overwatch.create(user.id, input("Battle.net battletag: ")) +except Exception as e: + print(e) else: db.session.add(overwatch) try: - lol = db.LeagueOfLegends.get_or_create(user.id, input("League summoner name: ")) -except KeyboardInterrupt: - pass + lol = db.LeagueOfLegends.create(user.id, input("League summoner name: ")) +except Exception as e: + print(e) else: db.session.add(lol) db.session.commit() diff --git a/update.py b/update.py index 623781b2..5c8b8829 100644 --- a/update.py +++ b/update.py @@ -7,6 +7,7 @@ try: # Update Steam print("STEAM") for user in db.session.query(db.Steam).all(): + t = time.clock() print(f"Updating {user.royal.username}", end="\t\t", flush=True) try: user.update() @@ -17,10 +18,12 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) # Update Rocket League print("ROCKET LEAGUE") for user in db.session.query(db.RocketLeague).all(): + t = time.clock() print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) try: user.update() @@ -31,10 +34,12 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) # Update Dota 2 print("DOTA 2") for user in db.session.query(db.Dota).all(): + t = time.clock() print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) try: user.update() @@ -45,10 +50,12 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) # Update League of Legends print("LEAGUE OF LEGENDS") for user in db.session.query(db.LeagueOfLegends).all(): + t = time.clock() print(f"Updating {user.royal.username}", end="\t\t", flush=True) try: user.update() @@ -59,10 +66,12 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) # Update Osu! print("OSU!") for user in db.session.query(db.Osu).all(): + t = time.clock() print(f"Updating {user.royal.username}", end="\t\t", flush=True) try: user.update() @@ -73,10 +82,12 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) # Update Overwatch print("OVERWATCH") for user in db.session.query(db.Overwatch).all(): + t = time.clock() print(f"Updating {user.royal.username}", end="\t\t", flush=True) try: user.update() @@ -87,7 +98,8 @@ try: else: print("OK") finally: - time.sleep(0.5) + sleep_time = 1 - time.clock() + t + time.sleep(sleep_time if sleep_time > 0 else 0) except KeyboardInterrupt: pass finally: diff --git a/webserver.py b/webserver.py index bc0121be..f329a363 100644 --- a/webserver.py +++ b/webserver.py @@ -1,5 +1,5 @@ from flask import Flask, render_template -from db import session, Session, Royal, Steam, RocketLeague, Dota, Osu, Overwatch, LeagueOfLegends +from db import session, Royal, Steam, RocketLeague, Dota, Osu, Overwatch, LeagueOfLegends app = Flask(__name__) @@ -16,5 +16,8 @@ def page_leaderboards(): return render_template("leaderboards.html", dota_data=dota_data, rl_data=rl_data, ow_data=ow_data, osu_data=osu_data, lol_data=lol_data) if __name__ == "__main__": - app.run(host="0.0.0.0", port=1234, debug=True) + try: + app.run(host="0.0.0.0", port=1234, debug=True) + except KeyboardInterrupt: + pass session.close() \ No newline at end of file