aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.py
diff options
context:
space:
mode:
authorjwansek <eddie.atten.ea29@gmail.com>2023-05-17 21:50:20 +0100
committerjwansek <eddie.atten.ea29@gmail.com>2023-05-17 21:50:20 +0100
commit03635203ea55bbb101089ff9197ea2c6cde9c74a (patch)
tree874c788669602c0dfac4ee6410ed31a8698952d4 /src/app.py
parentb8832094f9f9c21e13e18d679b46005716e7fb9a (diff)
downloadUKGenderPayGap-03635203ea55bbb101089ff9197ea2c6cde9c74a.tar.gz
UKGenderPayGap-03635203ea55bbb101089ff9197ea2c6cde9c74a.zip
Added index page for a specific employer, added large plots for those specific employers
Diffstat (limited to 'src/app.py')
-rw-r--r--src/app.py71
1 files changed, 68 insertions, 3 deletions
diff --git a/src/app.py b/src/app.py
index 3ca8a66..bd58cfc 100644
--- a/src/app.py
+++ b/src/app.py
@@ -107,7 +107,7 @@ def api_get_heatmap_data():
def api_get_size_data():
pay_type = flask.request.args.get("Pay Type")
year = flask.request.args.get("year")
- print("year: '%s'" % year)
+ # print("year: '%s'" % year)
if pay_type is None or pay_type.lower() not in {'hourly', 'bonuses'}:
return flask.abort(400, "The key `pay type` must be equal to 'hourly' or 'bonuses'")
with database.PayGapDatabase(host = host) as db:
@@ -117,6 +117,20 @@ def api_get_size_data():
return flask.jsonify(db.get_pay_by_employer_size(pay_type, year))
+@app.route("/api/type")
+def api_get_type_data():
+ pay_type = flask.request.args.get("Pay Type")
+ year = flask.request.args.get("year")
+ # print("year: '%s'" % year)
+ if pay_type is None or pay_type.lower() not in {'hourly', 'bonuses'}:
+ return flask.abort(400, "The key `pay type` must be equal to 'hourly' or 'bonuses'")
+ with database.PayGapDatabase(host = host) as db:
+ if year is not None:
+ if year not in db.get_years():
+ return flask.abort(400, "Unrecognised year '%s'. The year option must be in %s" % (year, ", ".join(db.get_years())))
+
+ return flask.jsonify(db.get_pay_by_employer_type(pay_type, year))
+
@app.route("/api/getyears")
def api_get_year_options():
with database.PayGapDatabase(host = host) as db:
@@ -144,12 +158,45 @@ def get_chart_elem(url):
if url.startswith(i["url"]):
return i
+def get_employer_chart_elem(url, employer):
+ for i in get_charts()["employer"]:
+ if url.startswith(i["url"].replace("<employer>", employer)):
+ return i
+
def get_chart_elem_strict(url):
for i in get_charts()["index"]:
print(urllib.parse.urlsplit(i["url"]).path, urllib.parse.urlsplit(url).path)
if urllib.parse.urlsplit(i["url"]).path == urllib.parse.urlsplit(url).path:
return i
+@app.route("/api/company/<employer>/years")
+def api_search_years_for_employer(employer):
+ pay_type = flask.request.args.get("Pay Type")
+ if pay_type is None or pay_type.lower() not in {'hourly', 'bonuses'}:
+ return flask.abort(400, "The key `pay type` must be equal to 'hourly' or 'bonuses'")
+ with database.PayGapDatabase(host = host) as db:
+ return flask.jsonify(db.get_pay_for_employer(pay_type, employer))
+
+def process_employer_charts(employercharts, employername):
+ o = employercharts
+ for chart in o:
+ chart["url"] = chart["url"].replace("<employer>", employername)
+ return o
+
+@app.route("/company/<employer>")
+def serve_employer_index(employer):
+ with database.PayGapDatabase(host = host) as db:
+ return flask.render_template(
+ "index.html.j2",
+ title = db.get_employer_details(employer)["Employer Name"],
+ charts = process_employer_charts(get_charts()["employer"], employer)
+ )
+
+@app.route("/api/<employer>/details")
+def api_employer_details(employer):
+ with database.PayGapDatabase(host = host) as db:
+ return flask.jsonify(db.get_employer_details(employer))
+
@app.route("/plot/<name>")
def serve_large_plot(name):
with database.PayGapDatabase(host = host) as db:
@@ -171,8 +218,8 @@ def serve_large_plot(name):
elem["url"] = flask.request.full_path
# print("elem", elem)
current_filters = dict(flask.request.args)
- print("filters", filters)
- print("current_filters", current_filters)
+ # print("filters", filters)
+ # print("current_filters", current_filters)
return flask.render_template(
"plot.html.j2",
title = elem["title"],
@@ -183,6 +230,24 @@ def serve_large_plot(name):
len = len
)
+@app.route("/plot/company/<employer>/<name>")
+def serve_employer_large_plot(employer, name):
+ elem = get_employer_chart_elem(flask.request.full_path, employer)
+ elem["url"] = flask.request.full_path
+ filters = elem["filters"]
+ current_filters = dict(flask.request.args)
+ # print(filters, current_filters)
+ with database.PayGapDatabase(host = host) as db:
+ return flask.render_template(
+ "plot.html.j2",
+ title = db.get_employer_details(employer)["Employer Name"] + " " + elem["title"],
+ elem = elem,
+ alt = elem["description"],
+ # filters = filters,
+ # current_filters = current_filters,
+ len = len
+ )
+
if __name__ == "__main__":
try:
if sys.argv[1] == "--production":