from lib.api.trakt.base_cache import BaseCache, get_timestamp
GET_ALL = "SELECT id FROM maincache"
DELETE_ALL = "DELETE FROM maincache"
LIKE_SELECT = "SELECT id from maincache where id LIKE %s"
LIKE_DELETE = "DELETE FROM maincache WHERE id LIKE %s"
CLEAN = "DELETE from maincache WHERE CAST(expires AS INT) <= ?"
class MainCache(BaseCache):
def __init__(self):
BaseCache.__init__(self, "maincache_db", "maincache")
def delete_all(self):
try:
dbcon = self.manual_connect("maincache_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_all_folderscrapers(self):
dbcon = self.manual_connect("maincache_db")
remove_list = [
str(i[0]) for i in dbcon.execute(LIKE_SELECT % "'FOLDERSCRAPER_%'").fetchall()
]
if not remove_list:
return True
try:
dbcon.execute(LIKE_DELETE % "'FOLDERSCRAPER_%'")
dbcon.execute("VACUUM")
for item in remove_list:
self.delete_memory_cache(str(item))
return True
except Exception:
return False
def clean_database(self):
try:
dbcon = self.manual_connect("maincache_db")
dbcon.execute(CLEAN, (get_timestamp(),))
dbcon.execute("VACUUM")
return True
except Exception:
return False
main_cache = MainCache()
def cache_object(function, string, args, json=True, expiration=24):
cache = main_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)
main_cache.set(string, result, expiration=expiration)
return result