diff --git a/3rdparty/python/requirements.txt b/3rdparty/python/requirements.txt index a992e35..b6f6f7a 100644 --- a/3rdparty/python/requirements.txt +++ b/3rdparty/python/requirements.txt @@ -1,5 +1,5 @@ ## Flask -Flask==1.1.1 +Flask==3.0.2 Jinja2>=2.10.1 Werkzeug>=0.15 itsdangerous>=0.24 @@ -21,3 +21,7 @@ py>=1.5.0 packaging importlib-metadata>=0.12 more-itertools>=4.0.0 + +# Database +SQLAlchemy>=1.3.10 +Flask-SQLAlchemy>=2.4.1 diff --git a/WORKSPACE b/WORKSPACE index 91b10f7..f58a493 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -16,6 +16,14 @@ pip_repositories() load("@rules_python//python:pip.bzl", "pip_import") +http_archive( + name = "com_google_protobuf", + strip_prefix = "protobuf-{}".format(PROTOBUF_VERSION), + url = "https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.20.1.tar.gz", +) + +load("@rules_python//python:repositories.bzl", "py_repositories") + # This rule translates the specified requirements.txt into # @my_deps//:requirements.bzl, which itself exposes a pip_install method. pip_import( diff --git a/src/python/ws/__init__.py b/src/python/ws/__init__.py index d04bee5..05ab539 100644 --- a/src/python/ws/__init__.py +++ b/src/python/ws/__init__.py @@ -1,8 +1,20 @@ from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from tempfile import mktemp def create_app(config_filename="src.python.ws.conf.BaseConfig"): app = Flask(__name__) + + db = SQLAlchemy() + db_name = 'users.db' + + app.config['TEMPDIR'] = mktemp() + + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + db_name + app.config['APPLICATION_DB'] = db + db.init_app(app) + app.config.from_object(config_filename) from src.python.ws.home import home diff --git a/src/python/ws/home.py b/src/python/ws/home.py index b9a9335..cde91a5 100644 --- a/src/python/ws/home.py +++ b/src/python/ws/home.py @@ -1,5 +1,9 @@ +import models import pandas as pd from flask import Blueprint +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy.sql import text home = Blueprint("home", __name__, url_prefix="/") @@ -11,3 +15,52 @@ def hello(): 'b': [11, 33, 22]} ) return df.to_json() + +@home.route("/register_user", methods=['POST']) +def register_user(): + db = app.config["APPLICATION_DB"] + r = flask.request.get_json() + company = r.get("company") + name = r.get("name") + metadata = eval(r.get("metadata")) + user = models.User(company=company, name=name, metadata=metadata) + db.session.add(user) + db.commit() + return flask.jsonify({"status": "ok", "user_id": user.id}) + +def get_user_by_id(user_id): + db = app.config["APPLICATION_DB"] + query = "SELECT * FROM users WHERE id = '" + user_id + "'" + user_data = db.session.execute(query).first() + return user_data + +@home.route("/get_users", methods=['GET']) +def get_users(): + db = app.config["APPLICATION_DB"] + query = text("SELECT id FROM users") + user_ids = db.session.execute(query).all() + return user_ids + +@home.route("/get_user_data/", methods=['GET']) + return get_user_by_id(user_id) + +@home.route("/display_user/", methods=['GET']) +def display_user(): + user_data = get_user_by_id(user_id) + return """ + + + Users + + + Company: """ + user_data.company + """
+ Name: """ + user_data.name + """
+ Metadata: """ + user_data.metadata + """
+ + + """ + + +@app.route('/error_page') +def error_page(): + return "404" diff --git a/src/python/ws/models.py b/src/python/ws/models.py new file mode 100644 index 0000000..6c31975 --- /dev/null +++ b/src/python/ws/models.py @@ -0,0 +1,11 @@ +import sqlalchemy as sa + +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() + +class User(Base): + id = sa.Column(sa.Integer, primary_key=True) + company = sa.Column(sa.String(50)) + name = sa.Column(sa.String(50)) + metadata = sa.Column(sa.JSONB)