This file is indexed.

/usr/share/pyshared/gluon/contrib/memcache/__init__.py is in python-gluon 1.99.7-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from gluon.contrib.memcache.memcache import Client
from gluon.cache import CacheAbstract
import time

"""
examle of usage:

cache.memcache = MemcacheClient(request,[127.0.0.1:11211],debug=true)
"""

import cPickle as pickle
import thread

locker = thread.allocate_lock()

def MemcacheClient(*a, **b):
    locker.acquire()
    try:
        if not hasattr(MemcacheClient, '__mc_instance'):
            MemcacheClient.__mc_instance = _MemcacheClient(*a, **b)
    finally:
        locker.release()
    return MemcacheClient.__mc_instance

class _MemcacheClient(Client):

    meta_storage = {}

    def __init__(self, request, servers, debug=0, pickleProtocol=0,
                 pickler=pickle.Pickler, unpickler=pickle.Unpickler,
                 pload=None, pid=None):
        self.request=request
        if request:
            app = request.application
        else:
            app = ''
        Client.__init__(self, servers, debug, pickleProtocol,
                        pickler, unpickler, pload, pid)
        if not app in self.meta_storage:
            self.storage = self.meta_storage[app] = {
                CacheAbstract.cache_stats_name: {
                    'hit_total': 0,
                    'misses': 0,
                    }}
        else:
            self.storage = self.meta_storage[app]


    def __call__(self, key, f, time_expire=300):
        if time_expire == None:
            time_expire = 10**10
        # this must be commented because get and set are redefined
        # key = self.__keyFormat__(key)
        value = None
        obj = self.get(key)
        if obj:
            value = obj
        elif f is None:
            if obj: self.delete(key)
        else:
            value = f()
            self.set(key, value, time_expire)
        return value

    def increment(self, key, value=1, time_expire=300):
        newKey = self.__keyFormat__(key)
        obj = Client.get(self, newKey)
        if obj:
            return Client.incr(self, newKey, value)
        else:
            Client.set(self, newKey, value, time_expire)
            return value

    def set(self, key, value, time_expire=300):
        newKey = self.__keyFormat__(key)
        return Client.set(self, newKey, value, time_expire)

    def get(self, key):
        newKey = self.__keyFormat__(key)
        return Client.get(self, newKey)

    def delete(self, key):
        newKey = self.__keyFormat__(key)
        return Client.delete(self, newKey)

    def __keyFormat__(self, key):
        return '%s/%s' % (self.request.application, key.replace(' ', '_'))