Example #1
0
def test_register_external_predicates_for_non_external():
    @dispatch()
    def foo():
        pass

    r = Registry()

    with pytest.raises(RegistrationError):
        r.register_external_predicates(foo, [])
Example #2
0
def test_register_dispatch_key_dict():
    r = Registry()

    class Foo(object):
        pass

    class FooSub(Foo):
        pass

    @dispatch_external_predicates()
    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_external_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')])

    r.register_dispatch(view)

    assert r.key_dict_to_predicate_key(
        view.wrapped_func, {}) == (None, '', 'GET')
Example #3
0
def test_dispatch_external_predicates():
    r = Registry()

    class Foo(object):
        pass

    class FooSub(Foo):
        pass

    @dispatch_external_predicates()
    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_external_predicates(view, [
        match_instance('model', get_model, model_fallback),
        match_key('name', get_name, name_fallback),
        match_key('request_method', get_request_method, request_method_fallback)])

    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, name='', request_method='GET')
    r.register_function(view, foo_post,
                        model=Foo, name='', 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'
    assert view.fallback(Bar(), Request('', 'GET'), lookup=l) is model_fallback