From 5323204789fb33cd62effb99200c971543331ec9 Mon Sep 17 00:00:00 2001 From: null Date: Fri, 8 Mar 2024 11:33:21 +0100 Subject: [PATCH] generic update / delete --- models/Strategy.py | 2 +- routes/create.py | 38 +++++++++++++++++++++-- templates/strategies/abc/index.html | 2 +- templates/strategies/abc/update.html | 46 ++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 templates/strategies/abc/update.html diff --git a/models/Strategy.py b/models/Strategy.py index 33f77f8..1be44be 100644 --- a/models/Strategy.py +++ b/models/Strategy.py @@ -5,9 +5,9 @@ from typing import Optional @dataclass class Strategy(): id: str + createdAt: str enabled: bool fulfilled: bool - createdAt: Optional[str] @classmethod def get_table_name(cls): diff --git a/routes/create.py b/routes/create.py index b711f62..1bf4f96 100644 --- a/routes/create.py +++ b/routes/create.py @@ -28,6 +28,7 @@ def create_routes(cls, app): "order": cls.get_order() }) + @app.route(cls.get_route_prefix() + "/create", methods=['GET']) def get_create(): return render_template(cls.get_route_prefix() + "/create.html", data={ @@ -47,6 +48,39 @@ def create_routes(cls, app): data[key] = key in request.form r.table(table_name).insert(data).run(get_connection()) - return 201 + return "Resource created", 201 + return "Unsupported Content-Type", 415 - + @app.route(cls.get_route_prefix() + "/update/", methods=['GET']) + def get_update(id): + cursor = r.table(table_name).get(id).run(get_connection()) + + return render_template(cls.get_route_prefix() + "/update.html", data={ + "name": cls.__name__, + "field": cursor, + "fields": {field.name: field.type.__name__ for field in fields(cls)}, + "prefix": cls.get_route_prefix(), + "order": cls.get_order(), + "computed": cls.get_computed_properties() + }) + + + @app.route(cls.get_route_prefix() + "/update/", methods=['POST']) + def post_update(id): + if request.headers['Content-Type'] == 'application/x-www-form-urlencoded': + data = request.form.to_dict() + + for key in get_bool_attribute_names(cls): + data[key] = key in request.form + + r.table(table_name).get(id).update(data).run(get_connection()) + return "Resource " + id + " updated", 204 + return "Unsupported Content-Type", 415 + + + @app.route(cls.get_route_prefix() + '/delete/', methods=['POST']) + def post_delete(id): + if request.headers['Content-Type'] == 'application/x-www-form-urlencoded': + r.table(table_name).get(id).delete().run(get_connection()) + return "Resource " + id + " deleted", 204 + return "Unsupported Content-Type", 415 diff --git a/templates/strategies/abc/index.html b/templates/strategies/abc/index.html index e430da4..29f7bdf 100644 --- a/templates/strategies/abc/index.html +++ b/templates/strategies/abc/index.html @@ -36,7 +36,7 @@ {% for field in data.fields %} - + {% for key in data.order%} {{ field[key] }} {% endfor %} diff --git a/templates/strategies/abc/update.html b/templates/strategies/abc/update.html new file mode 100644 index 0000000..2969e98 --- /dev/null +++ b/templates/strategies/abc/update.html @@ -0,0 +1,46 @@ + + + + + + + + + + +

Update {{ data.name }}

+
+
+ {% for key in data.order %} + {% set value = data.field[key] %} + + {% if key is in data.computed %} +
{{ value }}
+ {% else %} + {% if data.fields[key] == "str" %} + + {% elif data.fields[key] == "float" %} + + {% elif data.fields[key] == "bool" %} + + {% endif %} + {% endif %} + {% endfor %} +
+ +
+ + +
+
+
+ +
+ + + \ No newline at end of file