Auto-update: Thu Aug 8 18:08:09 PDT 2024

This commit is contained in:
sanj 2024-08-08 18:08:09 -07:00
parent 95441ae20e
commit 9ec5a15d2f

View file

@ -130,6 +130,7 @@ class Configuration(BaseModel):
err(f"Error loading configuration: {str(e)}") err(f"Error loading configuration: {str(e)}")
raise raise
@classmethod @classmethod
def _resolve_path(cls, path: Union[str, Path], default_dir: str) -> Path: def _resolve_path(cls, path: Union[str, Path], default_dir: str) -> Path:
base_path = Path(__file__).parent.parent base_path = Path(__file__).parent.parent
@ -140,6 +141,7 @@ class Configuration(BaseModel):
path = base_path / path path = base_path / path
return path return path
def resolve_placeholders(self, data: Any, secrets_data: Dict[str, Any]) -> Any: def resolve_placeholders(self, data: Any, secrets_data: Dict[str, Any]) -> Any:
if isinstance(data, dict): if isinstance(data, dict):
resolved_data = {k: self.resolve_placeholders(v, secrets_data) for k, v in data.items()} resolved_data = {k: self.resolve_placeholders(v, secrets_data) for k, v in data.items()}
@ -153,10 +155,11 @@ class Configuration(BaseModel):
elif isinstance(data, list): elif isinstance(data, list):
return [self.resolve_placeholders(v, secrets_data) for v in data] return [self.resolve_placeholders(v, secrets_data) for v in data]
elif isinstance(data, str): elif isinstance(data, str):
return self.resolve_string_placeholders(data, secrets_data, self.HOME) return self.resolve_string_placeholders(data, secrets_data, Path(self.HOME))
else: else:
return data return data
def resolve_string_placeholders(self, value: str, secrets_data: Dict[str, Any], home_dir: Path) -> Any: def resolve_string_placeholders(self, value: str, secrets_data: Dict[str, Any], home_dir: Path) -> Any:
pattern = r'\{\{\s*([^}]+)\s*\}\}' pattern = r'\{\{\s*([^}]+)\s*\}\}'
matches = re.findall(pattern, value) matches = re.findall(pattern, value)
@ -182,7 +185,8 @@ class Configuration(BaseModel):
if isinstance(value, str) and (value.startswith(('/', '~')) or (':' in value and value[1] == ':')): if isinstance(value, str) and (value.startswith(('/', '~')) or (':' in value and value[1] == ':')):
return Path(value).expanduser() return Path(value).expanduser()
return value return value
@classmethod @classmethod
def create_dynamic_model(cls, **data): def create_dynamic_model(cls, **data):
for key, value in data.items(): for key, value in data.items():
@ -198,13 +202,13 @@ class Configuration(BaseModel):
) )
return DynamicModel(**data) return DynamicModel(**data)
class Config: class Config:
extra = "allow" extra = "allow"
arbitrary_types_allowed = True arbitrary_types_allowed = True
class DirConfig(BaseModel): class DirConfig(BaseModel):
HOME: Path = Path.home() HOME: Path = Path.home()