0

Я хотел бы определить несколько групп значений, где значения той или иной группы используются, если эта группа выбрана.Как определить и выбрать группы значений с помощью configobj?

Вот пример, чтобы сделать это более ясным:

[environment] 
type=prod 

[prod] 
folder=data/ 
debug=False 

[dev] 
folder=dev_data/ 
debug=True 

Затем, чтобы использовать его:

print config['folder'] # prints 'data/' because config['environment']=='prod' 

Есть ли естественный или идиоматических способ сделать это в configobj или иначе?


Дополнительная информация

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

ответ

0

Я знаю, что это, возможно, не совсем то, что вы ищете, но считаете ли вы, что используете json для удобного вложенного доступа?

Например, если ваш конфигурационный файл выглядит

{ 
    "environment": { 
     "type": "prod" 
    }, 
    "[dev]": { 
     "debug": "True", 
     "folder": "dev_data/" 
    }, 
    "[prod]": { 
     "debug": "False", 
     "folder": "data/" 
    } 
} 

вы можете получить доступ к нему с [dev] или [prod] ключ, чтобы получить папку:

>>> config = json.loads(config_data) 
>>> config['[dev]']['folder'] 
'dev_data/' 
>>> config['[prod]']['folder'] 
'data/' 
+0

Это, по существу, возможно в configobj. Я просто хотел избежать 'if config ['environment'] ['type'] == 'prod'' всюду в коде ... – cammil

+0

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

+0

@cammil Или глобально установить (при инициализации) переменную 'config' в список, который вы хотите, либо' [dev] ', либо' [prod] '... – adrianus