| import hashlib |
| import json |
| import os |
| import logging |
|
|
| logger = logging.getLogger(__name__) |
|
|
| CACHE_DIR = "outputs/cache" |
|
|
| def get_file_hash(file_path): |
| """Calculates MD5 hash of a file.""" |
| hasher = hashlib.md5() |
| with open(file_path, 'rb') as f: |
| buf = f.read(65536) |
| while len(buf) > 0: |
| hasher.update(buf) |
| buf = f.read(65536) |
| return hasher.hexdigest() |
|
|
| def get_cache_path(file_path, suffix=".json"): |
| """Returns the path to the cache file based on the input file's MD5 hash.""" |
| if not os.path.exists(CACHE_DIR): |
| os.makedirs(CACHE_DIR) |
| |
| file_hash = get_file_hash(file_path) |
| return os.path.join(CACHE_DIR, f"{file_hash}{suffix}") |
|
|
| def save_to_cache(file_path, data): |
| """Saves data to a cache file.""" |
| cache_path = get_cache_path(file_path) |
| try: |
| with open(cache_path, 'w', encoding='utf-8') as f: |
| json.dump(data, f, ensure_ascii=False) |
| logger.info(f"Saved landmarks to cache: {cache_path}") |
| return True |
| except Exception as e: |
| logger.error(f"Error saving to cache: {e}") |
| return False |
|
|
| def load_from_cache(file_path): |
| """Loads data from a cache file if it exists.""" |
| cache_path = get_cache_path(file_path) |
| if os.path.exists(cache_path): |
| try: |
| with open(cache_path, 'r', encoding='utf-8') as f: |
| data = json.load(f) |
| logger.info(f"Loaded landmarks from cache: {cache_path}") |
| return data |
| except Exception as e: |
| logger.error(f"Error loading from cache: {e}") |
| return None |
|
|