2012-11-19 9 views
12

Sto usando Flask con Blueprints per ottenere uno scheletro per il mio sito Web e sto riscontrando un problema nell'utilizzo delle classi di configurazione nella mia applicazione.È possibile importare i valori di configurazione del pallone nei moduli senza importazione circolare?

Ecco alcuni codice fittizio che spiega come ho impostato tutto in su:

websiteconfig.py

class Config(object): 
    pass 

class ProductionConfig(Config): 
    DEBUG = False 

class DevelopmentConfig(Config): 
    DEBUG = True 

sito/__ init __.py:

# Some app code and config loading 
app = Flask('website') 
app.config.from_object('websiteconfig.DevelopmentConfig') 

# Import some random blueprint 
from website import users 
app.register_blueprint(users.api) 

# This works: 
# print app.config['DEBUG'] 

sito web/utenti/__ init __.py:

from flask import Blueprint 
from website.users.models import test 
api = Blueprint('users', __name__, url_prefix='/users') 

# This works: 
# print api.config['DEBUG'] 

# From models 
print test() 

sito/utenti/models.py:

# How can I reach the config variables here? 
def test(): 
    # I want config['DEBUG'] here 

Come posso raggiungere le variabili di configurazione memorizzate nella classe I di carico in app.py profondo all'interno della confezione users?

È un'importazione circolare come from website import app (all'interno di models.py) una soluzione accettata?

In caso contrario, c'è una soluzione semplice che ho perso?

risposta

17

Credo che si possa usare l'idiota current_app di Flask per quello.

http://flask.pocoo.org/docs/api/#flask.current_app

from flask import current_app 

def test(): 
    return current_app.config.get('some_config_value') 
+0

ho intenzione di accettare questa risposta. Non è esattamente quello che volevo, ma con alcuni refactoring fa davvero il lavoro. Dovrò lavorare con app.test_request_context() al di fuori dell'applicazione, ma sì, dovrò farlo. Molte grazie! =) – moodh

+0

@moodh con quale soluzione sei arrivato? Anche questo è qualcosa con cui sto lottando. – Patrick

+1

@ceolwulf: ho reso il modulo di configurazione utilizzabile anche senza pallone, quindi uso semplicemente da config import get_config e richiamo config = get_config() ogni volta che ne ho bisogno :) – moodh

Problemi correlati