from Utils.ObjUtil import SpecObject from Utils.ValidateUtil import ValidateAttr class FileObjImpl(object): """对象文件创建""" @staticmethod def new_file_obj(**kwargs): """ 新建对象文件 1.根据参数动态创建class类 2.将代码写入.py文件保存 """ data = kwargs['data'] name = data['class_name'] parameter = data['parameter'] filename = './static/{}.py'.format(name) with open(filename, 'w', encoding="utf-8") as f: f.write('from Utils.ObjUtil import SpecObject') f.write('\n') f.write('from Utils.ValidateUtil import ValidateAttr, Validate') f.write('\n') f.write('\n') f.write('\n') f.write('class {}(SpecObject):'.format(name)) f.write('\n') # 写入子类 def hanlde_special(temp_data): f.write('\n') f.write('\tclass {}(SpecObject):'.format(temp_data['class_name'])) f.write('\n') temp_dict = dict() for list_param in temp_data['parameter']: temp_dict[list_param['name']] = list_param['chinese'] if list_param['types'] != 'classmethod': types = 'type={}'.format(list_param['types']) list_instance = 'N' else: types = 'N' list_instance = 'instance_list={}'.format(temp_data['class_name']) if 'length' in list_param: length = 'length={}'.format(list_param['length']) else: length = 'N' if 'in_list' in list_param: in_list = 'in_list={}'.format(list_param['in_list']) else: in_list = 'N' class_name = list_param['name'] temp = f"\t\t{class_name} = ValidateAttr(field='{class_name}', {types}, {list_instance}, {in_list}, {length})" f.write(temp) f.write('\n') temp_fields = '\t\tfields_map = {}'.format(str(temp_dict)) f.write(temp_fields) f.write('\n') for param in parameter: if 'instance_list' in param: instance_list = param['instance_list'] hanlde_special(instance_list) if 'instance_dict' in param: instance_dict = param['instance_dict'] hanlde_special(instance_dict) if __name__ == '__main__': param_data = { "class_name": "TestFile", "parameter": [ { "chinese": "函数ID", "name": "func_id", "types": "str", "length": 8 }, { "chinese": "参数", "name": "param", "types": "classmethod", "instance_list": { "class_name": "Param", "parameter": [ { "chinese": "参数名", "name": "name", "types": "str" }, { "chinese": "备注", "name": "mark", "types": "str" } ] } }, { "chinese": "标签", "name": "tags", "types": "classmethod", "instance_dict": { "class_name": "Tags", "parameter": [ { "chinese": "参数名", "name": "name", "types": "str" }, { "chinese": "备注", "name": "mark", "types": "str" } ] } } ] } file = FileObjImpl() file.new_file_obj(data=param_data)