Coverage for src/flag_gems/utils/code_cache.py: 77%

26 statements  

« prev     ^ index     » next       coverage.py v7.6.9, created at 2026-03-07 22:33 +0800

1import functools 

2import os 

3import shutil 

4from pathlib import Path 

5 

6 

7@functools.lru_cache(maxsize=None) # this is the same as functools.cache in Python 3.9+ 

8def cache_dir_path() -> Path: 

9 """Return the cache directory for generated files in flaggems.""" 

10 _cache_dir = os.environ.get("FLAGGEMS_CACHE_DIR") 

11 if _cache_dir is None: 

12 _cache_dir = Path.home() / ".flaggems" 

13 else: 

14 _cache_dir = Path(_cache_dir) 

15 return _cache_dir 

16 

17 

18def cache_dir() -> Path: 

19 """Return cache directory for generated files in flaggems. Create it if it does not exist.""" 

20 _cache_dir = cache_dir_path() 

21 os.makedirs(_cache_dir, exist_ok=True) 

22 return _cache_dir 

23 

24 

25def code_cache_dir() -> Path: 

26 _code_cache_dir = cache_dir() / "code_cache" 

27 os.makedirs(_code_cache_dir, exist_ok=True) 

28 return _code_cache_dir 

29 

30 

31def config_cache_dir() -> Path: 

32 _config_cache_dir = cache_dir() / "config_cache" 

33 os.makedirs(_config_cache_dir, exist_ok=True) 

34 return _config_cache_dir 

35 

36 

37def clear_cache(): 

38 """Clear the cache directory for code cache.""" 

39 _cache_dir = cache_dir_path() 

40 shutil.rmtree(_cache_dir)