Skip to content

Commit 17b0773

Browse files
authored
Fix errors missed in #408 (#411)
* move gatekeep_status to members.py * Fix errors in gatekeep_status * Fix unused import, fix logic error * Remove duplicate imports * Remove non-existent options from lint
1 parent 8342957 commit 17b0773

File tree

3 files changed

+89
-99
lines changed

3 files changed

+89
-99
lines changed

.pylintrc

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@ disable =
1717

1818
[REPORTS]
1919
output-format = text
20-
files-output = no
2120
reports = no
2221

2322
[FORMAT]
2423
max-line-length = 120
25-
max-statement-lines = 75
2624
single-line-if-stmt = no
27-
no-space-check = trailing-comma,dict-separator
2825
max-module-lines = 1000
2926
indent-string = ' '
3027

@@ -72,8 +69,6 @@ good-names=logger,id,ID
7269
# Bad variable names which should always be refused, separated by a comma
7370
bad-names=foo,bar,baz,toto,tutu,tata
7471

75-
# List of builtins function names that should not be used, separated by a comma
76-
bad-functions=apply,input
7772

7873

7974
[DESIGN]
@@ -89,4 +84,4 @@ min-public-methods = 2
8984
max-public-methods = 20
9085

9186
[EXCEPTIONS]
92-
overgeneral-exceptions = Exception
87+
overgeneral-exceptions = builtins.Exception

conditional/__init__.py

Lines changed: 5 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,7 @@ def start_of_year():
5656

5757

5858
# pylint: disable=C0413
59-
from .models.models import (
60-
CommitteeMeeting,
61-
CurrentCoops,
62-
FreshmanEvalData,
63-
HouseMeeting,
64-
MemberCommitteeAttendance,
65-
MemberHouseMeetingAttendance,
66-
MemberSeminarAttendance,
67-
TechnicalSeminar,
68-
UserLog,
69-
)
70-
59+
from .models.models import UserLog
7160

7261
# Configure Logging
7362
def request_processor(logger, log_method, event_dict): # pylint: disable=unused-argument, redefined-outer-name
@@ -112,6 +101,7 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
112101
# pylint: disable=wrong-import-order
113102
from conditional.util import context_processors
114103
from conditional.util.auth import get_user
104+
from conditional.util.member import gatekeep_status
115105
from .blueprints.dashboard import dashboard_bp # pylint: disable=ungrouped-imports
116106
from .blueprints.attendance import attendance_bp
117107
from .blueprints.major_project_submission import major_project_bp
@@ -140,7 +130,7 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
140130
app.register_blueprint(co_op_bp)
141131
app.register_blueprint(log_bp)
142132

143-
from .util.ldap import ldap_get_member, ldap_is_active, ldap_is_intromember
133+
from .util.ldap import ldap_get_member
144134

145135

146136
@app.route('/<path:path>')
@@ -170,88 +160,12 @@ def health():
170160

171161

172162
@app.route("/gatekeep/<username>")
173-
def gatekeep_status(username):
163+
def gatekeep(username):
174164
token = request.headers.get("X-VOTE-TOKEN", "")
175165
if token != app.config["VOTE_TOKEN"]:
176166
return "Users cannot access this page", 403
177167

178-
if datetime.today() < datetime(start_of_year().year, 12, 31):
179-
semester = "Fall"
180-
semester_start = datetime(start_of_year().year,6,1)
181-
else:
182-
semester = "Spring"
183-
semester_start = datetime(start_of_year().year + 1,1,1)
184-
185-
# groups
186-
ldap_member = ldap_get_member(username)
187-
is_intro_member = ldap_is_intromember(ldap_member)
188-
is_active_member = ldap_is_active(ldap_member) and not is_intro_member
189-
190-
is_on_coop = (
191-
CurrentCoops.query.filter(
192-
CurrentCoops.date_created > start_of_year(),
193-
CurrentCoops.semester == semester,
194-
CurrentCoops.uid == username,
195-
).first()
196-
is not None
197-
)
198-
199-
passed_fall = (
200-
FreshmanEvalData.query.filter(
201-
FreshmanEvalData.freshman_eval_result == "Passed",
202-
FreshmanEvalData.eval_date > start_of_year(),
203-
FreshmanEvalData.uid == username,
204-
).first()
205-
is not None
206-
)
207-
eligibility_of_groups = (is_active_member and not is_on_coop) or passed_fall
208-
209-
# number of directorship meetings attended in the current semester
210-
d_meetings = (
211-
MemberCommitteeAttendance.query.join(
212-
CommitteeMeeting,
213-
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id,
214-
)
215-
.filter(
216-
MemberCommitteeAttendance.uid == username,
217-
CommitteeMeeting.approved is True,
218-
CommitteeMeeting.date >= semester_start,
219-
)
220-
.count()
221-
)
222-
# number of technical seminars attended in the current semester
223-
t_seminars = (
224-
MemberSeminarAttendance.query.join(
225-
TechnicalSeminar,
226-
MemberSeminarAttendance.meeting_id == TechnicalSeminar.id,
227-
)
228-
.filter(
229-
MemberSeminarAttendance.uid == username,
230-
TechnicalSeminar.approved is True,
231-
TechnicalSeminar.date >= semester_start,
232-
)
233-
.count()
234-
)
235-
# number of house meetings attended in the current semester
236-
h_meetings = (
237-
MemberHouseMeetingAttendance.query.join(
238-
HouseMeeting,
239-
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id,
240-
)
241-
.filter(
242-
MemberHouseMeetingAttendance.uid == username,
243-
HouseMeeting.date >= semester_start
244-
)
245-
.count()
246-
)
247-
result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6)
248-
249-
return {
250-
"result": result,
251-
"h_meetings": h_meetings,
252-
"c_meetings": d_meetings,
253-
"t_seminars": t_seminars,
254-
}, 200
168+
return gatekeep_status(username)
255169

