Two ways to create a new python project:
- create project by copier:
copier copy --trust https://github.com/fluent-qa/fluentqa-pytpl.git my-project
- create project by pdm
mkdir my-project && cd my-project pdm init https://github.com/fluent-qa/fluentqa-pytpl.git
data and format:
{ "key": "v1", "kList": [ "test", "t2" ], "kObj": { "k1": "v1", "k2": "v2" }, "kBool": true, "kNum": 4.3 }
class DemoModel(GenericDataModel): key: str k_list: [] k_obj: Any k_bool: bool k_num: float class DemoModelAlias(GenericDataModel): key: str k_list: [] k_obj: Any k_bool: bool # k_index: float = Field(alias='k_num') k_index: Annotated[float, Field(alias='kNum')] class DemoUnit(GenericDataModel): unit_group_name: str | None = "" unit_name: str | None = "" unit_symbol: str | None = "" unit_latex: str | None = "" base_unit: str | None = "" factor: str | None = "" class UnitInfoRawModel(BaseModel): unit_name: str = Field("", alias='单位名') unit_symbol: str = Field("", alias='单位符号') unit_symbol_latex: str = Field("", alias='单位符号LaTex') unit_group_name: str = Field("", alias='单位组名称') base_unit: str = Field("", alias='基准单位') conversion_factor: None|str |float = Field("", alias='换算系数') model_config = ConfigDict( arbitrary_types_allowed=True, populate_by_name=True, use_enum_values=True, ) class UnitInfo(GenericDataModel): unit_name: str = Field("", alias='单位名') unit_symbol: str = Field("", alias='单位符号') unit_symbol_latex: str = Field("", alias='单位符号LaTex') unit_group_name: str = Field("", alias='单位组名称') base_unit: str = Field("", alias='基准单位') conversion_factor: None|str |float = Field("", alias='换算系数')
def test_modelize_camel_naming(): result = DemoModel.parse_file("./structured-data/camel.json") print(result) def test_modelize_alias_naming(): result = DemoModelAlias.parse_file("./structured-data/camel-alias.json") print(result.k_index) print(result.model_dump_json(by_alias=True)) print(result.to_json()) def test_parse_as(): result = DemoModelAlias.parse_file("./structured-data/camel-alias.json") json_str = result.model_dump_json(by_alias=True) obj_model = sr.parse_as(json_str, DemoModelAlias) dict_obj = result.to_dict(by_alias=True) print(obj_model) dict_model = sr.parse_as(dict_obj, DemoModelAlias) assert dict_model.key == "v1" def test_parse_file_as(): result = operations.parse_file_as("./structured-data/camel-alias.json", DemoModelAlias) assert result.k_index == 4.3 def test_load_csv_files(): result = operations.parse_file_as("./structured-data/unit.csv", DemoUnit, data_format=DataFormatType.CSV) print(result) def test_load_excel_file(): result = operations.parse_file_as("./structured-data/unit_demo.xlsx", UnitInfo, data_format=DataFormatType.EXCEL) print(result) def test_load_excel_file_raw(): result = operations.parse_file_as("./structured-data/unit_demo.xlsx", UnitInfoRawModel, data_format=DataFormatType.EXCEL) print(result)