Esempio n. 1
0
def test_store_purge_keys():
    class Type1:
        pass

    class Type2:
        pass

    class Type3:
        pass

    class Type4:
        pass

    config = pretend.stub(
        registry={
            "cache_keys": {
                Type1: lambda o: origin.CacheKeys(cache=[], purge=["type_1"]),
                Type2: lambda o: origin.CacheKeys(cache=[], purge=["type_2", "foo"]),
                Type3: lambda o: origin.CacheKeys(cache=[], purge=["type_3", "foo"]),
            }
        }
    )
    session = pretend.stub(
        info={}, new={Type1()}, dirty={Type2()}, deleted={Type3(), Type4()}
    )

    origin.store_purge_keys(config, session, pretend.stub())

    assert session.info["warehouse.cache.origin.purges"] == {
        "type_1",
        "type_2",
        "type_3",
        "foo",
    }
Esempio n. 2
0
    def test_no_origin_cache(self):
        class Fake:
            pass

        response = pretend.stub()

        @origin.origin_cache(1)
        def view(context, request):
            return response

        @pretend.call_recorder
        def raiser(iface):
            raise ValueError

        context = Fake()
        request = pretend.stub(
            registry={
                "cache_keys": {
                    Fake: lambda X: origin.CacheKeys(cache=[], purge=[]),
                },
            },
            find_service=raiser,
        )

        assert view(context, request) is response
        assert raiser.calls == [pretend.call(IOriginCache)]
Esempio n. 3
0
 def test_only_purge(self):
     key_maker = origin.key_maker_factory(
         cache_keys=None,
         purge_keys=["bar", "bar/{obj.attr}"],
     )
     assert key_maker(pretend.stub(attr="bar")) == origin.CacheKeys(
         cache=[],
         purge=["bar", "bar/bar"],
     )
Esempio n. 4
0
 def test_both_cache_and_purge(self):
     key_maker = origin.key_maker_factory(
         cache_keys=["foo", "foo/{obj.attr}"],
         purge_keys=["bar", "bar/{obj.attr}"],
     )
     assert key_maker(pretend.stub(attr="bar")) == origin.CacheKeys(
         cache=["foo", "foo/bar"],
         purge=["bar", "bar/bar"],
     )
Esempio n. 5
0
    def test_response_hook(self, seconds, keys):

        class Fake:
            pass

        class Cache:

            @staticmethod
            @pretend.call_recorder
            def cache(
                keys, request, response, seconds, stale_while_revalidate, stale_if_error
            ):
                pass

        response = pretend.stub()

        deco = origin.origin_cache(seconds, keys=keys)

        @deco
        def view(context, request):
            return response

        key_maker = pretend.call_recorder(
            lambda obj: origin.CacheKeys(cache=["one", "two"], purge=[])
        )
        cacher = Cache()
        context = Fake()
        callbacks = []
        request = pretend.stub(
            registry={"cache_keys": {Fake: key_maker}},
            find_service=lambda iface: cacher,
            add_response_callback=callbacks.append,
        )

        assert view(context, request) is response
        assert key_maker.calls == [pretend.call(context)]
        assert len(callbacks) == 1

        callbacks[0](request, response)

        assert cacher.cache.calls == [
            pretend.call(
                ["one", "two"] + ([] if keys is None else keys),
                request,
                response,
                seconds=seconds,
                stale_while_revalidate=None,
                stale_if_error=None,
            )
        ]