Skip to content
This repository was archived by the owner on Nov 27, 2024. It is now read-only.

callback level cache not working #51

@dimkroon

Description

@dimkroon

Hi willforde,

First of all many thanks for your excellent project!
I'm using it for a kodi addon I'm developing, but found that callback level cache is not working.
From several examples I figured that caching can be enabled by decorating a callback with @Route.register(cache_ttl=60).
However, doing so the cache is never hit.

Inspecting the code I think the issue is in route.Route:

def __call__(self, route, args, kwargs):
    cache_ttl = getattr(self, "cache_ttl", -1)
    cache = Cache("listitem_cache.sqlite", cache_ttl * 60) if cache_ttl >= 0 else None

At that point cache_ttl is never an attribute of self (route.Route), so caching will never occur.
Only later on, when the super class's (script.Script) __call__(...) is invoked, the attribute is added, but that is too late to enable caching.

Some simple patches in route.Route seem to work:

Obtain cache_ttl from the support.Route object passed to argument route.

def __call__(self, route, args, kwargs):
    cache_ttl = getattr(route, "parameters", {}).get("cache_ttl", -1)
    cache = Cache("listitem_cache.sqlite", cache_ttl * 60) if cache_ttl >= 0 else None

Add support.Route.parameters to self early on, acceptingScript.__call__(...) does the same again:

def __call__(self, route, args, kwargs):
    self.__dict__.update(route.parameters)
    cache_ttl = getattr(self, "cache_ttl", -1)
    cache = Cache("listitem_cache.sqlite", cache_ttl * 60) if cache_ttl >= 0 else None

Right now I'm using the second approach to monkey-patch rout.Route.__call__(...), just because it is easiest, and caching works like charm.

I'm not quite sure what the intended behaviour should be, or if I totally misunderstand the caching feature and doing it all wrong.
I would please have a look at it?
Many thanks for your help.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions