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
« prev ^ index » next coverage.py v7.13.1, created at 2026-04-26 12:38 +0900
1import sys
2from typing import BinaryIO
4from pydantic import BaseModel, ConfigDict, Field
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
38if sys.version_info >= (3, 11): # pragma: no cover
39 import tomllib as tomli
40else: # pragma: no cover
41 import tomli
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 )
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)
59class VerificationConfig(BaseModel):
60 languages: OjVerifyLanguageConfigDict = Field(
61 default_factory=OjVerifyLanguageConfigDict,
62 )
64 @classmethod
65 def load(cls, fp: BinaryIO) -> "VerificationConfig":
66 return VerificationConfig.model_validate(tomli.load(fp))
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)
83 for ext, lang_config in languages.__pydantic_extra__.items():
84 d["." + ext] = UserDefinedLanguage(extension=ext, config=lang_config)
86 return d
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]