Source code for gcip2.project_config
1import pathlib
2import tomllib
3import typing
4
5from pydantic import BaseModel, ConfigDict, Field
6
7from gcip2.logging import logger as LOGGER
8from gcip2.project_config.compose import Compose
9from gcip2.project_config.vault_config import VaultConfig
10
11
[docs]
12class Secrets(BaseModel):
13 vault: dict[str, VaultConfig] = Field(default_factory=dict)
14
15
[docs]
16class System(BaseModel):
17 tasks_module: typing.Optional[str] = None
18 compose_path: typing.Optional[str] = None
19
20
42
43
[docs]
44class ProjectConfig(BaseModel):
[docs]
45 @classmethod
46 def from_file(
47 cls,
48 path: pathlib.Path = pathlib.Path("environment.toml"),
49 ) -> "ProjectConfig":
50 if not path.exists():
51 LOGGER.debug("ProjectConfig is not provided: file is not exists")
52 data = {}
53 else:
54 data = tomllib.loads(path.read_text())
55
56 _cfg = cls.model_validate(data)
57
58 compose_path = _cfg.extra.system.compose_path or "docker-compose.yml"
59 _cfg.compose = Compose.load(pathlib.Path(compose_path))
60
61 return _cfg
62
63 compose: Compose = Field(default_factory=Compose)
64
65 extra: Extra = Field(default_factory=Extra)