Skip to content

Commit b143c89

Browse files
committed
Revert @tallen42's work on the major project form
1 parent 70110fb commit b143c89

File tree

14 files changed

+628
-787
lines changed

14 files changed

+628
-787
lines changed

Dockerfile

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,15 @@ RUN apt-get -yq update && \
1212
pip install -r requirements.txt && \
1313
apt-get -yq clean all
1414

15-
ENV NVM_DIR /usr/local/nvm
16-
ENV NODE_VERSION v10.24.1
17-
RUN mkdir -p $NVM_DIR
18-
19-
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
20-
21-
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION"
22-
2315
ADD . /opt/conditional
2416

25-
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm use --delete-prefix $NODE_VERSION && npm install && npm run production"
26-
27-
RUN rm -rf node_modules && \
17+
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
18+
apt-get -yq update && \
19+
apt-get -yq install nodejs && \
20+
npm install && \
21+
npm run production && \
22+
rm -rf node_modules && \
23+
apt-get -yq remove nodejs npm && \
2824
apt-get -yq clean all
2925

3026
RUN ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
Lines changed: 47 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import json
2-
import os
3-
42
import requests
3+
<<<<<<< HEAD
54
import boto3
5+
=======
6+
>>>>>>> parent of d5f968b (S3 support added)
67

78
from flask import Blueprint
89
from flask import request
@@ -12,7 +13,6 @@
1213
from sqlalchemy import desc
1314

1415
import structlog
15-
from werkzeug.utils import secure_filename
1616

1717
from conditional.util.context_processors import get_member_name
1818

@@ -26,162 +26,103 @@
2626

2727
logger = structlog.get_logger()
2828

29-
major_project_bp = Blueprint('major_project_bp', __name__)
29+
major_project_bp = Blueprint("major_project_bp", __name__)
3030

3131

32-
@major_project_bp.route('/major_project/')
32+
@major_project_bp.route("/major_project/")
3333
@auth.oidc_auth("default")
3434
@get_user
3535
def display_major_project(user_dict=None):
3636
log = logger.new(request=request, auth_dict=user_dict)
37-
log.info('Display Major Project Page')
37+
log.info("Display Major Project Page")
3838

3939
major_projects = [
4040
{
41-
'username': p.uid,
42-
'name': ldap_get_member(p.uid).cn,
43-
'proj_name': p.name,
44-
'status': p.status,
45-
'description': p.description,
46-
'id': p.id,
47-
'is_owner': bool(user_dict['username'] == p.uid)
48-
} for p in
49-
MajorProject.query.filter(
50-
MajorProject.date > start_of_year()).order_by(
51-
desc(MajorProject.id))]
41+
"username": p.uid,
42+
"name": ldap_get_member(p.uid).cn,
43+
"proj_name": p.name,
44+
"status": p.status,
45+
"description": p.description,
46+
"id": p.id,
47+
"is_owner": bool(user_dict["username"] == p.uid),
48+
}
49+
for p in MajorProject.query.filter(
50+
MajorProject.date > start_of_year()
51+
).order_by(desc(MajorProject.id))
52+
]
5253

5354
major_projects_len = len(major_projects)
5455
# return names in 'first last (username)' format
55-
return render_template('major_project_submission.html',
56-
major_projects=major_projects,
57-
major_projects_len=major_projects_len,
58-
username=user_dict['username'])
59-
60-
@major_project_bp.route('/major_project/upload', methods=['POST'])
61-
@auth.oidc_auth("default")
62-
@get_user
63-
def upload_major_project_files(user_dict=None):
64-
log = logger.new(request=request, auth_dict=user_dict)
65-
log.info('Uploading Major Project File(s)')
66-
67-
68-
if len(list(request.files.keys())) < 1:
69-
return "No file", 400
70-
71-
# Temporarily save files to a place, to be uploaded on submit
72-
73-
for _, file in request.files.lists():
74-
file = file[0] # remove it from the list because this is not the best
75-
safe_name = secure_filename(file.filename)
76-
filename = f"/tmp/{user_dict['username']}/{safe_name}"
77-
78-
os.makedirs(os.path.dirname(filename), exist_ok=True)
79-
file.save(filename)
80-
81-
return jsonify({"success": True}), 200
82-
83-
84-
85-
@major_project_bp.route('/major_project/submit', methods=['POST'])
56+
return render_template(
57+
"major_project_submission.html",
58+
major_projects=major_projects,
59+
major_projects_len=major_projects_len,
60+
username=user_dict["username"],
61+
)
62+
63+
@major_project_bp.route("/major_project/submit", methods=["POST"])
8664
@auth.oidc_auth("default")
8765
@get_user
8866
def submit_major_project(user_dict=None):
8967
log = logger.new(request=request, auth_dict=user_dict)
90-
log.info('Submit Major Project')
68+
log.info("Submit Major Project")
9169

9270
post_data = request.get_json()
93-
print(post_data)
94-
name = post_data['projectName']
95-
tldr = post_data['projectTldr']
96-
time_spent = post_data['projectTimeSpent']
97-
skills = post_data['projectSkills']
98-
description = post_data['projectDescription']
99-
100-
user_id = user_dict['username']
101-
102-
print(skills)
71+
name = post_data["projectName"]
72+
description = post_data["projectDescription"]
10373

