Example #1
0
    def __init__(self, filename, ttl=0, readOnly=False, last_changed=0):
        self._path = os.path.join(_settings.cache_path, filename)
        self._readOnly = readOnly
        self._db = {}
        self._lock = FLock(self._path)

        if os.path.isfile(self._path):
            with open(self._path, "r") as _o:
                self._db = _o.read()

        if self._readOnly:
            self._lock.unLock(self._path)

        if self._db:
            self._db = simplejson.loads(self._db)

        if not self._db or not ttl == 0 and (
                time.time() - self._db["created_at"]
        ) > ttl or self._db["created_at"] < last_changed:
            self._db = {"created_at": time.time(), "data": {}}
Example #2
0
    def __init__(self, filename, ttl=0, readOnly=False, last_changed=0):
        self._path      = os.path.join(settings.addon.cache_path, filename)
        self._readOnly  = readOnly
        self._db        = {}
        self._lock      = FLock(self._path)

        if os.path.isfile(self._path):
            with open(self._path, "r") as _o:
                self._db = _o.read()

        if self._readOnly:
            self._lock.unLock(self._path)

        if self._db:
            self._db = simplejson.loads(self._db)

        if not self._db or not ttl == 0 and (time.time() - self._db["created_at"]) > ttl or self._db["created_at"] < last_changed:
            self._db = {
                "created_at": time.time(),
                "data": {}
            }
Example #3
0
class Cache(UserDict.DictMixin):
    def __init__(self, filename, ttl=0, readOnly=False, last_changed=0):
        self._path      = os.path.join(settings.addon.cache_path, filename)
        self._readOnly  = readOnly
        self._db        = {}
        self._lock      = FLock(self._path)

        if os.path.isfile(self._path):
            with open(self._path, "r") as _o:
                self._db = _o.read()

        if self._readOnly:
            self._lock.unLock(self._path)

        if self._db:
            self._db = simplejson.loads(self._db)

        if not self._db or not ttl == 0 and (time.time() - self._db["created_at"]) > ttl or self._db["created_at"] < last_changed:
            self._db = {
                "created_at": time.time(),
                "data": {}
            }

    def __enter__(self):
        return self

    def __contains__(self, key):
        return key in self._db['data']

    def has_key(self, key):
        return key in self._db['data']

    def __getitem__(self, key):
        return self._db['data'][key]

    def get(self, key, default=None):
        try:
            return self._db['data'][key]
        except KeyError:
            sys.exc_clear()
            return default

    def copy(self):
        return self._db['data']

    def __setitem__(self, key, value):
        self._db['data'][key] = value

    def extendKey(self, key, value):
        try:
            self._db['data'][key] = self._db['data'][key] + value
        except KeyError:
            sys.exc_clear()
            self._db['data'][key] = value

    def __delitem__(self, key):
        del self._db['data'][key]

    def trunctate(self, data={}):
        self._db['data'] = dict(data)

    def __iter__(self):
        for k in self._db['data'].keys():
            yield k

    def keys(self):
        return self._db['data'].keys()

    def __len__(self):
        return len(self._db['data'])

    def __nonzero__(self):
        if len(self._db['data']) > 0:
            return True
        return False

    def __str__(self):
        return str(self._db['data'])

    def format(self):
        return self._build_str(self._db['data'])

    def _build_str(self, cache, level=0):
        pieces = []
        tabs = ""
        for i in xrange(level):
            tabs = tabs+'\t'
        joinStr = '%s\t, %s\t\n' %(tabs, tabs)
        if isinstance(cache, dict):
            for key, value in cache.items():
                pieces.append("'%s': %s" %(key, self._build_str(value), level+1))
            return '%s{\n%s\t%s\n%s}\n' %(tabs, tabs, joinStr.join(pieces), tabs)
        elif isinstance(cache, list):
            for value in cache:
                pieces.append('%s' %(self._build_str(value), level+1))
            return '%s[\n%s\t%s\n%s]\n' %(tabs, tabs, joinStr.join(pieces), tabs)
        return str(cache)

    def __exit__(self, *exc_info):
        self.close()
        return not exc_info[0]

    def __del__(self):
        if hasattr(self, '_db'):
            self.close()

    def close(self):
        if not self._readOnly and self._db:
            with open(self._path, "w") as _o:
                _o.write(simplejson.dumps(self._db, encoding='UTF-8'))
            self._lock.unLock(self._path)
        self._lock = None
        self._db   = {}
Example #4
0
class Cache(UserDict.DictMixin):
    def __init__(self, filename, ttl=0, readOnly=False, last_changed=0):
        self._path = os.path.join(_settings.cache_path, filename)
        self._readOnly = readOnly
        self._db = {}
        self._lock = FLock(self._path)

        if os.path.isfile(self._path):
            with open(self._path, "r") as _o:
                self._db = _o.read()

        if self._readOnly:
            self._lock.unLock(self._path)

        if self._db:
            self._db = simplejson.loads(self._db)

        if not self._db or not ttl == 0 and (
                time.time() - self._db["created_at"]
        ) > ttl or self._db["created_at"] < last_changed:
            self._db = {"created_at": time.time(), "data": {}}

    def __enter__(self):
        return self

    def __contains__(self, key):
        return key in self._db['data']

    def has_key(self, key):
        return key in self._db['data']

    def __getitem__(self, key):
        return self._db['data'][key]

    def get(self, key, default=None):
        try:
            return self._db['data'][key]
        except KeyError:
            sys.exc_clear()
            return default

    def copy(self):
        return self._db['data']

    def __setitem__(self, key, value):
        self._db['data'][key] = value

    def extendKey(self, key, value):
        try:
            self._db['data'][key] = self._db['data'][key] + value
        except KeyError:
            sys.exc_clear()
            self._db['data'][key] = value

    def __delitem__(self, key):
        del self._db['data'][key]

    def trunctate(self, data={}):
        self._db['data'] = dict(data)

    def __iter__(self):
        for k in self._db['data'].keys():
            yield k

    def keys(self):
        return self._db['data'].keys()

    def __len__(self):
        return len(self._db['data'])

    def __nonzero__(self):
        if len(self._db['data']) > 0:
            return True
        return False

    def __str__(self):
        return str(self._db['data'])

    def format(self):
        return self._build_str(self._db['data'])

    def _build_str(self, cache, level=0):
        pieces = []
        tabs = ""
        for i in xrange(level):
            tabs = tabs + '\t'
        joinStr = '%s\t, %s\t\n' % (tabs, tabs)
        if isinstance(cache, dict):
            for key, value in cache.items():
                pieces.append("'%s': %s" %
                              (key, self._build_str(value), level + 1))
            return '%s{\n%s\t%s\n%s}\n' % (tabs, tabs, joinStr.join(pieces),
                                           tabs)
        elif isinstance(cache, list):
            for value in cache:
                pieces.append('%s' % (self._build_str(value), level + 1))
            return '%s[\n%s\t%s\n%s]\n' % (tabs, tabs, joinStr.join(pieces),
                                           tabs)
        return str(cache)

    def __exit__(self, *exc_info):
        self.close()
        return not exc_info[0]

    def __del__(self):
        if hasattr(self, '_db'):
            self.close()

    def close(self):
        if not self._readOnly and self._db:
            with open(self._path, "w") as _o:
                _o.write(simplejson.dumps(self._db, encoding='UTF-8'))
            self._lock.unLock(self._path)
        self._lock = None
        self._db = {}