Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion 3rdparty/python/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
## Flask
Flask==1.1.1
Flask==3.0.2
Jinja2>=2.10.1
Werkzeug>=0.15
itsdangerous>=0.24
Expand All @@ -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
8 changes: 8 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
12 changes: 12 additions & 0 deletions src/python/ws/__init__.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down
53 changes: 53 additions & 0 deletions src/python/ws/home.py
Original file line number Diff line number Diff line change
@@ -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="/")

Expand All @@ -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/<user_id>", methods=['GET'])
return get_user_by_id(user_id)

@home.route("/display_user/<user_id>", methods=['GET'])
def display_user():
user_data = get_user_by_id(user_id)
return """
<html>
<head>
<title>Users</title>
</head>
<body>
<span>Company: """ + user_data.company + """</span><br>
<span>Name: """ + user_data.name + """</span><br>
<span>Metadata: """ + user_data.metadata + """</span><br>
</body>
</html>
"""


@app.route('/error_page')
def error_page():
return "404"
11 changes: 11 additions & 0 deletions src/python/ws/models.py
Original file line number Diff line number Diff line change
@@ -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)