Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions .pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,11 @@ disable =

[REPORTS]
output-format = text
files-output = no
reports = no

[FORMAT]
max-line-length = 120
max-statement-lines = 75
single-line-if-stmt = no
no-space-check = trailing-comma,dict-separator
max-module-lines = 1000
indent-string = ' '

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

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


[DESIGN]
Expand All @@ -89,4 +84,4 @@ min-public-methods = 2
max-public-methods = 20

[EXCEPTIONS]
overgeneral-exceptions = Exception
overgeneral-exceptions = builtins.Exception
96 changes: 5 additions & 91 deletions conditional/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,7 @@ def start_of_year():


# pylint: disable=C0413
from .models.models import (
CommitteeMeeting,
CurrentCoops,
FreshmanEvalData,
HouseMeeting,
MemberCommitteeAttendance,
MemberHouseMeetingAttendance,
MemberSeminarAttendance,
TechnicalSeminar,
UserLog,
)

from .models.models import UserLog

# Configure Logging
def request_processor(logger, log_method, event_dict): # pylint: disable=unused-argument, redefined-outer-name
Expand Down Expand Up @@ -112,6 +101,7 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
# pylint: disable=wrong-import-order
from conditional.util import context_processors
from conditional.util.auth import get_user
from conditional.util.member import gatekeep_status
from .blueprints.dashboard import dashboard_bp # pylint: disable=ungrouped-imports
from .blueprints.attendance import attendance_bp
from .blueprints.major_project_submission import major_project_bp
Expand Down Expand Up @@ -140,7 +130,7 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
app.register_blueprint(co_op_bp)
app.register_blueprint(log_bp)

from .util.ldap import ldap_get_member, ldap_is_active, ldap_is_intromember
from .util.ldap import ldap_get_member


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


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

if datetime.today() < datetime(start_of_year().year, 12, 31):
semester = "Fall"
semester_start = datetime(start_of_year().year,6,1)
else:
semester = "Spring"
semester_start = datetime(start_of_year().year + 1,1,1)

# groups
ldap_member = ldap_get_member(username)
is_intro_member = ldap_is_intromember(ldap_member)
is_active_member = ldap_is_active(ldap_member) and not is_intro_member

is_on_coop = (
CurrentCoops.query.filter(
CurrentCoops.date_created > start_of_year(),
CurrentCoops.semester == semester,
CurrentCoops.uid == username,
).first()
is not None
)

passed_fall = (
FreshmanEvalData.query.filter(
FreshmanEvalData.freshman_eval_result == "Passed",
FreshmanEvalData.eval_date > start_of_year(),
FreshmanEvalData.uid == username,
).first()
is not None
)
eligibility_of_groups = (is_active_member and not is_on_coop) or passed_fall

# number of directorship meetings attended in the current semester
d_meetings = (
MemberCommitteeAttendance.query.join(
CommitteeMeeting,
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id,
)
.filter(
MemberCommitteeAttendance.uid == username,
CommitteeMeeting.approved is True,
CommitteeMeeting.date >= semester_start,
)
.count()
)
# number of technical seminars attended in the current semester
t_seminars = (
MemberSeminarAttendance.query.join(
TechnicalSeminar,
MemberSeminarAttendance.meeting_id == TechnicalSeminar.id,
)
.filter(
MemberSeminarAttendance.uid == username,
TechnicalSeminar.approved is True,
TechnicalSeminar.date >= semester_start,
)
.count()
)
# number of house meetings attended in the current semester
h_meetings = (
MemberHouseMeetingAttendance.query.join(
HouseMeeting,
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id,
)
.filter(
MemberHouseMeetingAttendance.uid == username,
HouseMeeting.date >= semester_start
)
.count()
)
result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6)

return {
"result": result,
"h_meetings": h_meetings,
"c_meetings": d_meetings,
"t_seminars": t_seminars,
}, 200
return gatekeep_status(username)



Expand Down
85 changes: 83 additions & 2 deletions conditional/util/member.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from datetime import datetime

from conditional import gatekeep_status, start_of_year
from conditional import start_of_year
from conditional.models.models import CommitteeMeeting
from conditional.models.models import CurrentCoops
from conditional.models.models import FreshmanEvalData
Expand All @@ -17,6 +17,8 @@
from conditional.util.ldap import ldap_get_roomnumber
from conditional.util.ldap import ldap_is_active
from conditional.util.ldap import ldap_is_onfloor
from conditional.util.ldap import ldap_is_intromember
from conditional.util.ldap import ldap_get_member


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

voting_list = list(username for username in voting_set if gatekeep_status(username))
voting_list = list(username for username in voting_set if gatekeep_status(username)[0]["result"])
return voting_list


Expand Down Expand Up @@ -158,3 +160,82 @@ def req_cm(member):
if co_op:
return 15
return 30

def gatekeep_status(username):
if datetime.today() < datetime(start_of_year().year, 12, 31):
semester = "Fall"
semester_start = datetime(start_of_year().year,6,1)
else:
semester = "Spring"
semester_start = datetime(start_of_year().year + 1,1,1)

# groups
ldap_member = ldap_get_member(username)
is_intro_member = ldap_is_intromember(ldap_member)
is_active_member = ldap_is_active(ldap_member) and not is_intro_member

is_on_coop = (
CurrentCoops.query.filter(
CurrentCoops.date_created > start_of_year(),
CurrentCoops.semester == semester,
CurrentCoops.uid == username,
).first()
is not None
)

passed_fall = (
FreshmanEvalData.query.filter(
FreshmanEvalData.freshman_eval_result == "Passed",
FreshmanEvalData.eval_date > start_of_year(),
FreshmanEvalData.uid == username,
).first()
is not None
)
eligibility_of_groups = (is_active_member and not is_on_coop) or passed_fall

# number of directorship meetings attended in the current semester
d_meetings = (
MemberCommitteeAttendance.query.join(
CommitteeMeeting,
MemberCommitteeAttendance.meeting_id == CommitteeMeeting.id,
)
.filter(
MemberCommitteeAttendance.uid == username,
CommitteeMeeting.approved is True,
CommitteeMeeting.timestamp >= semester_start,
)
.count()
)
# number of technical seminars attended in the current semester
t_seminars = (
MemberSeminarAttendance.query.join(
TechnicalSeminar,
MemberSeminarAttendance.seminar_id == TechnicalSeminar.id,
)
.filter(
MemberSeminarAttendance.uid == username,
TechnicalSeminar.approved is True,
TechnicalSeminar.timestamp >= semester_start,
)
.count()
)
# number of house meetings attended in the current semester
h_meetings = (
MemberHouseMeetingAttendance.query.join(
HouseMeeting,
MemberHouseMeetingAttendance.meeting_id == HouseMeeting.id,
)
.filter(
MemberHouseMeetingAttendance.uid == username,
HouseMeeting.date >= semester_start
)
.count()
)
result = eligibility_of_groups and (d_meetings >= 6 and t_seminars >= 2 and h_meetings >= 6)

return {
"result": result,
"h_meetings": h_meetings,
"c_meetings": d_meetings,
"t_seminars": t_seminars,
}, 200