Example #1
0
def test_register_dispatch_predicates_twice():
    @dispatch_external_predicates()
    def foo(obj):
        pass

    def for_bar(obj):
        return "for bar"

    def for_qux(obj):
        return "for qux"

    class Bar(object):
        pass

    class Qux(object):
        pass

    registry = Registry()

    registry.register_dispatch_predicates(
        foo, [match_instance('obj',
                             lambda obj: obj)])
    assert foo in registry.initialized
    # second time has no effect
    registry.register_dispatch_predicates(
        foo, [match_instance('obj',
                             lambda obj: obj)])
Example #2
0
def test_register_dispatch_predicates_register_defaults():
    r = Registry()

    class Foo(object):
        pass

    class FooSub(Foo):
        pass

    @dispatch()
    def view(self, request):
        raise NotImplementedError()

    def get_model(self):
        return self

    def get_name(request):
        return request.name

    def get_request_method(request):
        return request.request_method

    def model_fallback(self, request):
        return "Model fallback"

    def name_fallback(self, request):
        return "Name fallback"

    def request_method_fallback(self, request):
        return "Request method fallback"

    r.register_dispatch_predicates(view, [
        match_instance('model', get_model, model_fallback,
                       default=None),
        match_key('name', get_name, name_fallback,
                  default=''),
        match_key('request_method', get_request_method, request_method_fallback,
                  default='GET')])

    def foo_default(self, request):
        return "foo default"

    def foo_post(self, request):
        return "foo default post"

    def foo_edit(self, request):
        return "foo edit"

    r.register_function(
        view, foo_default, model=Foo)
    r.register_function(
        view, foo_post,
        model=Foo, request_method='POST')
    r.register_function(
        view, foo_edit,
        model=Foo, name='edit', request_method='POST')

    l = r.lookup()

    class Request(object):
        def __init__(self, name, request_method):
            self.name = name
            self.request_method = request_method

    assert view(Foo(), Request('', 'GET'), lookup=l) == 'foo default'
    assert view(FooSub(), Request('', 'GET'), lookup=l) == 'foo default'
    assert view(FooSub(), Request('edit', 'POST'), lookup=l) == 'foo edit'

    class Bar(object):
        pass

    assert view(Bar(), Request('', 'GET'), lookup=l) == 'Model fallback'
    assert view(Foo(), Request('dummy', 'GET'), lookup=l) == 'Name fallback'
    assert view(Foo(), Request('', 'PUT'), lookup=l) == 'Request method fallback'
    assert view(FooSub(), Request('dummy', 'GET'), lookup=l) == 'Name fallback'