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

1from contextlib import nullcontext 

2from logging import getLogger 

3 

4from competitive_verifier import log 

5from competitive_verifier.models import Problem 

6 

7from .problem import NotLoggedInError, problem_from_url 

8 

9logger = getLogger(__name__) 

10 

11 

12def _run(*, problem: Problem) -> bool: 

13 return bool(problem.download_system_cases()) 

14 

15 

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 

26 

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