예제 #1
0
    class User(field.SchemaField):
        exception_on_unknown = False

        fields = [
            field.StrField('first_name'),
            field.StrField('last_name'),
        ]
예제 #2
0
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,
    }
예제 #3
0
 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'
예제 #7
0
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'),
    ]
예제 #8
0
 class User(field.SchemaField):
     fields = [
         field.StrField('first_name'),
         field.StrField('last_name'),
     ]
예제 #9
0
 class Newspaper(field.SchemaField):
     fields = [
         field.IntField('issue'),
         field.StrField('title'),
         field.CollectionField('articles', Article),
     ]
예제 #10
0
 class Article(field.SchemaField):
     fields = [
         field.StrField('title'),
         field.StrField('content'),
     ]
예제 #11
0
 class MarketableUser(User):
     fields = [
         field.StrField('postcode'),
     ]
예제 #12
0
 class User(field.SchemaField):
     fields = [
         field.StrField('name'),
         field.StrField('last_name'),
         field.IntField('age'),
     ]
예제 #13
0
class Address(field.SchemaField):
    fields = [
        field.StrField('postcode'),
        field.StrField('street'),
    ]
예제 #14
0
class Book(field.SchemaField):
    fields = [
        field.StrField('title'),
        field.SchemaField('author',
                          'tests.test_schema_field_can_survive_cycles.Author'),
    ]
예제 #15
0
class BusinessAddress(Address):
    fields = [
        field.StrField('letterbox'),
    ]