Spaces:
Running
Running
import tempfile | |
import os | |
import time | |
import hashlib | |
import shutil | |
cache_dir = os.path.join(tempfile.gettempdir(), "cache") | |
os.makedirs(cache_dir, exist_ok=True) | |
time_filename = "update_time" | |
max_cache = 5 | |
def deterministic_hash(obj): | |
hash_object = hashlib.sha256() | |
hash_object.update(str(obj).encode()) | |
return hash_object.hexdigest()[0:20] | |
def get_dirs(): | |
dirs = [ | |
os.path.join(cache_dir, dir) | |
for dir in os.listdir(cache_dir) | |
if os.path.isdir(os.path.join(cache_dir, dir)) | |
] | |
return dirs | |
def get_time(dir): | |
try: | |
timefile = os.path.join(dir, time_filename) | |
t = float(open(timefile, encoding="utf-8").read()) | |
return t | |
except FileNotFoundError: | |
# handle the error as needed, for now we'll just return a default value | |
return float( | |
"inf" | |
) # This ensures that this directory will be the first to be removed if required | |
def write_time(dir): | |
timefile = os.path.join(dir, time_filename) | |
t = time.time() | |
print(t, file=open(timefile, "w", encoding="utf-8"), end="") | |
def argmin(iterable): | |
return min(enumerate(iterable), key=lambda x: x[1])[0] | |
def remove_extra(): | |
dirs = get_dirs() | |
for dir in dirs: | |
if not os.path.isdir( | |
dir | |
): # This line might be redundant now, as get_dirs() ensures only directories are returned | |
os.remove(dir) | |
try: | |
get_time(dir) | |
except BaseException: | |
shutil.rmtree(dir) | |
while True: | |
dirs = get_dirs() | |
if len(dirs) <= max_cache: | |
break | |
times = [get_time(dir) for dir in dirs] | |
arg = argmin(times) | |
shutil.rmtree(dirs[arg]) | |
def is_cached(hash_key): | |
dir = os.path.join(cache_dir, hash_key) | |
return os.path.exists(dir) | |
def create_cache(hash_key): | |
dir = os.path.join(cache_dir, hash_key) | |
os.makedirs(dir, exist_ok=True) | |
write_time(dir) | |
def load_paragraph(hash_key, hash_key_paragraph): | |
filename = os.path.join(cache_dir, hash_key, hash_key_paragraph) | |
if os.path.exists(filename): | |
return open(filename, encoding="utf-8").read() | |
else: | |
return None | |
def write_paragraph(hash_key, hash_key_paragraph, paragraph): | |
filename = os.path.join(cache_dir, hash_key, hash_key_paragraph) | |
print(paragraph, file=open(filename, "w", encoding="utf-8"), end="") | |