Source code for oioioi.teams.utils

from oioioi.base.permissions import make_request_condition, not_anonymous
from oioioi.contests.utils import is_contest_admin
from oioioi.teams.models import Team, TeamMembership, TeamsConfig


@make_request_condition
[docs]def teams_enabled(request): try: return request.contest.teamsconfig.enabled except TeamsConfig.DoesNotExist: return False
@make_request_condition
[docs]def can_see_teams_list(request): if not hasattr(request, 'contest'): return False if not Team.objects.filter(contest=request.contest).exists(): return False try: cfg = TeamsConfig.objects.get(contest=request.contest) except TeamsConfig.DoesNotExist: return is_contest_admin(request) return ( is_contest_admin(request) | (cfg.teams_list_visible == 'PUBLIC') | ((cfg.teams_list_visible == 'YES') & not_anonymous(request)) )
[docs]def team_members_count(request): """Returns a number of members in the team for the user and the contest from the request. If user does not belong to any team the function will return 0. """ tms = TeamMembership.objects.filter( user=request.user, team__contest=request.contest ) if not tms.exists(): return 0 return tms[0].team.members.count()
@make_request_condition
[docs]def can_join_team(request): return team_members_count( request ) == 0 and request.contest.controller.can_modify_team(request)
@make_request_condition
[docs]def can_quit_team(request): return team_members_count( request ) > 1 and request.contest.controller.can_modify_team(request)
@make_request_condition
[docs]def can_delete_team(request): return team_members_count( request ) == 1 and request.contest.controller.can_modify_team(request)
@make_request_condition
[docs]def can_create_team(request): return team_members_count( request ) == 0 and request.contest.controller.can_modify_team(request)
@make_request_condition
[docs]def has_team(request): return team_members_count(request) != 0