api-datamanager/Modules/File/FileImpl.py

140 lines
5.3 KiB
Python
Raw Normal View History

2022-08-02 15:53:13 +08:00
import os
2022-07-26 17:02:06 +08:00
from Utils.ObjUtil import SpecObject
from Utils.ValidateUtil import ValidateAttr
class FileObjImpl(object):
"""对象文件创建"""
@staticmethod
2022-08-02 15:53:13 +08:00
def get_project_abs_path(**kwargs):
file_abs_path = os.path.abspath(os.path.dirname(__file__))
project_abs_path = file_abs_path[:file_abs_path.find('wide_rating') + len('wide_rating')]
name = kwargs['name']
pdf_relative_path = '/Modules/File/static/{}'.format(name)
pdf_abs_path = os.path.abspath(project_abs_path + pdf_relative_path)
return pdf_abs_path
def new_file_obj(self, **kwargs):
2022-07-26 17:02:06 +08:00
"""
新建对象文件
1.根据参数动态创建class类
2.将代码写入.py文件保存
"""
data = kwargs['data']
name = data['class_name']
2022-08-02 15:53:13 +08:00
file_name = '{}.py'.format(name)
2022-07-26 17:02:06 +08:00
parameter = data['parameter']
2022-08-02 15:53:13 +08:00
filename = self.get_project_abs_path(name=file_name)
2022-07-26 17:02:06 +08:00
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')
2022-07-29 10:29:37 +08:00
def handle_fields(**args):
fields = args['param']
fields_name = args['class_name']
level = args['levels']
kind = args['kind']
# 判断类型(list)
if fields['types'] == 'classmethod' and kind == 'list':
list_instance = 'instance_list={}'.format(fields_name)
else:
2022-07-26 22:40:51 +08:00
list_instance = ''
2022-07-29 10:29:37 +08:00
# 判断类型(dict)
if len(list_instance) == 0:
if fields['types'] == 'classmethod' and kind == 'dict':
types = 'type={}'.format(fields_name)
else:
if fields['types'] == 'date':
types = 'func=Validate.date_format'
elif fields['types'] == 'time':
types = 'func=Validate.time_format'
else:
types = 'type={}'.format(fields['types'])
2022-07-26 22:40:51 +08:00
else:
types = ''
2022-07-29 10:29:37 +08:00
# 判断长度
2022-07-26 22:40:51 +08:00
if 'length' in fields:
length = 'length={}, '.format(fields['length'])
else:
length = ''
2022-07-29 10:29:37 +08:00
# 包含列表
2022-07-26 22:40:51 +08:00
if 'in_list' in fields:
in_list = 'in_list={}, '.format(fields['in_list'])
else:
in_list = ''
2022-07-29 10:29:37 +08:00
# 类名
2022-07-26 22:40:51 +08:00
class_names = fields['name']
if level == 'frist':
temp = f"\t{class_names} = ValidateAttr(field='{class_names}', {length}{list_instance}{in_list}{types})"
else:
temp = f"\t\t{class_names} = ValidateAttr(field='{class_names}', {length}{list_instance}{in_list}{types})"
f.write(temp)
f.write('\n')
2022-07-26 17:02:06 +08:00
# 写入子类
2022-07-29 10:29:37 +08:00
def hanlde_special(temp_data, temp_type):
2022-07-26 17:02:06 +08:00
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']:
2022-07-29 10:29:37 +08:00
# fields_map映射数据
2022-07-26 17:02:06 +08:00
temp_dict[list_param['name']] = list_param['chinese']
2022-07-29 10:29:37 +08:00
# 写入每个fields
handle_fields(param=list_param, class_name=temp_data['class_name'], levels='second', kind=temp_type)
2022-07-26 17:02:06 +08:00
temp_fields = '\t\tfields_map = {}'.format(str(temp_dict))
2022-07-26 22:40:51 +08:00
f.write('\n')
2022-07-26 17:02:06 +08:00
f.write(temp_fields)
f.write('\n')
2022-07-29 10:29:37 +08:00
# 第一次遍历,创建参数中的子类对象
2022-07-26 17:02:06 +08:00
for param in parameter:
2022-07-29 10:29:37 +08:00
# 为instance_list新建对象
2022-07-26 17:02:06 +08:00
if 'instance_list' in param:
instance_list = param['instance_list']
2022-07-29 10:29:37 +08:00
hanlde_special(instance_list, 'list')
# 为instance_dict新建对象
2022-07-26 17:02:06 +08:00
if 'instance_dict' in param:
instance_dict = param['instance_dict']
2022-07-29 10:29:37 +08:00
hanlde_special(instance_dict, 'dict')
2022-07-26 17:02:06 +08:00
2022-07-26 22:40:51 +08:00
f.write('\n')
first_dict = dict()
for param in parameter:
first_dict[param['name']] = param['chinese']
class_name = None
2022-07-29 10:29:37 +08:00
temp_type = None
2022-07-26 22:40:51 +08:00
if 'instance_list' in param:
instance_list = param['instance_list']
class_name = instance_list['class_name']
2022-07-29 10:29:37 +08:00
temp_type = 'list'
2022-07-26 22:40:51 +08:00
if 'instance_dict' in param:
instance_dict = param['instance_dict']
class_name = instance_dict['class_name']
2022-07-29 10:29:37 +08:00
temp_type = 'dict'
2022-07-26 22:40:51 +08:00
2022-07-29 10:29:37 +08:00
handle_fields(param=param, class_name=class_name, levels='frist', kind=temp_type)
2022-07-26 22:40:51 +08:00
f.write('\n')
frist_fields = '\tfields_map = {}'.format(str(first_dict))
f.write(frist_fields)
f.write('\n')
2022-07-29 10:29:37 +08:00
return '新建成功'
2022-07-26 22:40:51 +08:00