Skip to content
Snippets Groups Projects
Verified Commit d6b05256 authored by David Beniamine's avatar David Beniamine
Browse files

WIP ORM

parent a5456ebb
No related branches found
No related tags found
1 merge request!2Draft:Generic api v1
from flask import Flask
from flask_restful import Api
from flask_restful_swagger import swagger
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
from flask_apispec.extension import FlaskApiSpec
from Mirador_backend.routes import v1
from Mirador_backend.utils.config import getConfig
from Mirador_backend.utils.database import db_session
app = Flask(__name__)
api = Api(app)
......@@ -13,16 +13,13 @@ docs = FlaskApiSpec(app)
v1.register_routes(api, docs)
app.config.update({
'APISPEC_SPEC': APISpec(
title='Mirador Backend',
version='v1',
plugins=[MarshmallowPlugin()],
openapi_version='2.0.0'
),
'APISPEC_SWAGGER_URL': '/swagger/', # URI to access API Doc JSON
'APISPEC_SWAGGER_UI_URL': '/swagger-ui/' # URI to access UI of API Doc
})
app.config.update(getConfig())
@app.teardown_appcontext
def shutdown_session(exception=None):
db_session.remove()
if __name__ == '__main__':
app.run(debug=True)
# Todo utilities classes
from sqlalchemy import Table, Column, Integer, JSON
from sqlalchemy.orm import mapper
from Mirador_backend.utils.database import metadata, db_session
import json
class MiradorResource(object):
query = db_session.query_property()
def __init__(self, content=None):
self.content = content
def __repr__(self):
return f'<Manifest {self.id} content {json.dumps(self.content)}>'
mirador_resource = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('content', JSON),
)
mapper(MiradorResource, mirador_resource)
from os import getenv
from apispec.ext.marshmallow import MarshmallowPlugin
from apispec import APISpec
def getConfig():
if getConfig.config is None:
getConfig.config = {
'APISPEC_SPEC': APISpec(
title='Mirador Backend',
version='v1',
plugins=[MarshmallowPlugin()],
openapi_version='2.0.0'
),
'APISPEC_SWAGGER_URL': '/swagger/', # URI to access API Doc JSON
'APISPEC_SWAGGER_UI_URL': '/swagger-ui/', # URI to access UI of API Doc
'DB': {
'TYPE': getenv('DB_TYPE', 'mariadb+mariadbconnector'),
'USER': getenv('MYSQL_USER', 'user'),
'PASSWORD': getenv('MYSQL_PASSWORD', 'password'),
'HOST': getenv('MYSQL_HOST', 'db'),
'BASE': getenv('MYSQL_datanase', 'base'),
}
}
return getConfig.config
getConfig.config = None
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
from Mirador_backend.utils.config import getConfig
def getDBUri():
params = getConfig()['DB']
return f'{params["TYPE"]}://{params["USER"]}:{params["PASSWORD"]}@{params["HOST"]}/{params["BASE"]}'
engine = create_engine(getDBUri())
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
def init_db():
metadata.create_all(bind=engine)
......@@ -30,7 +30,15 @@ setup(
packages=find_packages(),
install_requires=["flask", "flask-restful", "python-dotenv", "flask-restful-swagger", "flask-apispec"],
install_requires=[
"flask",
"flask-apispec",
"flask-restful",
"flask-restful-swagger",
"flask-sqlalchemy",
"mariadb==1.0.11",
"python-dotenv",
],
setup_requires=[""],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment