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
Example #4
0
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
Example #5
0
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