Пользовательский объект проверки зефира - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь реализовать проверку схемы в моем проекте Django. Я хочу, чтобы он был структурирован, как блок кода ниже Я хочу проверить входной словарь, чтобы убедиться, что есть пара ключ-значение, где значением является некоторый объект пользовательского класса, который я создал где-то еще в своем проекте Python. Я вижу, вы можете создать настраиваемые поля , но я не думаю, что это то, что я хочу сделать, так как я бы не стал менять исходный код этих настраиваемых классов и помещать реализации _serialize() и _deserialize().

Есть ли в Marshmallow или какой-либо другой библиотеке простой способ выполнить эту проверку? Или это лучший способ написать собственный простой метод проверки, который использует встроенные методы, такие как isinstance() и т.д ..?

from marshmallow import Schema, fields
import logging

logger = logging.getLogger(__name__)


class AnotherObject:
   some stuff in here

class ContainerObject:

    def __init__(self, input_dict):
        if not self._validate(input_dict):
            raise Error

    def _validate(input_dict: Dict[str, Any]):
        class _ContainerObject(Schema):
            attribute_one = fields.Int(required=True)
            custom_object_value_i_want_to_validate = fields.AnotherObject(required=True)

        validation_errors: Dict = None
        try:
            validation_errors = _ContainerObject().validate(configuration, partial=False)
        except Exception as e:
            logger.warning(f"Problem validating object schema with error: {e}")

        if len(validation_errors) > 0:
            logger.info(f"validation error dictionary: {validation_errors}")
        return validation_errors == {}

...