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="mysql+pymysql"),
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}
})
return connection_args
if test_config is None:
test_config = {}
flask_app = Flask(__name__)
flask_app.config['SQLALCHEMY_DATABASE_URI'] = database_uri()
connection_args = database_connection_args()
flask_app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {"connect_args": connection_args}
flask_app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
flask_app.config.update(test_config)
with flask_app.app_context():
db.init_app(flask_app)