Add support for parsing YAML override config, in addition to Python config
This commit is contained in:
parent
d2880807b2
commit
b51022c739
1 changed files with 37 additions and 5 deletions
42
app.py
42
app.py
|
@ -1,8 +1,9 @@
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import json
|
import json
|
||||||
|
import yaml
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask as BaseFlask, Config as BaseConfig
|
||||||
from flask.ext.principal import Principal
|
from flask.ext.principal import Principal
|
||||||
from flask.ext.login import LoginManager
|
from flask.ext.login import LoginManager
|
||||||
from flask.ext.mail import Mail
|
from flask.ext.mail import Mail
|
||||||
|
@ -24,7 +25,34 @@ from data.userevent import UserEventsBuilderModule
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
OVERRIDE_CONFIG_FILENAME = 'conf/stack/config.py'
|
class Config(BaseConfig):
|
||||||
|
""" Flask config enhanced with a `from_yamlfile` method """
|
||||||
|
|
||||||
|
def from_yamlfile(self, config_file):
|
||||||
|
with open(config_file) as f:
|
||||||
|
c = yaml.load(f)
|
||||||
|
if not c:
|
||||||
|
logger.debug('Empty YAML config file')
|
||||||
|
return
|
||||||
|
|
||||||
|
if isinstance(c, str):
|
||||||
|
raise Exception('Invalid YAML config file: ' + str(c))
|
||||||
|
|
||||||
|
for key in c.iterkeys():
|
||||||
|
if key.isupper():
|
||||||
|
self[key] = c[key]
|
||||||
|
|
||||||
|
class Flask(BaseFlask):
|
||||||
|
""" Extends the Flask class to implement our custom Config class. """
|
||||||
|
|
||||||
|
def make_config(self, instance_relative=False):
|
||||||
|
root_path = self.instance_path if instance_relative else self.root_path
|
||||||
|
return Config(root_path, self.default_config)
|
||||||
|
|
||||||
|
|
||||||
|
OVERRIDE_CONFIG_YAML_FILENAME = 'conf/stack/config.yaml'
|
||||||
|
OVERRIDE_CONFIG_PY_FILENAME = 'conf/stack/config.py'
|
||||||
|
|
||||||
OVERRIDE_CONFIG_KEY = 'QUAY_OVERRIDE_CONFIG'
|
OVERRIDE_CONFIG_KEY = 'QUAY_OVERRIDE_CONFIG'
|
||||||
LICENSE_FILENAME = 'conf/stack/license.enc'
|
LICENSE_FILENAME = 'conf/stack/license.enc'
|
||||||
|
|
||||||
|
@ -42,9 +70,13 @@ else:
|
||||||
logger.debug('Loading default config.')
|
logger.debug('Loading default config.')
|
||||||
app.config.from_object(DefaultConfig())
|
app.config.from_object(DefaultConfig())
|
||||||
|
|
||||||
if os.path.exists(OVERRIDE_CONFIG_FILENAME):
|
if os.path.exists(OVERRIDE_CONFIG_PY_FILENAME):
|
||||||
logger.debug('Applying config file: %s', OVERRIDE_CONFIG_FILENAME)
|
logger.debug('Applying config file: %s', OVERRIDE_CONFIG_PY_FILENAME)
|
||||||
app.config.from_pyfile(OVERRIDE_CONFIG_FILENAME)
|
app.config.from_pyfile(OVERRIDE_CONFIG_PY_FILENAME)
|
||||||
|
|
||||||
|
if os.path.exists(OVERRIDE_CONFIG_YAML_FILENAME):
|
||||||
|
logger.debug('Applying config file: %s', OVERRIDE_CONFIG_YAML_FILENAME)
|
||||||
|
app.config.from_yamlfile(OVERRIDE_CONFIG_YAML_FILENAME)
|
||||||
|
|
||||||
environ_config = json.loads(os.environ.get(OVERRIDE_CONFIG_KEY, '{}'))
|
environ_config = json.loads(os.environ.get(OVERRIDE_CONFIG_KEY, '{}'))
|
||||||
app.config.update(environ_config)
|
app.config.update(environ_config)
|
||||||
|
|
Reference in a new issue