read and create generic strategy
This commit is contained in:
+32
-5
@@ -1,8 +1,12 @@
|
||||
from db import get_connection, getRethinkDB
|
||||
from dataclasses import fields
|
||||
from typing import List, Type
|
||||
from flask import jsonify, request, redirect, render_template
|
||||
r = getRethinkDB()
|
||||
|
||||
def get_bool_attribute_names(cls: Type) -> List[str]:
|
||||
return [field.name for field in fields(cls) if field.type == bool]
|
||||
|
||||
def create_routes(cls, app):
|
||||
print("creating routes for " + cls.__name__)
|
||||
|
||||
@@ -15,11 +19,34 @@ def create_routes(cls, app):
|
||||
@app.route(cls.get_route_prefix() + "/", methods=['GET'])
|
||||
def get():
|
||||
cursor = r.table(table_name).run(get_connection())
|
||||
items = list(cursor)
|
||||
fields = list(cursor)
|
||||
|
||||
return render_template(cls.get_route_prefix() + "/index.html", data={
|
||||
"title": cls.__name__,
|
||||
"headers": [field.name for field in fields(cls)],
|
||||
"items": items,
|
||||
"prefix": cls.get_route_prefix()
|
||||
})
|
||||
"fields": [cls.format(field) for field in fields],
|
||||
"prefix": cls.get_route_prefix(),
|
||||
"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={
|
||||
"name": cls.__name__,
|
||||
"prefix": cls.get_route_prefix(),
|
||||
"computed": cls.get_computed_properties(),
|
||||
"fields": {field.name: field.type.__name__ for field in fields(cls)}
|
||||
})
|
||||
|
||||
@app.route(cls.get_route_prefix() + "/create", methods=['POST'])
|
||||
def post_create():
|
||||
if request.headers['Content-Type'] == 'application/x-www-form-urlencoded':
|
||||
data = request.form.to_dict()
|
||||
data.update(cls.compute_properties())
|
||||
|
||||
for key in get_bool_attribute_names(cls):
|
||||
data[key] = key in request.form
|
||||
|
||||
r.table(table_name).insert(data).run(get_connection())
|
||||
return 201
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user