168 lines
5.7 KiB
Python
168 lines
5.7 KiB
Python
|
#!/usr/bin/python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
# @version : 1.0
|
|||
|
# @Create Time : 2022/12/9 15:27
|
|||
|
# @File : main.py
|
|||
|
# @IDE : PyCharm
|
|||
|
# @desc : 简要说明
|
|||
|
|
|||
|
import os.path
|
|||
|
import sys
|
|||
|
from typing import Type
|
|||
|
from application.settings import BASE_DIR
|
|||
|
import inspect
|
|||
|
from pathlib import Path
|
|||
|
from core.database import Base
|
|||
|
from scripts.crud_generate.utils.generate_base import GenerateBase
|
|||
|
from scripts.crud_generate.utils.schema_generate import SchemaGenerate
|
|||
|
from scripts.crud_generate.utils.params_generate import ParamsGenerate
|
|||
|
from scripts.crud_generate.utils.dal_generate import DalGenerate
|
|||
|
from scripts.crud_generate.utils.view_generate import ViewGenerate
|
|||
|
|
|||
|
|
|||
|
class CrudGenerate(GenerateBase):
|
|||
|
|
|||
|
APPS_ROOT = os.path.join(BASE_DIR, "apps")
|
|||
|
SCRIPT_DIR = os.path.join(BASE_DIR, 'scripts', 'crud_generate')
|
|||
|
|
|||
|
def __init__(self, model: Type[Base], zh_name: str, en_name: str = None):
|
|||
|
"""
|
|||
|
初始化工作
|
|||
|
:param model: 提前定义好的 ORM 模型
|
|||
|
:param zh_name: 功能中文名称,主要用于描述、注释
|
|||
|
:param en_name: 功能英文名称,主要用于 schema、param 文件命名,以及它们的 class 命名,dal、url 命名,默认使用 model class
|
|||
|
en_name 例子:
|
|||
|
如果 en_name 由多个单词组成那么请使用 _ 下划线拼接
|
|||
|
在命名文件名称时,会执行使用 _ 下划线名称
|
|||
|
在命名 class 名称时,会将下划线名称转换为大驼峰命名(CamelCase)
|
|||
|
在命名 url 时,会将下划线转换为 /
|
|||
|
"""
|
|||
|
self.model = model
|
|||
|
self.zh_name = zh_name
|
|||
|
# model 文件的地址
|
|||
|
self.model_file_path = Path(inspect.getfile(sys.modules[model.__module__]))
|
|||
|
# model 文件 app 路径
|
|||
|
self.app_dir_path = self.model_file_path.parent.parent
|
|||
|
# schemas 目录地址
|
|||
|
self.schemas_dir_path = self.app_dir_path / "schemas"
|
|||
|
# params 目录地址
|
|||
|
self.params_dir_path = self.app_dir_path / "params"
|
|||
|
# crud 文件地址
|
|||
|
self.crud_file_path = self.app_dir_path / "crud.py"
|
|||
|
# view 文件地址
|
|||
|
self.view_file_path = self.app_dir_path / "views.py"
|
|||
|
|
|||
|
if en_name:
|
|||
|
self.en_name = en_name
|
|||
|
else:
|
|||
|
self.en_name = self.model.__name__
|
|||
|
|
|||
|
self.schema_file_path = self.schemas_dir_path / f"{self.en_name}.py"
|
|||
|
self.param_file_path = self.params_dir_path / f"{self.en_name}.py"
|
|||
|
|
|||
|
self.base_class_name = self.snake_to_camel(self.en_name)
|
|||
|
self.schema_simple_out_class_name = f"{self.base_class_name}SimpleOut"
|
|||
|
self.dal_class_name = f"{self.base_class_name}Dal"
|
|||
|
self.param_class_name = f"{self.base_class_name}Params"
|
|||
|
|
|||
|
def generate_codes(self):
|
|||
|
"""
|
|||
|
生成代码, 不做实际操作,只是将代码打印出来
|
|||
|
:return:
|
|||
|
"""
|
|||
|
print(f"==========================={self.schema_file_path} 代码内容=================================")
|
|||
|
schema = SchemaGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.schema_file_path,
|
|||
|
self.schemas_dir_path,
|
|||
|
self.base_class_name,
|
|||
|
self.schema_simple_out_class_name
|
|||
|
)
|
|||
|
print(schema.generate_code())
|
|||
|
|
|||
|
print(f"==========================={self.dal_class_name} 代码内容=================================")
|
|||
|
dal = DalGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.dal_class_name,
|
|||
|
self.schema_simple_out_class_name
|
|||
|
)
|
|||
|
print(dal.generate_code())
|
|||
|
|
|||
|
print(f"==========================={self.param_file_path} 代码内容=================================")
|
|||
|
params = ParamsGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.params_dir_path,
|
|||
|
self.param_file_path,
|
|||
|
self.param_class_name
|
|||
|
)
|
|||
|
print(params.generate_code())
|
|||
|
|
|||
|
print(f"==========================={self.view_file_path} 代码内容=================================")
|
|||
|
view = ViewGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.base_class_name,
|
|||
|
self.schema_simple_out_class_name,
|
|||
|
self.dal_class_name,
|
|||
|
self.param_class_name
|
|||
|
)
|
|||
|
print(view.generate_code())
|
|||
|
|
|||
|
def main(self):
|
|||
|
"""
|
|||
|
开始生成 crud 代码,并直接写入到项目中,目前还未实现
|
|||
|
1. 生成 schemas 代码
|
|||
|
2. 生成 dal 代码
|
|||
|
3. 生成 params 代码
|
|||
|
4. 生成 views 代码
|
|||
|
:return:
|
|||
|
"""
|
|||
|
schema = SchemaGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.schema_file_path,
|
|||
|
self.schemas_dir_path,
|
|||
|
self.base_class_name,
|
|||
|
self.schema_simple_out_class_name
|
|||
|
)
|
|||
|
schema.write_generate_code()
|
|||
|
|
|||
|
dal = DalGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.dal_class_name,
|
|||
|
self.schema_simple_out_class_name
|
|||
|
)
|
|||
|
dal.write_generate_code()
|
|||
|
|
|||
|
params = ParamsGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.params_dir_path,
|
|||
|
self.param_file_path,
|
|||
|
self.param_class_name
|
|||
|
)
|
|||
|
params.write_generate_code()
|
|||
|
|
|||
|
view = ViewGenerate(
|
|||
|
self.model,
|
|||
|
self.zh_name,
|
|||
|
self.en_name,
|
|||
|
self.base_class_name,
|
|||
|
self.schema_simple_out_class_name,
|
|||
|
self.dal_class_name,
|
|||
|
self.param_class_name
|
|||
|
)
|
|||
|
view.write_generate_code()
|
|||
|
|