Чтение конфигурационного файла в виде словаря в Flask - PullRequest
0 голосов
/ 18 мая 2018

в /instance/app.cfg Я настроил:

test=test

В моем файле фляги app.py:

with app.open_instance_resource('app.cfg') as f:
    config = f.read()
    print('config' , type(config))

Какие отпечатки config <class 'bytes'>

При чтении документа во флаконе не описано, как читать значения из файлов конфигурации, как это достигается?

можно ли считать конфигурацию словарем вместо байтов?

Обновление:

app.py:

# Shamelessly copied from http://flask.pocoo.org/docs/quickstart/

from flask import Flask
app = Flask(__name__)

import os

ac = app.config.from_pyfile(os.path.join('.', 'conf/api.conf'), silent=True)
logging_configuration = app.config.get('LOGGING')
if ac:
    print(logging.config.dictConfig(ac))

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

api.conf:

myvar=tester

возвращает ошибку:

/./conf/api.conf", line 1, in <module>
    myvar=tester
NameError: name 'tester' is not defined

Обновление 2:

app.py:

from flask import Flask
app = Flask(__name__)

import os
from logging.config import dictConfig

app.config.from_pyfile(os.path.join('.', 'conf/api.conf'), silent=True)

logging_configuration = app.config.get('LOGGING')
if logging_configuration:
    print(dictConfig(logging_configuration))

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

api.conf:

LOGGING="tester"

возвращает ошибку:

ValueError: dictionary update sequence element #0 has length 1; 2 is required

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

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

Вы можете прочитать об этом в документе колбы здесь (заголовок «configuring-from-files»)

open_instance_resource - это всего лишь ярлык для работы с файлами, которые находятся в «папке экземпляра» (специальное место, где вы можете хранить развернутые файлы).Это не должен быть способ получить вашу конфигурацию как dict.

Flask хранит свою конфигурационную переменную (app.config) как объект dict.Вы можете обновить его с помощью нескольких методов: from_envvar, from_pyfile, from_object и т. Д. Посмотрите на исходный код

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

app = Flask('your_app')
...
app.config.from_pyfile(os.path.join(basedir, 'conf/api.conf'), silent=True)
...

После этого вы можете использовать свой объект конфигурации, похожий на dict, как хотите:

...
logging_configuration = app.config.get('LOGGING')
if logging_configuration:
    logging.config.dictConfig(logging_configuration)
...

from flask import Flask
app = Flask(__name__)

import os

app.config.from_pyfile(os.path.join('.', 'conf/api.conf'), silent=True)

@app.route('/')
def hello_world():
    return 'Hello World! {}'.format(app.config.get('LOGGING'))

if __name__ == '__main__':
    app.run()

0 голосов
/ 18 мая 2018

Если вы сделаете app.config.from_pyfile('app.cfg'), вы можете получить свою конфигурацию в виде словаря по dict(app.config).

Однако этот словарь будет содержать всю конфигурацию для вашего app, а не только те переменные, которые были установлены в файле конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...