from lib.api.trakt.base_cache import BaseCache, get_timestamp
GET_ALL = "SELECT id FROM lists"
DELETE_ALL = "DELETE FROM lists"
DELETE_PREFIX = 'DELETE FROM lists WHERE id LIKE "%s%%"'
CLEAN = "DELETE from lists WHERE CAST(expires AS INT) <= ?"
class ListsCache(BaseCache):
def __init__(self):
BaseCache.__init__(self, "lists_db", "lists")
def delete_all_lists(self):
try:
dbcon = self.manual_connect("lists_db")
for i in dbcon.execute(GET_ALL):
self.delete_memory_cache(str(i[0]))
dbcon.execute(DELETE_ALL)
dbcon.execute("VACUUM")
return True
except Exception:
return False
def delete_prefix(self, prefix):
try:
dbcon = self.manual_connect("lists_db")
for item in dbcon.execute(GET_ALL):
cache_key = str(item[0])
if cache_key.startswith(prefix):
self.delete_memory_cache(cache_key)
dbcon.execute(DELETE_PREFIX % prefix)
dbcon.execute("VACUUM")
return True
except Exception:
return False
def clean_database(self):
try:
dbcon = self.manual_connect("lists_db")
dbcon.execute(CLEAN, (get_timestamp(),))
dbcon.execute("VACUUM")
return True
except Exception:
return False
lists_cache = ListsCache()
def lists_cache_object(function, string, args, json=False, expiration=48):
cache = lists_cache.get(string)
if cache is not None:
return cache
if isinstance(args, list):
args = tuple(args)
else:
args = (args,)
if json:
result = function(*args).json()
else:
result = function(*args)
lists_cache.set(string, result, expiration=expiration)
return result