Skip to content

Commit abaa3cd

Browse files
authored
Merge pull request #232 from ComputerScienceHouse/develop
Version 1.10
2 parents a86e613 + a4f0c51 commit abaa3cd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+445
-456
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
2525

2626
RUN ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
2727

28-
CMD ["gunicorn", "conditional:app", "--bind=0.0.0.0:8080", "--access-logfile=-"]
28+
CMD ["gunicorn", "conditional:app", "--bind=0.0.0.0:8080", "--access-logfile=-", "--timeout=256"]

app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from conditional import app
22

33
if __name__ == "__main__":
4-
app.run(host=app.config['IP'], port=app.config['PORT'])
4+
app.run(host=app.config['IP'], port=app.config['PORT'], threaded=False)
55

66
application = app

conditional/__init__.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,26 @@
1-
# pylint: disable=wrong-import-order
2-
from ._version import __version__
3-
41
import os
52
from datetime import datetime
63

4+
import structlog
75
from csh_ldap import CSHLDAP
86
from flask import Flask, redirect, render_template, g
97
from flask_migrate import Migrate
8+
from flask_gzip import Gzip
109
from flask_pyoidc.flask_pyoidc import OIDCAuthentication
1110
from flask_sqlalchemy import SQLAlchemy
1211
from raven.contrib.flask import Sentry
13-
import structlog
14-
15-
from conditional import config
1612

1713
app = Flask(__name__)
14+
gzip = Gzip(app)
1815

19-
app.config.from_object(config)
20-
if os.path.exists(os.path.join(os.getcwd(), "config.py")):
21-
app.config.from_pyfile(os.path.join(os.getcwd(), "config.py"))
22-
23-
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
16+
# Load default configuration and any environment variable overrides
17+
_root_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
18+
app.config.from_pyfile(os.path.join(_root_dir, "config.env.py"))
2419

25-
app.config["VERSION"] = __version__
20+
# Load file based configuration overrides if present
21+
_pyfile_config = os.path.join(_root_dir, "config.py")
22+
if os.path.exists(_pyfile_config):
23+
app.config.from_pyfile(_pyfile_config)
2624

2725
db = SQLAlchemy(app)
2826
migrate = Migrate(app, db)
@@ -89,8 +87,9 @@ def database_processor(logger, log_method, event_dict): # pylint: disable=unuse
8987

9088
logger = structlog.get_logger()
9189

90+
# pylint: disable=wrong-import-order
91+
from conditional.util import context_processors
9292
from conditional.util.auth import get_user
93-
9493
from .blueprints.dashboard import dashboard_bp # pylint: disable=ungrouped-imports
9594
from .blueprints.attendance import attendance_bp
9695
from .blueprints.major_project_submission import major_project_bp
@@ -148,7 +147,7 @@ def route_errors(error, user_dict=None):
148147
data = dict()
149148

150149
# Handle the case where the header isn't present
151-
if user_dict['username'] is not None:
150+
if user_dict['uid'] is not None:
152151
data['username'] = user_dict['account'].uid
153152
data['name'] = user_dict['account'].cn
154153
else:

conditional/_version.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

conditional/blueprints/attendance.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ def display_attendance_cm(user_dict=None):
137137
log.info('Display Committee Meeting Attendance Page')
138138

139139
return render_template('attendance_cm.html',
140-
username=user_dict['username'],
140+
username=user_dict['uid'],
141141
date=datetime.now().strftime("%Y-%m-%d"))
142142

143143

@@ -149,7 +149,7 @@ def display_attendance_ts(user_dict=None):
149149
log.info('Display Technical Seminar Attendance Page')
150150

151151
return render_template('attendance_ts.html',
152-
username=user_dict['username'],
152+
username=user_dict['uid'],
153153
date=datetime.now().strftime("%Y-%m-%d"))
154154

155155

@@ -164,7 +164,7 @@ def display_attendance_hm(user_dict=None):
164164
return redirect("/dashboard")
165165

166166
return render_template('attendance_hm.html',
167-
username=user_dict['username'],
167+
username=user_dict['uid'],
168168
date=datetime.now().strftime("%Y-%m-%d"),
169169
members=get_non_alumni_non_coop(internal=True))
170170

