Compare commits
3 Commits
routes_usi
...
fc5acd28f7
| Author | SHA1 | Date | |
|---|---|---|---|
| fc5acd28f7 | |||
| 19e100b4b2 | |||
| fcf11d4a0d |
@@ -177,25 +177,7 @@ class scraper:
|
|||||||
stats = safe_traverse(match, ["stats"], default="")
|
stats = safe_traverse(match, ["stats"], default="")
|
||||||
zewnetrzne_id_meczu = safe_traverse(match, ["eventEncodedId"], default="")
|
zewnetrzne_id_meczu = safe_traverse(match, ["eventEncodedId"], default="")
|
||||||
|
|
||||||
wygrana_str = safe_traverse(match, ["winLoseShort"], default="R").upper()
|
|
||||||
klub_zawodnika = "undefined"
|
|
||||||
# Zwycięstwo klubu zawodnika
|
|
||||||
if wygrana_str == "Z":
|
|
||||||
if safe_traverse(match, ["homeScore"], default=0) > safe_traverse(match, ["awayScore"], default=0):
|
|
||||||
klub_zawodnika = home_club_id
|
|
||||||
else:
|
|
||||||
klub_zawodnika = away_club_id
|
|
||||||
# Przegrana klubu zawodnika
|
|
||||||
elif wygrana_str == "P":
|
|
||||||
if safe_traverse(match, ["homeScore"], default=0) > safe_traverse(match, ["awayScore"], default=0):
|
|
||||||
klub_zawodnika = away_club_id
|
|
||||||
else:
|
|
||||||
klub_zawodnika = home_club_id
|
|
||||||
|
|
||||||
#klub_z = getDb().simple_select_all("kluby", id_klubu=klub_zawodnika)
|
|
||||||
|
|
||||||
if stats != False: # gdy sportowiec był aktywny w meczu
|
if stats != False: # gdy sportowiec był aktywny w meczu
|
||||||
safe_traverse(stats, ["596", "value"], default=None)
|
|
||||||
# print("todo :)")
|
# print("todo :)")
|
||||||
self.db.simple_insert_one("sportowcy_w_meczach",
|
self.db.simple_insert_one("sportowcy_w_meczach",
|
||||||
id_zawodnika = id_zawodnika,
|
id_zawodnika = id_zawodnika,
|
||||||
@@ -211,8 +193,7 @@ class scraper:
|
|||||||
zolte_kartki = int("0" + safe_traverse(stats, ["599", "value"], default="0")),
|
zolte_kartki = int("0" + safe_traverse(stats, ["599", "value"], default="0")),
|
||||||
czerwone_kartki = int("0" + safe_traverse(stats, ["600", "value"], default="0")),
|
czerwone_kartki = int("0" + safe_traverse(stats, ["600", "value"], default="0")),
|
||||||
wygrana = {"Z": 1, "R": 0, "P": -1}.get(safe_traverse(match, ["winLoseShort"], default=""), 0),
|
wygrana = {"Z": 1, "R": 0, "P": -1}.get(safe_traverse(match, ["winLoseShort"], default=""), 0),
|
||||||
wynik = safe_traverse(match, ["rating"], default=0) or 0,
|
wynik = safe_traverse(match, ["rating"], default=0) or 0
|
||||||
klub_id = klub_zawodnika
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# # analogicznie zinkrementuj statystyki_sportowcow:
|
# # analogicznie zinkrementuj statystyki_sportowcow:
|
||||||
@@ -255,8 +236,7 @@ class scraper:
|
|||||||
zolte_kartki = int("0" + safe_traverse(stats, ["599", "value"], default="0")),
|
zolte_kartki = int("0" + safe_traverse(stats, ["599", "value"], default="0")),
|
||||||
czerwone_kartki = int("0" + safe_traverse(stats, ["600", "value"], default="0")),
|
czerwone_kartki = int("0" + safe_traverse(stats, ["600", "value"], default="0")),
|
||||||
wygrana = {"Z": 1, "R": 0, "P": -1}.get(safe_traverse(match, ["winLoseShort"], default=""), 0),
|
wygrana = {"Z": 1, "R": 0, "P": -1}.get(safe_traverse(match, ["winLoseShort"], default=""), 0),
|
||||||
wynik = safe_traverse(match, ["rating"], default=0) or 0,
|
wynik = safe_traverse(match, ["rating"], default=0) or 0
|
||||||
klub_id = klub_zawodnika
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# TODO: Zaktualizuj statystyki sportowca
|
# TODO: Zaktualizuj statystyki sportowca
|
||||||
|
|||||||
@@ -58,10 +58,7 @@ def __czy_x_istnieje(typ, **id):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def czy_sportowiec_istnieje(id_zawodnika: str):
|
def czy_sportowiec_istnieje(id_zawodnika: str):
|
||||||
return __czy_x_istnieje("sportowcy", id_zawodnika=int(id_zawodnika))
|
return __czy_x_istnieje("sportowcy", id_zawodnika=id_zawodnika)
|
||||||
|
|
||||||
def czy_klub_istnieje(id_klubu: str):
|
|
||||||
return __czy_x_istnieje("kluby", id_klubu=id_klubu)
|
|
||||||
|
|
||||||
# GET /api/v1
|
# GET /api/v1
|
||||||
def stub_hello():
|
def stub_hello():
|
||||||
@@ -136,80 +133,6 @@ def get_matches(r = None, id_zawodnika: str | None = None, rok: int | None = Non
|
|||||||
# print(f"zwracam mecze: {response_json}")
|
# print(f"zwracam mecze: {response_json}")
|
||||||
return 200, "ok", response_json
|
return 200, "ok", response_json
|
||||||
|
|
||||||
# GET /api/v1/player_stats
|
|
||||||
def player_stats(r = None, id_zawodnika: str | None = None):
|
|
||||||
"""
|
|
||||||
Zwraca mecze.
|
|
||||||
Przykład wywołania:
|
|
||||||
player_stats(r, id_zawodnika=1), tożsame z GET /api/v1/player_stats?id_zawodnika=1
|
|
||||||
player_stats(r), tożsame z GET /api/v1/player_stats
|
|
||||||
"""
|
|
||||||
response_json = []
|
|
||||||
|
|
||||||
if id_zawodnika is None:
|
|
||||||
# Gdy nie podano id wprost, sprawdź, czy podano je przez parametr.
|
|
||||||
id_zawodnika = r.args.get('id_zawodnika', 0)
|
|
||||||
|
|
||||||
# Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje.
|
|
||||||
# Jeśli nie istnieje, wypisz wszystkie mecze.
|
|
||||||
elif not czy_sportowiec_istnieje(id_zawodnika=id_zawodnika):
|
|
||||||
return 404, "error", {"error_msg": "This sportsman has not been found in the database. Try: id_zawodnika=1"}
|
|
||||||
|
|
||||||
# Gdy sportowiec istnieje, wypisz jego mecze.
|
|
||||||
else:
|
|
||||||
staty = getDb().get_basic_stats(id_zawodnika=id_zawodnika)
|
|
||||||
|
|
||||||
# for stat in staty:
|
|
||||||
response_json.append({
|
|
||||||
'unique_items': staty[0],
|
|
||||||
'time_played': staty[1],
|
|
||||||
'goals': staty[2],
|
|
||||||
'assists': staty[3],
|
|
||||||
'yellow_cards': staty[4],
|
|
||||||
'red_cards': staty[5],
|
|
||||||
'avg_score': staty[6],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
print(f"zwracam staty: {response_json}")
|
|
||||||
return 200, "ok", response_json
|
|
||||||
|
|
||||||
# GET /api/v1/robert_stats
|
|
||||||
def robert_stats(r = None, id_klubu: str | None = None):
|
|
||||||
"""
|
|
||||||
Zwraca mecze.
|
|
||||||
Przykład wywołania:
|
|
||||||
robert_stats(r, id_zawodnika=1), tożsame z GET /api/v1/robert_stats?id_klubu=barcelona
|
|
||||||
robert_stats(r), tożsame z GET /api/v1/robert_stats
|
|
||||||
"""
|
|
||||||
response_json = []
|
|
||||||
|
|
||||||
if id_klubu is None:
|
|
||||||
# Gdy nie podano id wprost, sprawdź, czy podano je przez parametr.
|
|
||||||
id_klubu = r.args.get('id_klubu', 0)
|
|
||||||
|
|
||||||
# Sprawdź, czy sportowiec o podanym (lub niepodanym) id istnieje.
|
|
||||||
# Jeśli nie istnieje, wypisz wszystkie mecze.
|
|
||||||
elif not czy_klub_istnieje(id_klubu=id_klubu):
|
|
||||||
return 404, "error", {"error_msg": "This club has not been found in the database. Try: id_klubu=barcelona"}
|
|
||||||
|
|
||||||
# Gdy sportowiec istnieje, wypisz jego mecze.
|
|
||||||
else:
|
|
||||||
staty = getDb().get_sportsman_club_stats(id_zawodnika=1, id_klubu=id_klubu)
|
|
||||||
|
|
||||||
# for stat in staty:
|
|
||||||
response_json.append({
|
|
||||||
'unique_items': staty[0],
|
|
||||||
'time_played': staty[1],
|
|
||||||
'goals': staty[2],
|
|
||||||
'assists': staty[3],
|
|
||||||
'yellow_cards': staty[4],
|
|
||||||
'red_cards': staty[5],
|
|
||||||
'avg_score': staty[6],
|
|
||||||
}
|
|
||||||
)
|
|
||||||
print(f"zwracam staty roberta: {response_json}")
|
|
||||||
return 200, "ok", response_json
|
|
||||||
|
|
||||||
# GET /api/v1/debugger_halt?token=XXX...
|
# GET /api/v1/debugger_halt?token=XXX...
|
||||||
@require_authentication
|
@require_authentication
|
||||||
def debugger_halt(r):
|
def debugger_halt(r):
|
||||||
@@ -262,10 +185,6 @@ def lookup(data, request):
|
|||||||
return debugger_halt(r = request)
|
return debugger_halt(r = request)
|
||||||
case 'matches':
|
case 'matches':
|
||||||
return get_matches(r = request)
|
return get_matches(r = request)
|
||||||
case 'player_stats':
|
|
||||||
return player_stats(r = request)
|
|
||||||
case 'robert_stats':
|
|
||||||
return robert_stats(r = request)
|
|
||||||
case _:
|
case _:
|
||||||
increment_bad_requests()
|
increment_bad_requests()
|
||||||
return not_implemented(data)
|
return not_implemented(data)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from sqlalchemy import ForeignKey, select, insert, update, extract, func
|
from sqlalchemy import ForeignKey, select, insert, update, extract
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, Session, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, Session, relationship
|
||||||
from typing import List
|
from typing import List
|
||||||
import time
|
import time
|
||||||
@@ -105,8 +105,6 @@ class baza():
|
|||||||
czerwone_kartki: Mapped[ int] = mapped_column()
|
czerwone_kartki: Mapped[ int] = mapped_column()
|
||||||
wygrana: Mapped[ int] = mapped_column()
|
wygrana: Mapped[ int] = mapped_column()
|
||||||
wynik: Mapped[ float] = mapped_column()
|
wynik: Mapped[ float] = mapped_column()
|
||||||
klub_id: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
|
||||||
klub: Mapped[ "kluby"] = relationship()
|
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<{self.zawodnik.imie} {self.zawodnik.nazwisko} w meczu {self.mecz.gospodarze.skrocona_nazwa} vs. {self.mecz.goscie.skrocona_nazwa}>"
|
return f"<{self.zawodnik.imie} {self.zawodnik.nazwisko} w meczu {self.mecz.gospodarze.skrocona_nazwa} vs. {self.mecz.goscie.skrocona_nazwa}>"
|
||||||
@@ -203,12 +201,12 @@ class baza():
|
|||||||
with self.app.app_context():
|
with self.app.app_context():
|
||||||
self.session = Session(self.db.engine)
|
self.session = Session(self.db.engine)
|
||||||
|
|
||||||
def exit_gracefully(fun):
|
def exit_gracefully(func):
|
||||||
@wraps(fun)
|
@wraps(func)
|
||||||
def wrapper(self, *args, **kwargs):
|
def wrapper(self, *args, **kwargs):
|
||||||
return_val = None
|
return_val = None
|
||||||
try:
|
try:
|
||||||
return_val = fun(self, *args, **kwargs)
|
return_val = func(self, *args, **kwargs)
|
||||||
except:
|
except:
|
||||||
print(f"{c.FAIL}"
|
print(f"{c.FAIL}"
|
||||||
f"Wystąpił błąd podczas wykonywania zapytania SQL:"
|
f"Wystąpił błąd podczas wykonywania zapytania SQL:"
|
||||||
@@ -555,72 +553,6 @@ class baza():
|
|||||||
|
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
@exit_gracefully
|
|
||||||
def get_basic_stats(self, id_zawodnika = None, zewnetrzne_id_zawodnika = None):
|
|
||||||
|
|
||||||
# Spróbuj otrzymać id zawodnika z zewnętrznego id.
|
|
||||||
if zewnetrzne_id_zawodnika is not None:
|
|
||||||
id_zawodnika = self.get_id_zawodnika_by_zewnetrzne_id(zewnetrzne_id_zawodnika)
|
|
||||||
|
|
||||||
if id_zawodnika is None:
|
|
||||||
return []
|
|
||||||
|
|
||||||
# Aliasy
|
|
||||||
SportowcyWMeczach = self.entities["sportowcy_w_meczach"]
|
|
||||||
|
|
||||||
query = self.session.query(
|
|
||||||
func.count(SportowcyWMeczach.id_rekordu ).label('unique_items'),
|
|
||||||
func.sum( SportowcyWMeczach.czas_gry ).label('time_played'),
|
|
||||||
func.sum( SportowcyWMeczach.goli ).label('goals'),
|
|
||||||
func.sum( SportowcyWMeczach.asyst ).label('assists'),
|
|
||||||
func.sum( SportowcyWMeczach.zolte_kartki ).label('yellow_cards'),
|
|
||||||
func.sum( SportowcyWMeczach.czerwone_kartki).label('red_cards'),
|
|
||||||
func.avg( SportowcyWMeczach.wynik ).label('avg_score'),
|
|
||||||
).where(
|
|
||||||
SportowcyWMeczach.czas_gry > 0
|
|
||||||
).where(
|
|
||||||
SportowcyWMeczach.id_zawodnika == id_zawodnika
|
|
||||||
)
|
|
||||||
|
|
||||||
return query.all()[0]
|
|
||||||
|
|
||||||
@exit_gracefully
|
|
||||||
def get_sportsman_club_stats(self, id_zawodnika = None, zewnetrzne_id_zawodnika = None, id_klubu = None):
|
|
||||||
|
|
||||||
# Spróbuj otrzymać id zawodnika z zewnętrznego id.
|
|
||||||
if zewnetrzne_id_zawodnika is not None:
|
|
||||||
id_zawodnika = self.get_id_zawodnika_by_zewnetrzne_id(zewnetrzne_id_zawodnika)
|
|
||||||
|
|
||||||
if id_zawodnika is None:
|
|
||||||
return []
|
|
||||||
|
|
||||||
if id_klubu is None:
|
|
||||||
return self.get_basic_stats(id_zawodnika=id_zawodnika)
|
|
||||||
else:
|
|
||||||
if self.simple_select_all("kluby", id_klubu=id_klubu) == []:
|
|
||||||
return []
|
|
||||||
|
|
||||||
# Aliasy
|
|
||||||
SportowcyWMeczach = self.entities["sportowcy_w_meczach"]
|
|
||||||
|
|
||||||
query = self.session.query(
|
|
||||||
func.count(SportowcyWMeczach.id_rekordu ).label('unique_items'),
|
|
||||||
func.sum( SportowcyWMeczach.czas_gry ).label('time_played'),
|
|
||||||
func.sum( SportowcyWMeczach.goli ).label('goals'),
|
|
||||||
func.sum( SportowcyWMeczach.asyst ).label('assists'),
|
|
||||||
func.sum( SportowcyWMeczach.zolte_kartki ).label('yellow_cards'),
|
|
||||||
func.sum( SportowcyWMeczach.czerwone_kartki).label('red_cards'),
|
|
||||||
func.avg( SportowcyWMeczach.wynik ).label('avg_score'),
|
|
||||||
).where(
|
|
||||||
SportowcyWMeczach.czas_gry > 0
|
|
||||||
).where(
|
|
||||||
SportowcyWMeczach.id_zawodnika == id_zawodnika
|
|
||||||
).where(
|
|
||||||
SportowcyWMeczach.klub_id == id_klubu
|
|
||||||
)
|
|
||||||
|
|
||||||
return query.all()[0]
|
|
||||||
|
|
||||||
@exit_gracefully
|
@exit_gracefully
|
||||||
def sample_data_init(self, override_safety_check=False):
|
def sample_data_init(self, override_safety_check=False):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -3,26 +3,23 @@ import lewy_api_v1
|
|||||||
import lewy_db
|
import lewy_db
|
||||||
import lewy_globals
|
import lewy_globals
|
||||||
import json
|
import json
|
||||||
from lewy_api_v1 import get_matches, player_stats, robert_stats
|
from lewy_api_v1 import get_matches
|
||||||
def get_lewy_stats():
|
def get_lewy_stats():
|
||||||
stats = player_stats(id_zawodnika=1)[2][0]
|
|
||||||
polska = robert_stats(id_klubu="polska")[2][0]
|
|
||||||
barcelona = robert_stats(id_klubu="barcelona")[2][0]
|
|
||||||
return {
|
return {
|
||||||
'all_time_stats': {
|
'all_time_stats': {
|
||||||
'goals': stats["goals"], # 589+85
|
'goals': 589+85,
|
||||||
'assists': stats["assists"], # 154+35
|
'assists':154+35,
|
||||||
'matches': stats["unique_items"] # 791+158
|
'matches': 791+158,
|
||||||
},
|
},
|
||||||
'club_stats': {
|
'club_stats': {
|
||||||
'goals': barcelona["goals"], # 589
|
'goals': 589,
|
||||||
'assists': barcelona["assists"], # 154
|
'assists': 154,
|
||||||
'matches': barcelona["unique_items"] # 791 # to trochę na wyrost, bo w części meczy był kontuzjowany
|
'matches': 791,
|
||||||
},
|
},
|
||||||
'nation_stats': {
|
'nation_stats': {
|
||||||
'goals': polska["goals"], # 85
|
'goals': 85,
|
||||||
'assists': polska["assists"], # 35
|
'assists': 35,
|
||||||
'matches': polska["unique_items"] # 158
|
'matches': 158,
|
||||||
},
|
},
|
||||||
'international_cups': {
|
'international_cups': {
|
||||||
'goals': 110,
|
'goals': 110,
|
||||||
@@ -35,8 +32,8 @@ def get_lewy_stats():
|
|||||||
'matches': 74,
|
'matches': 74,
|
||||||
},
|
},
|
||||||
'cards': {
|
'cards': {
|
||||||
'yellow': stats["yellow_cards"], # 86
|
'yellow': 86,
|
||||||
'red': stats["red_cards"], # 2
|
'red': 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user