Я не уверен, почему вы ожидаете, что библиотека синтаксического анализа 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
PyYAML является разбором библиотеки YAML; почему вы ожидаете, что это будет эквивалентно многоуровневой библиотеке настроек Ruby? – abarnert