Поле BLOB/байтов зефира Python

Я некоторое время искал, как проверить, имеет ли ключ словаря значение (обязательное) и тип этого значения — bytes, используя Marshmallow, но я не нашел ничего подходящего.

В справочной документации Marshmallow нет «базового» типа поля, который соответствует типу данных bytes. Поэтому я предполагаю, что это должно быть настраиваемое поле.

Кто-нибудь уже сталкивался с этой проблемой? Любая подсказка, чтобы решить это?

Спасибо


person wrrzag    schedule 10.04.2018    source источник
comment
Если что-то решено, либо опубликуйте решение ниже, либо примите данный ответ.   -  person OneCricketeer    schedule 10.04.2018
comment
@cricket_007 cricket_007 Я только что опубликовал ответ, извините.   -  person wrrzag    schedule 10.04.2018


Ответы (1)


Ну... решение было довольно простым, просто прочитав правильную страницу документации, я понял, как решить мою проблему.

Просто создайте новый класс, который расширяется от fields.Field и переопределяет метод _validate следующим образом:

class BytesField(fields.Field):
    def _validate(self, value):
        if not isinstance(value, bytes):
            raise ValidationError('Invalid input type.')

        if value is None or value == b'':
            raise ValidationError('Invalid value')

А вот и схема маршмеллоу:

class MySchema(Schema):
    // ...
    field = BytesField(required=True)
    // ...

Это все. Извините, что потратил ваше время.

person wrrzag    schedule 10.04.2018
comment
Ну, это было полезно для меня. Спасибо. Кстати, я думаю, что isinstance(value, bytes) будет лучше, чем type(value) is not bytes - person Renard Korzeniowski; 06.10.2019
comment
тратить ваше * время - person eli; 10.01.2020
comment
Пожалуйста, добавьте ссылку на страницу документов, которую вы использовали. - person Marcio Carvalho; 14.06.2021