Coverage for src / repo_sync_kitty / config / models.py: 100%
27 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-23 09:31 -0500
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-23 09:31 -0500
1"""Pydantic models for manifest configuration."""
3from pathlib import Path
4from typing import Literal
6from pydantic import BaseModel, Field
9class RemoteConfig(BaseModel):
10 """Configuration for a remote git forge."""
12 name: str
13 base_url: str
14 branch: str | None = None
15 parallelism: int | None = None
16 timeout: int | None = None
19class ProjectConfig(BaseModel):
20 """Configuration for a single project/repository."""
22 slug: str
23 path: Path
24 remote: str | None = None
25 branch: str | None = None
26 status: Literal["active", "archived", "deleted"] = "active"
29class CommonConfig(BaseModel):
30 """Common/default configuration values."""
32 root_path: Path
33 branch: str = "main"
34 remote: str
35 parallelism: int = Field(default=4, ge=1, le=32)
36 log_level: str = "info"
37 timeout: int = Field(default=300, ge=1)
38 ignore_extra: list[str] = Field(default_factory=list)
41class Manifest(BaseModel):
42 """Top-level manifest model."""
44 common: CommonConfig
45 remotes: list[RemoteConfig] = Field(default_factory=list)
46 projects: list[ProjectConfig] = Field(default_factory=list)