def test_multithread_compile(monkeypatch): def side_effect(): sleep(0.05) return lambda *args: None mock = MagicMock(side_effect=side_effect) monkeypatch.setattr(CompiledRouter, '_compile', mock) router = CompiledRouter() mr = MockResource() router.add_route('/foo', mr) calls = 0 num_threads = 3 barrier = Barrier(num_threads) def find(): nonlocal calls barrier.wait() assert router.find('/foo') is None calls += 1 threads = [Thread(target=find) for i in range(num_threads)] for t in threads: t.start() for t in threads: t.join() assert calls == 3 mock.assert_called_once_with()
def test_add_route_after_first_request(): router = CompiledRouter() router.add_route('/foo', MockResource()) assert router.find('/foo') is not None assert router._find != router._compile_and_find router.add_route('/bar', MockResource(), suffix='other') assert router._find == router._compile_and_find assert router.find('/bar') is not None assert router._find != router._compile_and_find
def test_find_src(monkeypatch): called = False find = CompiledRouter.find def mock(*args): nonlocal called called = True find(*args) monkeypatch.setattr(CompiledRouter, 'find', mock) router = CompiledRouter() assert router.finder_src is not None assert called
def test_converter_not_subclass(): class X: def convert(self, v): return v router = CompiledRouter() router.options.converters['x'] = X router.add_route('/foo/{bar:x}', MockResource()) res = router.find('/foo/bar') assert res is not None assert res[2] == {'bar': 'bar'} assert router.find('/foo/bar/bar') is None
import falcon from falcon.routing import CompiledRouter from delidog.resources import send from delidog.db import PeeweeConnectionMiddleware middleware = [ PeeweeConnectionMiddleware(), ] router = CompiledRouter() router.add_route('send/', send.Resource()) api = falcon.API(router=router, middleware=middleware)
def patch_add_route(monkeypatch): add_route = CompiledRouter.add_route mock = MagicMock(side_effect=lambda *a, **k: add_route(router, *a, **k)) monkeypatch.setattr(CompiledRouter, 'add_route', mock) router = CompiledRouter() return mock, router
def create_falcon_router(uri_data): router = CompiledRouter() # static routes for u in uri_data.get_static_uris(): res = res_factory(u, ["GET"]) router.add_route(u, method_map=None, resource=res) # zero variable template = uri_data.get_zero_var_uri(ParamFormat.FALCON) res = res_factory(template, ["GET"]) router.add_route(template, method_map=None, resource=res) # one variable template = uri_data.get_one_var_uri(ParamFormat.FALCON) res = res_factory(template, ["GET"]) router.add_route(template, method_map=None, resource=res) # two variables template = uri_data.get_two_var_uri(ParamFormat.FALCON) res = res_factory(template, ["GET"]) router.add_route(template, method_map=None, resource=res) # three variables template = uri_data.get_three_var_uri(ParamFormat.FALCON) res = res_factory(template, ["GET"]) router.add_route(template, method_map=None, resource=res) # done return router