Closed WolfgangFahl closed 5 months ago
@lod_storable class WebserverConfig: """ configuration of a webserver """ # the short name to be used e.g. for determining the default storage_path short_name: str # set your copyright string here copy_right: Optional[str] = "" default_port: int = 9860 version: Optional[Version] = None color_schema: ColorSchema = field(default_factory=ColorSchema.indigo) detailed_menu: bool = True timeout: Optional[bool] = None storage_secret: Optional[str] = None storage_path: Optional[str] = None config_path: Optional[str] = None def __post_init__(self): """ make sure the necessary fields exist """ self.config_path = self.base_path self.storage_path = self.storage_path or os.path.join(self.base_path, "storage") self.storage_secret = self.storage_secret or str(uuid.uuid4()) @property def yaml_path(self) -> str: return os.path.join(self.config_path, f"{self.short_name}_config.yaml") @property def base_path(self)->str: base_path = self.config_path or os.path.join(os.path.expanduser("~"), ".solutions", self.short_name) return base_path @classmethod def get(cls, config: "WebserverConfig") -> "WebserverConfig": if os.path.exists(config.yaml_path): # Load the existing config server_config = cls.load_from_yaml_file(config.yaml_path) else: # Create the directories to make sure they exist os.makedirs(config.config_path, exist_ok=True) os.makedirs(config.storage_path, exist_ok=True) # Use the provided default_config as the initial configuration server_config = config server_config.save_to_yaml_file(config.yaml_path) return server_config