Source code for gcip2.tasks_core.models.params
1import dataclasses
2import typing
3
4import injector
5import pydantic
6
7from gcip2.project_config import ProjectConfig
8
9
[docs]
10class Param(pydantic.BaseModel):
11 name: str
12 default: typing.Any = None
13 long: str
14
15 short: typing.Optional[str] = ""
16 type: typing.Callable[[typing.Any], typing.Any] = lambda x: x
17 help: typing.Optional[str] = None
18 env_var: typing.Optional[str] = None
19 inverse: typing.Optional[str] = None
20
21
[docs]
22@injector.inject
23@dataclasses.dataclass
24class Params:
25 config: ProjectConfig
26
[docs]
27 def ci(self):
28 return Param(
29 name="ci",
30 long="ci",
31 type=bool,
32 default=False,
33 env_var="CI",
34 )
35
[docs]
36 def from_config(self, key: str, **kwargs):
37 return Param(
38 name=f"extra__{key}",
39 long=key.replace("_", "-"),
40 default=(self.config.extra.model_extra or {}).get(key),
41 **kwargs,
42 )