Source code for fitrequest.fit_var

import os
from functools import cached_property
from typing import Annotated, Any

from pydantic import BaseModel, BeforeValidator, Field, model_serializer

from fitrequest.aws_var import AWSRegionEnum, AWSSecretTypeEnum, AWSVar


[docs] class FitVar(BaseModel): aws_path: str | None = None aws_type: AWSSecretTypeEnum = AWSSecretTypeEnum.ssm aws_region: AWSRegionEnum = AWSRegionEnum.eu_central_1 env_name: str | None = None init_value: str | None = None @cached_property def aws_value(self) -> str | None: if not self.aws_path: return None return AWSVar(region=self.aws_region, path=self.aws_path, secret_type=self.aws_type).value @cached_property def env_value(self) -> str | None: if not self.env_name: return None return os.environ.get(self.env_name) def __str__(self) -> str: """ Return value with the following priority: 1/ init value (manually set field on instance initialization) 2/ environment variable 3/ aws value if aws_type and aws_path are set 4/ default '' value """ return self.init_value or self.env_value or self.aws_value or '' @model_serializer def fit_var_serializer(self) -> str | None: return str(self)
def validate_init_value(value: Any) -> FitVar | None: if isinstance(value, str): return FitVar(init_value=value) if isinstance(value, FitVar): return value if isinstance(value, dict): return FitVar(**value) return None ValidFitVar = Annotated[ FitVar | dict | str | None, Field(validate_default=True), BeforeValidator(validate_init_value), ]