Где я могу хранить данные, которые загружаются при каждом запросе, в приложении с питанием от бутылок? - PullRequest
0 голосов
/ 06 июля 2011

У меня есть простое приложение Bottle, которое сохраняет свою конфигурацию в текстовом файле. Естественно, мне нужно, чтобы конфигурация была доступна почти во всех обработчиках приложения, и я хочу, чтобы она перезагружалась при каждом запросе.

В Flask я мог загрузить файл конфигурации в экземпляр ConfigParser в before_request и поместить ссылку на него в атрибут объекта g, как описано в документации Flask как способ подключение SQLite . Объект g будет доступен в каждом обработчике:

@app.before_request
def before_request():
    g.config = load_config()

@app.route('/')
def index():
    param = g.config.get(...)
    ...

В Bottle, с другой стороны, локальные потоки считаются плохой вещью, и предлагаемый способ хранения соединения с БД - это для написания плагина , который анализирует обработчики на наличие сигнатур, используя хитрые приемы. И хотя проблема для SQLite уже решена, это не относится к некоторым другим произвольным данным для каждого запроса.

Если честно, я не могу поверить, что должен написать 60 строк кода, чтобы выполнить такую ​​простую задачу, поэтому, наверное, я что-то упустил.

Есть идеи?

1 Ответ

1 голос
/ 06 июля 2011

Поскольку вы хотите, чтобы он перезагружался при каждом запросе, почему бы просто не использовать функцию?

def get_config():
    with open('config.json') as f:
        return json.load(f)

@route('/')
def index():
    config = get_config()
    return 'Welcome to %s' % config['site_name']

Если вы хотите обернуть это в плагин, это довольно просто:

def config_plugin(callback):
    def wrapper(*args, **kwargs):
        kwargs['config'] = get_config()
        return callback(*args, **kwargs)
    return wrapper

install(config_plugin)

@route('/')
def index(config):
    return 'Welcome to %s' % config['site_name']
...