104-
if name == "" or len(description.strip().split()) < 50: # check for 50 word minimum
74+
if name == "" or description == "":
10575
return jsonify({"success": False}), 400
106-
project = MajorProject(user_id, name, tldr, time_spent, description)
76+
project = MajorProject(user_dict["username"], name, description)
10777

78+
username = user_dict['username']
79+
send_slack_ping({"text":f"<!subteam^S5XENJJAH> *{get_member_name(username)}* ({username})"
80+
f" submitted their major project, *{name}*!"})
10881
db.session.add(project)
10982
db.session.commit()
110-
111-
# This allows us to get a project with a database ID
112-
project = MajorProject.query.filter(
113-
MajorProject.name == name and MajorProject.uid == user_id
114-
).first()
115-
116-
if project is None:
117-
return jsonify({"success": False}), 500
118-
119-
# Don't send slack ping until after we are sure the DB worked fine
120-
send_slack_ping({"text":f"<!subteam^S5XENJJAH> *{get_member_name(user_id)}* ({user_id})"
121-
f" submitted their major project, *{name}*!"})
122-
123-
# Acquire S3 Bucket instance
124-
s3 = boto3.resource("s3", endpoint_url="https://s3.csh.rit.edu")
125-
bucket = s3.create_bucket(Bucket="major-project-media")
126-
# Collect all the locally cached files and put them in the bucket
127-
for file in os.listdir(f"/tmp/{user_id}"):
128-
filepath = f"/tmp/{user_id}/{file}"
129-
print(filepath)
130-
bucket.upload_file(filepath, f"{project.id}-{file}")
131-
os.remove(filepath)
132-
os.rmdir(f"/tmp/{user_id}")
133-
13483
return jsonify({"success": True}), 200
13584

13685

137-
@major_project_bp.route('/major_project/review', methods=['POST'])
86+
@major_project_bp.route("/major_project/review", methods=["POST"])
13887
@auth.oidc_auth("default")
13988
@get_user
14089
def major_project_review(user_dict=None):
14190
log = logger.new(request=request, auth_dict=user_dict)
14291

143-
if not ldap_is_eval_director(user_dict['account']):
92+
if not ldap_is_eval_director(user_dict["account"]):
14493
return redirect("/dashboard", code=302)
14594

14695
post_data = request.get_json()
147-
pid = post_data['id']
148-
status = post_data['status']
96+
pid = post_data["id"]
97+
status = post_data["status"]
14998

150-
log.info(f'{status} Major Project ID: {pid}')
99+
log.info(f"{status} Major Project ID: {pid}")
151100

152101
print(post_data)
153-
MajorProject.query.filter(
154-
MajorProject.id == pid). \
155-
update(
156-
{
157-
'status': status
158-
})
102+
MajorProject.query.filter(MajorProject.id == pid).update({"status": status})
159103
db.session.flush()
160104
db.session.commit()
161105
return jsonify({"success": True}), 200
162106

163107

164-
@major_project_bp.route('/major_project/delete/<pid>', methods=['DELETE'])
108+
@major_project_bp.route("/major_project/delete/<pid>", methods=["DELETE"])
165109
@auth.oidc_auth("default")
166110
@get_user
167111
def major_project_delete(pid, user_dict=None):
168112
log = logger.new(request=request, auth_dict=user_dict)
169-
log.info(f'Delete Major Project ID: {pid}')
113+
log.info(f"Delete Major Project ID: {pid}")
170114

171-
major_project = MajorProject.query.filter(
172-
MajorProject.id == pid
173-
).first()
115+
major_project = MajorProject.query.filter(MajorProject.id == pid).first()
174116
creator = major_project.uid
175117

176-
if creator == user_dict['username'] or ldap_is_eval_director(user_dict['account']):
177-
MajorProject.query.filter(
178-
MajorProject.id == pid
179-
).delete()
118+
if creator == user_dict["username"] or ldap_is_eval_director(user_dict["account"]):
119+
MajorProject.query.filter(MajorProject.id == pid).delete()
180120
db.session.flush()
181121
db.session.commit()
182122
return jsonify({"success": True}), 200
183123

184124
return "Must be project owner to delete!", 401
185125

126+
186127
def send_slack_ping(payload):
187-
requests.post(app.config['WEBHOOK_URL'], json.dumps(payload), timeout=120)
128+
requests.post(app.config["WEBHOOK_URL"], json.dumps(payload), timeout=120)

conditional/models/models.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,20 +134,16 @@ class MajorProject(db.Model):
134134
date = Column(Date, nullable=False)
135135
uid = Column(String(32), nullable=False)
136136
name = Column(String(64), nullable=False)
137-
tldr = Column(String(128), nullable=False)
138-
time = Column(Text, nullable=False)
139-
description = Column(Text, nullable=False)
137+
description = Column(Text)
140138
active = Column(Boolean, nullable=False)
141139
status = Column(Enum('Pending', 'Passed', 'Failed',
142140
name="major_project_enum"),
143141
nullable=False)
144142

145-
def __init__(self, uid, name, tldr, time, desc): # pylint: disable=too-many-positional-arguments,redefined-outer-name
143+
def __init__(self, uid, name, desc):
146144
self.uid = uid
147145
self.date = datetime.now()
148146
self.name = name
149-
self.tldr = tldr
150-
self.time = time
151147
self.description = desc
152148
self.status = 'Pending'
153149
self.active = True

0 commit comments

Comments
 (0)