From ef4323c6b4739d5c7b409072dfeb171ec859f7e0 Mon Sep 17 00:00:00 2001 From: geekan Date: Fri, 12 Jan 2024 17:02:07 +0800 Subject: [PATCH] refine code --- metagpt/utils/yaml_model.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/metagpt/utils/yaml_model.py b/metagpt/utils/yaml_model.py index 412a59825..8f2d22c3d 100644 --- a/metagpt/utils/yaml_model.py +++ b/metagpt/utils/yaml_model.py @@ -13,28 +13,36 @@ from pydantic import BaseModel, model_validator class YamlModel(BaseModel): + """Base class for yaml model""" + extra_fields: Optional[Dict[str, str]] = None @classmethod - def read_yaml(cls, file_path: Path) -> Dict: + def read_yaml(cls, file_path: Path, encoding: str = "utf-8") -> Dict: + """Read yaml file and return a dict""" if not file_path.exists(): return {} - with open(file_path, "r") as file: + with open(file_path, "r", encoding=encoding) as file: return yaml.safe_load(file) @classmethod def from_yaml_file(cls, file_path: Path) -> "YamlModel": + """Read yaml file and return a YamlModel instance""" return cls(**cls.read_yaml(file_path)) - def to_yaml_file(self, file_path: Path) -> None: - with open(file_path, "w") as file: + def to_yaml_file(self, file_path: Path, encoding: str = "utf-8") -> None: + """Dump YamlModel instance to yaml file""" + with open(file_path, "w", encoding=encoding) as file: yaml.dump(self.model_dump(), file) class YamlModelWithoutDefault(YamlModel): + """YamlModel without default values""" + @model_validator(mode="before") @classmethod def check_not_default_config(cls, values): + """Check if there is any default config in config.yaml""" if any(["YOUR" in v for v in values]): raise ValueError("Please set your config in config.yaml") return values