X-Git-Url: https://plomlompom.com/repos/berlin_corona.txt?a=blobdiff_plain;ds=sidebyside;f=income_progress_bars.py;h=60f710454f5435c60ca6be4af810a19de7526cb2;hb=389620d37f697f869ed051071db5dead95a152fe;hp=94a34569c70909a290c82ad21eb6bba8cf8a6196;hpb=5f3b9e7eb997cacea086decc3dcd04d6619b9121;p=misc diff --git a/income_progress_bars.py b/income_progress_bars.py index 94a3456..60f7104 100644 --- a/income_progress_bars.py +++ b/income_progress_bars.py @@ -1,13 +1,12 @@ -# from http.server import BaseHTTPRequestHandler, HTTPServer import os import json import jinja2 -from plomlib import PlomDB, PlomException, run_server, run_server, PlomServer +from plomlib import PlomDB, PlomException, run_server, PlomHandler -server_port = 8081 +server_port = 8083 +db_path = '/home/plom/org/income.json' -tmpl = jinja2.Template(""" - +tmpl = """ - -{% for p in progress_bars %} - + +{% for p in progress_bars %} - - -{% endfor %} -
earnedprogresssurplus
{{p.title}}
earnedprogresssurplus
{{p.title}} {{p.earned|round(2)}}{% if p.time_progress >= 0 %}
{% endif %}
{{p.diff_goal}}
-
+{% if p.time_progress >= 0 %}
{% endif %}
+
{{p.diff_goal}}
+{% endfor %} + + +
hourly rateworked today
€ minutes
€ minutes
€ minutes
@@ -103,8 +102,8 @@ table { -""") +""" + class IncomeDB(PlomDB): @@ -124,7 +123,7 @@ class IncomeDB(PlomDB): self.workday_minutes_worked_3 = 0, self.year_goal = 20000, self.workdays_per_month = 16 - super().__init__('_income') + super().__init__(db_path) def read_db_file(self, f): d = json.load(f) @@ -143,6 +142,7 @@ class IncomeDB(PlomDB): def write_db(self): self.write_text_to_db(json.dumps(self.to_dict())) + class ProgressBar: def __init__(self, title, earned, goal, time_progress=-1): self.title = title @@ -160,10 +160,19 @@ class ProgressBar: if time_progress > 0: self.success = success_income / time_progress -# class MyServer(BaseHTTPRequestHandler): -class IncomeServer(PlomServer): + +class IncomeProgressHandler(PlomHandler): + + def app_init(self, handler): + default_path = '/income_progress' + handler.add_route('GET', default_path, self.display_income_progress) + handler.add_route('POST', default_path, self.post_income_update) + return 'income_progress', default_path def do_POST(self): + self.post_income_update() + + def post_income_update(self): from urllib.parse import parse_qs try: length = int(self.headers['content-length']) @@ -188,13 +197,15 @@ class IncomeServer(PlomServer): db.workday_minutes_worked_2 = 0 db.workday_minutes_worked_3 = 0 db.write_db() - self.send_response(302) - self.send_header('Location', '/') - self.end_headers() + homepage = self.apps['income_progress'] if hasattr(self, 'apps') else self.homepage + self.redirect(homepage) except PlomException as e: self.fail_400(e) def do_GET(self): + self.display_income_progress() + + def display_income_progress(self): import datetime import calendar try: @@ -237,7 +248,9 @@ class IncomeServer(PlomServer): ProgressBar("month", month_plus, month_goal, progress_time_month), ProgressBar("week", week_plus, week_goal, progress_time_week), ProgressBar("workday", day_income, workday_goal)] - page = tmpl.render( + homepage = self.apps['income_progress'] if hasattr(self, 'apps') else self.homepage + page = jinja2.Template(tmpl).render( + homepage = homepage, progress_bars = progress_bars, workday_hourly_rate_1 = db.workday_hourly_rate_1, workday_minutes_worked_1 = db.workday_minutes_worked_1, @@ -256,5 +269,6 @@ class IncomeServer(PlomServer): except PlomException as e: self.fail_400(e) + if __name__ == "__main__": - run_server(server_port, IncomeServer) + run_server(server_port, IncomeProgressHandler)
yearly income goal€
monthly income goal{{month_goal|round(2)}}€