Coverage for src / competitive_verifier / oj / oj_download.py: 100%
22 statements
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-05 16:00 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2026-03-05 16:00 +0000
1from contextlib import nullcontext
2from logging import getLogger
4from competitive_verifier import log
5from competitive_verifier.models import Problem
7from .problem import NotLoggedInError, problem_from_url
9logger = getLogger(__name__)
12def _run(*, problem: Problem) -> bool:
13 return bool(problem.download_system_cases())
16def main(url: str, *, group_log: bool = False) -> bool:
17 # prepare values
18 problem = problem_from_url(url)
19 if problem is None:
20 logger.error(
21 'The URL "%s" is not supported',
22 url,
23 extra={"github": log.GitHubMessageParams()},
24 )
25 return False
27 with (
28 log.group(f"download[Run]: {url}")
29 if group_log
30 else nullcontext(logger.info("download[Run]: %s", url))
31 ):
32 try:
33 _run(problem=problem)
34 except Exception as e:
35 if isinstance(e, NotLoggedInError):
36 logger.exception(
37 "Login is required to download the problem. %r",
38 url,
39 extra={"github": log.GitHubMessageParams()},
40 )
41 else:
42 logger.exception(
43 "Failed to download. %r",
44 url,
45 extra={"github": log.GitHubMessageParams()},
46 )
47 return False
48 return True