class User(field.SchemaField): exception_on_unknown = False fields = [ field.StrField('first_name'), field.StrField('last_name'), ]
def test_inline_schema_works(): """Inline schema is created on the fly. """ schema = field.SchemaField('user', fields=[ field.StrField('name'), field.StrField('last_name'), field.IntField('age'), ]) schema.loads({ 'name': 'Frank', 'last_name': 'Castle', 'age': '35', }) assert schema['name'] == 'Frank' assert schema['last_name'] == 'Castle' assert schema['age'] == 35 assert schema == { 'name': 'Frank', 'last_name': 'Castle', 'age': 35, }
class CosmicEntity(field.SchemaField): fields = ( field.StrField('value'), field.StrField('_value'), field.StrField('__value'), field.IntField('errors'), field.IntField('_errors'), field.IntField('__errors'), )
def test_field_loads_data(): """Load data to StrField, check if we can access it. Try with different types on input (normalisation should kick in). """ schema = field.StrField('meaning_of_everything', allow_none=True) class AnObject: def __str__(self): return '42' values_to_check = [ ('42', '42'), (42, '42'), ('Hello', 'Hello'), ('True', 'True'), (True, 'True'), (AnObject(), '42'), (None, None), ] for value_before, value_after in values_to_check: schema.loads(value_before) assert schema.name == 'meaning_of_everything' assert schema.value == value_after assert schema.errors == [] assert schema.as_python() == value_after assert schema.as_json() == value_after
def test_cases_when_normalisation_works_but_effects_are_awkward(): """Test checks if normalisation is not overcommitting itself. """ schema = field.StrField('meaning_of_everything', allow_none=False) class AnObject: pass instance = AnObject() values_to_check = [ (instance, str(instance)), (AnObject, str(AnObject)), ({}, '{}'), ([], '[]'), ] for value_before, value_after in values_to_check: schema.loads(value_before) assert schema.name == 'meaning_of_everything' assert schema.value == value_after assert schema.errors == [] assert schema.as_python() == value_after assert schema.as_json() == value_after
def test_cases_when_we_do_not_allow_nones(): schema = field.StrField('meaning_of_everything', allow_none=False) with pytest.raises(exception.NormalisationError): schema.loads(None) try: schema.loads(None) except exception.NormalisationError as err: assert schema.errors == ['None is not allowed value'] assert str(err) == 'None is not allowed value'
class Author(field.SchemaField): fields = [ field.StrField('name'), field.CollectionField( 'books', field.SchemaField( 'book', 'tests.test_schema_field_can_survive_cycles.Book'), ), field.SchemaField('home_address', Address), field.SchemaField('secret_address', Address()), field.SchemaField( 'office_address', 'tests.test_schema_field_can_survive_cycles.BusinessAddress'), BusinessAddress('publisher_address'), ]
class User(field.SchemaField): fields = [ field.StrField('first_name'), field.StrField('last_name'), ]
class Newspaper(field.SchemaField): fields = [ field.IntField('issue'), field.StrField('title'), field.CollectionField('articles', Article), ]
class Article(field.SchemaField): fields = [ field.StrField('title'), field.StrField('content'), ]
class MarketableUser(User): fields = [ field.StrField('postcode'), ]
class User(field.SchemaField): fields = [ field.StrField('name'), field.StrField('last_name'), field.IntField('age'), ]
class Address(field.SchemaField): fields = [ field.StrField('postcode'), field.StrField('street'), ]
class Book(field.SchemaField): fields = [ field.StrField('title'), field.SchemaField('author', 'tests.test_schema_field_can_survive_cycles.Author'), ]
class BusinessAddress(Address): fields = [ field.StrField('letterbox'), ]