feat: adauga --modules filter si la download.py
Parametrul din run.bat (ex: 4-5) era transmis doar la transcribe.py. Acum download.py primeste acelasi filtru si descarca doar modulele specificate. Sintaxa acceptata: '4-5', '1,3', '1-3,5'. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
26
download.py
26
download.py
@@ -49,6 +49,19 @@ def login(session: requests.Session, email: str, password: str) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def parse_module_filter(arg: str) -> set[int]:
|
||||||
|
"""Parse module filter like '1-3' or '4,5' or '1-3,5' into a set of 1-based indices."""
|
||||||
|
result = set()
|
||||||
|
for part in arg.split(","):
|
||||||
|
part = part.strip()
|
||||||
|
if "-" in part:
|
||||||
|
a, b = part.split("-", 1)
|
||||||
|
result.update(range(int(a), int(b) + 1))
|
||||||
|
else:
|
||||||
|
result.add(int(part))
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def discover_modules(session: requests.Session) -> list[dict]:
|
def discover_modules(session: requests.Session) -> list[dict]:
|
||||||
"""Fetch course page and return list of {name, url, module_id}."""
|
"""Fetch course page and return list of {name, url, module_id}."""
|
||||||
resp = session.get(COURSE_URL)
|
resp = session.get(COURSE_URL)
|
||||||
@@ -157,6 +170,14 @@ def main():
|
|||||||
log.error("Set COURSE_USERNAME and COURSE_PASSWORD in .env")
|
log.error("Set COURSE_USERNAME and COURSE_PASSWORD in .env")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Parse --modules filter (e.g. "4-5" or "1,3,5")
|
||||||
|
module_filter = None
|
||||||
|
if "--modules" in sys.argv:
|
||||||
|
idx = sys.argv.index("--modules")
|
||||||
|
if idx + 1 < len(sys.argv):
|
||||||
|
module_filter = parse_module_filter(sys.argv[idx + 1])
|
||||||
|
log.info(f"Module filter: {sorted(module_filter)}")
|
||||||
|
|
||||||
AUDIO_DIR.mkdir(exist_ok=True)
|
AUDIO_DIR.mkdir(exist_ok=True)
|
||||||
|
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
@@ -185,7 +206,10 @@ def main():
|
|||||||
skipped = 0
|
skipped = 0
|
||||||
failed = 0
|
failed = 0
|
||||||
|
|
||||||
for mod in modules:
|
for mod_idx, mod in enumerate(modules, 1):
|
||||||
|
if module_filter and mod_idx not in module_filter:
|
||||||
|
log.info(f" Skipping module {mod_idx}: {mod['name']}")
|
||||||
|
continue
|
||||||
lectures = discover_lectures(session, mod)
|
lectures = discover_lectures(session, mod)
|
||||||
module_entry = {
|
module_entry = {
|
||||||
"name": mod["name"],
|
"name": mod["name"],
|
||||||
|
|||||||
7
run.bat
7
run.bat
@@ -265,7 +265,12 @@ echo Done.
|
|||||||
echo.
|
echo.
|
||||||
echo [3/4] Downloading audio files...
|
echo [3/4] Downloading audio files...
|
||||||
echo ============================================================
|
echo ============================================================
|
||||||
.venv\Scripts\python download.py
|
if "%~1"=="" (
|
||||||
|
.venv\Scripts\python download.py
|
||||||
|
) else (
|
||||||
|
echo Modules filter: %~1
|
||||||
|
.venv\Scripts\python download.py --modules %~1
|
||||||
|
)
|
||||||
if errorlevel 1 (
|
if errorlevel 1 (
|
||||||
echo.
|
echo.
|
||||||
echo WARNING: Some downloads failed. Check download_errors.log
|
echo WARNING: Some downloads failed. Check download_errors.log
|
||||||
|
|||||||
Reference in New Issue
Block a user