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 __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": {} }
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 = {}
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 = {}