2022-08-02 15:53:13 +08:00
|
|
|
import os
|
2022-08-08 21:45:13 +08:00
|
|
|
import shutil
|
2022-08-08 20:30:08 +08:00
|
|
|
import sys
|
|
|
|
import zipfile
|
2022-08-02 15:53:13 +08:00
|
|
|
|
2022-07-26 17:02:06 +08:00
|
|
|
|
|
|
|
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__))
|
|
|
|
name = kwargs['name']
|
2022-08-02 16:17:15 +08:00
|
|
|
pdf_relative_path = '/static/{}'.format(name)
|
|
|
|
pdf_abs_path = os.path.abspath(file_abs_path + pdf_relative_path)
|
2022-08-02 15:53:13 +08:00
|
|
|
return pdf_abs_path
|
|
|
|
|
2022-08-09 16:53:08 +08:00
|
|
|
@staticmethod
|
|
|
|
def write_obj_file(**kwargs):
|
|
|
|
"""写入obj文件"""
|
|
|
|
path = kwargs['obj_path']
|
|
|
|
class_data = kwargs['class_data']
|
2022-07-26 17:02:06 +08:00
|
|
|
|
2022-08-09 16:53:08 +08:00
|
|
|
def hanlde_field(**args):
|
|
|
|
"""处理每个字段"""
|
2022-08-10 15:15:58 +08:00
|
|
|
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')
|
2022-07-26 17:02:06 +08:00
|
|
|
|
2022-08-09 16:53:08 +08:00
|
|
|
with open(path, 'w', encoding='utf-8') as f:
|
2022-07-26 17:02:06 +08:00
|
|
|
f.write('from Utils.ObjUtil import SpecObject')
|
|
|
|
f.write('\n')
|
|
|
|
f.write('from Utils.ValidateUtil import ValidateAttr, Validate')
|
|
|
|
f.write('\n')
|
2022-07-29 10:29:37 +08:00
|
|
|
|
2022-08-09 16:53:08 +08:00
|
|
|
# 遍历类数据
|
|
|
|
for item in class_data:
|
|
|
|
class_name = item['class_name']
|
2022-07-26 22:40:51 +08:00
|
|
|
f.write('\n')
|
2022-07-26 17:02:06 +08:00
|
|
|
f.write('\n')
|
2022-08-09 16:53:08 +08:00
|
|
|
f.write('class {}(SpecObject):'.format(class_name))
|
2022-07-26 17:02:06 +08:00
|
|
|
f.write('\n')
|
2022-08-09 16:53:08 +08:00
|
|
|
mapping_data = dict()
|
|
|
|
for sub in item['parameter']:
|
|
|
|
mapping_data[sub['attribute']] = sub['chinese']
|
|
|
|
hanlde_field(sub_data=sub)
|
2022-08-10 15:15:58 +08:00
|
|
|
temp_fields = '\tfields_map = {}'.format(str(mapping_data))
|
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-08-10 15:15:58 +08:00
|
|
|
@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')
|
|
|
|
|
2022-08-09 16:53:08 +08:00
|
|
|
def create_package(self, **kwargs):
|
|
|
|
"""根据包名创建包"""
|
|
|
|
package_data = kwargs['package_data']
|
2022-08-08 20:30:08 +08:00
|
|
|
package_name = package_data['package_name']
|
|
|
|
route_name = package_data['route_name']
|
|
|
|
obj_name = package_data['obj_name']
|
|
|
|
impl_name = package_data['impl_name']
|
2022-08-09 16:53:08 +08:00
|
|
|
class_data = package_data['class_data']
|
|
|
|
path = self.get_project_abs_path(name=package_name)
|
|
|
|
if os.path.exists(path):
|
|
|
|
return False
|
|
|
|
os.makedirs(path)
|
|
|
|
init_path = os.path.join(path, '__init__.py')
|
|
|
|
route_path = os.path.join(path, r'{}.py'.format(route_name))
|
|
|
|
obj_path = os.path.join(path, r'{}.py'.format(obj_name))
|
|
|
|
impl_path = os.path.join(path, r'{}.py'.format(impl_name))
|
|
|
|
f = open(init_path, 'w')
|
|
|
|
f.close()
|
|
|
|
self.write_obj_file(obj_path=obj_path, class_data=class_data)
|
2022-08-10 15:15:58 +08:00
|
|
|
self.write_impl_file(impl_path=impl_path, package_data=package_data)
|
|
|
|
self.write_route_file(route_path=route_path, package_data=package_data)
|
2022-08-09 16:53:08 +08:00
|
|
|
|
|
|
|
def new_file_package(self, **kwargs):
|
|
|
|
"""新建package"""
|
|
|
|
package_data = kwargs['data']
|
|
|
|
package_name = package_data['package_name']
|
2022-08-08 20:30:08 +08:00
|
|
|
# 创建包
|
2022-08-10 15:15:58 +08:00
|
|
|
self.create_package(package_data=package_data)
|
2022-08-08 21:45:13 +08:00
|
|
|
package_path = self.get_project_abs_path(name=package_name)
|
2022-08-08 20:30:08 +08:00
|
|
|
return package_path
|
|
|
|
|
|
|
|
@staticmethod
|
2022-08-09 16:53:08 +08:00
|
|
|
def write_file_to_zip(**kwargs):
|
2022-08-08 20:30:08 +08:00
|
|
|
"""文件夹转为zip文件"""
|
|
|
|
src_dir = kwargs['src_dir']
|
|
|
|
zip_name = src_dir + '.zip'
|
|
|
|
z = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
|
|
|
|
for dirpath, dirnames, filenames in os.walk(src_dir):
|
|
|
|
fpath = dirpath.replace(src_dir, '')
|
|
|
|
fpath = fpath and fpath + os.sep or ''
|
|
|
|
for filename in filenames:
|
|
|
|
z.write(os.path.join(dirpath, filename), fpath + filename)
|
|
|
|
z.close()
|
|
|
|
|
2022-08-08 21:45:13 +08:00
|
|
|
def return_file_data(self, **kwargs):
|
2022-08-08 20:30:08 +08:00
|
|
|
"""返回文件数据流"""
|
2022-08-08 21:45:13 +08:00
|
|
|
package_name = '{}.zip'.format(kwargs['package_name'])
|
|
|
|
zip_path = self.get_project_abs_path(name=package_name)
|
2022-08-08 20:30:08 +08:00
|
|
|
zip_name = open(zip_path, 'rb').read()
|
2022-08-08 21:45:13 +08:00
|
|
|
return zip_name
|
|
|
|
|
|
|
|
def delete_all_file(self):
|
|
|
|
"""删除临时文件夹"""
|
|
|
|
file_path = self.get_project_abs_path(name='')
|
|
|
|
shutil.rmtree(file_path)
|