new data endpoints and support for non-binary genders in admin stats (way overdue)
This commit is contained in:
parent
10e623f899
commit
198f56f2c4
2 changed files with 18 additions and 5 deletions
14
flask_app.py
14
flask_app.py
|
@ -18,6 +18,7 @@ from werkzeug.utils import secure_filename
|
||||||
from config_hackWPI import (api_keys, SERVER_LISTEN_ADDR, SERVER_PORT, WAITLIST_LIMIT, HACKATHON_TIME,
|
from config_hackWPI import (api_keys, SERVER_LISTEN_ADDR, SERVER_PORT, WAITLIST_LIMIT, HACKATHON_TIME,
|
||||||
ALLOWED_EXTENSIONS, REGISTRATION_OPEN, MCE_API_KEY)
|
ALLOWED_EXTENSIONS, REGISTRATION_OPEN, MCE_API_KEY)
|
||||||
from mail import send_message
|
from mail import send_message
|
||||||
|
from admin import json_to_csv
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_pyfile('config.py')
|
app.config.from_pyfile('config.py')
|
||||||
|
@ -274,6 +275,12 @@ def send():
|
||||||
send_message(to, subject, html, text)
|
send_message(to, subject, html, text)
|
||||||
return "Message sent successfully to {0} recipients".format(len(to))
|
return "Message sent successfully to {0} recipients".format(len(to))
|
||||||
|
|
||||||
|
@app.route('/hackers.csv', methods=['GET'])
|
||||||
|
def hackers_csv():
|
||||||
|
if not is_admin():
|
||||||
|
return redirect(url_for('register'))
|
||||||
|
return json_to_csv(admin(True))
|
||||||
|
|
||||||
@app.route('/hackers', methods=['GET'])
|
@app.route('/hackers', methods=['GET'])
|
||||||
def hackers():
|
def hackers():
|
||||||
if not is_admin():
|
if not is_admin():
|
||||||
|
@ -294,6 +301,7 @@ def admin(return_hackers=False):
|
||||||
shirt_count = {'xxs': 0, 'xs': 0, 's': 0, 'm': 0, 'l': 0, 'xl': 0, 'xxl': 0}
|
shirt_count = {'xxs': 0, 'xs': 0, 's': 0, 'm': 0, 'l': 0, 'xl': 0, 'xxl': 0}
|
||||||
male_count = 0
|
male_count = 0
|
||||||
female_count = 0
|
female_count = 0
|
||||||
|
nb_count = 0
|
||||||
schools = {}
|
schools = {}
|
||||||
majors = {}
|
majors = {}
|
||||||
|
|
||||||
|
@ -317,8 +325,10 @@ def admin(return_hackers=False):
|
||||||
|
|
||||||
if hacker['gender'] == 'Male':
|
if hacker['gender'] == 'Male':
|
||||||
male_count += 1
|
male_count += 1
|
||||||
else:
|
elif hacker['gender'] == 'Female':
|
||||||
female_count += 1
|
female_count += 1
|
||||||
|
else:
|
||||||
|
nb_count += 1
|
||||||
|
|
||||||
total_count += 1
|
total_count += 1
|
||||||
if not 'school' in hacker:
|
if not 'school' in hacker:
|
||||||
|
@ -356,7 +366,7 @@ def admin(return_hackers=False):
|
||||||
return hackers
|
return hackers
|
||||||
|
|
||||||
return render_template('admin.html', hackers=hackers, total_count=total_count, waitlist_count=waitlist_count,
|
return render_template('admin.html', hackers=hackers, total_count=total_count, waitlist_count=waitlist_count,
|
||||||
check_in_count=check_in_count, shirt_count=shirt_count, female_count=female_count,
|
check_in_count=check_in_count, shirt_count=shirt_count, female_count=female_count, nb_count=nb_count,
|
||||||
male_count=male_count, schools=schools, majors=majors,
|
male_count=male_count, schools=schools, majors=majors,
|
||||||
mlh_url='https://my.mlh.io/api/v3/users.json?client_id=' + api_keys['mlh'][
|
mlh_url='https://my.mlh.io/api/v3/users.json?client_id=' + api_keys['mlh'][
|
||||||
'client_id'] + '&secret=' + api_keys['mlh'][
|
'client_id'] + '&secret=' + api_keys['mlh'][
|
||||||
|
|
|
@ -40,7 +40,10 @@
|
||||||
<div class="contact-section" style="height: auto; background-repeat: repeat; background-size: contain;">
|
<div class="contact-section" style="height: auto; background-repeat: repeat; background-size: contain;">
|
||||||
<div class="container-fluid" style="margin-left: 3%; margin-right: 3%;">
|
<div class="container-fluid" style="margin-left: 3%; margin-right: 3%;">
|
||||||
<div class="row" style="margin-top: 10%;">
|
<div class="row" style="margin-top: 10%;">
|
||||||
<h2><a href="{{ mlh_url }}">Get JSON object of users from MLH. <b>Do NOT share this URL.</b></a></h2>
|
<h5>JSON object of users from MLH (Including dropped applications):</h5>
|
||||||
|
<p><a href="{{ mlh_url }}"><b>Do NOT share this URL.</b></a></p>
|
||||||
|
<h5>Get registered hackers only:</h5>
|
||||||
|
<p><a href="/hackers">JSON</a> <a href="/hackers.csv">CSV</a></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
|
@ -51,10 +54,10 @@
|
||||||
let genderChart = new Chart(genderCtx, {
|
let genderChart = new Chart(genderCtx, {
|
||||||
type: 'doughnut',
|
type: 'doughnut',
|
||||||
data: {
|
data: {
|
||||||
labels: ['Female', 'Male'],
|
labels: ['Female', 'Male', 'Non-Binary/Other'],
|
||||||
datasets: [
|
datasets: [
|
||||||
{
|
{
|
||||||
data: [{{ female_count }}, {{ male_count }}]
|
data: [{{ female_count }}, {{ male_count }}, {{ nb_count }}]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Reference in a new issue