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="") | |