Python: проверка YAML с использованием jsonschema при использовании специфичных для приложения тегов - PullRequest
0 голосов
/ 26 октября 2019

Я ищу способ проверки YAML при использовании специфичных для приложения тегов. Мой код Python:

import yaml
import jsonschema
import sys

class Monster(yaml.YAMLObject):
    yaml_tag = u'!Monster'
    yaml_loader = yaml.FullLoader
    def __init__(self, name, hp, ac, attacks):
        self.name = name
        self.hp = hp
        self.ac = ac
        self.attacks = attacks
    def __repr__(self):
        return "%s(name=%r, hp=%r, ac=%r, attacks=%r)" % (self.__class__.__name__, self.name, self.hp, self.ac, self.attacks)

cave = yaml.load("""
--- !Monster
name: Cave spider
hp: [2,6]    # 2d6
ac: 16
attacks: [BITE, HURT]
""", Loader=yaml.FullLoader)

print(yaml.dump(Monster(name='Cave lizard', hp=[3,6], ac=16, attacks=['BITE','HURT'])))

try:
    jsonschema.validate(cave, {"$schema": "http://json-schema.org/draft/schema#", "type": "object"})
except jsonschema.exceptions.ValidationError as ve:
    sys.stderr.write("Cannot validate block!\n{}".format(str(ve)))
    sys.exit(1)

.. он отлично работает. Однако, когда я пытаюсь проверить выражение YAML с помощью jsonschema, я получаю следующую ошибку:

Cannot validate block...
Monster(name='Cave spider', hp=[2, 6], ac=16, attacks=['BITE', 'HURT']) is not of type 'object' 

Я объявил Monster как "объект" jsonschema, но кажется, что "объект" ожидает тип отображения(Python dict). Есть ли способ сказать jsonschema принимать объекты Monster? Есть ли другие способы проверки YAML с объектно-ориентированными объектами?

...