|
@@ -1,7 +1,7 @@
|
|
|
from typing import Optional, List, Dict, Any
|
|
from typing import Optional, List, Dict, Any
|
|
|
from src.models.template_model import Template, TemplateType
|
|
from src.models.template_model import Template, TemplateType
|
|
|
from src.manager.core.db_mongo import BaseMongoManager
|
|
from src.manager.core.db_mongo import BaseMongoManager
|
|
|
-from jinja2 import Environment, BaseLoader
|
|
|
|
|
|
|
+from jinja2 import Environment, BaseLoader, meta
|
|
|
import json
|
|
import json
|
|
|
from bson import json_util
|
|
from bson import json_util
|
|
|
from utils.logu import get_logger
|
|
from utils.logu import get_logger
|
|
@@ -23,12 +23,21 @@ class TemplateManager(BaseMongoManager):
|
|
|
description: str = None,
|
|
description: str = None,
|
|
|
collection_name: str = None) -> Template:
|
|
collection_name: str = None) -> Template:
|
|
|
"""创建新模板"""
|
|
"""创建新模板"""
|
|
|
|
|
+ # 解析模板中的变量
|
|
|
|
|
+ try:
|
|
|
|
|
+ parsed_content = self.env.parse(template_str)
|
|
|
|
|
+ variables = list(meta.find_undeclared_variables(parsed_content))
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ logger.error(f"Failed to parse template variables: {e}")
|
|
|
|
|
+ variables = []
|
|
|
|
|
+
|
|
|
template = Template(
|
|
template = Template(
|
|
|
name=name,
|
|
name=name,
|
|
|
template_str=template_str,
|
|
template_str=template_str,
|
|
|
template_type=template_type,
|
|
template_type=template_type,
|
|
|
description=description,
|
|
description=description,
|
|
|
- collection_name=collection_name
|
|
|
|
|
|
|
+ collection_name=collection_name,
|
|
|
|
|
+ variables=variables
|
|
|
)
|
|
)
|
|
|
await template.insert()
|
|
await template.insert()
|
|
|
return template
|
|
return template
|
|
@@ -84,9 +93,17 @@ class TemplateManager(BaseMongoManager):
|
|
|
template = await self.get_template(name)
|
|
template = await self.get_template(name)
|
|
|
if not template:
|
|
if not template:
|
|
|
return None
|
|
return None
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
if new_template_str:
|
|
if new_template_str:
|
|
|
|
|
+ # 更新模板字符串时同时更新变量列表
|
|
|
|
|
+ try:
|
|
|
|
|
+ parsed_content = self.env.parse(new_template_str)
|
|
|
|
|
+ variables = list(meta.find_undeclared_variables(parsed_content))
|
|
|
|
|
+ template.variables = variables
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ logger.error(f"Failed to parse template variables: {e}")
|
|
|
template.template_str = new_template_str
|
|
template.template_str = new_template_str
|
|
|
|
|
+
|
|
|
if new_description:
|
|
if new_description:
|
|
|
template.description = new_description
|
|
template.description = new_description
|
|
|
if new_collection_name is not None:
|
|
if new_collection_name is not None:
|