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
« 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
5from pydantic import BaseModel, ConfigDict, Field
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
27if sys.version_info >= (3, 11): # pragma: no cover
28 import tomllib as tomli
29else: # pragma: no cover
30 import tomli
32logger = getLogger(__name__)
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 )
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)
50class OjVerifyConfig(BaseModel):
51 languages: OjVerifyLanguageConfigDict = Field(
52 default_factory=OjVerifyLanguageConfigDict,
53 )
55 @classmethod
56 def load(cls, fp: BinaryIO) -> "OjVerifyConfig":
57 return OjVerifyConfig.model_validate(tomli.load(fp))
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)
74 for ext, lang_config in languages.__pydantic_extra__.items():
75 d["." + ext] = UserDefinedLanguage(extension=ext, config=lang_config)
77 return d