Coverage for src / competitive_verifier / oj / verify / list.py: 100%

39 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-03-05 16:00 +0000

1import sys 

2from logging import getLogger 

3from typing import BinaryIO 

4 

5from pydantic import BaseModel, ConfigDict, Field 

6 

7from competitive_verifier.oj.verify.languages import ( 

8 CPlusPlusLanguage, 

9 GoLanguage, 

10 HaskellLanguage, 

11 JavaLanguage, 

12 NimLanguage, 

13 OjVerifyCPlusPlusConfig, 

14 OjVerifyGoConfig, 

15 OjVerifyHaskellConfig, 

16 OjVerifyJavaConfig, 

17 OjVerifyNimConfig, 

18 OjVerifyRubyConfig, 

19 OjVerifyRustConfig, 

20 PythonLanguage, 

21 RubyLanguage, 

22 RustLanguage, 

23 UserDefinedLanguage, 

24) 

25from competitive_verifier.oj.verify.models import Language, OjVerifyUserDefinedConfig 

26 

27if sys.version_info >= (3, 11): # pragma: no cover 

28 import tomllib as tomli 

29else: # pragma: no cover 

30 import tomli 

31 

32logger = getLogger(__name__) 

33 

34 

35class OjVerifyLanguageConfigDict(BaseModel): 

36 model_config = ConfigDict(extra="allow") 

37 __pydantic_extra__: dict[str, OjVerifyUserDefinedConfig] = Field( # pyright: ignore[reportIncompatibleVariableOverride] 

38 default_factory=dict[str, OjVerifyUserDefinedConfig] 

39 ) 

40 

41 cpp: OjVerifyCPlusPlusConfig = Field(default_factory=OjVerifyCPlusPlusConfig) 

42 go: OjVerifyGoConfig = Field(default_factory=OjVerifyGoConfig) 

43 haskell: OjVerifyHaskellConfig = Field(default_factory=OjVerifyHaskellConfig) 

44 java: OjVerifyJavaConfig = Field(default_factory=OjVerifyJavaConfig) 

45 nim: OjVerifyNimConfig = Field(default_factory=OjVerifyNimConfig) 

46 ruby: OjVerifyRubyConfig = Field(default_factory=OjVerifyRubyConfig) 

47 rust: OjVerifyRustConfig = Field(default_factory=OjVerifyRustConfig) 

48 

49 

50class OjVerifyConfig(BaseModel): 

51 languages: OjVerifyLanguageConfigDict = Field( 

52 default_factory=OjVerifyLanguageConfigDict, 

53 ) 

54 

55 @classmethod 

56 def load(cls, fp: BinaryIO) -> "OjVerifyConfig": 

57 return OjVerifyConfig.model_validate(tomli.load(fp)) 

58 

59 def get_dict(self) -> dict[str, Language]: 

60 languages = self.languages 

61 d: dict[str, Language] = {} 

62 d[".cpp"] = CPlusPlusLanguage(config=languages.cpp) 

63 d[".hpp"] = d[".cpp"] 

64 d[".cc"] = d[".cpp"] 

65 d[".h"] = d[".cpp"] 

66 d[".nim"] = NimLanguage(config=languages.nim) 

67 d[".py"] = PythonLanguage() 

68 d[".hs"] = HaskellLanguage(config=languages.haskell) 

69 d[".ruby"] = RubyLanguage(config=languages.ruby) 

70 d[".go"] = GoLanguage(config=languages.go) 

71 d[".java"] = JavaLanguage(config=languages.java) 

72 d[".rs"] = RustLanguage(config=languages.rust) 

73 

74 for ext, lang_config in languages.__pydantic_extra__.items(): 

75 d["." + ext] = UserDefinedLanguage(extension=ext, config=lang_config) 

76 

77 return d