feat: wrap the db object around baza, which will provide helper methods
also adds the list of tracked sportsmen
This commit is contained in:
@@ -10,3 +10,22 @@ api_key = ""
|
|||||||
|
|
||||||
[scraper]
|
[scraper]
|
||||||
user-agent = "" # Leave empty for default (Firefox ESR).
|
user-agent = "" # Leave empty for default (Firefox ESR).
|
||||||
|
|
||||||
|
[sportsmen]
|
||||||
|
tracked_ids = [
|
||||||
|
"MVC8zHZD", # Robert Lewandowski
|
||||||
|
"WGOY4FSt", # Cristiano Ronaldo
|
||||||
|
"vgOOdZbd", # Lionel Messi
|
||||||
|
"Wn6E2SED", # Kylian Mbappe
|
||||||
|
"AiH2zDve", # Zlatan Ibrahimovic
|
||||||
|
"dUShzrBp", # Luis Suarez
|
||||||
|
"UmV9iQmE", # Erling Haaland
|
||||||
|
"tpV0VX0S", # Karim Benzema
|
||||||
|
"vw8ZV7HC", # Sergio Aguero
|
||||||
|
"Qgx2trzH", # Edinson Cavani
|
||||||
|
"2oMimkAU", # Radamel Falcao
|
||||||
|
"WfXv1DCa", # Wayne Rooney
|
||||||
|
"0vgcq6un", # Robin van Persie
|
||||||
|
"v5HSlEAa", # Harry Kane
|
||||||
|
"4S9fNUYh" # Ciro Immobile
|
||||||
|
]
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
import requests
|
from lewy_db import baza as ldb
|
||||||
import json
|
import json
|
||||||
|
import lewy_globals
|
||||||
|
import requests
|
||||||
|
|
||||||
class scraper:
|
class scraper:
|
||||||
|
|
||||||
@@ -7,7 +9,10 @@ class scraper:
|
|||||||
'x-fsign': 'SW9D1eZo'
|
'x-fsign': 'SW9D1eZo'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
db = lewy_globals.getDb()
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def pobierzDaneNajlepszegoSportowcaNaSwiecie(self) -> dict:
|
def pobierzDaneNajlepszegoSportowcaNaSwiecie(self) -> dict:
|
||||||
@@ -19,3 +24,11 @@ class scraper:
|
|||||||
raise ValueError("Zewnętrzne ID sportowca powinno być długości 8!")
|
raise ValueError("Zewnętrzne ID sportowca powinno być długości 8!")
|
||||||
response = requests.get(f'https://3.flashscore.ninja/3/x/feed/plm_{zewnetrzne_id_sportowca}_{nr_strony}', headers=self.headers)
|
response = requests.get(f'https://3.flashscore.ninja/3/x/feed/plm_{zewnetrzne_id_sportowca}_{nr_strony}', headers=self.headers)
|
||||||
return json.loads(response.text)
|
return json.loads(response.text)
|
||||||
|
|
||||||
|
def czy_mecz_istnieje(self, zewnetrzne_id_meczu: str):
|
||||||
|
mecz = db.simple_select_all(ldb.mecze, zewnetrzne_id_meczu=zewnetrzne_id_meczu).first
|
||||||
|
if mecz is not None:
|
||||||
|
return mecz
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from flask_sqlalchemy import SQLAlchemy
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
from lewy_globals import getDb, colors as c
|
from lewy_globals import getDb, colors as c
|
||||||
import flask, json, time
|
import flask, json, time
|
||||||
import lewy_db
|
import lewy_db as ldb
|
||||||
import lewy_globals
|
import lewy_globals
|
||||||
|
|
||||||
def require_authentication(func):
|
def require_authentication(func):
|
||||||
|
|||||||
@@ -1,106 +1,134 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
from sqlalchemy import ForeignKey
|
from sqlalchemy import ForeignKey, select
|
||||||
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, relationship
|
from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase, Session, relationship
|
||||||
from typing import List
|
from typing import List
|
||||||
import toml
|
import toml
|
||||||
|
|
||||||
global db
|
global db
|
||||||
|
|
||||||
def initDB(app, config):
|
class baza():
|
||||||
global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
|
|
||||||
tnp = config['general']['db_prefix'] + "_lewangoalski_"
|
|
||||||
|
|
||||||
class Base(DeclarativeBase):
|
# global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
|
||||||
pass
|
|
||||||
|
|
||||||
db = SQLAlchemy(app, model_class=Base)
|
db = None
|
||||||
|
|
||||||
class sportowcy(Base):
|
def __init__(self, app, config):
|
||||||
__tablename__ = tnp + "sportowcy"
|
self.db = self.initDB(app, config)
|
||||||
id_zawodnika: Mapped[ int] = mapped_column(primary_key=True)
|
|
||||||
zewnetrzne_id_zawodnika: Mapped[ str] = mapped_column()
|
|
||||||
data_urodzenia: Mapped[ str] = mapped_column()
|
|
||||||
czy_aktywny: Mapped[ bool] = mapped_column()
|
|
||||||
klub_id: Mapped[ List[str]] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
|
||||||
klub: Mapped[ List["kluby"]] = relationship(back_populates="sportowcy_w_klubie", foreign_keys=[klub_id])
|
|
||||||
narodowosc: Mapped[ str] = mapped_column()
|
|
||||||
ilosc_trofeow: Mapped[ int] = mapped_column()
|
|
||||||
ostatnie_trofeum_id: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}trofea.id_trofeum"))
|
|
||||||
ostatnie_trofeum: Mapped[ "trofea"] = relationship(back_populates="zawodnik", foreign_keys=[ostatnie_trofeum_id])
|
|
||||||
pierwszy_mecz: Mapped[ int] = mapped_column()
|
|
||||||
wycena: Mapped[ int] = mapped_column()
|
|
||||||
ostatni_gol_dla_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
|
||||||
ostatni_gol_dla: Mapped[ "kluby"] = relationship(back_populates="sportowcy_ostatni_gol", foreign_keys=[ostatni_gol_dla_id])
|
|
||||||
statystyki_id: Mapped[ List[int]] = mapped_column(ForeignKey(f"{tnp}statystyki_sportowcow.id_statystyki"))
|
|
||||||
statystyki: Mapped[List["statystyki_sportowcow"]] = relationship(back_populates="sportowiec")
|
|
||||||
trofea: Mapped[ List["trofea"]] = relationship(back_populates="zawodnik", foreign_keys="[trofea.id_zawodnika]")
|
|
||||||
|
|
||||||
class trofea(Base):
|
def initDB(self, app, config):
|
||||||
__tablename__ = tnp + "trofea"
|
global sportowcy, trofea, sportowcy_w_meczach, statystyki_sportowcow, kluby, mecze
|
||||||
id_trofeum: Mapped[ int] = mapped_column(primary_key=True)
|
tnp = config['general']['db_prefix'] + "_lewangoalski_"
|
||||||
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
|
|
||||||
zawodnik: Mapped[ "sportowcy"] = relationship(back_populates="trofea", foreign_keys=[id_zawodnika])
|
|
||||||
nazwa: Mapped[ str] = mapped_column()
|
|
||||||
sezon: Mapped[ str] = mapped_column()
|
|
||||||
rok: Mapped[ str] = mapped_column()
|
|
||||||
|
|
||||||
class sportowcy_w_meczach(Base):
|
class Base(DeclarativeBase):
|
||||||
__tablename__ = tnp + "sportowcy_w_meczach"
|
pass
|
||||||
id_rekordu: Mapped[ int] = mapped_column(primary_key=True)
|
|
||||||
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
|
|
||||||
zawodnik: Mapped[ "sportowcy"] = relationship()
|
|
||||||
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}mecze.zewnetrzne_id_meczu"))
|
|
||||||
czas_gry: Mapped[ int] = mapped_column()
|
|
||||||
goli: Mapped[ int] = mapped_column()
|
|
||||||
asyst: Mapped[ int] = mapped_column()
|
|
||||||
interwencje_bramkarza: Mapped[ int] = mapped_column()
|
|
||||||
suma_interwencji_na_bramke: Mapped[ int] = mapped_column()
|
|
||||||
zolte_kartki: Mapped[ int] = mapped_column()
|
|
||||||
czerwone_kartki: Mapped[ int] = mapped_column()
|
|
||||||
wygrana: Mapped[ int] = mapped_column()
|
|
||||||
wynik: Mapped[ float] = mapped_column()
|
|
||||||
|
|
||||||
class statystyki_sportowcow(Base):
|
db = SQLAlchemy(app, model_class=Base)
|
||||||
__tablename__ = tnp + "statystyki_sportowcow"
|
|
||||||
id_statystyki: Mapped[ int] = mapped_column(primary_key=True)
|
|
||||||
sportowiec: Mapped[ "sportowcy"] = relationship(back_populates="statystyki")
|
|
||||||
ostatni_mecz: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}mecze.id_meczu"))
|
|
||||||
ilosc_wystapien: Mapped[ int] = mapped_column()
|
|
||||||
minut_gry: Mapped[ int] = mapped_column()
|
|
||||||
gier_sum: Mapped[ int] = mapped_column()
|
|
||||||
goli_sum: Mapped[ int] = mapped_column()
|
|
||||||
asyst_sum: Mapped[ int] = mapped_column()
|
|
||||||
interwencji_sum: Mapped[ int] = mapped_column()
|
|
||||||
nieobronionych_interwencji_sum: Mapped[ int] = mapped_column()
|
|
||||||
zoltych_kartek_sum: Mapped[ int] = mapped_column()
|
|
||||||
czerwonych_kartek_sum: Mapped[ int] = mapped_column()
|
|
||||||
wygranych_sum: Mapped[ int] = mapped_column()
|
|
||||||
wynik_sum: Mapped[ int] = mapped_column()
|
|
||||||
meczow_do_wynikow_sum: Mapped[ int] = mapped_column()
|
|
||||||
|
|
||||||
class kluby(Base):
|
class sportowcy(Base):
|
||||||
__tablename__ = tnp + "kluby"
|
__tablename__ = tnp + "sportowcy"
|
||||||
id_klubu: Mapped[ str] = mapped_column(primary_key=True)
|
id_zawodnika: Mapped[ int] = mapped_column(primary_key=True)
|
||||||
pelna_nazwa: Mapped[ str] = mapped_column()
|
zewnetrzne_id_zawodnika: Mapped[ str] = mapped_column()
|
||||||
skrocona_nazwa: Mapped[ str] = mapped_column()
|
data_urodzenia: Mapped[ str] = mapped_column()
|
||||||
sportowcy_w_klubie: Mapped[ List["sportowcy"]] = relationship(back_populates="klub", foreign_keys="[sportowcy.klub_id]")
|
czy_aktywny: Mapped[ bool] = mapped_column()
|
||||||
sportowcy_ostatni_gol: Mapped[ "sportowcy"] = relationship(back_populates="ostatni_gol_dla", foreign_keys="[sportowcy.ostatni_gol_dla_id]")
|
klub_id: Mapped[ List[str]] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
||||||
|
klub: Mapped[ List["kluby"]] = relationship(back_populates="sportowcy_w_klubie", foreign_keys=[klub_id])
|
||||||
|
narodowosc: Mapped[ str] = mapped_column()
|
||||||
|
ilosc_trofeow: Mapped[ int] = mapped_column()
|
||||||
|
ostatnie_trofeum_id: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}trofea.id_trofeum"))
|
||||||
|
ostatnie_trofeum: Mapped[ "trofea"] = relationship(back_populates="zawodnik", foreign_keys=[ostatnie_trofeum_id])
|
||||||
|
pierwszy_mecz: Mapped[ int] = mapped_column()
|
||||||
|
wycena: Mapped[ int] = mapped_column()
|
||||||
|
ostatni_gol_dla_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
||||||
|
ostatni_gol_dla: Mapped[ "kluby"] = relationship(back_populates="sportowcy_ostatni_gol", foreign_keys=[ostatni_gol_dla_id])
|
||||||
|
statystyki_id: Mapped[ List[int]] = mapped_column(ForeignKey(f"{tnp}statystyki_sportowcow.id_statystyki"))
|
||||||
|
statystyki: Mapped[List["statystyki_sportowcow"]] = relationship(back_populates="sportowiec")
|
||||||
|
trofea: Mapped[ List["trofea"]] = relationship(back_populates="zawodnik", foreign_keys="[trofea.id_zawodnika]")
|
||||||
|
|
||||||
|
class trofea(Base):
|
||||||
|
__tablename__ = tnp + "trofea"
|
||||||
|
id_trofeum: Mapped[ int] = mapped_column(primary_key=True)
|
||||||
|
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
|
||||||
|
zawodnik: Mapped[ "sportowcy"] = relationship(back_populates="trofea", foreign_keys=[id_zawodnika])
|
||||||
|
nazwa: Mapped[ str] = mapped_column()
|
||||||
|
sezon: Mapped[ str] = mapped_column()
|
||||||
|
rok: Mapped[ str] = mapped_column()
|
||||||
|
|
||||||
|
class sportowcy_w_meczach(Base):
|
||||||
|
__tablename__ = tnp + "sportowcy_w_meczach"
|
||||||
|
id_rekordu: Mapped[ int] = mapped_column(primary_key=True)
|
||||||
|
id_zawodnika: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}sportowcy.id_zawodnika"))
|
||||||
|
zawodnik: Mapped[ "sportowcy"] = relationship()
|
||||||
|
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}mecze.zewnetrzne_id_meczu"))
|
||||||
|
czas_gry: Mapped[ int] = mapped_column()
|
||||||
|
goli: Mapped[ int] = mapped_column()
|
||||||
|
asyst: Mapped[ int] = mapped_column()
|
||||||
|
interwencje_bramkarza: Mapped[ int] = mapped_column()
|
||||||
|
suma_interwencji_na_bramke: Mapped[ int] = mapped_column()
|
||||||
|
zolte_kartki: Mapped[ int] = mapped_column()
|
||||||
|
czerwone_kartki: Mapped[ int] = mapped_column()
|
||||||
|
wygrana: Mapped[ int] = mapped_column()
|
||||||
|
wynik: Mapped[ float] = mapped_column()
|
||||||
|
|
||||||
|
class statystyki_sportowcow(Base):
|
||||||
|
__tablename__ = tnp + "statystyki_sportowcow"
|
||||||
|
id_statystyki: Mapped[ int] = mapped_column(primary_key=True)
|
||||||
|
sportowiec: Mapped[ "sportowcy"] = relationship(back_populates="statystyki")
|
||||||
|
ostatni_mecz: Mapped[ int] = mapped_column(ForeignKey(f"{tnp}mecze.id_meczu"))
|
||||||
|
ilosc_wystapien: Mapped[ int] = mapped_column()
|
||||||
|
minut_gry: Mapped[ int] = mapped_column()
|
||||||
|
gier_sum: Mapped[ int] = mapped_column()
|
||||||
|
goli_sum: Mapped[ int] = mapped_column()
|
||||||
|
asyst_sum: Mapped[ int] = mapped_column()
|
||||||
|
interwencji_sum: Mapped[ int] = mapped_column()
|
||||||
|
nieobronionych_interwencji_sum: Mapped[ int] = mapped_column()
|
||||||
|
zoltych_kartek_sum: Mapped[ int] = mapped_column()
|
||||||
|
czerwonych_kartek_sum: Mapped[ int] = mapped_column()
|
||||||
|
wygranych_sum: Mapped[ int] = mapped_column()
|
||||||
|
wynik_sum: Mapped[ int] = mapped_column()
|
||||||
|
meczow_do_wynikow_sum: Mapped[ int] = mapped_column()
|
||||||
|
|
||||||
|
class kluby(Base):
|
||||||
|
__tablename__ = tnp + "kluby"
|
||||||
|
id_klubu: Mapped[ str] = mapped_column(primary_key=True)
|
||||||
|
pelna_nazwa: Mapped[ str] = mapped_column()
|
||||||
|
skrocona_nazwa: Mapped[ str] = mapped_column()
|
||||||
|
sportowcy_w_klubie: Mapped[ List["sportowcy"]] = relationship(back_populates="klub", foreign_keys="[sportowcy.klub_id]")
|
||||||
|
sportowcy_ostatni_gol: Mapped[ "sportowcy"] = relationship(back_populates="ostatni_gol_dla", foreign_keys="[sportowcy.ostatni_gol_dla_id]")
|
||||||
|
|
||||||
|
class mecze(Base):
|
||||||
|
__tablename__ = tnp + "mecze"
|
||||||
|
id_meczu: Mapped[ int] = mapped_column(primary_key=True)
|
||||||
|
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(unique=True)
|
||||||
|
data: Mapped[ datetime] = mapped_column()
|
||||||
|
gospodarze_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
||||||
|
gospodarze: Mapped[ "kluby"] = relationship(foreign_keys=[gospodarze_id])
|
||||||
|
goscie_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
||||||
|
goscie: Mapped[ "kluby"] = relationship(foreign_keys=[goscie_id])
|
||||||
|
gosp_wynik: Mapped[ int] = mapped_column()
|
||||||
|
gosc_wynik: Mapped[ int] = mapped_column()
|
||||||
|
sezon: Mapped[ str] = mapped_column()
|
||||||
|
nazwa_turnieju: Mapped[ str] = mapped_column()
|
||||||
|
skrocona_nazwa_turnieju: Mapped[ str] = mapped_column()
|
||||||
|
flaga: Mapped[ int] = mapped_column()
|
||||||
|
|
||||||
|
return db
|
||||||
|
|
||||||
|
def create_all(self):
|
||||||
|
self.db.create_all()
|
||||||
|
|
||||||
|
def simple_select_all(self, type, **kwargs):
|
||||||
|
"""
|
||||||
|
Użycie:
|
||||||
|
simple_select_all(ldb.sportowcy, zewnetrzne_id_zawodnika="").fetchall()
|
||||||
|
|
||||||
|
https://stackoverflow.com/a/75316945
|
||||||
|
Did they make it harder to query dynamically on purpose? ~Frank 19.11.2023
|
||||||
|
"""
|
||||||
|
with self.db.engine.begin() as conn:
|
||||||
|
return conn.execute(
|
||||||
|
select(type).
|
||||||
|
filter_by(**kwargs)
|
||||||
|
).scalars()
|
||||||
|
|
||||||
class mecze(Base):
|
|
||||||
__tablename__ = tnp + "mecze"
|
|
||||||
id_meczu: Mapped[ int] = mapped_column(primary_key=True)
|
|
||||||
zewnetrzne_id_meczu: Mapped[ str] = mapped_column(unique=True)
|
|
||||||
data: Mapped[ datetime] = mapped_column()
|
|
||||||
gospodarze_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
|
||||||
gospodarze: Mapped[ "kluby"] = relationship(foreign_keys=[gospodarze_id])
|
|
||||||
goscie_id: Mapped[ str] = mapped_column(ForeignKey(f"{tnp}kluby.id_klubu"))
|
|
||||||
goscie: Mapped[ "kluby"] = relationship(foreign_keys=[goscie_id])
|
|
||||||
gosp_wynik: Mapped[ int] = mapped_column()
|
|
||||||
gosc_wynik: Mapped[ int] = mapped_column()
|
|
||||||
sezon: Mapped[ str] = mapped_column()
|
|
||||||
nazwa_turnieju: Mapped[ str] = mapped_column()
|
|
||||||
skrocona_nazwa_turnieju: Mapped[ str] = mapped_column()
|
|
||||||
flaga: Mapped[ int] = mapped_column()
|
|
||||||
|
|
||||||
return db
|
|
||||||
@@ -84,7 +84,7 @@ def getConfig(configfile):
|
|||||||
|
|
||||||
def setupDb(app, config):
|
def setupDb(app, config):
|
||||||
global db
|
global db
|
||||||
db = lewy_db.initDB(app, config)
|
db = lewy_db.baza(app, config)
|
||||||
return db
|
return db
|
||||||
|
|
||||||
def getDb():
|
def getDb():
|
||||||
|
|||||||
Reference in New Issue
Block a user