Пример #1
0
def test_nested_value(backend):
    class MyMovie(Movie):
        class Meta(Movie.Meta):
            dbref_includes = ["actor.name"]

    actor = Actor({'name': 'Robert de Niro'})
    movie = MyMovie({'actor': actor})
    actor.movies = [movie]

    backend.save(movie)
    backend.commit()

    recovered_actor = backend.get(Actor, {'pk': actor.pk})

    assert recovered_actor.movies[0]._lazy
    assert set(recovered_actor.movies[0].lazy_attributes.keys()) == set(
        ['pk', 'actor_name'])

    assert recovered_actor.movies[0].actor_name == actor.name
    assert recovered_actor.movies[0]['actor_name'] == actor.name

    assert recovered_actor.movies[0]._lazy

    #Now we request the name attribute of the actor (which is not lazy), which triggers a revert
    assert recovered_actor.movies[0].actor.name == actor.name
    assert recovered_actor.movies[0].actor['name'] == actor.name
    assert recovered_actor.movies[0]._lazy == False

    with pytest.raises(AttributeError):
        assert recovered_actor.movies[0].actor_name

    with pytest.raises(KeyError):
        assert recovered_actor.movies[0]['actor_name']
Пример #2
0
def test_nested_value(backend):

    class MyMovie(Movie):

        class Meta(Movie.Meta):
            dbref_includes = ["actor.name"]

    actor = Actor({'name' : 'Robert de Niro'})
    movie = MyMovie({'actor' : actor})
    actor.movies = [movie]

    backend.save(movie)
    backend.commit()

    recovered_actor = backend.get(Actor,{'pk' : actor.pk})

    assert recovered_actor.movies[0]._lazy
    assert set(recovered_actor.movies[0].lazy_attributes.keys()) == set(['pk','actor_name'])

    assert recovered_actor.movies[0].actor_name == actor.name
    assert recovered_actor.movies[0]['actor_name'] == actor.name

    assert recovered_actor.movies[0]._lazy

    #Now we request the name attribute of the actor (which is not lazy), which triggers a revert
    assert recovered_actor.movies[0].actor.name == actor.name
    assert recovered_actor.movies[0].actor['name'] == actor.name
    assert recovered_actor.movies[0]._lazy == False

    with pytest.raises(AttributeError):
        assert recovered_actor.movies[0].actor_name

    with pytest.raises(KeyError):
        assert recovered_actor.movies[0]['actor_name']
Пример #3
0
def test_nested_value(backend):

    actor = Actor({'name' : 'Robert de Niro'})
    movie = Movie({'best_actor' : actor,'title' : 'The Godfather'})

    backend.save(actor)
    actor.movies = [movie]
    backend.save(actor)
    backend.commit()
    backend.save(movie)
    backend.commit()

    recovered_actor = backend.get(Actor,{'pk' : actor.pk})

    assert recovered_actor == actor
    assert movie in recovered_actor.movies
    assert recovered_actor.movies[0] == movie
    assert 'best_actor' in recovered_actor.movies[0]
    assert recovered_actor.movies[0].best_actor == recovered_actor

    recovered_actors = backend.filter(Actor,{'movies.title' : 'The Godfather'})
    assert len(recovered_actors) == 1
    assert actor in recovered_actors