@@ -435,7 +435,7 @@ def get_seminar_attendees(meeting_id):
435435
else:
436436
total_pages = (int(len(all_cm) / 10))
437437
return render_template('attendance_history.html',
438-
username=user_dict['username'],
438+
username=user_dict['uid'],
439439
history=all_meetings,
440440
pending_cm=pend_cm,
441441
pending_ts=pend_ts,

conditional/blueprints/cache_management.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from conditional import auth
88
from conditional.util.auth import get_user
9+
from conditional.util.cache import clear_all_cached_functions
910
from conditional.util.ldap import _ldap_is_member_of_directorship
1011
from conditional.util.ldap import ldap_get_active_members
1112
from conditional.util.ldap import ldap_get_current_students
@@ -14,9 +15,6 @@
1415
from conditional.util.ldap import ldap_get_onfloor_members
1516
from conditional.util.ldap import ldap_is_eval_director
1617
from conditional.util.ldap import ldap_is_rtp
17-
from conditional.util.member import get_members_info
18-
from conditional.util.member import get_onfloor_members
19-
from conditional.util.member import get_voting_members
2018

2119
logger = structlog.get_logger()
2220
cache_bp = Blueprint('cache_bp', __name__)
@@ -45,16 +43,8 @@ def clear_cache(user_dict=None):
4543
log = logger.new(request=request, auth_dict=user_dict)
4644
log.info('Purge All Caches')
4745

48-
_ldap_is_member_of_directorship.cache_clear()
49-
ldap_get_member.cache_clear()
50-
ldap_get_active_members.cache_clear()
51-
ldap_get_intro_members.cache_clear()
52-
ldap_get_onfloor_members.cache_clear()
53-
ldap_get_current_students.cache_clear()
46+
clear_all_cached_functions()
5447

55-
get_voting_members.cache_clear()
56-
get_members_info.cache_clear()
57-
get_onfloor_members.cache_clear()
5848
return "cache cleared", 200
5949

6050

conditional/blueprints/co_op.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33

44
from conditional import db, start_of_year, auth
55
from conditional.models.models import CurrentCoops
6+
from conditional.util.member import req_cm
67
from conditional.util.auth import get_user
78
from conditional.util.flask import render_template
8-
from conditional.util.ldap import ldap_is_eval_director
9+
from conditional.util.ldap import ldap_is_eval_director, ldap_is_current_student
910
from conditional.util.ldap import _ldap_add_member_to_group as ldap_add_member_to_group
1011
from conditional.util.ldap import _ldap_remove_member_from_group as ldap_remove_member_from_group
1112
from conditional.util.ldap import _ldap_is_member_of_group as ldap_is_member_of_group
@@ -23,10 +24,10 @@ def display_co_op_form(user_dict=None):
2324
log.info('Display Co-Op Submission Page')
2425

2526
co_op = CurrentCoops.query.filter(
26-
CurrentCoops.uid == user_dict['username'], CurrentCoops.date_created > start_of_year()).first()
27+
CurrentCoops.uid == user_dict['uid'], CurrentCoops.date_created > start_of_year()).first()
2728

2829
return render_template('co_op.html',
29-
username=user_dict['username'],
30+
username=user_dict['uid'],
3031
year=start_of_year().year,
3132
on_coop=co_op)
3233

@@ -42,20 +43,23 @@ def submit_co_op_form(user_dict=None):
4243
semester = post_data['semester']
4344
if post_data['semester'] not in valid_semesters:
4445
return "Invalid semester submitted", 400
46+
if not ldap_is_current_student(user_dict['account']):
47+
return "Must be current student", 403
4548

4649
log.info('Submit {} Co-Op'.format(semester))
4750

