@@ -69,7 +69,8 @@ def get_checks(
6969 raise ValueError (f"Invalid slug format: { slug } . Expected 'course/stage'" )
7070
7171 course_slug , stage_slug = parts
72- cache_path = self .cache_dir / course_slug / language / stage_slug
72+ # Language-agnostic cache: course/stage (no language subdirectory)
73+ cache_path = self .cache_dir / course_slug / stage_slug
7374 version_file = cache_path / ".version"
7475
7576 # Check cache validity
@@ -78,7 +79,7 @@ def get_checks(
7879
7980 # Download all checks for this course (batch download is more efficient)
8081 # This will populate the cache for all accessible stages
81- self .get_all_checks (course_slug , language = language , force_update = force_update )
82+ self .get_all_checks (course_slug , force_update = force_update )
8283
8384 # Now return the specific stage's cache path
8485 if not cache_path .exists ():
@@ -111,18 +112,18 @@ def get_all_checks(
111112 Raises:
112113 APIError: If download fails
113114 """
114- course_cache = self .cache_dir / course_slug / language
115+ # Language-agnostic cache: course/ (no language subdirectory)
116+ course_cache = self .cache_dir / course_slug
115117 version_file = course_cache / ".course_version"
116118
117119 # Check if we should use cache
118120 if not force_update and self ._is_course_cache_valid (course_cache , version_file ):
119121 # Return cached stage paths
120122 return self ._get_cached_stages (course_cache )
121123
122- # Download all checks from API (batch download )
124+ # Download all checks from API (no language parameter - checks are language-agnostic )
123125 response = self .api .get (
124- f"/api/courses/{ course_slug } /checks" ,
125- params = {"language" : language }
126+ f"/api/courses/{ course_slug } /checks"
126127 )
127128
128129 # Write each stage to cache
@@ -280,40 +281,35 @@ def list_cache(self) -> List[Dict[str, str]]:
280281 if not course_dir .is_dir () or course_dir .name .startswith ("." ):
281282 continue
282283
283- for lang_dir in course_dir .iterdir ():
284- if not lang_dir .is_dir () or lang_dir .name .startswith ("." ):
284+ for stage_dir in course_dir .iterdir ():
285+ if not stage_dir .is_dir () or stage_dir .name .startswith ("." ):
285286 continue
286287
287- for stage_dir in lang_dir .iterdir ():
288- if not stage_dir .is_dir () or stage_dir .name .startswith ("." ):
289- continue
290-
291- version_file = stage_dir / ".version"
292- version = "unknown"
293- age = "unknown"
294-
295- if version_file .exists ():
296- try :
297- version = version_file .read_text ().strip ()
298- age_secs = time .time () - version_file .stat ().st_mtime
299- if age_secs < 60 :
300- age = f"{ int (age_secs )} s"
301- elif age_secs < 3600 :
302- age = f"{ int (age_secs / 60 )} m"
303- elif age_secs < 86400 :
304- age = f"{ int (age_secs / 3600 )} h"
305- else :
306- age = f"{ int (age_secs / 86400 )} d"
307- except OSError :
308- pass
309-
310- result .append ({
311- "course" : course_dir .name ,
312- "language" : lang_dir .name ,
313- "stage" : stage_dir .name ,
314- "version" : version [:8 ] if len (version ) > 8 else version ,
315- "age" : age ,
316- })
288+ version_file = stage_dir / ".version"
289+ version = "unknown"
290+ age = "unknown"
291+
292+ if version_file .exists ():
293+ try :
294+ version = version_file .read_text ().strip ()
295+ age_secs = time .time () - version_file .stat ().st_mtime
296+ if age_secs < 60 :
297+ age = f"{ int (age_secs )} s"
298+ elif age_secs < 3600 :
299+ age = f"{ int (age_secs / 60 )} m"
300+ elif age_secs < 86400 :
301+ age = f"{ int (age_secs / 3600 )} h"
302+ else :
303+ age = f"{ int (age_secs / 86400 )} d"
304+ except OSError :
305+ pass
306+
307+ result .append ({
308+ "course" : course_dir .name ,
309+ "stage" : stage_dir .name ,
310+ "version" : version [:8 ] if len (version ) > 8 else version ,
311+ "age" : age ,
312+ })
317313
318314 return result
319315
0 commit comments