From f9743b834cea7320070e9885cc84c367542ca523 Mon Sep 17 00:00:00 2001 From: null Date: Thu, 7 Mar 2024 22:18:27 +0100 Subject: [PATCH] generic tables from dataclasses --- app.py | 3 ++ models/Abc.py | 18 ++++++++++ models/Strategy.py | 8 +++++ models/__init__.py | 0 routes/create.py | 25 ++++++++++++++ templates/strategies/abc/index.html | 51 +++++++++++++++++++++++++++++ 6 files changed, 105 insertions(+) create mode 100644 models/Abc.py create mode 100644 models/Strategy.py create mode 100644 models/__init__.py create mode 100644 routes/create.py create mode 100644 templates/strategies/abc/index.html diff --git a/app.py b/app.py index 7286161..539b90d 100644 --- a/app.py +++ b/app.py @@ -1,11 +1,14 @@ from flask import Flask, render_template, jsonify from routes.conditions import create_conditions_routes from db import get_connection, getRethinkDB +from routes.create import create_routes +from models.Abc import Abc app = Flask(__name__) r = getRethinkDB() create_conditions_routes(app) +create_routes(Abc, app) @app.route('/') def index(): diff --git a/models/Abc.py b/models/Abc.py new file mode 100644 index 0000000..e9cef6a --- /dev/null +++ b/models/Abc.py @@ -0,0 +1,18 @@ +from dataclasses import dataclass +from .Strategy import Strategy + +@dataclass +class Abc(Strategy): + symbol: str + entry: float + stop: float + tp: float + risk: float + + @staticmethod + def get_table_name(): + return "Abc" + + @staticmethod + def get_route_prefix(): + return "/strategies/abc" \ No newline at end of file diff --git a/models/Strategy.py b/models/Strategy.py new file mode 100644 index 0000000..b14003f --- /dev/null +++ b/models/Strategy.py @@ -0,0 +1,8 @@ +from dataclasses import dataclass + +@dataclass +class Strategy(): + id: str + enabled: bool + fulfilled: bool + created: str \ No newline at end of file diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/routes/create.py b/routes/create.py new file mode 100644 index 0000000..d9181da --- /dev/null +++ b/routes/create.py @@ -0,0 +1,25 @@ +from db import get_connection, getRethinkDB +from dataclasses import fields +from flask import jsonify, request, redirect, render_template +r = getRethinkDB() + +def create_routes(cls, app): + print("creating routes for " + cls.__name__) + + table_name = cls.get_table_name() + + if table_name not in r.table_list().run(get_connection()): + print("creating table " + table_name) + r.table_create(table_name).run(get_connection()) + + @app.route(cls.get_route_prefix() + "/", methods=['GET']) + def get(): + cursor = r.table(table_name).run(get_connection()) + items = 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() + }) \ No newline at end of file diff --git a/templates/strategies/abc/index.html b/templates/strategies/abc/index.html new file mode 100644 index 0000000..5dd7b07 --- /dev/null +++ b/templates/strategies/abc/index.html @@ -0,0 +1,51 @@ + + + + + + + + Trading Zone Website + + + + + + +
+ + + + + + {% if data.items %} + + {% for header in data.headers %} + + {% endfor %} + + {% else %} + + + + {% endif %} + + + {% for item in data["items"] %} + + + + {% endfor %} + + + + + + +

{{ data.title }}

{{ header }}
No Data
{{ item }}
+ +
+
+ + + \ No newline at end of file