refactor: Update Settings class to use Optional types and streamline path resolution

This commit is contained in:
acano 2026-03-12 15:54:38 +01:00
parent 70a191ac37
commit c101a8f8da
1 changed files with 41 additions and 121 deletions

View File

@ -1,35 +1,29 @@
from pathlib import Path
from pydantic_settings import BaseSettings, SettingsConfigDict
from dotenv import load_dotenv
from typing import Optional
from pydantic_settings import BaseSettings, SettingsConfigDict
load_dotenv()
class Settings(BaseSettings):
raw_path_: str
data_path_: str
processed_path_: str
models_path_: str
external_path_: str
kubeconfig_path: str
interim_path_: str
database_url: str
openai_api_key: str
elasticsearch_index: str
elasticsearch_docs_index: str
elasticsearch_code_index: str
llm_base_url: str
ollama_url: str
ollama_local_url: str
langfuse_host: str
data_path_: Optional[str] = None
raw_path_: Optional[str] = None
processed_path_: Optional[str] = None
models_path_: Optional[str] = None
external_path_: Optional[str] = None
interim_path_: Optional[str] = None
kubeconfig_path_: Optional[str] = None
postgres_url: str
elasticsearch_url: str
elasticsearch_local_url: str
ollama_url: str
ollama_local_url: str
ollama_model_name: str
ollama_emb_model_name: str
model_name: str
hf_emb_model_name: str
langfuse_host: str
langfuse_public_key: str
langfuse_secret_key: str
hf_token: str
hf_emb_model_name: str
model_config = SettingsConfigDict(
env_file=".env",
@ -39,114 +33,40 @@ class Settings(BaseSettings):
)
@property
def proj_root(self) -> Path:
def project_root(self) -> Path:
return Path(__file__).resolve().parents[1]
@property
def data_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.data_path_
def _resolve_path(self, path: Optional[str]) -> Optional[Path]:
if path is None:
return None
return self.project_root / path
@property
def models_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.models_path_
def data_path(self) -> Optional[Path]:
return self._resolve_path(self.data_path_)
@property
def processed_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.processed_path_
def raw_path(self) -> Optional[Path]:
return self._resolve_path(self.raw_path_)
@property
def raw_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.raw_path_
def processed_path(self) -> Optional[Path]:
return self._resolve_path(self.processed_path_)
@property
def interim_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.interim_path_
def models_path(self) -> Optional[Path]:
return self._resolve_path(self.models_path_)
@property
def external_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.external_path_
def external_path(self) -> Optional[Path]:
return self._resolve_path(self.external_path_)
@property
def database_url(self) -> str:
return self.database_url
def interim_path(self) -> Optional[Path]:
return self._resolve_path(self.interim_path_)
@property
def openai_api_key(self) -> str:
return self.openai_api_key
@property
def elasticsearch_index(self) -> str:
return self.elasticsearch_index
@property
def elasticsearch_docs_index(self) -> str:
return self.elasticsearch_docs_index
@property
def elasticsearch_code_index(self) -> str:
return self.elasticsearch_code_index
@property
def llm_base_url(self) -> str:
return self.llm_base_url
@property
def ollama_url(self) -> str:
return self.ollama_url
@property
def ollama_local_url(self) -> str:
return self.ollama_local_url
@property
def langfuse_host(self) -> str:
return self.langfuse_host
@property
def elasticsearch_url(self) -> str:
return self.elasticsearch_url
@property
def elasticsearch_local_url(self) -> str:
return self.elasticsearch_local_url
@property
def ollama_model_name(self) -> str:
return self.ollama_model_name
@property
def ollama_emb_model_name(self) -> str:
return self.ollama_emb_model_name
@property
def model_name(self) -> str:
return self.model_name
@property
def hf_emb_model_name(self) -> str:
return self.hf_emb_model_name
@property
def langfuse_public_key(self) -> str:
return self.langfuse_public_key
@property
def langfuse_secret_key(self) -> str:
return self.langfuse_secret_key
@property
def hf_token(self) -> str:
return self.hf_token
@property
def kubeconfig_path(self) -> Path:
proj_root = self.proj_root
return proj_root / self.kubeconfig_path
def kubeconfig_path(self) -> Optional[Path]:
return self._resolve_path(self.kubeconfig_path_)
settings = Settings()