def test_register_external_predicates_for_non_external(): @dispatch() def foo(): pass r = Registry() with pytest.raises(RegistrationError): r.register_external_predicates(foo, [])
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')
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