migrate snippets from gitlab
This commit is contained in:
40
pickle_cache.py
Normal file
40
pickle_cache.py
Normal file
@@ -0,0 +1,40 @@
|
||||
def pickle_cache(mode="auto"):
|
||||
|
||||
def pc_decorator(func):
|
||||
|
||||
def pc_wrapper(*args, **kwargs):
|
||||
cache_fp = Path(PROXY_DIR, f"{func.__name__}.pickle")
|
||||
today = dt.date.today()
|
||||
if cache_fp.exists():
|
||||
statinfo = cache_fp.stat()
|
||||
# (st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime) = statinfo
|
||||
(_, _, _, _, _, _, _, _, st_mtime, _) = statinfo
|
||||
mdate = dt.datetime.fromtimestamp(st_mtime).date()
|
||||
else:
|
||||
mdate = None
|
||||
if mode == "auto":
|
||||
if cache_fp.exists() and mdate == today:
|
||||
action = "cached"
|
||||
else:
|
||||
action = "query"
|
||||
else:
|
||||
action = mode
|
||||
if action == "cached" :
|
||||
LOG.info(f"{func.__name__}: loading cached data...")
|
||||
with cache_fp.open("rb") as fh:
|
||||
rc = pickle.load(fh)
|
||||
elif action == "query":
|
||||
LOG.info(f"{func.__name__}: database access...")
|
||||
rc = func(*args, **kwargs)
|
||||
if cache_fp.exists() and mdate != today and Path(PROXY_DIR, "Archive").exists():
|
||||
archive_fp = Path(PROXY_DIR, "Archive", f"{func.__name__}-{mdate:%Y%m%d}.pickle")
|
||||
shutil.copy(cache_fp, archive_fp)
|
||||
with cache_fp.open("wb") as fh:
|
||||
pickle.dump(rc, fh)
|
||||
else:
|
||||
LOG.error(f"{func.__name__}: mode {action} unknown")
|
||||
return rc
|
||||
|
||||
return pc_wrapper
|
||||
|
||||
return pc_decorator
|
||||
Reference in New Issue
Block a user