Получить шаблон на основе схемы Цербера - PullRequest
0 голосов
/ 24 мая 2019

То, что я пытаюсь сделать, это использовать определение схемы cerberus как мой единственный набор определений для шаблонизации данных. Проблема у меня заключается в том, как перейти от схемы к шаблону данных. Я не могу понять, как создать ничего из схемы данных.

Таким образом, вместо того, чтобы иметь данные и проверять их, больше похоже на наличие схемы и построение на ее основе.

Я перепробовал все примеры и попытался выполнить проверку по пустым наборам данных, чтобы посмотреть, смогу ли я использовать генератор ошибок для предоставления итератора.

# yaml defined earlier and created this dict
In [7]: print(schema_yaml)
{'networks': {'type': 'list', 'schema': {'type': 'dict', 'schema': {'vlan': {'type': 'dict', 'schema': {'id': {'max': 4094, 'type': 'integer', 'min': 1}, 'name': {'type': 'string'}}}, 'ipv4': {'type': 'dict', 'schema': {'prefix_length': {'type': 'integer'}, 'address': {'type': 'ipv4address'}}}}}}}

# Pulled an example that even created custom validator
In [11]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class NetworkDataJsonValidator(Validator):
    """
    A simple JSON data validator with a custom data type for IPv4 addresses
    """
    def _validate_type_ipv4address(self, field, value):
        """
        checks that the given value is a valid IPv4 address
        """
        try:
            # try to create an IPv4 address object using the python3 ipaddress module
            ipaddress.IPv4Address(value)

        except:
            self._error(field, "Not a valid IPv4 address")
--

# Created the cerberus validator
In [8]: validator = NetworkDataJsonValidator(schema_yaml)

# and i can validate known data ok, but I can't figure out a way to just give me an iterator that provide a data "template"
In [19]: print(validator.validate("{}"))
..snipped..
DocumentError: '{}' is not a document, must be a dict

In [20]: print(validator.validate({}))
True

Так что в этом примере я просто хочу, чтобы способ программно анализировал схему, чтобы дать мне возможность предложить пользователю или автоматически построить схему

...