update 重写文件生成器

This commit is contained in:
P3ngSaM 2022-08-10 15:15:58 +08:00
parent c85e0f2fa0
commit 9aada26aaa
2 changed files with 223 additions and 128 deletions

View File

@ -23,7 +23,45 @@ class FileObjImpl(object):
def hanlde_field(**args):
"""处理每个字段"""
pass
sub_data = args['sub_data']
# 属性
field_name = sub_data['attribute']
# 类型
types = sub_data['type']
# 校验类型
verify = sub_data['verify']
if verify == 'type':
if len(types) != 1:
types = 'type={}'.format(types)
else:
types = 'type={}'.format(types[0])
elif verify == 'instance_list':
types = 'instance_list={}'.format(types[0])
else:
types = 'func=Validate.{}'.format(types[0])
# 默认
if 'default' in sub_data:
default = 'default={}'.format(sub_data['default'])
else:
default = ''
# 补充校验
if 'complement' in sub_data:
# 字符长度
if 'length' in sub_data['complement']:
length = 'length={}, '.format(sub_data['complement']['length'])
else:
length = ''
# 数据范围
if 'in_list' in sub_data['complement']:
in_list = 'in_list={}, '.format(sub_data['complement']['in_list'])
else:
in_list = ''
else:
length = ''
in_list = ''
temp = f"\t{field_name} = ValidateAttr(field='{field_name}', {length}{default}{in_list}{types})"
f.write(temp)
f.write('\n')
with open(path, 'w', encoding='utf-8') as f:
f.write('from Utils.ObjUtil import SpecObject')
@ -42,11 +80,191 @@ class FileObjImpl(object):
for sub in item['parameter']:
mapping_data[sub['attribute']] = sub['chinese']
hanlde_field(sub_data=sub)
temp_fields = '\t\tfields_map = {}'.format(str(mapping_data))
temp_fields = '\tfields_map = {}'.format(str(mapping_data))
f.write('\n')
f.write(temp_fields)
f.write('\n')
@staticmethod
def write_impl_file(**kwargs):
"""写入impl文件"""
path = kwargs['impl_path']
package_data = kwargs['package_data']
package_name = package_data['package_name']
obj_name = package_data['obj_name']
impl_name = package_data['impl_name']
impl_range = package_data['impl_range']
obj_list = list()
for obj in package_data['class_data']:
obj_list.append(obj['class_name'])
obj = ', '.join(obj_list)
with open(path, 'w', encoding='utf-8') as f:
f.write('from DBHelper.MongoHelperInstance import DB_TEST')
f.write('\n')
f.write('from Modules.{package_name}.{obj_name} import {obj}'.format(package_name=package_name, obj_name=obj_name, obj=obj))
f.write('\n')
f.write('\n')
f.write('\n')
f.write('class {}(object):'.format(impl_name))
f.write('\n')
if '增加' in impl_range:
f.write('\n')
f.write('\t@staticmethod')
f.write('\n')
f.write('\tdef new_data(**kwargs):')
f.write('\n')
f.write('\t\tpass')
f.write('\n')
if '删除' in impl_range:
f.write('\n')
f.write('\t@staticmethod')
f.write('\n')
f.write('\tdef delete_data(**kwargs):')
f.write('\n')
f.write('\t\tpass')
f.write('\n')
if '修改' in impl_range:
f.write('\n')
f.write('\t@staticmethod')
f.write('\n')
f.write('\tdef update_data(**kwargs):')
f.write('\n')
f.write('\t\tpass')
f.write('\n')
if '查询' in impl_range:
f.write('\n')
f.write('\t@staticmethod')
f.write('\n')
f.write('\tdef search_data(**kwargs):')
f.write('\n')
f.write('\t\tpass')
f.write('\n')
@staticmethod
def write_route_file(**kwargs):
"""写入route文件"""
path = kwargs['route_path']
package_data = kwargs['package_data']
package_name = package_data['package_name']
impl_name = package_data['impl_name']
route_prefix = package_data['route_prefix']
impl_range = package_data['impl_range']
with open(path, 'w', encoding='utf-8') as f:
f.write('from flask import Blueprint, request')
f.write('\n')
f.write('from Utils.ErrorUtil import APIReturnError')
f.write('\n')
f.write('from Utils.RouteUtil import RouteParamsCheck')
f.write('\n')
f.write('from Modules.{package_name}.{impl_name} import {impl_name}'.format(package_name=package_name, impl_name=impl_name))
f.write('\n')
f.write('\n')
f.write('{route_prefix}_route = Blueprint("{route_prefix}", __name__)'.format(route_prefix=route_prefix))
f.write('\n')
if '增加' in impl_range:
f.write('\n')
f.write('\n')
f.write('@{route_prefix}_route.route("/new_data", methods=["POST"])'.format(route_prefix=route_prefix))
f.write('\n')
f.write('def new_data_route():')
f.write('\n')
f.write('\ttry:')
f.write('\n')
f.write('\t\tRouteParamsCheck(req=request.json, params=[]).required()')
f.write('\n')
f.write('\t\tdata = request.json')
f.write('\n')
f.write('\t\timpl = {}()'.format(impl_name))
f.write('\n')
f.write('\t\tresult = impl.new_data(data=data)')
f.write('\n')
f.write('\t\treturn {"info": "新增数据", "result": result}, 200')
f.write('\n')
f.write('\texcept APIReturnError as e:')
f.write('\n')
f.write('\t\treturn {"info": e.__str__()}, e.status_code')
f.write('\n')
if '删除' in impl_range:
f.write('\n')
f.write('\n')
f.write('@{route_prefix}_route.route("/delete_data", methods=["GET"])'.format(route_prefix=route_prefix))
f.write('\n')
f.write('def delete_data_route():')
f.write('\n')
f.write('\ttry:')
f.write('\n')
f.write('\t\tRouteParamsCheck(req=request.args, params=[]).required()')
f.write('\n')
f.write('\t\tdata = request.args')
f.write('\n')
f.write('\t\timpl = {}()'.format(impl_name))
f.write('\n')
f.write('\t\tresult = impl.delete_data(data=data)')
f.write('\n')
f.write('\t\treturn {"info": "删除数据", "result": result}, 200')
f.write('\n')
f.write('\texcept APIReturnError as e:')
f.write('\n')
f.write('\t\treturn {"info": e.__str__()}, e.status_code')
f.write('\n')
if '修改' in impl_range:
f.write('\n')
f.write('\n')
f.write('@{route_prefix}_route.route("/update_data", methods=["POST"])'.format(route_prefix=route_prefix))
f.write('\n')
f.write('def update_data_route():')
f.write('\n')
f.write('\ttry:')
f.write('\n')
f.write('\t\tRouteParamsCheck(req=request.json, params=[]).required()')
f.write('\n')
f.write('\t\tdata = request.json')
f.write('\n')
f.write('\t\timpl = {}()'.format(impl_name))
f.write('\n')
f.write('\t\tresult = impl.update_data(data=data)')
f.write('\n')
f.write('\t\treturn {"info": "修改数据", "result": result}, 200')
f.write('\n')
f.write('\texcept APIReturnError as e:')
f.write('\n')
f.write('\t\treturn {"info": e.__str__()}, e.status_code')
f.write('\n')
if '查询' in impl_range:
f.write('\n')
f.write('\n')
f.write('@{route_prefix}_route.route("/search_data", methods=["POST"])'.format(route_prefix=route_prefix))
f.write('\n')
f.write('def search_data_route():')
f.write('\n')
f.write('\ttry:')
f.write('\n')
f.write('\t\tRouteParamsCheck(req=request.json, params=[]).required()')
f.write('\n')
f.write('\t\tdata = request.json')
f.write('\n')
f.write('\t\timpl = {}()'.format(impl_name))
f.write('\n')
f.write('\t\tresult = impl.search_data(data=data)')
f.write('\n')
f.write('\t\treturn {"info": "查询数据", "result": result}, 200')
f.write('\n')
f.write('\texcept APIReturnError as e:')
f.write('\n')
f.write('\t\treturn {"info": e.__str__()}, e.status_code')
f.write('\n')
def create_package(self, **kwargs):
"""根据包名创建包"""
package_data = kwargs['package_data']
@ -55,8 +273,6 @@ class FileObjImpl(object):
obj_name = package_data['obj_name']
impl_name = package_data['impl_name']
class_data = package_data['class_data']
impl_range = package_data['impl_range']
route_prefix = package_data['route_prefix']
path = self.get_project_abs_path(name=package_name)
if os.path.exists(path):
return False
@ -68,15 +284,15 @@ class FileObjImpl(object):
f = open(init_path, 'w')
f.close()
self.write_obj_file(obj_path=obj_path, class_data=class_data)
self.write_obj_file(route_path=route_path, route_prefix=route_prefix)
self.write_obj_file(impl_path=impl_path, impl_range=impl_range)
self.write_impl_file(impl_path=impl_path, package_data=package_data)
self.write_route_file(route_path=route_path, package_data=package_data)
def new_file_package(self, **kwargs):
"""新建package"""
package_data = kwargs['data']
package_name = package_data['package_name']
# 创建包
self.create_package(data=package_data)
self.create_package(package_data=package_data)
package_path = self.get_project_abs_path(name=package_name)
return package_path

