From bdc1eb1d8bb800f7938c485e3c876fd06b535029 Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Thu, 28 Mar 2019 11:37:05 +0000 Subject: Update configuration to use env files throughout --- .gitignore | 2 ++ config.py | 46 +++++++++++++++++++++++++++++++++------------- flask.sh | 3 +-- poetry.lock | 20 ++++++++++---------- pyproject.toml | 2 +- 5 files changed, 47 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 4dfee3c..a2f87e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ app/__pycache__ migrations/__pycache__ __pycache__/ +.env.development +.env.production diff --git a/config.py b/config.py index 6addfb2..6ddf9fb 100644 --- a/config.py +++ b/config.py @@ -1,27 +1,47 @@ # -*- coding: utf-8 -*- +"""Configuration for the AnnotateChange app + +Almost all configuration options are expected to be supplied through +environment variables. +""" + import os -from dotenv import load_dotenv +BASEDIR = os.path.abspath(os.path.dirname(__file__)) -# TODO: change these things to an instance path -basedir = os.path.abspath(os.path.dirname(__file__)) -load_dotenv(os.path.join(basedir, '.env')) class Config(object): SECRET_KEY = os.environ.get("SECRET_KEY") or "you-will-never-guess" - SQLALCHEMY_DATABASE_URI = os.environ.get( - "DATABASE_URL" - ) or "sqlite:///" + os.path.join(basedir, "app.db") + DB_TYPE = os.environ.get("DB_TYPE") or "sqlite3" + if DB_TYPE == "mysql": + SQLALCHEMY_DATABASE_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{database}".format( + username=os.environ.get("MYSQL_USER"), + password=os.environ.get("MYSQL_PASSWORD"), + host=os.environ.get("MYSQL_HOST"), + port=os.environ.get("MYSQL_PORT"), + database=os.environ.get("MYSQL_DATABASE"), + ) + else: + SQLALCHEMY_DATABASE_URI = "sqlite:///{filepath}".format( + filepath=os.path.join( + BASEDIR, os.environ.get("SQL3_FILENAME") or "app.db" + ) + ) + SQLALCHEMY_TRACK_MODIFICATIONS = False - MAIL_SERVER = os.environ.get('MAIL_SERVER') - MAIL_PORT = int(os.environ.get('MAIL_PORT') or 25) - MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS') is not None - MAIL_USERNAME = os.environ.get('MAIL_USERNAME') - MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD') - ADMINS = ["annotatechange@gmail.com"] + MAIL_SERVER = os.environ.get("MAIL_SERVER") + MAIL_PORT = int(os.environ.get("MAIL_PORT") or 25) + MAIL_USE_TLS = os.environ.get("MAIL_USE_TLS") is not None + MAIL_USERNAME = os.environ.get("MAIL_USERNAME") + MAIL_PASSWORD = os.environ.get("MAIL_PASSWORD") + ADMINS = [ + x.strip() + for x in os.environ.get("ADMIN_EMAILS").split(";") + if x.strip() + ] # these should be used relative to the instance path DATASET_DIR = "datasets" diff --git a/flask.sh b/flask.sh index 1a73a88..78155a9 100755 --- a/flask.sh +++ b/flask.sh @@ -1,7 +1,6 @@ #!/bin/bash -export FLASK_APP=annotate_change.py -export FLASK_ENV=development +export $(grep -v '^#' .env.development | xargs -d '\n') echo "FLASK_APP = ${FLASK_APP}" echo "FLASK_ENV = ${FLASK_ENV}" diff --git a/poetry.lock b/poetry.lock index a76413a..3af79dc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -254,6 +254,14 @@ optional = false python-versions = "*" version = "1.7.1" +[[package]] +category = "main" +description = "Pure Python MySQL Driver" +name = "pymysql" +optional = false +python-versions = "*" +version = "0.9.3" + [[package]] category = "dev" description = "pytest: simple powerful testing with Python" @@ -283,14 +291,6 @@ version = "2.8.0" [package.dependencies] six = ">=1.5" -[[package]] -category = "main" -description = "Add .env support to your django/flask apps in development and deployments" -name = "python-dotenv" -optional = false -python-versions = "*" -version = "0.10.1" - [[package]] category = "main" description = "Programmatically open an editor, capture the result." @@ -340,7 +340,7 @@ python-versions = "*" version = "2.2.1" [metadata] -content-hash = "5486bc204e5f4c7de5b17428e1c5dd97bd576fbf0b5ccb2733756bd34debd598" +content-hash = "a9ea74089171860e4f80393ba29530ec1573224fa2ecbe951229caca3573397e" python-versions = "^3.7" [metadata.hashes] @@ -370,9 +370,9 @@ more-itertools = ["0125e8f60e9e031347105eb1682cef932f5e97d7b9a1a28d9bf00c22a5dae pluggy = ["19ecf9ce9db2fce065a7a0586e07cfb4ac8614fe96edf628a264b1c70116cf8f", "84d306a647cc805219916e62aab89caa97a33a1dd8c342e87a37f91073cd4746"] py = ["64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", "dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"] pyjwt = ["5c6eca3c2940464d106b99ba83b00c6add741c9becaec087fb7ccdefea71350e", "8d59a976fb773f3e6a39c85636357c4f0e242707394cadadd9814f5cbaa20e96"] +pymysql = ["3943fbbbc1e902f41daf7f9165519f140c4451c179380677e6a848587042561a", "d8c059dcd81dedb85a9f034d5e22dcb4442c0b201908bede99e306d65ea7c8e7"] pytest = ["3f193df1cfe1d1609d4c583838bea3d532b18d6160fd3f55c9447fdca30848ec", "e246cf173c01169b9617fc07264b7b1316e78d7a650055235d6d897bc80d9660"] python-dateutil = ["7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"] -python-dotenv = ["a84569d0e00d178bc5b957f7ff208bf49287cbf61857c31c258c4a91f571527b", "c9b1ddd3cdbe75c7d462cb84674d87130f4b948f090f02c7d7144779afb99ae0"] python-editor = ["1bf6e860a8ad52a14c3ee1252d5dc25b2030618ed80c022598f00176adc8367d", "51fda6bcc5ddbbb7063b2af7509e43bd84bfc32a4ff71349ec7847713882327b", "5f98b069316ea1c2ed3f67e7f5df6c0d8f10b689964a4a811ff64f0106819ec8", "c3da2053dbab6b29c94e43c486ff67206eafbe7eb52dbec7390b5e2fb05aac77", "ea87e17f6ec459e780e4221f295411462e0d0810858e055fc514684350a2f522"] six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] sqlalchemy = ["781fb7b9d194ed3fc596b8f0dd4623ff160e3e825dd8c15472376a438c19598b"] diff --git a/pyproject.toml b/pyproject.toml index 063d9d9..eebd710 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,9 +14,9 @@ flask-login = "^0.4.1" flask-mail = "^0.9.1" pyjwt = "^1.7" flask-bootstrap = "^3.3" -python-dotenv = "^0.10.1" email_validator = "^1.0" gunicorn = "^19.9" +pymysql = "^0.9.3" [tool.poetry.dev-dependencies] pytest = "^3.0" -- cgit v1.2.3