Skip to content

Commit 26116e3

Browse files
fix: remove language directory from checks cache path
- Checks are language-agnostic through adapter system - Changed cache path from course/language/stage to course/stage - Removed language parameter from API calls - Updated cache list display to remove language column - Reduces cache from 30 entries (3 languages × 10 stages) to 10 entries
1 parent f1e8381 commit 26116e3

File tree

2 files changed

+38
-42
lines changed

2 files changed

+38
-42
lines changed

bootcs/__main__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -877,14 +877,14 @@ def run_cache(args):
877877
print()
878878
termcolor.cprint("📦 Cached Checks:", "cyan", attrs=["bold"])
879879
print()
880-
print(f" {'Course':<10} {'Language':<10} {'Stage':<15} {'Version':<10} {'Age':<6}")
881-
print(f" {'-'*10} {'-'*10} {'-'*15} {'-'*10} {'-'*6}")
880+
print(f" {'Course':<10} {'Stage':<20} {'Version':<10} {'Age':<6}")
881+
print(f" {'-'*10} {'-'*20} {'-'*10} {'-'*6}")
882882

883883
for item in cached:
884-
print(f" {item['course']:<10} {item['language']:<10} {item['stage']:<15} {item['version']:<10} {item['age']:<6}")
884+
print(f" {item['course']:<10} {item['stage']:<20} {item['version']:<10} {item['age']:<6}")
885885

886886
print()
887-
print(f" Total: {len(cached)} cached checks")
887+
print(f" Total: {len(cached)} cached checks (language-agnostic)")
888888
print(f" Location: {manager.cache_dir}")
889889
print()
890890
return 0

bootcs/api/checks.py

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)