class BlockCache: filename_unblock = "lookup-cache-unblock.json" filename_block = "lookup-cache-block.json" def __init__(self, cache_dir, cache_size_unblock=4096, cache_size_block=8192): """Cache for block test result. Two caches for block/unblock are used, so we can set different cache size for blocked or unblocked url cache. """ self.save_trigger = 64 self.cache_dir = cache_dir self.cache_filename_unblock = os.path.join(cache_dir, self.filename_unblock) self.cache_filename_block = os.path.join(cache_dir, self.filename_block) from lrucache import LRUCache self.cache_unblock = LRUCache(cache_size_unblock) self.cache_block = LRUCache(cache_size_block) def load(self): self.cache_unblock.load(self.cache_filename_unblock) self.cache_block.load(self.cache_filename_block) def make_key(self, url, *args): key = url + json.dumps( args, sort_keys=True, indent=None, separators=(',', ':')) return key def save(self, force=False): trigger = 0 if force == True else self.save_trigger if self.cache_unblock.insert_count > trigger: self.cache_unblock.save(self.cache_filename_unblock) self.cache_unblock.reset_insert_count() if self.cache_block.insert_count > trigger: self.cache_block.save(self.cache_filename_block) self.cache_unblock.reset_insert_count() def __getitem__(self, key): if key in self.cache_unblock: ret = self.cache_unblock[key] else: ret = self.cache_block[key] return ret def __setitem__(self, key, value): if value: self.cache_block[key] = value else: self.cache_unblock[key] = value def __contains__(self, key): return key in self.cache_block or key in self.cache_unblock
class BlockCache: filename_unblock = "lookup-cache-unblock.json" filename_block = "lookup-cache-block.json" def __init__(self, cache_dir, cache_size_unblock=4096, cache_size_block=8192): """Cache for block test result. Two caches for block/unblock are used, so we can set different cache size for blocked or unblocked url cache. """ self.save_trigger = 64 self.cache_dir = cache_dir self.cache_filename_unblock = os.path.join(cache_dir, self.filename_unblock) self.cache_filename_block = os.path.join(cache_dir, self.filename_block) from lrucache import LRUCache self.cache_unblock = LRUCache(cache_size_unblock) self.cache_block = LRUCache(cache_size_block) def load(self): self.cache_unblock.load(self.cache_filename_unblock) self.cache_block.load(self.cache_filename_block) def make_key(self, url, *args): key = url + json.dumps(args, sort_keys=True, indent=None, separators= (',', ':')) return key def save(self, force=False): trigger = 0 if force == True else self.save_trigger if self.cache_unblock.insert_count > trigger: self.cache_unblock.save(self.cache_filename_unblock) self.cache_unblock.reset_insert_count() if self.cache_block.insert_count > trigger: self.cache_block.save(self.cache_filename_block) self.cache_unblock.reset_insert_count() def __getitem__(self, key): if key in self.cache_unblock: ret = self.cache_unblock[key] else: ret = self.cache_block[key] return ret def __setitem__(self, key, value): if value: self.cache_block[key] = value else: self.cache_unblock[key] = value def __contains__(self, key): return key in self.cache_block or key in self.cache_unblock