48-
if CurrentCoops.query.filter(CurrentCoops.uid == user_dict['username'],
51+
if CurrentCoops.query.filter(CurrentCoops.uid == user_dict['uid'],
4952
CurrentCoops.date_created > start_of_year()).first():
5053
return "User has already submitted this form!", 403
5154

5255
# Add to corresponding co-op ldap group
5356
ldap_add_member_to_group(user_dict['account'], semester.lower() + '_coop')
5457

55-
co_op = CurrentCoops(uid=user_dict['username'], semester=semester)
58+
co_op = CurrentCoops(uid=user_dict['uid'], semester=semester)
5659
db.session.add(co_op)
5760
db.session.flush()
5861
db.session.commit()
62+
req_cm.cache_clear()
5963

6064
return jsonify({"success": True}), 200
6165

@@ -81,5 +85,27 @@ def delete_co_op(uid, user_dict=None):
8185

8286
db.session.flush()
8387
db.session.commit()
88+
req_cm.cache_clear()
8489

8590
return jsonify({"success": True}), 200
91+
92+
93+
@co_op_bp.route('/co_op/manage')
94+
@auth.oidc_auth
95+
@get_user
96+
def display_co_op_management(user_dict=None):
97+
log = logger.new(request=request, auth_dict=user_dict)
98+
log.info('Display Co-Op Management')
99+
100+
if not ldap_is_eval_director(user_dict['account']):
101+
return "must be eval director", 403
102+
103+
co_op_list = [(member.semester, member.uid)
104+
for member in CurrentCoops.query.filter(
105+
CurrentCoops.date_created > start_of_year(),
106+
CurrentCoops.semester != "Neither")]
107+
108+
return render_template("co_op_management.html",
109+
username=user_dict['uid'],
110+
co_op=co_op_list,
111+
)

conditional/blueprints/conditional.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from conditional.models.models import Conditional, SpringEval, FreshmanEvalData
88
from conditional.util.auth import get_user
99
from conditional.util.flask import render_template
10-
from conditional.util.ldap import ldap_get_member
1110
from conditional.util.ldap import ldap_is_eval_director
1211

1312
conditionals_bp = Blueprint('conditionals_bp', __name__)
@@ -24,17 +23,17 @@ def display_conditionals(user_dict=None):
2423

2524
conditionals = [
2625
{
27-
'name': ldap_get_member(c.uid).cn,
26+
'uid': c.uid,
2827
'date_created': c.date_created,
2928
'date_due': c.date_due,
3029
'description': c.description,
3130
'id': c.id
3231
} for c in
3332
Conditional.query.filter(
3433
Conditional.status == "Pending")]
35-
# return names in 'first last (username)' format
34+
3635
return render_template('conditional.html',
37-
username=user_dict['username'],
36+
username=user_dict['uid'],
3837
conditionals=conditionals,
3938
conditionals_len=len(conditionals))
4039

conditional/blueprints/dashboard.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@
1010
from conditional.util.auth import get_user
1111
from conditional.util.flask import render_template
1212
from conditional.util.housing import get_queue_position
13-
from conditional.util.ldap import ldap_get_active_members
13+
from conditional.util.ldap import ldap_get_active_members, ldap_is_bad_standing
1414
from conditional.util.ldap import ldap_is_active
15-
from conditional.util.ldap import ldap_is_current_student
1615
from conditional.util.ldap import ldap_is_intromember
1716
from conditional.util.ldap import ldap_is_onfloor
1817
from conditional.util.member import get_freshman_data, get_voting_members, get_cm, get_hm, req_cm
@@ -34,11 +33,10 @@ def display_dashboard(user_dict=None):
3433

3534
data = dict()
3635
data['username'] = user_dict['account'].uid
37-
data['name'] = user_dict['account'].cn
3836
data['active'] = ldap_is_active(user_dict['account'])
37+
data['bad_standing'] = ldap_is_bad_standing(user_dict['account'])
3938
data['onfloor'] = ldap_is_onfloor(user_dict['account'])
4039
data['voting'] = bool(user_dict['account'].uid in can_vote)
41-
data['student'] = ldap_is_current_student(user_dict['account'])
4240

4341
data['voting_count'] = {"Voting Members": len(can_vote),
4442
"Active Members": len(ldap_get_active_members())}

conditional/blueprints/housing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ def display_housing(user_dict=None):
5353
housing[room] = [name]
5454
room_list.add(room)
5555

56-
# return names in 'first last (username)' format
56+
# return names in 'first last (uid)' format
5757
return render_template('housing.html',
58-
username=user_dict['username'],
58+
username=user_dict['uid'],
5959
queue=get_housing_queue(ldap_is_eval_director(user_dict['account'])),
6060
housing=housing,
6161
room_list=sorted(list(room_list)))

0 commit comments

Comments
 (0)