PPaste!

Home - All the pastes - Authored by Thooms

Raw version

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def cache(cls_object, args_name):
    def cache_decorator(fun):
        @wraps(fun)
        def decorated(*args, **kwargs):
            cache = CacheFactory.get_cache()
            self = args[0]
            key = get_key_from_args(fun.__name__, *args[1:], **kwargs)

            obj = cache.get(key)
            if obj:
                obj = self.session.merge(obj, load=False)
            else:
                obj = fun(*args, **kwargs)
                cache.set(key, obj)

            return obj

        @event.listens_for(cls_object, 'after_update')
        def invalidate(mapper, connection, target):
            cache = CacheFactory.get_cache()

            args = [getattr(target, arg) for arg in args_name]
            key = get_key_from_args(fun.__name__, *args)

            cache.delete(key)

        return decorated
    return cache_decorator