Coverage for src / competitive_verifier / oj / languages / __init__.py: 100%

46 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-04-26 12:38 +0900

1import sys 

2from typing import BinaryIO 

3 

4from pydantic import BaseModel, ConfigDict, Field 

5 

6from .base import ( 

7 Language, 

8 LanguageEnvironment, 

9 OjVerifyLanguageConfig, 

10 OjVerifyUserDefinedConfig, 

11) 

12from .cplusplus import ( 

13 CPlusPlusLanguage, 

14 OjVerifyCPlusPlusConfig, 

15) 

16from .go import GoLanguage, OjVerifyGoConfig 

17from .haskell import ( 

18 HaskellLanguage, 

19 OjVerifyHaskellConfig, 

20) 

21from .java import ( 

22 JavaLanguage, 

23 OjVerifyJavaConfig, 

24) 

25from .nim import NimLanguage, OjVerifyNimConfig 

26from .python import PythonLanguage 

27from .ruby import ( 

28 OjVerifyRubyConfig, 

29 RubyLanguage, 

30) 

31from .rust import ( 

32 OjVerifyRustConfig, 

33 OjVerifyRustListDependenciesBackend, 

34 RustLanguage, 

35) 

36from .user_defined import UserDefinedLanguage 

37 

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

39 import tomllib as tomli 

40else: # pragma: no cover 

41 import tomli 

42 

43 

44class OjVerifyLanguageConfigDict(BaseModel): 

45 model_config = ConfigDict(extra="allow") 

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

47 default_factory=dict[str, OjVerifyUserDefinedConfig] 

48 ) 

49 

50 cpp: OjVerifyCPlusPlusConfig = Field(default_factory=OjVerifyCPlusPlusConfig) 

51 go: OjVerifyGoConfig = Field(default_factory=OjVerifyGoConfig) 

52 haskell: OjVerifyHaskellConfig = Field(default_factory=OjVerifyHaskellConfig) 

53 java: OjVerifyJavaConfig = Field(default_factory=OjVerifyJavaConfig) 

54 nim: OjVerifyNimConfig = Field(default_factory=OjVerifyNimConfig) 

55 ruby: OjVerifyRubyConfig = Field(default_factory=OjVerifyRubyConfig) 

56 rust: OjVerifyRustConfig = Field(default_factory=OjVerifyRustConfig) 

57 

58 

59class VerificationConfig(BaseModel): 

60 languages: OjVerifyLanguageConfigDict = Field( 

61 default_factory=OjVerifyLanguageConfigDict, 

62 ) 

63 

64 @classmethod 

65 def load(cls, fp: BinaryIO) -> "VerificationConfig": 

66 return VerificationConfig.model_validate(tomli.load(fp)) 

67 

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

69 languages = self.languages 

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

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

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

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

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

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

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

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

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

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

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

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

82 

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

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

85 

86 return d 

87 

88 

89__all__ = [ 

90 "CPlusPlusLanguage", 

91 "GoLanguage", 

92 "HaskellLanguage", 

93 "JavaLanguage", 

94 "Language", 

95 "LanguageEnvironment", 

96 "NimLanguage", 

97 "OjVerifyCPlusPlusConfig", 

98 "OjVerifyGoConfig", 

99 "OjVerifyHaskellConfig", 

100 "OjVerifyJavaConfig", 

101 "OjVerifyLanguageConfig", 

102 "OjVerifyNimConfig", 

103 "OjVerifyRubyConfig", 

104 "OjVerifyRustConfig", 

105 "OjVerifyRustListDependenciesBackend", 

106 "OjVerifyUserDefinedConfig", 

107 "PythonLanguage", 

108 "RubyLanguage", 

109 "RustLanguage", 

110 "UserDefinedLanguage", 

111 "VerificationConfig", 

112]