generic update / delete
This commit is contained in:
parent
1c22fb7b34
commit
5323204789
|
|
@ -5,9 +5,9 @@ from typing import Optional
|
||||||
@dataclass
|
@dataclass
|
||||||
class Strategy():
|
class Strategy():
|
||||||
id: str
|
id: str
|
||||||
|
createdAt: str
|
||||||
enabled: bool
|
enabled: bool
|
||||||
fulfilled: bool
|
fulfilled: bool
|
||||||
createdAt: Optional[str]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_table_name(cls):
|
def get_table_name(cls):
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,7 @@ def create_routes(cls, app):
|
||||||
"order": cls.get_order()
|
"order": cls.get_order()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@app.route(cls.get_route_prefix() + "/create", methods=['GET'])
|
@app.route(cls.get_route_prefix() + "/create", methods=['GET'])
|
||||||
def get_create():
|
def get_create():
|
||||||
return render_template(cls.get_route_prefix() + "/create.html", data={
|
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
|
data[key] = key in request.form
|
||||||
|
|
||||||
r.table(table_name).insert(data).run(get_connection())
|
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/<id>", 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/<id>", 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/<id>', 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
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for field in data.fields %}
|
{% for field in data.fields %}
|
||||||
<tr onclick="onOpenDialog('{{ data.prefix }}/{{ field.id }}')">
|
<tr onclick="onOpenDialog('{{ data.prefix }}/update/{{ field.id }}')">
|
||||||
{% for key in data.order%}
|
{% for key in data.order%}
|
||||||
<td>{{ field[key] }}</td>
|
<td>{{ field[key] }}</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='css/styles.css') }}">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: white;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h2>Update {{ data.name }}</h2>
|
||||||
|
<form method="POST" action="{{ data.prefix }}/update/{{ data.field.id }}?submitted">
|
||||||
|
<fieldset>
|
||||||
|
{% for key in data.order %}
|
||||||
|
{% set value = data.field[key] %}
|
||||||
|
<label for="{{ key }}">{{ key }}</label>
|
||||||
|
{% if key is in data.computed %}
|
||||||
|
<div>{{ value }}</div>
|
||||||
|
{% else %}
|
||||||
|
{% if data.fields[key] == "str" %}
|
||||||
|
<input type="text" name="{{ key }}" value="{{ value }}">
|
||||||
|
{% elif data.fields[key] == "float" %}
|
||||||
|
<input type="number" step="any" name="{{ key }}" value="{{ value }}">
|
||||||
|
{% elif data.fields[key] == "bool" %}
|
||||||
|
<input type="checkbox" name="{{ key }}" {{ "checked" if value }}>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<button value="cancel" formmethod="dialog" onclick="window.top.postMessage('close', '*')">Cancel</button>
|
||||||
|
<button type="submit">Submit</button>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<form method="POST" action="{{ data.prefix }}/delete/{{ data.field.id }}?submitted">
|
||||||
|
<button class="danger" type="submit">Delete</button>
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue