1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
from genson import SchemaBuilder
from genson.schema.strategies import SchemaStrategy, Number
from . import base
class MaxTenStrategy(Number):
KEYWORDS = tuple(list(Number.KEYWORDS) + ['maximum'])
def to_schema(self):
schema = super().to_schema()
schema['maximum'] = 10
return schema
class FalseStrategy(SchemaStrategy):
KEYWORDS = tuple(list(SchemaStrategy.KEYWORDS) + ['const'])
@classmethod
def match_schema(self, schema):
return True
@classmethod
def match_object(self, obj):
return True
def to_schema(self):
schema = super().to_schema()
schema['type'] = 'boolean'
schema['const'] = False
return schema
class MaxTenSchemaBuilder(SchemaBuilder):
EXTRA_STRATEGIES = (MaxTenStrategy,)
class FalseSchemaBuilder(SchemaBuilder):
STRATEGIES = (FalseStrategy,)
class TestExtraStrategies(base.SchemaNodeTestCase):
CLASS = MaxTenSchemaBuilder
def test_add_object(self):
self.add_object(5)
self.assertResult({
'$schema': 'http://json-schema.org/schema#',
'type': 'integer',
'maximum': 10})
def test_add_schema(self):
self.add_schema({'type': 'integer'})
self.assertResult({
'$schema': 'http://json-schema.org/schema#',
'type': 'integer',
'maximum': 10})
class TestClobberStrategies(base.SchemaNodeTestCase):
CLASS = FalseSchemaBuilder
def test_add_object(self):
self.add_object("Any Norwegian Jarlsberger?")
self.assertResult({
'$schema': 'http://json-schema.org/schema#',
'type': 'boolean',
'const': False}, enforceUserContract=False)
def test_add_schema(self):
self.add_schema({'type': 'string'})
self.assertResult({
'$schema': 'http://json-schema.org/schema#',
'type': 'boolean',
'const': False}, enforceUserContract=False)
|