File size: 2,194 Bytes
5374a2d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# from pydantic import BaseModel
from typing import Optional, List
from .module import BaseModule
class BaseConfig(BaseModule):
"""
Base configuration class that serves as parent for all configuration classes.
A config should inherit BaseConfig and specify the attributes and their types.
Otherwise this will be an empty config.
"""
def save(self, path: str, **kwargs)-> str:
"""Save configuration to the specified path.
Args:
path: The file path to save the configuration
**kwargs (Any): Additional keyword arguments passed to save_module method
Returns:
str: The path where the file was saved
"""
return super().save_module(path, **kwargs)
def get_config_params(self) -> List[str]:
"""Get a list of configuration parameters.
Returns:
List[str]: List of configuration parameter names, excluding 'class_name'
"""
config_params = list(type(self).model_fields.keys())
config_params.remove("class_name")
return config_params
def get_set_params(self, ignore: List[str] = []) -> dict:
"""Get a dictionary of explicitly set parameters.
Args:
ignore: List of parameter names to ignore
Returns:
dict: Dictionary of explicitly set parameters, excluding 'class_name' and ignored parameters
"""
explicitly_set_fields = {field: getattr(self, field) for field in self.model_fields_set}
if self.kwargs:
explicitly_set_fields.update(self.kwargs)
for field in ignore:
explicitly_set_fields.pop(field, None)
explicitly_set_fields.pop("class_name", None)
return explicitly_set_fields
class Parameter(BaseModule):
"""Parameter class used to define configuration parameters.
Attributes:
name: Parameter name
type: Parameter type
description: Parameter description
required: Whether the parameter is required, defaults to True
"""
name: str
type: str
description: str
required: Optional[bool] = True
|