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)])
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'