Newer
Older
import os
import sqlalchemy
from flask import Flask
from models import db
def database_uri() -> sqlalchemy.engine.url.URL:
"""
A function to build the database connection string, using environment
variable settings.
"""
# If the connection string has been given, use it.
url = os.environ.get("DB_CONNECTION_STRING", default="")
if len(url) != 0:
return url
# Create a new DB connection string from components.
drivername = os.environ.get("DB_DRIVER", default="mariadb+mariadbconnector"),
username = os.environ.get("DB_USER", default="none"),
password = os.environ.get("DB_PASSWORD", default="none"),
host = os.environ.get("DB_SERVER", default="127.0.0.1"),
port = os.environ.get("DB_PORT", default="3306"),
database = os.environ.get("DB_NAME", default="mydb"))
return url
def database_connection_args() -> dict:
"""
A function to build the connection arguments, which are associated
with an SSL connection.
"""
connection_args = {}
# Check for a SSL certificate.
ssl_cert_file = os.environ.get("DB_SSL_CERT", default=None)
if ssl_cert_file is not None:
connection_args.update({
"ssl_ca": ssl_cert_file
})
# Check if SSL should be enabled.
ssl_str = os.environ.get("DB_SSL", default=None)
if ssl_str is not None:
if ssl_str.strip().lower() == "true":
connection_args.update({
"ssl": "1"
})
return connection_args
"""
A factory function to create a Flask app.
"""
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = database_uri()
connection_args = database_connection_args()
if len(connection_args) > 0:
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {"connect_args": connection_args}
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
if len(test_config) > 0:
app.config.update(test_config)
with app.app_context():
db.init_app(app)
db.create_all()
from routes import books_bp
app.register_blueprint(books_bp)
return app
if __name__ == '__main__':
"""
A test program to create one running Flask app.
"""
app = create_app()
svc_host = os.environ.get("SVC_HOST", default=None)
app.run(debug=True, host=svc_host)