Посты с тэгом yaml


[Перевод] Строгая десериализация YAML в Python c библиотекой marshmallow

Исходная задача


  • Необходимо прочитать нетривиальный конфиг из .yaml файла.
  • Структура конфига описана с помощью дата-классов.
  • Необходимо, чтобы при десериализации были выполнены проверки типов, и, если данные невалидны, было брошено исключение.

То есть, проще говоря, нужна функция вида:


def strict_load_yaml(yaml: str, loaded_type: Type[Any]):
    """
    Here is some magic
    """
    pass

И эта функция будет использоваться следующим образом:

Читать дальше →


Конфигурация проекта внутри и вне Kubernetes

Недавно я написал ответ о жизни проекта в Докерах и отладке кода вне него, где мельком упомянул о том, что можно сделать свою систему конфигурирования, чтобы сервис и в Кубере хорошо работал, подтягивал секреты, и локально удобно запускался, в том числе вообще вне Докера. Ничего сложного, но описанный "рецепт" может кому-то пригодится :) Код на Питоне, но логика к языку не привязана.


Читать дальше →


Python не запрещает вызов private/protected методов потому, что любит тебя :-)

Много копий сломано в обсуждениях того, почему питон эдакий бяка — не запрещает вызывать непубличные методы. И конечно, не раз звучали объяснения в духе «мы все тут взрослые люди», но похоже их было недостаточно, мне кажется, я наконец понял, как это объяснить более понятно, надеюсь, что это действительно так.
Напомню, что для private методов питон всего-лишь динамически изменяет имя и никак не ограничивает доступ к нему, а для protected не делает и этого, это просто соглашение об именовании методов, для тех кто не очень в курсе, есть дополнительные материалы тут и тут. Читать дальше →



Snapshot опыта


  1. использовать django fixtures в формате yaml одно удовольствие, можно вставить свой тег, который вернёт определённый результат. Например:
    ### Image

    -
    model: shop.image
    pk: 1
    fields:
    src: static/shop/test/product/borsh.jpg
    description: Наваристый супец!
    content_type: !!python/object/apply:resty.utils.content_type_pk [shop, product]
    object_id: 1

    нужно передать первичный ключ объекта ContentType для модели Product, для этого применяем свой тег (
    content_type: !!python/object/apply:resty.utils.content_type_pk [shop, product]
    ), который вызывает простую функцию:
    def content_type_pk(app_label, model):
    return ContentType.objects.get(app_label=app_label, model=model).pk
    попробуйте сделать такое в json или xml не получится =)
  2. IE7 (ужасный и бессмертный для некоторых юзеров) коверка