который пока не понял как разрулить. А именноЖ
Читаю запись из бд, в ней некоторые поля NULL, перевожу в питоновский дикт - эти поля соответсвенно = None, делаю factory.load(.....). Понятно что она падает с VakueError на None значениях.
Не очень логично имхо. Конкретно в parse, где проверка типа идет. Разве не логичнее было бы рассматривать None как Any тип, который можно присваивать в поле любого типа?
И как обойти эту историю.
объявить поля Optional[тип] не могу, т.к. 1 - дата классы сгенерированы и будут перегенирироваться, 2 - их очень много, полей тоже много, пальцы сотрешь добавлять)
Может не увидел в доках опцию отключения проверки ? препарсинг функция тоже не прокатывает естественно
Если поле типа int или str, оно не может быть None по всем стандартам.
по каким всем стандартам? Ну вот у нас в системе так. Досталось в наследство. grpc message , MySQL допускают такие значения.
Если прям очень надо, можешь сделать схему для int/str, в которой парсер будет разрешать None.
По стандартам аннотаций типов
если это пре-парсер, то не могу. Тип приходящих данных не определить
Ну смотри. Если поле типа str, значит у него есть методы типа lower(), strip() и т.п. А теперь ты туда пихнул None. Что будет?
Не пре, просто парсер
возможно. Но в жизни реальные данные имеют такие значения)
Если у тебя аннотация не соответствует реальности, это проблема аннотации
парсер тоже можно переопределить? Пропустил что ли в доках...
find models -name *.py -exec sed -i "s/str/Optional[str]/" {} \;
Это проблема автоматического генерации датаклассов из grpc прото файлов. )
Ну вероятно там и надо чинить :)
это не мое и починить там невозможно) править все поля str , int на Optional -тоже так себе идея, среди них есть обязательные
Я бы предложил сделать кастомный парсер, который None меняет на разумный дефолт типа 0 или ""
Обязательность не имеет отношения к None.
В датаклассе в принципе все поля обязательные. Опшнал - это про допустимые значение
не придирайся к словам. Ты прекрасно понял о чем я
Обсуждают сегодня