-
Notifications
You must be signed in to change notification settings - Fork 17
/
frontend.py
171 lines (148 loc) · 5.14 KB
/
frontend.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
from ._query import select_event_admin_by_instance
from ._query import select_event_by_name
from ._query import select_event_team_by_name
from ._query import select_submission_by_name
from ._query import select_user_by_name
def is_admin(session, event_name, user_name):
"""Whether or not a user is administrator or administrate an event.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The event name.
user_name : str
The user name.
"""
event = select_event_by_name(session, event_name)
user = select_user_by_name(session, user_name)
if user.access_level == 'admin':
return True
event_admin = select_event_admin_by_instance(session, event, user)
if event_admin is None:
return False
return True
def is_accessible_event(session, event_name, user_name):
"""Whether or not an event is public or and a user is registered to RAMP
or and admin.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The event name.
user_name : str
The user name.
"""
event = select_event_by_name(session, event_name)
user = select_user_by_name(session, user_name)
if event is None:
return False
if user.access_level == 'asked':
return False
if event.is_public or is_admin(session, event_name, user_name):
return True
return False
def is_accessible_leaderboard(session, event_name, user_name):
"""Whether or not a leaderboard is public or and a user is registered to
RAMP or and admin.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The event name.
user_name : str
The user name.
Returns
-------
is_accessible : bool
True if leaderboard can be displayed.
"""
event = select_event_by_name(session, event_name)
user = select_user_by_name(session, user_name)
if not user.is_authenticated or not user.is_active:
return False
if is_admin(session, event_name, user_name):
return True
if not is_user_signed_up(session, event_name, user_name):
return False
if event.is_public_open:
return True
return False
def is_accessible_code(session, event_name, user_name,
submission_name='sandbox'):
"""Whether or not the user can look at the code submission.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The event name.
user_name : str
The user name.
submission_name : str, default == 'sandbox'
The submission name which you should be shown. Default is the sandbox
submission.
Returns
-------
is_accessible : bool
Whether or not the submission can be shown.
"""
user = select_user_by_name(session, user_name)
if not user.is_authenticated or not user.is_active:
return False
if is_admin(session, event_name, user_name):
return True
if not is_user_signed_up(session, event_name, user_name):
return False
event = select_event_by_name(session, event_name)
if event.is_public_open:
return True
submission_name = (event.ramp_sandbox_name
if submission_name == 'sandbox' else submission_name)
submission = select_submission_by_name(session, event_name, user_name,
submission_name)
if user == submission.event_team.team.admin:
return True
return False
def is_user_signed_up(session, event_name, user_name):
"""Whether or not user signed up to an event.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The RAMP event name.
team_name : str
The name of the team.
Returns
-------
is_signed_up : bool
Whether or not the user is signed up for the event.
"""
event_team = select_event_team_by_name(session, event_name, user_name)
if (event_team is not None and
(event_team.is_active and event_team.approved)):
return True
return False
def is_user_sign_up_requested(session, event_name, user_name):
"""Whether or not user signed up to an event.
Parameters
----------
session : :class:`sqlalchemy.orm.Session`
The session to directly perform the operation on the database.
event_name : str
The RAMP event name.
team_name : str
The name of the team.
Returns
-------
asked : bool
Whether or not the user had asked to join event or not.
"""
event_team = select_event_team_by_name(session, event_name, user_name)
if (event_team is not None and
(event_team.is_active and not event_team.approved)):
return True
return False