def test_it_update_parent__full():
    from alchemyjsonschema.tests import models as m
    from alchemyjsonschema import SchemaFactory, AlsoChildrenWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(AlsoChildrenWalker)
    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",
        "children": [{
            "name": "a00",
            "pk": 1
        }, {
            "name": "a01",
            "pk": 2
        }]
    }
    _callFUT(a0, params, a_schema, modellookup)
    assert a0.name == "updated"
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 == []
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 == []
Esempio n. 4
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 == []
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 == []
Esempio n. 6
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
def test_it_create_child():
    from alchemyjsonschema.tests import models as m
    from alchemyjsonschema import SchemaFactory, StructuralWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(StructuralWalker)
    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 len(a0.children) == 2
    params = {
        "pk": 1,
        "name": "a0",
        "children": [
            {"name": "new"},
            {"name": "a00", "pk": 1},
            {"name": "update", "pk": 2},
        ],
    }
    _callFUT(a0, params, a_schema, modellookup)
    assert len(a0.children) == 3
Esempio n. 8
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)
Esempio n. 9
0
def get_mapping(request,
                model,
                name="name",
                validator=Draft4Validator,
                format_checker=FormatChecker()):
    model_module = request.registry.getUtility(IModelModule)
    reg = get_schema_convertion(request)
    schema = get_schema(request, model, name)
    modellookup = ModelLookup(model_module)
    return Mapping(validator(schema, format_checker=format_checker),
                   model_of(model),
                   modellookup,
                   registry=reg)
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"
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
Esempio n. 12
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_delete_child():
    from alchemyjsonschema.tests import models as m
    from alchemyjsonschema import SchemaFactory, AlsoChildrenWalker
    from alchemyjsonschema.dictify import ModelLookup

    factory = SchemaFactory(AlsoChildrenWalker)
    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 len(a0.children) == 2
    params = {"pk": 1, "name": "a0", "children": [{"name": "a00", "pk": 1}]}
    _callFUT(a0, params, a_schema, modellookup)
    assert len(a0.children) == 1
Esempio n. 14
0
def test_it__strict_false__then__required_are_notfound__ok():
    from alchemyjsonschema import SchemaFactory, ForeignKeyWalker
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    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)

    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
Esempio n. 15
0
def test_it__simple():
    from alchemyjsonschema import SchemaFactory, ForeignKeyWalker
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

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

    created_at = datetime(2000, 1, 1)
    user_dict = dict(pk=1, name="foo", created_at=created_at, group_id=10)
    modellookup = ModelLookup(models)

    result = _callFUT(user_dict, user_schema, modellookup)

    assert isinstance(result, models.User)
    assert result.pk == 1
    assert result.name == "foo"
    assert result.created_at == datetime(2000, 1, 1)
    assert result.group_id == 10
Esempio n. 16
0
def test_it_complex__partia3():
    from alchemyjsonschema import SchemaFactory, StructuralWalker
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

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

    created_at = datetime(2000, 1, 1)
    user_dict = dict(name="foo", created_at=created_at, group={})
    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 modellookup.name_stack == []
Esempio n. 17
0
def test_it_complex__comfortable_decision():
    from alchemyjsonschema import SchemaFactory, AlsoChildrenWalker, ComfortableDesicion
    from alchemyjsonschema.dictify import ModelLookup
    import alchemyjsonschema.tests.models as models
    from datetime import datetime

    factory = SchemaFactory(AlsoChildrenWalker,
                            relation_decision=ComfortableDesicion())
    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 == []