async def get_recent_links_by_team(app_link: AppLinkModel, team_name: str, last_date: str): """ View for news based on country and filtered by league :param app_link: Country name :param team_name: league name :param last_date: last date string from frontend :return: list of News """ links_collection = DBConnection.create_main_connection(app_link) news = [] teams = [team_name] parsed_date = arrow.get(last_date).datetime documents = links_collection.find({ "visible": True, "publishing_date": { "$gt": parsed_date }, "$or": [{ "team_name": team_name }, { "secondary_team_names": { "$in": teams } }] }).sort('publishing_date') async for doc in documents: news.append(doc) return news
async def get_recent_links(app_link: AppLinkModel, last_date: str, lang: str = Query(None)): """ Get most recent news for country/date :param lang: Optional language :param app_link: Country name :param last_date: date string :return: List of News """ collection = DBConnection.create_main_connection(app_link) parsed_date = arrow.get(last_date).datetime if lang: documents = collection.find({ "visible": True, 'language': lang, "publishing_date": { "$gt": parsed_date } }).sort('publishing_date') else: documents = collection.find({ "visible": True, "publishing_date": { "$gt": parsed_date } }).sort('publishing_date') news = [] async for doc in documents: news.append(doc) return news
async def get_all_links(app_link: AppLinkModel, page: int = Query(None), lang: str = Query(None)): """ Main view for news links based on country :param lang: Optional language :param app_link: Country name :param page: query param for pagination :return: List of News """ collection = DBConnection.create_main_connection(app_link) if lang: documents = collection.find({ "visible": True, 'language': lang }).sort('publishing_date', -1) else: documents = collection.find({ "visible": True }).sort('publishing_date', -1) if page and page > 1: skip_counter = 25 * (page - 1) documents.skip(skip_counter) news = [] async for doc in documents.limit(25): news.append(doc) return news
async def get_links_by_team(app_link: AppLinkModel, team_name: str, page: Optional[int] = None): """ View for news based on country and filtered by league :param app_link: Country name :param team_name: league name :param page: query param for pagination :return: list of News """ links_collection = DBConnection.create_main_connection(app_link) news = [] teams = [team_name] documents = links_collection.find({ "visible": True, "$or": [{ "team_name": team_name }, { "secondary_team_names": { "$in": teams } }] }).sort('publishing_date', -1) if page and page > 1: skip_counter = 25 * (page - 1) documents.skip(skip_counter) async for doc in documents.limit(25): news.append(doc) return news
async def next_round_events(app_link: AppLinkModel, league: LeaguesModel): """ Get next round for given country/league/year :param app_link: country :param league: League name based uppon SofaScore naming :return: List of the next round events(matches) based on the current date """ season_year = LeaguesModel.get_league_year(league_name=league) collection = DBConnection.create_events_connection(app_link) events = [] next_round = await collection.find_one({ 'tournament_name': SofaScoreTournamentModel[league], 'season_year': season_year, 'start_time': {'$gte': datetime.now()} }) if next_round: documents = collection.find({ 'tournament_name': SofaScoreTournamentModel[league], 'season_year': season_year, 'round': next_round['round'] }).sort('start_time') async for doc in documents: events.append(doc) return events
async def get_links_by_league(app_link: AppLinkModel, league: str, page: Optional[int] = None): """ View for news based on country and filtered by league :param app_link: Country name :param league: league name :param page: query param for pagination :return: list of News """ teams_collection = DBConnection.create_teams_connection(app_link) links_collection = DBConnection.create_main_connection(app_link) names = [] news = [] if app_link.value == 'brazil' or app_link.value == 'espana': league_name = league else: league_name = league.title() teams = teams_collection.find({'league': league_name}) async for team in teams: names.append(team['intl_name']) documents = links_collection.find({ "visible": True, "$or": [{ "team_name": { "$in": names } }, { "secondary_team_names": { "$in": names } }], }).sort('publishing_date', -1) if page and page > 1: skip_counter = 25 * (page - 1) documents.skip(skip_counter) async for doc in documents.limit(25): news.append(doc) return news
async def get_recent_links_by_league(app_link: AppLinkModel, league: str, last_date: str): """ View for news based on country and filtered by league :param app_link: Country name :param league: league name :param last_date: last date string :return: list of News """ teams_collection = DBConnection.create_teams_connection(app_link) links_collection = DBConnection.create_main_connection(app_link) names = [] news = [] parsed_date = arrow.get(last_date).datetime if app_link.value == 'brazil' or app_link.value == 'espana': league_name = league else: league_name = league.title() teams = teams_collection.find({'league': league_name}) async for team in teams: names.append(team['intl_name']) documents = links_collection.find({ "visible": True, "publishing_date": { "$gt": parsed_date }, "$or": [{ "team_name": { "$in": names } }, { "secondary_team_names": { "$in": names } }], }).sort('publishing_date') async for doc in documents: news.append(doc) return news
async def root(app_link: AppLinkModel, league: LeaguesModel): """ Get all events based on country, league and season year :param app_link: Country :param league: League name from SofaScore :return: List of all events(matches) for the given league/season """ season_year = LeaguesModel.get_league_year(league_name=league) collection = DBConnection.create_events_connection(app_link) documents = collection.find({ 'tournament_name': SofaScoreTournamentModel[league], 'season_year': season_year }).sort('start_time') events = [] async for doc in documents: events.append(doc) return events
async def events_by_round_id(app_link: AppLinkModel, league: LeaguesModel, league_round_id: int): """ Get events(matches) by Country, league, year for especific round based on its id :param league_round_id: Round number :param app_link: Country :param league: league name from SofaScore :param league_round_id: round id number :return: List of matches for given league/year/round """ season_year = LeaguesModel.get_league_year(league_name=league) collection = DBConnection.create_events_connection(app_link) documents = collection.find({ 'tournament_name': SofaScoreTournamentModel[league], 'season_year': season_year, 'round': league_round_id }).sort('start_time') events = [] async for doc in documents: events.append(doc) return events
async def root(app_link: AppLinkModel, league: str): """ Get the list of clubs based on given country and league :param app_link: Country name :param league: League name :return: List of football clubs """ collection = DBConnection.create_teams_connection(app_link) if app_link.value == 'brazil' or app_link.value == 'espana': league_name = league elif league == "postnord": league_name = "PostNord" else: league_name = league.title() documents = collection.find({"league": league_name}) teams = [] async for doc in documents: teams.append(doc) return teams