Exemplo n.º 1
0
def get_users_to_updates(matches: list):
    teams_list = set([match.team1_name for match in matches] +
                     [match.team2_name for match in matches])
    teams_object = session.query(Teams.id).filter(Teams.tag.in_(teams_list))
    users_for_update = session.query(Users).filter(
        Users.teams.any(Teams.id.in_(teams_object))).all()
    return users_for_update
Exemplo n.º 2
0
def get_delete_teams_keyboard(message: str, user_id: int):
    page = int(message.split('_')[-1])
    keyboard = types.InlineKeyboardMarkup()
    teams = session.query(Teams) \
        .filter(Teams.users.any(Users.id == user_id)) \
        .limit(10) \
        .offset(page * 10).all()
    teams_count = session.query(Teams).count()
    for team in teams:
        keyboard.add(delete_team_button(team.name, team.id))
    add_row_next_previous(page, 'delete', keyboard, teams_count)
    keyboard.add(callback_button_exit)
    return keyboard
Exemplo n.º 3
0
 def get_today_matches(cls):
     now_time = datetime.utcnow()
     end_period = (datetime.utcnow() + timedelta(days=1)).replace(
         hour=0, minute=0, second=0, microsecond=0)
     matches = session.query(cls).filter(cls.date > now_time).filter(
         cls.date < end_period).all()
     return matches
Exemplo n.º 4
0
def send_closest_matches_to_user():
    users = session.query(Users).all()
    for user in users:
        user_teams = user.get_user_teams()
        matches = Series.get_closest_matches()
        for match in matches:
            if match.team1_name in user_teams or match.team2_name in user_teams:
                send_closest_match(user.id, match)
Exemplo n.º 5
0
def send_finished_matches_to_users():
    users = session.query(Users).all()
    for user in users:
        user_teams = user.get_user_teams()
        matches = Series.get_finished_matches()
        for match in matches:
            if match.team1_name in user_teams or match.team2_name in user_teams:
                send_result_match(user.id, match)
    Series.delete_finished_matches()
Exemplo n.º 6
0
def test_user_stop_bot(
    start_matches,
    add_start_team,
    add_teams_to_user,
    mock_fail_telegram,
    mock_dota_parser,
):
    updated_matches = update_future_dota_matches()
    send_updated_matches_to_user(updated_matches)
    assert session.query(Users).count() == 0
Exemplo n.º 7
0
def update_finished_dota_matches():
    dota_parser = DotaParser()
    logger.info('Start update finished matches')
    matches = dota_parser.parse_finished_matches()
    for match in matches:
        seria = session.query(Series).filter(
            Series.id == match['seria_id']).first()
        if seria is not None:
            seria.score = match['result']
            seria.finished = True
            try:
                session.commit()
            except Exception as exc:
                logger.error(exc)
                session.rollback()
        else:
            logger.error(f'Match with {match["seria_id"]} not in database!')
Exemplo n.º 8
0
def update_future_dota_matches():
    updated_matches = []
    dota_parser = DotaParser()
    logger.info('Start updating future matches')
    matches = dota_parser.parse_future_matches()
    teams = Teams.get_all_teams_tags()
    for match in matches:
        updated = False
        if match['team1_name'] in teams or match['team2_name'] in teams:
            seria = session.query(Series).filter(
                Series.id == match['seria_id']).first()
            if seria is None:
                seria = Series(id=match['seria_id'],
                               team1_name=match['team1_name'],
                               team2_name=match['team2_name'],
                               tournament_name=match['tour_title'],
                               series_url=match['match_link'],
                               date=match['date'],
                               finished=False)

                session.add(seria)
            else:
                if match['date'] is not None and seria.date != match['date']:
                    seria.date = match['date']
                    updated = True
                if match['team1_name'] != seria.team1_name:
                    seria.team1_name = match['team1_name']
                    updated = True
                if match['team2_name'] != seria.team2_name:
                    seria.team2_name = match['team2_name']
                    updated = True
            if updated:
                updated_matches.append(seria)
            try:
                session.commit()
            except Exception as exc:
                logger.error(exc)
                session.rollback()
    return updated_matches
Exemplo n.º 9
0
 def get_finished_matches(cls):
     return session.query(cls).filter(cls.finished == True).all()
Exemplo n.º 10
0
def test_update_future_matches_no_update(add_start_team, mock_dota_parser):
    update_future_dota_matches()
    assert session.query(Series).count() == 1
Exemplo n.º 11
0
 def get_all_teams_tags(cls):
     teams_objects = session.query(cls).all()
     return [team.tag for team in teams_objects]
Exemplo n.º 12
0
def test_start(start_db):
    add_user(1)
    users_count = session.query(Users).count()
    assert users_count == 1
Exemplo n.º 13
0
def add_user(user_id: int):
    user = session.query(Users).filter(Users.id == user_id).first()
    if user is None:
        session.add(Users(id=user_id))
        session.commit()
Exemplo n.º 14
0
def delete_team(message: str, user_id: int):
    team_id = int(message.split('_')[-1])
    user = session.query(Users).filter(Users.id == user_id).first()
    team = session.query(Teams).filter(Teams.id == team_id).first()
    user.teams.remove(team)
    session.commit()
Exemplo n.º 15
0
def test_update_future_matches_with_update(start_matches, add_start_team,
                                           mock_dota_parser):
    updated_mathces = update_future_dota_matches()
    assert session.query(Series).count() == 2
    assert len(updated_mathces) == 1
Exemplo n.º 16
0
 def delete_finished_matches(cls) -> None:
     session.query(cls).filter(cls.finished == True).delete(
         synchronize_session='fetch')
     session.commit()
Exemplo n.º 17
0
def delete_user(user_id: int):
    user = session.query(Users).filter(Users.id == user_id).first()
    session.delete(user)
    session.commit()
Exemplo n.º 18
0
 def get_closest_matches(cls):
     now_time = datetime.utcnow()
     end_period = datetime.utcnow() + timedelta(minutes=10)
     matches = session.query(cls).filter(cls.date > now_time).filter(
         cls.date < end_period).all()
     return matches
Exemplo n.º 19
0
def add_teams_to_user(add_start_user, add_start_team):
    user = session.query(Users).first()
    teams = session.query(Teams).all()
    user.teams.append(teams[0])
    user.teams.append(teams[1])
    session.commit()