256170

257171

conditional/util/member.py

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from datetime import datetime
22

3-
from conditional import gatekeep_status, start_of_year
3+
from conditional import start_of_year
44
from conditional.models.models import CommitteeMeeting
55
from conditional.models.models import CurrentCoops
66
from conditional.models.models import FreshmanEvalData
@@ -17,6 +17,8 @@
1717
from conditional.util.ldap import ldap_get_roomnumber
1818
from conditional.util.ldap import ldap_is_active
1919
from conditional.util.ldap import ldap_is_onfloor
20+
from conditional.util.ldap import ldap_is_intromember
21+
from conditional.util.ldap import ldap_get_member
2022

2123

2224
@service_cache(maxsize=1024)
@@ -42,7 +44,7 @@ def get_voting_members():
4244
for intro_member in passed_fall:
4345
voting_set.add(intro_member.uid)
4446

45-
voting_list = list(username for username in voting_set if gatekeep_status(username))
47+
voting_list = list(username for username in voting_set if gatekeep_status(username)[0]["result"])
4648
return voting_list
4749

4850

@@ -158,3 +160,82 @@ def req_cm(member):
158160
if co_op:
159161
return 15
160162
return 30
163+
164+
def gatekeep_status(username):
165+
if datetime.today() < datetime(start_of_year().year, 12, 31):
166+
semester = "Fall"
167+
semester_start = datetime(start_of_year().year,6,1)
168+
else:
169+
semester = "Spring"
170+
semester_start = datetime(start_of_year().year + 1,1,1)
171+
172+
# groups
173+
ldap_member = ldap_get_member(username)
174+
is_intro_member = ldap_is_intromember(ldap_member)
175+
is_active_member = ldap_is_active(ldap_member) and not is_intro_member
176+
177+
is_on_coop = (
178+
CurrentCoops.query.filter(
179+
CurrentCoops.date_created > start_of_year(),
180+
CurrentCoops.semester == semester,
181+
CurrentCoops.uid == username,
182+
).first()
183+
is not None
184+
)
185+
186+
passed_fall = (
187+
FreshmanEvalData.query.filter(
188+
FreshmanEvalData.freshman_eval_result == "Passed",
189+
FreshmanEvalData.eval_date > start_of_year(),
190+
FreshmanEvalData.uid == username,
191+
).first()
192+
is not None
193+
)
194+
eligibility_of_groups = (is_active_member and not is_on_coop) or passed_fall
195+
196+
# number of directorship meetings attended in the current semester
197+
d_meetings = (
198+
MemberCommitteeAttendance.query.join(
199+
CommitteeMeeting,
200+
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id,
201+
)
202+
.filter(
203+
MemberCommitteeAttendance.uid == username,
204+
CommitteeMeeting.approved is True,
205+
CommitteeMeeting.timestamp >= semester_start,
206+
)
207+
.count()
208+
)
209+
# number of technical seminars attended in the current semester
210+
t_seminars = (
211+
MemberSeminarAttendance.query.join(
212+
TechnicalSeminar,
213+
MemberSeminarAttendance.seminar_id == TechnicalSeminar.id,
214+
)
215+
.filter(
216+
MemberSeminarAttendance.uid == username,
217+
TechnicalSeminar.approved is True,
218+
TechnicalSeminar.timestamp >= semester_start,
219+
)
220+
.count()
221+
)
222+
# number of house meetings attended in the current semester
223+
h_meetings = (
224+
MemberHouseMeetingAttendance.query.join(
225+
HouseMeeting,
226+
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id,
227+
)
228+
.filter(
229+
MemberHouseMeetingAttendance.uid == username,
230+
HouseMeeting.date >= semester_start
231+
)
232+
.count()
233+
)
234+
result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6)
235+
236+
return {
237+
"result": result,
238+
"h_meetings": h_meetings,
239+
"c_meetings": d_meetings,
240+
"t_seminars": t_seminars,
241+
}, 200

0 commit comments

Comments
 (0)