2013-08-19 3 views
0

Я знаю settingslogic - gem от рубина. Это позволяет очень изящно определить параметры по умолчанию или резервные настройки для вашего приложения, как описано в settingslogic example.Установки по умолчанию

Я читаю через PyYaml, но не нашел еще такого приятного способа сделать это.

Как бы вы решили такую ​​проблему элегантным и путинским способом?

+0

PyYAML является разбором библиотеки YAML; почему вы ожидаете, что это будет эквивалентно многоуровневой библиотеке настроек Ruby? – abarnert

ответ

1

Я не уверен, почему вы ожидаете, что библиотека синтаксического анализа YAML предоставит многоуровневые параметры резервного копирования. Библиотека Ruby YAML-parsing, конечно же, не делает, поэтому есть отдельные оберточные камни, подобные тем, на которые вы ссылались в первую очередь.

Но если вы посмотрите на то, с чем вы связались, в библиотеке вообще нет никакой логики; код логики приложения должен использовать ||=, чтобы установить значение, если оно отсутствует. Вы можете сделать то же самое в Python; это просто написано по-разному.

В Ruby используется точка доступа, если вы хотите исключение на отсутствие ключа, скобки, если вы хотите nil, скобки плюс || если вы хотите другое значение по умолчанию, и немного Hacky, но идиоматические скобки плюс ||=, если вы хотите для установки и возврата другого значения по умолчанию.

В Python, можно использовать скобки, если вы хотите исключение на отсутствующий ключ, get если вы хотите None, get с аргументом, что вы хотите другое значение по умолчанию, и setdefault, если вы хотите установить и возвратить другой по умолчанию. Таким образом, этот рубин код:

>> settings.messaging['queue_name'] ||= 'user_mail' 
=> "user_mail" 

... выглядит в Python:

>>> settings['messaging'].setdefault('queue_name', 'user_mail') 
user_mail 
Смежные вопросы