Пример #1
0
def test_it__jsondict_from_model():
    from alchemyjsonschema import AlsoChildrenWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(AlsoChildrenWalker)
    target = _makeOne(schema_factory, Group)

    group = Group(name="ravenclaw",
                  color="blue",
                  created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    group.users = [
        User(name="foo", created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    ]

    jsondict = target.jsondict_from_object(group, verbose=True)

    import json
    assert json.dumps(jsondict)

    assert jsondict == {
        'color':
        'blue',
        'name':
        'ravenclaw',
        'users': [{
            'name': 'foo',
            'pk': None,
            'created_at': '2000-01-01T10:00:00+00:00'
        }],
        'pk':
        None,
        'created_at':
        '2000-01-01T10:00:00+00:00'
    }
Пример #2
0
def test_it__object_from_dict():
    from alchemyjsonschema import AlsoChildrenWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(AlsoChildrenWalker)
    target = _makeOne(schema_factory, Group)

    group_dict = {
        'color':
        'blue',
        'users': [{
            'created_at': _datetime(2000, 1, 1, 10, 0, 0, 0),
            'pk': None,
            'name': 'foo'
        }],
        'created_at':
        _datetime(2000, 1, 1, 10, 0, 0, 0),
        'pk':
        None,
        'name':
        'ravenclaw'
    }

    group = target.object_from_dict(group_dict, strict=False)

    assert isinstance(group, Group)
    assert group.color == "blue"
    assert group.name == "ravenclaw"
    assert group.pk is None
    assert group.created_at == _datetime(2000, 1, 1, 10, 0, 0, 0)

    assert (len(group.users) == 1) and (isinstance(group.users[0], User))
    assert group.users[0].name == "foo"
    assert group.users[0].pk is None
    assert group.users[0].created_at == _datetime(2000, 1, 1, 10, 0, 0, 0)
Пример #3
0
def test_it__dict_from_model_object():
    from alchemyjsonschema import AlsoChildrenWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(AlsoChildrenWalker)
    target = _makeOne(schema_factory, Group)

    group = Group(name="ravenclaw",
                  color="blue",
                  created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    group.users = [
        User(name="foo", created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    ]

    group_dict = target.dict_from_object(group)
    assert group_dict == {
        'color':
        'blue',
        'users': [{
            'created_at': _datetime(2000, 1, 1, 10, 0, 0, 0),
            'pk': None,
            'name': 'foo'
        }],
        'created_at':
        _datetime(2000, 1, 1, 10, 0, 0, 0),
        'pk':
        None,
        'name':
        'ravenclaw'
    }
Пример #4
0
def test_it__jsondict_from_model():
    from alchemyjsonschema import StructuralWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(StructuralWalker)
    target = _makeOne(schema_factory, Group)

    group = Group(name="ravenclaw",
                  color="blue",
                  created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    group.users = [
        User(name="foo", created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    ]

    jsondict = target.jsondict_from_object(group, verbose=True)

    import json

    assert json.dumps(jsondict)

    assert jsondict == {
        "color":
        "blue",
        "name":
        "ravenclaw",
        "users": [{
            "name": "foo",
            "pk": None,
            "created_at": "2000-01-01T10:00:00+00:00"
        }],
        "pk":
        None,
        "created_at":
        "2000-01-01T10:00:00+00:00",
    }
Пример #5
0
def test_it__dict_from_model_object():
    from alchemyjsonschema import StructuralWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(StructuralWalker)
    target = _makeOne(schema_factory, Group)

    group = Group(name="ravenclaw",
                  color="blue",
                  created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    group.users = [
        User(name="foo", created_at=_datetime(2000, 1, 1, 10, 0, 0, 0))
    ]

    group_dict = target.dict_from_object(group)
    assert group_dict == {
        "color":
        "blue",
        "users": [{
            "created_at": _datetime(2000, 1, 1, 10, 0, 0, 0),
            "pk": None,
            "name": "foo",
        }],
        "created_at":
        _datetime(2000, 1, 1, 10, 0, 0, 0),
        "pk":
        None,
        "name":
        "ravenclaw",
    }
Пример #6
0
def test_it__object_from_dict():
    from alchemyjsonschema import StructuralWalker, SchemaFactory
    from .models import Group, User

    schema_factory = SchemaFactory(StructuralWalker)
    target = _makeOne(schema_factory, Group)

    group_dict = {
        "color":
        "blue",
        "users": [{
            "created_at": _datetime(2000, 1, 1, 10, 0, 0, 0),
            "pk": None,
            "name": "foo",
        }],
        "created_at":
        _datetime(2000, 1, 1, 10, 0, 0, 0),
        "pk":
        None,
        "name":
        "ravenclaw",
    }

    group = target.object_from_dict(group_dict, strict=False)

    assert isinstance(group, Group)
    assert group.color == "blue"
    assert group.name == "ravenclaw"
    assert group.pk is None
    assert group.created_at == _datetime(2000, 1, 1, 10, 0, 0, 0)

    assert (len(group.users) == 1) and (isinstance(group.users[0], User))
    assert group.users[0].name == "foo"
    assert group.users[0].pk is None
    assert group.users[0].created_at == _datetime(2000, 1, 1, 10, 0, 0, 0)
Пример #7
0
def test_it_complex2():
    from alchemyjsonschema import SchemaFactory, AlsoChildrenWalker
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    factory = SchemaFactory(AlsoChildrenWalker)
    group_schema = factory(models.Group)

    created_at = datetime(2000, 1, 1)
    created_at2 = datetime(2001, 1, 1)
    user_dict = dict(name="foo", created_at=created_at)  # pk is not found
    group_dict = dict(name="ravenclaw",
                      color="blue",
                      created_at=created_at2,
                      users=[user_dict])
    modellookup = ModelLookup(models)

    result = _callFUT(group_dict, group_schema, modellookup, strict=False)

    assert isinstance(result, models.Group)
    assert result.pk is None
    assert result.name == "ravenclaw"
    assert result.color == "blue"
    assert result.created_at == datetime(2001, 1, 1)

    assert isinstance(result.users[0], models.User)
    assert result.users[0].name == "foo"
    assert result.users[0].created_at == created_at

    assert modellookup.name_stack == []
Пример #8
0
def test_it_nested():
    from alchemyjsonschema.tests import models
    from alchemyjsonschema import SchemaFactory, AlsoChildrenWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(AlsoChildrenWalker)
    a_schema = factory(models.A0)
    modellookup = ModelLookup(models)

    params = {
        "name":
        "a0",
        "children": [{
            "name":
            "a00",
            "children": [{
                "name": "a000"
            }, {
                "name": "a001"
            }, {
                "name": "a002"
            }]
        }, {
            "name": "a10",
            "children": [{
                "name": "a010"
            }]
        }]
    }

    result = _callFUT(params, a_schema, modellookup, strict=False)
    assert len(result.children) == 2
    assert len(result.children[0].children) == 3
    assert len(result.children[1].children) == 1
Пример #9
0
 def build_transformer(self, walker, decision, layout):
     walker_factory = detect_walker_factory(walker)
     relation_decision = detect_decision(decision)
     schema_factory = SchemaFactory(walker_factory,
                                    relation_decision=relation_decision)
     transformer_factory = detect_transformer(layout)
     return transformer_factory(schema_factory).transform
Пример #10
0
def test_it_complex__partial4():
    from alchemyjsonschema import SchemaFactory, StructuralWalker
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    factory = SchemaFactory(StructuralWalker)
    group_schema = factory(models.Group)

    created_at2 = datetime(2001, 1, 1)
    group_dict = dict(name="ravenclaw",
                      color="blue",
                      created_at=created_at2,
                      users=[])
    modellookup = ModelLookup(models)

    result = _callFUT(group_dict, group_schema, modellookup, strict=False)

    assert isinstance(result, models.Group)
    assert result.pk is None
    assert result.name == "ravenclaw"
    assert result.color == "blue"
    assert result.created_at == datetime(2001, 1, 1)

    assert modellookup.name_stack == []
Пример #11
0
def test_it_complex__relation_decision():
    from alchemyjsonschema import SchemaFactory, StructuralWalker, RelationDesicion
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    factory = SchemaFactory(StructuralWalker,
                            relation_decision=RelationDesicion())
    user_schema = factory(models.User)

    created_at = datetime(2000, 1, 1)
    created_at2 = datetime(2001, 1, 1)
    group_dict = dict(name="ravenclaw", color="blue", created_at=created_at2)
    user_dict = dict(name="foo", created_at=created_at,
                     group=group_dict)  # pk is not found
    modellookup = ModelLookup(models)

    result = _callFUT(user_dict, user_schema, modellookup, strict=False)

    assert isinstance(result, models.User)
    assert result.pk is None
    assert result.name == "foo"
    assert result.created_at == datetime(2000, 1, 1)
    assert result.group_id is None

    assert isinstance(result.group, models.Group)
    assert result.group.name == "ravenclaw"
    assert result.group.color == "blue"
    assert result.group.created_at == created_at2

    assert modellookup.name_stack == []
Пример #12
0
def test_it_complex__fullset_decision():
    from alchemyjsonschema import (
        SchemaFactory,
        StructuralWalker,
        UseForeignKeyIfPossibleDecision,
    )
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    factory = SchemaFactory(
        StructuralWalker, relation_decision=UseForeignKeyIfPossibleDecision())
    user_schema = factory(models.User)

    created_at = datetime(2000, 1, 1)
    user_dict = dict(name="foo", created_at=created_at,
                     group_id=1)  # pk is not found
    modellookup = ModelLookup(models)

    result = _callFUT(user_dict, user_schema, modellookup, strict=False)

    assert isinstance(result, models.User)
    assert result.pk is None
    assert result.name == "foo"
    assert result.created_at == datetime(2000, 1, 1)
    assert result.group_id is 1
    assert modellookup.name_stack == []
Пример #13
0
    def json_schema(self):
        """
        Provide the SQLAlchemy model as a separate object, so that it isn't cluttered with unnecessary attributes.

        :return: The json schema for this model
        """
        if self._json_schema is None:
            factory = SchemaFactory(self.walker)
            self._json_schema = factory.__call__(self.sa_model, excludes=self.excludes)
            # TODO change to custom route with valid json-reference as per
            # http://tools.ietf.org/html/draft-zyp-json-schema-04#section-6.2
            self._json_schema['$schema'] = "http://json-schema.org/draft-04/schema#"
            self._json_schema['private_routes'] = self.private_routes
            self._json_schema['public_routes'] = self.public_routes
            print self._json_schema

        return self._json_schema
Пример #14
0
def test_no_required():
    from alchemyjsonschema import StructuralWalker, SchemaFactory
    from alchemyjsonschema.dictify import ModelLookup
    from alchemyjsonschema.tests import models
    schema_factory = SchemaFactory(StructuralWalker)
    schema = schema_factory(models.MyModel, excludes=["id"])
    modellookup = ModelLookup(models)

    params = {"name": "foo", "value": 1}
    _callFUT(params, schema, modellookup)
def test_it_reverse_update():
    from alchemyjsonschema.tests import models as m
    from alchemyjsonschema import SchemaFactory, StructuralWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(StructuralWalker)
    a_schema = factory(m.A1)
    modellookup = ModelLookup(m)

    a0 = m.A0(pk=1, name="a0", children=[m.A1(pk=1, name="a00"), m.A1(pk=2, name=("a01"))])

    assert a0.name == "a0"
    params = {"pk": 1, "name": "a00", "parent": {"name": "updated", "pk": 1}}
    _callFUT(a0.children[0], params, a_schema, modellookup)
    assert a0.name == "updated"
Пример #16
0
def test_it__prepare_partial():
    from alchemyjsonschema import SchemaFactory, StructuralWalker
    from alchemyjsonschema.tests.models import Group

    factory = SchemaFactory(StructuralWalker)
    group_schema = factory(Group)
    group_dict = {'name': 'ravenclaw', 'color': 'blue', 'pk': 1}

    result = _callFUT3(group_dict, group_schema)
    assert result == {
        'name': 'ravenclaw',
        'pk': 1,
        'color': 'blue',
        'users': []
    }
Пример #17
0
def test_it__strict_true__then__required_are_notfound__error_raised():
    from alchemyjsonschema import SchemaFactory, ForeignKeyWalker, InvalidStatus
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime
    import pytest

    factory = SchemaFactory(ForeignKeyWalker)
    user_schema = factory(models.User)

    created_at = datetime(2000, 1, 1)
    user_dict = dict(name="foo", created_at=created_at)  # pk is not found
    modellookup = ModelLookup(models)

    with pytest.raises(InvalidStatus):
        _callFUT(user_dict, user_schema, modellookup, strict=True)
def test_it_update_parent__onlyone():
    from alchemyjsonschema.tests import models as m
    from alchemyjsonschema import SchemaFactory, NoForeignKeyWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(NoForeignKeyWalker)
    a_schema = factory(m.A0)
    modellookup = ModelLookup(m)

    a0 = m.A0(pk=1, name="a0", children=[m.A1(pk=1, name="a00"), m.A1(pk=2, name=("a01"))])

    assert a0.name == "a0"
    params = {"pk": 1, "name": "updated"}
    _callFUT(a0, params, a_schema, modellookup)
    assert a0.name == "updated"
    assert len(a0.children) == 2