from typing import Any
from pydantic import BaseModel, Field, field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
__all__ = ["ClientConfiguration", "client_config"]
class ClientCookie(BaseModel):
"""Pydantic model for cookies"""
name: str
value: str
[docs]
class ClientConfiguration(BaseSettings):
"""Configuration for cm-client."""
model_config = SettingsConfigDict(env_file="~/.pz-rail-service", env_file_encoding="utf-8")
service_url: str = Field(
default="http://localhost:8080/pz-rail-service/v1",
validation_alias="PZ_RAIL_SERVICE",
)
auth_token: str | None = Field(
default=None,
validation_alias="PZ_RAIL_TOKEN",
)
cookies: list[ClientCookie] | None = Field(
description=(
"Comma separated list of pipe-separated cookie names and values, e.g., `name|value,name|value`"
),
default=None,
validation_alias="PZ_RAIL_COOKIES",
)
timeout: float | None = Field(
default=None,
validation_alias="PZ_RAIL_TIMEOUT",
)
# Field validator to convert empty string, 'null', or 'None' to actual None
[docs]
@field_validator("timeout", mode="before", check_fields=True)
@classmethod
def validate_timeout(cls, v: Any) -> float | None:
if isinstance(v, str) and v in {"", "null", "None"}: # pragma: no cover
return None
return v
[docs]
@field_validator("cookies", mode="before", check_fields=True)
@classmethod
def validate_cookies(cls, v: Any) -> list[ClientCookie] | None:
if v is None: # pragma: no cover
return v
return [ClientCookie(name=n, value=v) for n, v in [a.split("|") for a in v.split(",")]]
client_config = ClientConfiguration()
"""Configuration for cm-client."""