-
-
No Pending Major Projects
+
- {% else %}
+
+
+
All Major Projects
{% if major_projects_len
+ <=0 %}
+
+
No Pending Major Projects
+
+
+{% else %}
- {% for p in major_projects %}
-
-
-
-
{{ p['proj_name'] }}
-

- {{ p['name'] }} ({{ p['username'] }})
-
-
+ {% for p in major_projects %}
+
+
+
+
{{p['proj_name']}}
+

+ {{p['name']}} ({{p['username']}})
+
+
- {% if is_eval_director %}
+ {% if is_eval_director %}
-
- {% else %}
- {% if p['status'] == 'Passed' %}
-
- {% elif p['status'] == 'Failed' %}
-
- {% else %}
-
- {% endif %}
- {% if p.is_owner and p['status'] == 'Pending' %}
-
- {% endif %}
- {% endif %}
-
-
-
- {{ p['description'] }}
-
+
+ {% else %}
+ {% if p['status'] == 'Passed' %}
+
+ {% elif p['status'] == 'Failed' %}
+
+ {% else %}
+
+ {% endif %}
+ {% if p.is_owner and p['status'] == 'Pending' %}
+
+ {% endif %}
+ {% endif %}
+
+
+
+ {{p['description']}}
- {% endfor %}
+
+
+ {% endfor %}
- {% endif %}
+{% endif %}
-
+
{% endblock %}
diff --git a/config.env.py b/config.env.py
index 29c0689b..44e0464e 100644
--- a/config.env.py
+++ b/config.env.py
@@ -25,10 +25,6 @@
LDAP_BIND_DN = env.get("CONDITIONAL_LDAP_BIND_DN", "cn=conditional,ou=Apps,dc=csh,dc=rit,dc=edu")
LDAP_BIND_PW = env.get("CONDITIONAL_LDAP_BIND_PW", "")
-# S3 information
-AWS_ACCESS_KEY_ID = env.get("AWS_ACCESS_KEY_ID", "")
-AWS_SECRET_ACCESS_KEY = env.get("AWS_SECRET_ACCESS_KEY", "")
-
# Sentry config
# Not required for local development, but if you set it, make sure the
# SENTRY_ENV is 'local-development'
diff --git a/frontend/images/photo_video.svg b/frontend/images/photo_video.svg
deleted file mode 100644
index 2324ec73..00000000
--- a/frontend/images/photo_video.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
\ No newline at end of file
diff --git a/frontend/javascript/modules/dropzone.js b/frontend/javascript/modules/dropzone.js
index 959f2b19..2b04a87e 100644
--- a/frontend/javascript/modules/dropzone.js
+++ b/frontend/javascript/modules/dropzone.js
@@ -1,19 +1,18 @@
import Dropzone from "dropzone";
-
Dropzone.autoDiscover = false;
export default class DropzoneUpload {
- constructor(element) {
- this.element = element;
- this.render();
- }
+ constructor(element) {
+ this.element = element;
+ this.render();
+ }
- render() {
- const dz = new Dropzone(this.element); // eslint-disable-line new-cap
- dz.on("complete", () => window.location.reload());
- }
+ render() {
+ const dz = new Dropzone(this.element); // eslint-disable-line new-cap
+ dz.on("complete", () => window.location.reload());
+ }
}
Dropzone.options.uploadUser = {
- acceptedFiles: ".csv"
+ acceptedFiles: ".csv"
};
diff --git a/frontend/javascript/modules/majorProjectForm.js b/frontend/javascript/modules/majorProjectForm.js
index 89a210dd..fc9969c1 100644
--- a/frontend/javascript/modules/majorProjectForm.js
+++ b/frontend/javascript/modules/majorProjectForm.js
@@ -1,73 +1,30 @@
import FetchUtil from "../utils/fetchUtil";
export default class MajorProjectForm {
-
-
- constructor(form) {
- this.form = form;
- this.endpoint = '/major_project/submit';
- this.tags_written = false;
- this.tag_keys = ["Enter", "Comma"];
- this.render();
- }
-
- render() {
- this.form.querySelector('input[type=submit]')
- .addEventListener('click', e => this._submitForm(e));
- this.form.querySelector('input[id=skill-input]')
- .addEventListener('focusout', e => this.onWriteSkill(e));
- this.form.querySelector('input[id=skill-input]')
- .addEventListener('keypress', e => this.onKeyPress(e));
- }
-
- onKeyPress(e) {
- if (this.tag_keys.includes(e.code)) {
- e.preventDefault();
- this.onWriteSkill(e);
- }
- return false;
- }
-
- onWriteSkill(e) {
- let input = document.getElementById("skill-input")
- if (!this.tags_written) {
- this.tags_written = true
- document.getElementsByClassName("placeholder").item(0).remove()
- }
- let txt = input.value.replace(/[^a-zA-Z0-9\+\-\.\# ]/g, ''); // allowed characters list
- if (txt) input.insertAdjacentHTML("beforebegin", '
' + txt + '');
- let skills = document.getElementsByClassName("skill-tag")
- skills.item(skills.length - 1).addEventListener('click', e => this.onRemoveTag(e));
- input.value = "";
- input.focus();
-
- }
-
- onRemoveTag(e) {
- e.target.remove();
- }
-
- _submitForm(e) {
- e.preventDefault();
-
- let skills = [];
-
- Array.from(document.getElementsByClassName('skill-tag')).forEach(tag => skills.push(tag.firstChild.data))
-
- let payload = {
- projectName: this.form.querySelector('input[name=name]').value,
- projectTldr: this.form.querySelector('input[name=tldr]').value,
- projectTimeSpent: this.form.querySelector('textarea[name=time-commitment]').value,
- projectSkills: skills,
- projectDescription: this.form.querySelector('textarea[name=description]').value
- };
-
- console.log(payload)
-
- FetchUtil.postWithWarning(this.endpoint, payload, {
- warningText: "You will not be able to edit your " +
- "project once it has been submitted.",
- successText: "Your project has been submitted."
- });
- }
+ constructor(form) {
+ this.form = form;
+ this.endpoint = '/major_project/submit';
+ this.render();
+ }
+
+ render() {
+ this.form.querySelector('input[type=submit]')
+ .addEventListener('click', e => this._submitForm(e));
+ }
+
+ _submitForm(e) {
+ e.preventDefault();
+
+ let payload = {
+ projectName: this.form.querySelector('input[name=name]').value,
+ projectDescription:
+ this.form.querySelector('textarea[name=description]').value
+ };
+
+ FetchUtil.postWithWarning(this.endpoint, payload, {
+ warningText: "You will not be able to edit your " +
+ "project once it has been submitted.",
+ successText: "Your project has been submitted."
+ });
+ }
}
diff --git a/frontend/stylesheets/pages/_major-project.scss b/frontend/stylesheets/pages/_major-project.scss
index ca0667ce..01438510 100644
--- a/frontend/stylesheets/pages/_major-project.scss
+++ b/frontend/stylesheets/pages/_major-project.scss
@@ -1,55 +1,3 @@
.major-project-desc {
white-space: pre-line;
}
-
-.form-label {
- margin-bottom: 0;
- margin-top: 1.25rem;
- font-size: 2rem;
-}
-
-.form-label span {
- font-size: 1rem;
-}
-
-.form-textarea {
- resize: vertical;
-}
-
-.form-skilltags {
- box-shadow: inset 0 -1px 0 #ddd;
- border: none;
- border-radius: 0;
- padding: 0 0 10px;
- height: fit-content;
-}
-
-.placeholder {
- color: #bbb;
- font-size: 16px;
-}
-
-.skill-tag {
- display: block;
- float: left;
- background: #d979e3;
- padding: 4px 30px 4px 8px;
- margin: 2px 3px;
- color: #444;
- border-radius: 5px;
- transition: .5s all;
-}
-
-.skill-tag:after {
- position: absolute;
- content: "×";
- border: 1px solid;
- border-radius: 10px;
- padding: 0 4px;
- margin: 3px 0 10px 7px;
- font-size: 10px;
-}
-
-.skill-tag:hover {
- box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
-}
\ No newline at end of file
diff --git a/migrations/versions/05126dcdf40e_add_mp_fields.py b/migrations/versions/05126dcdf40e_add_mp_fields.py
deleted file mode 100644
index 9eafb64f..00000000
--- a/migrations/versions/05126dcdf40e_add_mp_fields.py
+++ /dev/null
@@ -1,89 +0,0 @@
-"""add major project fields
-
-Revision ID: 05126dcdf40e
-Revises: 757e18146d16
-Create Date: 2024-09-15 00:20:50.617251
-
-"""
-
-# revision identifiers, used by Alembic.
-revision = '05126dcdf40e'
-down_revision = '757e18146d16'
-
-from alembic import op
-import sqlalchemy as sa
-from sqlalchemy.dialects import postgresql
-
-def upgrade():
- # ### commands auto generated by Alembic - please adjust! ###
- op.drop_table('freshman_batch_pulls')
- op.drop_table('batch_conditions')
- op.drop_table('freshman_batch_users')
- op.drop_table('batch')
- op.drop_table('member_batch_users')
- op.drop_table('member_batch_pulls')
- op.alter_column('freshman_hm_attendance', 'attendance_status',
- existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'),
- nullable=True)
- op.add_column('major_projects', sa.Column('time', sa.Text(), nullable=False, server_default='N/A'))
- op.add_column('major_projects', sa.Column('tldr', sa.String(length=128), nullable=False, server_default='N/A'))
- op.alter_column('major_projects', 'description',
- existing_type=sa.TEXT(),
- nullable=False)
- op.alter_column('member_hm_attendance', 'attendance_status',
- existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'),
- nullable=True)
- # ### end Alembic commands ###
-
-
-def downgrade():
- # ### commands auto generated by Alembic - please adjust! ###
- op.alter_column('member_hm_attendance', 'attendance_status',
- existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'),
- nullable=False)
- op.alter_column('major_projects', 'description',
- existing_type=sa.TEXT(),
- nullable=True)
- op.drop_column('major_projects', 'tldr')
- op.drop_column('major_projects', 'time')
- op.alter_column('freshman_hm_attendance', 'attendance_status',
- existing_type=postgresql.ENUM('Attended', 'Excused', 'Absent', name='attendance_enum'),
- nullable=False)
- op.create_table('member_batch_pulls',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=False),
- sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False),
- sa.Column('reason', sa.TEXT(), autoincrement=False, nullable=False),
- sa.Column('puller', sa.VARCHAR(), autoincrement=False, nullable=False)
- )
- op.create_table('member_batch_users',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=True),
- sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False)
- )
- op.create_table('batch',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('name', sa.TEXT(), autoincrement=False, nullable=False),
- sa.Column('uid', sa.VARCHAR(length=32), autoincrement=False, nullable=True),
- sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False)
- )
- op.create_table('freshman_batch_users',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('fid', sa.INTEGER(), autoincrement=False, nullable=False),
- sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False)
- )
- op.create_table('batch_conditions',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('value', sa.INTEGER(), autoincrement=False, nullable=False),
- sa.Column('condition', postgresql.ENUM('packet', 'seminar', 'committee', 'house', name='batch_ctype_enum'), autoincrement=False, nullable=False),
- sa.Column('comparison', postgresql.ENUM('less', 'equal', 'greater', name='batch_comparison'), autoincrement=False, nullable=False),
- sa.Column('batch_id', sa.INTEGER(), autoincrement=False, nullable=False)
- )
- op.create_table('freshman_batch_pulls',
- sa.Column('id', sa.INTEGER(), autoincrement=True, nullable=False),
- sa.Column('fid', sa.INTEGER(), autoincrement=False, nullable=False),
- sa.Column('approved', sa.BOOLEAN(), autoincrement=False, nullable=False),
- sa.Column('reason', sa.TEXT(), autoincrement=False, nullable=False),
- sa.Column('puller', sa.VARCHAR(), autoincrement=False, nullable=False)
- )
- # ### end Alembic commands ###
diff --git a/package-lock.json b/package-lock.json
index 4688860d..e232319f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "conditional",
- "version": "1.12.0",
+ "version": "1.10.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -67,12 +67,6 @@
"integrity": "sha1-ujpCMHCOGGcFBl5mur3Uw1z2ACg=",
"dev": true
},
- "a-sync-waterfall": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
- "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==",
- "dev": true
- },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -190,10 +184,10 @@
"ansi-wrap": "0.1.0"
}
},
- "ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
+ "ansi-html": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.5.tgz",
+ "integrity": "sha1-DcqloIEgaGa8JAo7dzoYTqO4i2Q=",
"dev": true
},
"ansi-red": {
@@ -369,7 +363,7 @@
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"dev": true
},
"asn1": {
@@ -430,9 +424,9 @@
"dev": true
},
"async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"requires": {
"lodash": "^4.17.14"
}
@@ -1493,9 +1487,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true,
"optional": true
},
@@ -1539,14 +1533,40 @@
}
},
"bl": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
- "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz",
+ "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=",
"dev": true,
- "optional": true,
"requires": {
- "readable-stream": "^2.3.5",
- "safe-buffer": "^5.1.1"
+ "readable-stream": "~2.0.5"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~1.0.6",
+ "string_decoder": "~0.10.x",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ }
}
},
"blob": {
@@ -1834,9 +1854,9 @@
}
},
"bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz",
+ "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=",
"dev": true
},
"cache-base": {
@@ -2361,49 +2381,48 @@
}
},
"compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz",
+ "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=",
"dev": true,
"requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
+ "accepts": "~1.3.3",
+ "bytes": "2.3.0",
+ "compressible": "~2.0.8",
+ "debug": "~2.2.0",
+ "on-headers": "~1.0.1",
+ "vary": "~1.1.0"
},
"dependencies": {
"accepts": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
- "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
"dev": true,
"requires": {
- "mime-types": "~2.1.34",
- "negotiator": "0.6.3"
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
}
},
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "debug": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
+ "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"dev": true,
"requires": {
- "mime-db": "1.52.0"
+ "ms": "0.7.1"
}
},
+ "ms": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
+ "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
+ "dev": true
+ },
"negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
"dev": true
}
}
@@ -2755,11 +2774,11 @@
}
},
"datatables.net": {
- "version": "1.13.11",
- "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.13.11.tgz",
- "integrity": "sha512-AE6RkMXziRaqzPcu/pl3SJXeRa6fmXQG/fVjuRESujvkzqDCYEeKTTpPMuVJSGYJpPi32WGSphVNNY1G4nSN/g==",
+ "version": "1.11.2",
+ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.2.tgz",
+ "integrity": "sha512-Dg+Yeyky+BhXoooJqTDTGssLxkAxe73CljcjYd4630XQZKqqqy0akYk2r4RSHSJLyYCOGRZEZiUF/N39+5nqvg==",
"requires": {
- "jquery": "1.8 - 4"
+ "jquery": ">=1.7"
}
},
"datatables.net-bs": {
@@ -4042,23 +4061,14 @@
}
},
"es5-ext": {
- "version": "0.10.64",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
- "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
+ "version": "0.10.53",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
"dev": true,
"requires": {
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.3",
- "esniff": "^2.0.1",
- "next-tick": "^1.1.0"
- },
- "dependencies": {
- "next-tick": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
- "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
- "dev": true
- }
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
}
},
"es6-iterator": {
@@ -4238,26 +4248,6 @@
"integrity": "sha1-+RZ2VDK6Z9L8enF3uLz+8/brBWQ=",
"dev": true
},
- "esniff": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
- "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
- "dev": true,
- "requires": {
- "d": "^1.0.1",
- "es5-ext": "^0.10.62",
- "event-emitter": "^0.3.5",
- "type": "^2.7.2"
- },
- "dependencies": {
- "type": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
- "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
- "dev": true
- }
- }
- },
"espree": {
"version": "3.5.4",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
@@ -4472,18 +4462,18 @@
"dev": true
},
"json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
@@ -4492,9 +4482,9 @@
}
},
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
@@ -4595,6 +4585,12 @@
"is-extglob": "^1.0.0"
}
},
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
"fancy-log": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
@@ -5694,9 +5690,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
},
"semver": {
@@ -6093,40 +6089,217 @@
}
},
"gulp-nunjucks-render": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/gulp-nunjucks-render/-/gulp-nunjucks-render-2.2.3.tgz",
- "integrity": "sha512-YHrmwiwPw2DN16WJVj8S2tgUanB1ssZE8e5rRF6rH1T41mhO7r59iAqw92Yz5WSZXYB9G+uYXDTCODgixYPIRw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-nunjucks-render/-/gulp-nunjucks-render-2.0.0.tgz",
+ "integrity": "sha1-z0hQasXAWtiQIyYKMPaVHyI7JZ8=",
"dev": true,
"requires": {
- "lodash": "^4.17.11",
- "nunjucks": "^3.1.2",
- "plugin-error": "^1.0.1",
- "replace-ext": "^1.0.0",
- "through2": "^2.0.3"
+ "gulp-util": "~2.2.0",
+ "lodash": "^3.3.0",
+ "nunjucks": "^2.0.0",
+ "through2": "~0.4.0"
},
"dependencies": {
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "ansi-regex": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
"dev": true
},
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "ansi-styles": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+ "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
"dev": true,
"requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
+ "ansi-styles": "^1.1.0",
+ "escape-string-regexp": "^1.0.0",
+ "has-ansi": "^0.1.0",
+ "strip-ansi": "^0.3.0",
+ "supports-color": "^0.2.0"
}
},
- "replace-ext": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
- "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "gulp-util": {
+ "version": "2.2.20",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+ "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+ "dev": true,
+ "requires": {
+ "chalk": "^0.5.0",
+ "dateformat": "^1.0.7-1.2.3",
+ "lodash._reinterpolate": "^2.4.1",
+ "lodash.template": "^2.4.1",
+ "minimist": "^0.2.0",
+ "multipipe": "^0.1.0",
+ "through2": "^0.5.0",
+ "vinyl": "^0.2.1"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.0.17",
+ "xtend": "~3.0.0"
+ }
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^0.2.0"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+ "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+ "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+ "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+ "dev": true,
+ "requires": {
+ "lodash._escapehtmlchar": "~2.4.1",
+ "lodash._reunescapedhtml": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash.keys": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+ "dev": true,
+ "requires": {
+ "lodash._isnative": "~2.4.1",
+ "lodash._shimkeys": "~2.4.1",
+ "lodash.isobject": "~2.4.1"
+ }
+ },
+ "lodash.template": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+ "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+ "dev": true,
+ "requires": {
+ "lodash._escapestringchar": "~2.4.1",
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.defaults": "~2.4.1",
+ "lodash.escape": "~2.4.1",
+ "lodash.keys": "~2.4.1",
+ "lodash.templatesettings": "~2.4.1",
+ "lodash.values": "~2.4.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+ "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.escape": "~2.4.1"
+ }
+ },
+ "minimist": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.1.tgz",
+ "integrity": "sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.0.34",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+ "dev": true
+ },
+ "through2": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+ "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.0.17",
+ "xtend": "~2.1.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ }
+ }
+ },
+ "vinyl": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+ "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+ "dev": true,
+ "requires": {
+ "clone-stats": "~0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
"dev": true
}
}
@@ -6927,9 +7100,9 @@
"dev": true
},
"html-entities": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
- "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
+ "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==",
"dev": true
},
"html-minifier": {
@@ -7452,24 +7625,16 @@
"dev": true
},
"is-my-json-valid": {
- "version": "2.20.6",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz",
- "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==",
+ "version": "2.20.5",
+ "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.5.tgz",
+ "integrity": "sha512-VTPuvvGQtxvCeghwspQu1rBgjYUT6FGxPlvFKbYuFtgc4ADsX3U5ihZOYN0qyU6u+d4X9xXb0IT5O6QpXKt87A==",
"dev": true,
"requires": {
"generate-function": "^2.0.0",
"generate-object-property": "^1.1.0",
"is-my-ip-valid": "^1.0.0",
- "jsonpointer": "^5.0.0",
+ "jsonpointer": "^4.0.0",
"xtend": "^4.0.0"
- },
- "dependencies": {
- "jsonpointer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
- "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
- "dev": true
- }
}
},
"is-natural-number": {
@@ -7755,19 +7920,19 @@
"dev": true
},
"js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
"dev": true,
"requires": {
"argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "esprima": "^2.6.0"
},
"dependencies": {
"esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
"dev": true
}
}
@@ -7784,6 +7949,12 @@
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
},
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -7838,12 +8009,22 @@
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
"dev": true
},
+ "jsonpointer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz",
+ "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==",
+ "dev": true
+ },
"jsprim": {
"version": "1.4.1",
- "resolved": "",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
},
"dependencies": {
"assert-plus": {
@@ -8716,9 +8897,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
@@ -8792,9 +8973,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -8842,9 +9023,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
@@ -9063,6 +9244,12 @@
"integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=",
"dev": true
},
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
"no-case": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
@@ -9323,9 +9510,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
@@ -9422,7 +9609,8 @@
"dev": true,
"requires": {
"glob": "~7.1.1",
- "lodash": "~4.17.10"
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
}
},
"har-validator": {
@@ -9646,21 +9834,53 @@
"dev": true
},
"nunjucks": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz",
- "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==",
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-2.5.2.tgz",
+ "integrity": "sha1-6n00bnhbikh0Zmw8yp4YxXf7oiw=",
"dev": true,
"requires": {
- "a-sync-waterfall": "^1.0.0",
"asap": "^2.0.3",
- "commander": "^5.1.0"
+ "chokidar": "^1.6.0",
+ "yargs": "^3.32.0"
},
"dependencies": {
- "commander": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
- "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true
+ },
+ "chokidar": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+ "dev": true,
+ "requires": {
+ "anymatch": "^1.3.0",
+ "async-each": "^1.0.0",
+ "fsevents": "^1.0.0",
+ "glob-parent": "^2.0.0",
+ "inherits": "^2.0.1",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^2.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.0.0"
+ }
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
}
}
},
@@ -9704,6 +9924,12 @@
}
}
},
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
"object-path": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz",
@@ -10800,9 +11026,9 @@
},
"dependencies": {
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true,
"optional": true
}
@@ -11350,46 +11576,11 @@
"tunnel-agent": "~0.4.1"
},
"dependencies": {
- "bl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz",
- "integrity": "sha512-phbvN+yOk05EGoFcV/0S8N8ShnJqf6VCWRAw5he2gvRwBubFt/OzmcTNGqBt5b7Y4RK3YCgf6jrgGSR0Cwtsgw==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.0.5"
- }
- },
- "process-nextick-args": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==",
- "dev": true
- },
"qs": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz",
"integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=",
"dev": true
- },
- "readable-stream": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "~1.0.0",
- "process-nextick-args": "~1.0.6",
- "string_decoder": "~0.10.x",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
}
}
},
@@ -11611,7 +11802,8 @@
"dependencies": {
"ansi-regex": {
"version": "4.1.0",
- "resolved": "",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
"ansi-styles": {
@@ -11837,17 +12029,6 @@
"glob": "~7.1.1",
"lodash": "~4.17.10",
"minimatch": "~3.0.2"
- },
- "dependencies": {
- "minimatch": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
- "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- }
}
},
"gonzales-pe-sl": {
@@ -11949,9 +12130,9 @@
"integrity": "sha1-myE4zYi8JQSdi7SnCcMzHxg+XJ4="
},
"semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
},
"semver-regex": {
@@ -12932,9 +13113,9 @@
"optional": true
},
"minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true,
"optional": true
}
@@ -13102,24 +13283,6 @@
"mkdirp": "~0.5.1",
"sax": "~1.2.1",
"whet.extend": "~0.9.9"
- },
- "dependencies": {
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
- "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^2.6.0"
- }
- }
}
},
"svgpath": {
@@ -13678,9 +13841,9 @@
"dev": true
},
"underscore": {
- "version": "1.13.7",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
- "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
"dev": true
},
"union-value": {
@@ -13969,7 +14132,7 @@
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
"dev": true
},
"vendors": {
@@ -13978,6 +14141,31 @@
"integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==",
"dev": true
},
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ }
+ }
+ },
"vinyl": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
@@ -14307,31 +14495,15 @@
}
},
"webpack-hot-middleware": {
- "version": "2.26.1",
- "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.26.1.tgz",
- "integrity": "sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.12.1.tgz",
+ "integrity": "sha1-Qlf5ZeaKa4HaW93b1h+J+pB170w=",
"dev": true,
"requires": {
- "ansi-html-community": "0.0.8",
- "html-entities": "^2.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
+ "ansi-html": "0.0.5",
+ "html-entities": "^1.2.0",
+ "querystring": "^0.2.0",
+ "strip-ansi": "^3.0.0"
}
},
"weinre": {
@@ -14343,14 +14515,6 @@
"express": "2.5.x",
"nopt": "3.0.x",
"underscore": "1.7.x"
- },
- "dependencies": {
- "underscore": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
- "integrity": "sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA==",
- "dev": true
- }
}
},
"whatwg-fetch": {
@@ -14395,9 +14559,9 @@
"dev": true
},
"word-wrap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
- "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true
},
"wordwrap": {
diff --git a/package.json b/package.json
index 970e23b1..efcb531e 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"bootstrap-sass": "^3.4.1",
"bootstrap-sweetalert": "^1.0.1",
"csh-material-bootstrap": "1.0.0",
- "datatables.net": "^1.13.11",
+ "datatables.net": "^1.10.12",
"datatables.net-bs": "^1.10.12",
"dropzone": "^4.3.0",
"enumify": "^1.0.4",
@@ -51,7 +51,7 @@
"babel-preset-stage-1": "6.5.0",
"browser-sync": "2.13.0",
"chai": "3.5.0",
- "compression": "^1.7.4",
+ "compression": "1.6.2",
"del": "2.2.1",
"eslint-config-google": "^0.6.0",
"exports-loader": "^0.6.3",
@@ -69,7 +69,7 @@
"gulp-if": "2.0.1",
"gulp-imagemin": "3.0.1",
"gulp-notify": "2.2.0",
- "gulp-nunjucks-render": "^2.2.3",
+ "gulp-nunjucks-render": "2.0.0",
"gulp-rename": "1.2.2",
"gulp-rev": "7.1.0",
"gulp-rev-napkin": "0.1.0",
@@ -95,6 +95,6 @@
"sinon-chai": "2.8.0",
"webpack": "1.13.1",
"webpack-dev-middleware": "1.6.1",
- "webpack-hot-middleware": "^2.26.1"
+ "webpack-hot-middleware": "2.12.1"
}
}
diff --git a/requirements.in b/requirements.in
index 49cd221c..0d554b9a 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,9 +1,7 @@
alembic~=1.15.1
astroid~=3.3.9
blinker~=1.4
-boto3==1.35.13
-botocore==1.35.13
-click~=8.1.8
+click~=7.1
csh_ldap>=2.3.1
ddtrace~=3.2.1
Flask~=3.1.0
diff --git a/requirements.txt b/requirements.txt
index 44225432..dd17e05d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -19,17 +19,6 @@ blinker==1.9.0
# -r requirements.in
# flask
# sentry-sdk
-boto3==1.35.13
- # via -r requirements.in
-botocore==1.35.13
- # via
- # -r requirements.in
- # boto3
- # s3transfer
-build==1.2.2.post1
- # via pip-tools
-bytecode==0.16.1
- # via ddtrace
certifi==2022.5.18.1
# via
# requests
From 17b0773cf79bcf56549573e5242672f2fa87a2d8 Mon Sep 17 00:00:00 2001
From: tyler <137842227+goosenotduck@users.noreply.github.com>
Date: Mon, 20 Oct 2025 10:53:11 -0400
Subject: [PATCH 73/76] 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
---
.pylintrc | 7 +--
conditional/__init__.py | 96 ++------------------------------------
conditional/util/member.py | 85 ++++++++++++++++++++++++++++++++-
3 files changed, 89 insertions(+), 99 deletions(-)
diff --git a/.pylintrc b/.pylintrc
index 22e31bcb..667edd88 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -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 = ' '
@@ -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]
@@ -89,4 +84,4 @@ min-public-methods = 2
max-public-methods = 20
[EXCEPTIONS]
-overgeneral-exceptions = Exception
+overgeneral-exceptions = builtins.Exception
diff --git a/conditional/__init__.py b/conditional/__init__.py
index 753c75fc..10ee9214 100644
--- a/conditional/__init__.py
+++ b/conditional/__init__.py
@@ -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
@@ -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
@@ -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('/
')
@@ -170,88 +160,12 @@ def health():
@app.route("/gatekeep/")
-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)
diff --git a/conditional/util/member.py b/conditional/util/member.py
index 69a6ac97..9040c6ae 100644
--- a/conditional/util/member.py
+++ b/conditional/util/member.py
@@ -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
@@ -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)
@@ -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
@@ -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
From e6364827d33a22e663fa3153ab45bdef92845ae2 Mon Sep 17 00:00:00 2001
From: Noah
Date: Tue, 21 Oct 2025 12:11:47 -0400
Subject: [PATCH 74/76] move status for gatekeep response to route
---
conditional/__init__.py | 4 +---
conditional/util/member.py | 2 +-
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/conditional/__init__.py b/conditional/__init__.py
index 10ee9214..d091e4b4 100644
--- a/conditional/__init__.py
+++ b/conditional/__init__.py
@@ -165,9 +165,7 @@ def gatekeep(username):
if token != app.config["VOTE_TOKEN"]:
return "Users cannot access this page", 403
- return gatekeep_status(username)
-
-
+ return gatekeep_status(username), 200
@app.errorhandler(404)
diff --git a/conditional/util/member.py b/conditional/util/member.py
index 9040c6ae..edc3e99d 100644
--- a/conditional/util/member.py
+++ b/conditional/util/member.py
@@ -238,4 +238,4 @@ def gatekeep_status(username):
"h_meetings": h_meetings,
"c_meetings": d_meetings,
"t_seminars": t_seminars,
- }, 200
+ }
From 888b082cdb61a9da0fd44519b34b1caa36117fde Mon Sep 17 00:00:00 2001
From: Noah
Date: Tue, 21 Oct 2025 12:18:55 -0400
Subject: [PATCH 75/76] fix me being dumb :)
---
conditional/util/member.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/conditional/util/member.py b/conditional/util/member.py
index edc3e99d..15bd1f61 100644
--- a/conditional/util/member.py
+++ b/conditional/util/member.py
@@ -44,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)[0]["result"])
+ voting_list = list(username for username in voting_set if gatekeep_status(username)["result"])
return voting_list
From b48db4f5eac65253cef7ae7d9193f5ef4268ed51 Mon Sep 17 00:00:00 2001
From: Noah
Date: Tue, 21 Oct 2025 13:15:31 -0400
Subject: [PATCH 76/76] fix 500 error when requesting gatekeep for a user that
doesn't exist
---
conditional/__init__.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/conditional/__init__.py b/conditional/__init__.py
index d091e4b4..e8f54a8b 100644
--- a/conditional/__init__.py
+++ b/conditional/__init__.py
@@ -164,8 +164,12 @@ def gatekeep(username):
token = request.headers.get("X-VOTE-TOKEN", "")
if token != app.config["VOTE_TOKEN"]:
return "Users cannot access this page", 403
+ try:
+ gatekeep_data = gatekeep_status(username)
+ except KeyError:
+ return "", 404
- return gatekeep_status(username), 200
+ return gatekeep_data, 200
@app.errorhandler(404)