Frasco no carga la configuración

Estoy enfrentando problemas con la configuración de carga en Flask.

from config import config, DevelopmentConfig, TestingConfig, ProductionConfig def create_app(config_name): app = Flask(__name__) app.config.from_object(config[config_name]) # Doesnot load configuration app.config.from_object(DevelopmentConfig) # Loads configuration succesfully. 

He comprobado el tipo de configuración [config_name], etc. Están bien.

El archivo de configuración se da como sigue. No hay problemas con la importación, tipos de objetos. Si se pasa estáticamente todo funciona bien. ‘host’ = ‘serverip’ es intencional.

Además, este problema no surge cuando trato de conectarme a db utilizando SQLAlchemy pero en el caso de MongoDB, no actualiza MONGODB_SETTINGS en la configuración de la aplicación.

 import os basedir = os.path.abspath(os.path.dirname(__file__)) from helper.helper_functions import generate_secret_key class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or generate_secret_key() SSL_DISABLE = False @staticmethod def init_app(app): pass class DevelopmentConfig(Config): DEBUG = True MONGODB_SETTINGS = { 'DB': 'development_db', 'host': 'localhost', 'port': 27017 } class TestingConfig(Config): TESTING = True WTF_CSRF_ENABLED = False MONGODB_SETTINGS = { 'DB': 'testing_db', 'HOST': 'localhost', 'PORT': 27017 } class ProductionConfig(Config): MONGODB_SETTINGS = { 'DB': 'production_db', 'host': 'server_ip', 'port': 27017, # default =27017 # other settings... } @classmethod def init_app(app): Config.init_app(app) config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': TestingConfig, } 

Curiosamente

 app.config.update(MONGODB_SETTINGS={'DB':'testing_db'}) # works settings = dict([('db', 'testing_db')]) app.config.update(MONGODB_SETTINGS=settings) # Does not work 

Además, cuando bash cargar la configuración desde el archivo de configuración utilizando el otro método ofrecido por Flask-Config.

 conf_name = 'test-config.py' app.config.pyfile(conf_name) # Doesnot load the configuration from the file. app.config.pyfile(''+conf_name) # Doesnot load the configuration from the file. app.config.pyfile('test-config.py') #successfully loads the configuration from file. 

Creo que el problema puede estar en el hecho de que le está dando un objeto de Python a app.config.from_object cuando espera una cadena. De los documentos:

 app = Flask(__name__) app.config.from_object('yourapplication.default_settings') app.config.from_envvar('YOURAPPLICATION_SETTINGS') 

http://flask.pocoo.org/docs/0.10/config/#configuring-from-files

Así que en tu caso puedes querer hacer algo como:

 app.config.from_object('your_app.config.{}'.format(config_name)) 

donde config_name coincide con el objeto en su config.py.