mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-09-21 13:12:24 +00:00
Update code generation part file naming (#1002)
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
from collections.abc import Sequence
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader, Template, select_autoescape
|
||||
|
||||
from backend.core.conf import settings
|
||||
from backend.plugin.code_generator.model import GenBusiness, GenColumn
|
||||
from backend.plugin.code_generator.path_conf import JINJA2_TEMPLATE_DIR
|
||||
|
||||
|
||||
class GenTemplate:
|
||||
def __init__(self) -> None:
|
||||
"""初始化模板生成器"""
|
||||
self.env = Environment(
|
||||
loader=FileSystemLoader(JINJA2_TEMPLATE_DIR),
|
||||
autoescape=select_autoescape(enabled_extensions=['jinja']),
|
||||
trim_blocks=True,
|
||||
lstrip_blocks=True,
|
||||
keep_trailing_newline=True,
|
||||
enable_async=True,
|
||||
)
|
||||
self.init_content = ''
|
||||
|
||||
def get_template(self, jinja_file: str) -> Template:
|
||||
"""
|
||||
获取模板文件
|
||||
|
||||
:param jinja_file: Jinja2 模板文件
|
||||
:return:
|
||||
"""
|
||||
return self.env.get_template(jinja_file)
|
||||
|
||||
@staticmethod
|
||||
def get_template_files() -> list[str]:
|
||||
"""
|
||||
获取模板文件列表
|
||||
|
||||
:return:
|
||||
"""
|
||||
return [
|
||||
'python/api.jinja',
|
||||
'python/crud.jinja',
|
||||
'python/model.jinja',
|
||||
'python/schema.jinja',
|
||||
'python/service.jinja',
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def get_code_gen_paths(business: GenBusiness) -> list[str]:
|
||||
"""
|
||||
获取代码生成路径列表
|
||||
|
||||
:param business: 代码生成业务对象
|
||||
:return:
|
||||
"""
|
||||
app_name = business.app_name
|
||||
filename = business.filename
|
||||
return [
|
||||
f'{app_name}/api/{business.api_version}/{filename}.py',
|
||||
f'{app_name}/crud/crud_{filename}.py',
|
||||
f'{app_name}/model/{filename}.py',
|
||||
f'{app_name}/schema/{filename}.py',
|
||||
f'{app_name}/service/{filename}_service.py',
|
||||
]
|
||||
|
||||
def get_code_gen_path(self, tpl_path: str, business: GenBusiness) -> str:
|
||||
"""
|
||||
获取代码生成路径
|
||||
|
||||
:param tpl_path: 模板文件路径
|
||||
:param business: 代码生成业务对象
|
||||
:return:
|
||||
"""
|
||||
code_gen_path_mapping = dict(zip(self.get_template_files(), self.get_code_gen_paths(business)))
|
||||
return code_gen_path_mapping[tpl_path]
|
||||
|
||||
@staticmethod
|
||||
def get_vars(business: GenBusiness, models: Sequence[GenColumn]) -> dict[str, str | Sequence[GenColumn]]:
|
||||
"""
|
||||
获取模板变量
|
||||
|
||||
:param business: 代码生成业务对象
|
||||
:param models: 代码生成模型对象列表
|
||||
:return:
|
||||
"""
|
||||
return {
|
||||
'app_name': business.app_name,
|
||||
'table_name': business.table_name,
|
||||
'doc_comment': business.doc_comment,
|
||||
'table_comment': business.table_comment,
|
||||
'class_name': business.class_name,
|
||||
'schema_name': business.schema_name,
|
||||
'default_datetime_column': business.default_datetime_column,
|
||||
'permission': str(business.table_name.replace('_', ':')),
|
||||
'database_type': settings.DATABASE_TYPE,
|
||||
'models': models,
|
||||
'model_types': [model.type for model in models],
|
||||
}
|
||||
|
||||
|
||||
gen_template: GenTemplate = GenTemplate()
|
||||
Reference in New Issue
Block a user