194 lines
6.8 KiB
Python
194 lines
6.8 KiB
Python
|
import json
|
||
|
import sys
|
||
|
|
||
|
from lib.country import Country
|
||
|
from lib.team import Team
|
||
|
from lib.tools import n2v
|
||
|
|
||
|
if 'lib.match' not in sys.modules:
|
||
|
from lib.match import Match
|
||
|
|
||
|
|
||
|
class Sport:
|
||
|
def __init__(self, idt):
|
||
|
self.id = idt
|
||
|
self.name = None
|
||
|
self.display_sets = None
|
||
|
|
||
|
|
||
|
class Group:
|
||
|
def __init__(self, name, url, league):
|
||
|
self.name = name
|
||
|
self.url = url
|
||
|
self.league = league
|
||
|
|
||
|
|
||
|
class League:
|
||
|
def __init__(self, idt):
|
||
|
self.id = idt
|
||
|
self.name = None
|
||
|
self.bets = None
|
||
|
self.url = None
|
||
|
self.gender = None
|
||
|
self.images = dict()
|
||
|
self.error = ''
|
||
|
self.points = dict()
|
||
|
self.teams = list()
|
||
|
self.matches = list()
|
||
|
self.tags = list()
|
||
|
self.round_dates = None
|
||
|
self.sport = None
|
||
|
self.country = None
|
||
|
|
||
|
def get_teams(self, db):
|
||
|
stmt = """
|
||
|
SELECT league_teams.id_team, teams.name, teams.names, teams.url
|
||
|
FROM league_teams
|
||
|
INNER JOIN teams ON teams.id = league_teams.id_team
|
||
|
WHERE league_teams.id_league = :id_league
|
||
|
"""
|
||
|
args = {'id_league': self.id}
|
||
|
teams = list()
|
||
|
for row in db.query(stmt, args):
|
||
|
team = Team(row['id_team'])
|
||
|
team.name = row['name']
|
||
|
team.names = json.loads(row['names'])
|
||
|
team.url = row['url']
|
||
|
team.league = self
|
||
|
teams.append(team)
|
||
|
return teams
|
||
|
|
||
|
def get_matches(self, db):
|
||
|
stmt = """
|
||
|
SELECT matches.id, matches.start_date, matches.id_home, matches.id_away, matches.url, matches.mday,
|
||
|
home.name AS home_name, home.names AS home_names,
|
||
|
away.name AS away_name, away.names AS away_names
|
||
|
FROM matches
|
||
|
INNER JOIN teams AS home ON home.id = matches.id_home
|
||
|
INNER JOIN teams AS away ON away.id = matches.id_away
|
||
|
WHERE matches.id_league = :id_league
|
||
|
"""
|
||
|
for row in db.query(stmt, {'id_league': self.id}):
|
||
|
match = Match(idt=row['id'])
|
||
|
match.start_date = row['start_date']
|
||
|
match.url = row['url']
|
||
|
match.mday = row['mday']
|
||
|
match.home = Team(idt=row['id_home'])
|
||
|
match.home.name = row['home_name']
|
||
|
match.home.names = json.loads(row['home_names'])
|
||
|
match.away = Team(idt=row['id_away'])
|
||
|
match.away.name = row['away_name']
|
||
|
match.away.names = json.loads(row['away_names'])
|
||
|
yield match
|
||
|
|
||
|
def update_live_ranking(self, group, db):
|
||
|
stmt = """
|
||
|
SELECT id, rank_live
|
||
|
FROM league_teams
|
||
|
WHERE id_league = :id_league AND `group` = :group
|
||
|
ORDER BY pts_live DESC, diff_live DESC, gf_live DESC
|
||
|
"""
|
||
|
args = {'id_league': self.id, 'group': group}
|
||
|
new_rank = 0
|
||
|
for row in db.query(stmt, args):
|
||
|
new_rank += 1
|
||
|
if new_rank != row['rank_live']:
|
||
|
stmt = """
|
||
|
UPDATE league_teams SET rank_live = :rank WHERE id = :id
|
||
|
"""
|
||
|
args = {'rank': new_rank, 'id': row['id']}
|
||
|
db.exec(stmt, args)
|
||
|
|
||
|
def update_final_ranking(self, group, db):
|
||
|
stmt = """
|
||
|
SELECT id, rank
|
||
|
FROM league_teams
|
||
|
WHERE id_league = :id_league AND `group` = :group
|
||
|
ORDER BY pts DESC, diff DESC, gf DESC
|
||
|
"""
|
||
|
args = {'id_league': self.id, 'group': group}
|
||
|
new_rank = 0
|
||
|
for row in db.query(stmt, args):
|
||
|
new_rank += 1
|
||
|
if new_rank != row['rank']:
|
||
|
stmt = """
|
||
|
UPDATE league_teams SET rank = :rank WHERE id = :id
|
||
|
"""
|
||
|
args = {'rank': new_rank, 'id': row['id']}
|
||
|
db.exec(stmt, args)
|
||
|
|
||
|
def store_images(self, db):
|
||
|
stmt = """
|
||
|
UPDATE leagues
|
||
|
SET images = :images
|
||
|
WHERE id = :id
|
||
|
"""
|
||
|
args = {'images': json.dumps(self.images, separators=(',', ':')), 'id': self.id}
|
||
|
db.exec(stmt, args)
|
||
|
|
||
|
def store_error(self, db):
|
||
|
stmt = """
|
||
|
UPDATE leagues SET error = :error WHERE id = :id
|
||
|
"""
|
||
|
args = {'error': n2v(self.error), 'id': self.id}
|
||
|
db.exec(stmt, args)
|
||
|
|
||
|
def store_round(self, new_round, db):
|
||
|
for row in db.query('SELECT rounds FROM leagues WHERE id = :id', {'id': self.id}):
|
||
|
if new_round not in row['rounds'].split(','):
|
||
|
rounds = '{},{}'.format(row['rounds'], new_round)
|
||
|
db.exec('UPDATE leagues SET rounds = :rounds WHERE id = :id', {'rounds': rounds, 'id': self.id})
|
||
|
|
||
|
def store_groups(self, groups, db):
|
||
|
db.exec(
|
||
|
'UPDATE leagues SET groups = :groups WHERE id = :id',
|
||
|
{'groups': ','.join([group.name for group in groups]), 'id': self.id}
|
||
|
)
|
||
|
|
||
|
@staticmethod
|
||
|
def get_leagues(db, origin=None, id_league=None, with_tags=False):
|
||
|
where_conditions = list()
|
||
|
args = dict()
|
||
|
|
||
|
if origin == 'update_rankings':
|
||
|
where_conditions.append('leagues.url_ranking IS NOT NULL')
|
||
|
elif origin == 'update_schedule':
|
||
|
where_conditions.append('leagues.url_schedule IS NOT NULL')
|
||
|
elif origin == 'update_tvschedule':
|
||
|
where_conditions.append('leagues.url_tvschedule IS NOT NULL')
|
||
|
elif origin == 'create_schedule':
|
||
|
where_conditions.append('leagues.url_schedule IS NOT NULL')
|
||
|
where_conditions.append('leagues.auto_schedule = 1')
|
||
|
|
||
|
if id_league is not None:
|
||
|
where_conditions.append('leagues.id = :id_league')
|
||
|
args['id_league'] = int(id_league)
|
||
|
if with_tags:
|
||
|
where_conditions.append('leagues.tags IS NOT NULL')
|
||
|
|
||
|
where_clause = 'WHERE {}'.format(' AND '.join(where_conditions)) if len(where_conditions) > 0 else ''
|
||
|
|
||
|
stmt = """
|
||
|
SELECT id, name, points, url_schedule, url_ranking, url_tvschedule, images, id_sport, gender, tags, round_dates,
|
||
|
id_country
|
||
|
FROM leagues
|
||
|
{}
|
||
|
""".format(where_clause)
|
||
|
for row in db.query(stmt, args):
|
||
|
league = League(row['id'])
|
||
|
league.name = row['name']
|
||
|
league.points = json.loads(row['points'])
|
||
|
league.images = json.loads(row['images'])
|
||
|
league.sport = Sport(idt=row['id_sport'])
|
||
|
league.gender = row['gender']
|
||
|
league.tags = json.loads(row['tags'])
|
||
|
league.round_dates = json.loads(row['round_dates']) if row['round_dates'] is not None else None
|
||
|
league.country = Country(idt=row['id_country'])
|
||
|
if origin == 'update_rankings':
|
||
|
league.url = row['url_ranking']
|
||
|
elif origin in ('update_schedule', 'create_schedule'):
|
||
|
league.url = row['url_schedule']
|
||
|
elif origin == 'update_tvschedule':
|
||
|
league.url = row['url_tvschedule']
|
||
|
yield league
|