View File

@ -251,124 +251,3 @@ class FilterImpl(object):
continue
return_list.append(key)
return return_list
def new_file_obj(self, **kwargs):
"""
新建对象文件
1.根据参数动态创建class类
2.将代码写入.py文件保存
"""
data = kwargs['data']
name = data['class_name']
file_name = '{}.py'.format(name)
parameter = data['parameter']
filename = self.get_project_abs_path(name=file_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 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:
list_instance = ''
# 判断类型(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'])
else:
types = ''
# 判断长度
if 'length' in fields:
length = 'length={}, '.format(fields['length'])
else:
length = ''
# 包含列表
if 'in_list' in fields:
in_list = 'in_list={}, '.format(fields['in_list'])
else:
in_list = ''
# 类名
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')
# 写入子类
def hanlde_special(temp_data, temp_type):
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']:
# fields_map映射数据
temp_dict[list_param['name']] = list_param['chinese']
# 写入每个fields
handle_fields(param=list_param, class_name=temp_data['class_name'], levels='second', kind=temp_type)
temp_fields = '\t\tfields_map = {}'.format(str(temp_dict))
f.write('\n')
f.write(temp_fields)
f.write('\n')
# 第一次遍历,创建参数中的子类对象
for param in parameter:
# 为instance_list新建对象
if 'instance_list' in param:
instance_list = param['instance_list']
hanlde_special(instance_list, 'list')
# 为instance_dict新建对象
if 'instance_dict' in param:
instance_dict = param['instance_dict']
hanlde_special(instance_dict, 'dict')
f.write('\n')
first_dict = dict()
for param in parameter:
first_dict[param['name']] = param['chinese']
class_name = None
temp_type = None
if 'instance_list' in param:
instance_list = param['instance_list']
class_name = instance_list['class_name']
temp_type = 'list'
if 'instance_dict' in param:
instance_dict = param['instance_dict']
class_name = instance_dict['class_name']
temp_type = 'dict'
handle_fields(param=param, class_name=class_name, levels='frist', kind=temp_type)
f.write('\n')
frist_fields = '\tfields_map = {}'.format(str(first_dict))
f.write(frist_fields)
f.write('\n')
return '新建成功'