diff --git a/apps/createDocument/controllers/__pycache__/dg.cpython-313.pyc b/apps/createDocument/controllers/__pycache__/dg.cpython-313.pyc index 723c51e..ab2bd88 100644 Binary files a/apps/createDocument/controllers/__pycache__/dg.cpython-313.pyc and b/apps/createDocument/controllers/__pycache__/dg.cpython-313.pyc differ diff --git a/apps/createDocument/controllers/dg.py b/apps/createDocument/controllers/dg.py index 7ee8ee8..d21b3cb 100644 --- a/apps/createDocument/controllers/dg.py +++ b/apps/createDocument/controllers/dg.py @@ -1,13 +1,19 @@ +import base64 +import io +from typing import Any from datetime import datetime +from docx.shared import Mm +from docx.enum.text import WD_ALIGN_PARAGRAPH +from docx.oxml.ns import qn from ninja.errors import HttpError from ninja_extra import ControllerBase, api_controller, route from django.db import transaction from django.db.models import Q -from docxtpl import DocxTemplate +from docxtpl import DocxTemplate, InlineImage from pathlib import Path from utils.chen_response import ChenResponse # 导入数据库ORM -from apps.project.models import Project, Contact, Abbreviation +from apps.project.models import Project, Contact, Abbreviation, ProjectSoftSummary from apps.dict.models import Dict # 导入工具函数 from utils.util import get_str_dict, get_list_dict, get_testType, get_ident, get_str_abbr @@ -23,7 +29,7 @@ from apps.createSeiTaiDocument.extensions.logger import GenerateLogger # 导入mixins-处理文档片段 from apps.createDocument.extensions.mixins import FragementToolsMixin # 导入工具 -from apps.createDocument.extensions.tools import demand_sort_by_designKey +from apps.createDocument.extensions.tools import demand_sort_by_designKey, set_table_border # @api_controller("/generate", tags=['生成大纲文档'], auth=JWTAuth(), permissions=[IsAuthenticated]) @api_controller("/generate", tags=['生成大纲文档']) @@ -286,6 +292,62 @@ class GenerateControllerDG(ControllerBase, FragementToolsMixin): @route.get('/create/softComposition', url_name='create-softComposition') @transaction.atomic def create_softComposition(self, id: int): + # 首先判断是否包含 - 项目信息-软件概述 + project_obj = get_object_or_404(Project, id=id) + input_path_2 = Path.cwd() / 'media' / project_path(id) / 'form_template' / 'dg' / '测评对象_2.docx' + doc = DocxTemplate(input_path_2) + soft_summary_qs = ProjectSoftSummary.objects.filter(project=project_obj) + if soft_summary_qs.exists(): + data_qs = soft_summary_qs.first().data_schemas + if data_qs.exists(): + # 如果存在则渲染此处 + data_list = [] + for data_obj in data_qs.all(): + item_context: dict[str, Any] = {"fontnote": data_obj.fontnote, 'type': data_obj.type} + # 根据数据类型处理content字段 + if data_obj.type == 'text': + item_context['content'] = data_obj.content + elif data_obj.type == 'table': + # 使用subdoc + subdoc = doc.new_subdoc() + rows = len(data_obj.content) + cols = len(data_obj.content[0]) + table = subdoc.add_table(rows=rows, cols=cols, style='Table Grid') + # 设置边框 + set_table_border(table) + # 单元格处理 + for row in range(rows): + for col in range(cols): + cell = table.cell(row, col) + cell.text = data_obj.content[row][col] + # 第一行设置居中 + if row == 0: + # 黑体设置 + cell.text = "" + pa = cell.paragraphs[0] + run = pa.add_run(str(data_obj.content[row][col])) + run.font.name = '黑体' + run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体') + run.font.bold = False + pa.alignment = WD_ALIGN_PARAGRAPH.CENTER + # 表格居中 + table.alignment = WD_ALIGN_PARAGRAPH.CENTER + item_context['content'] = subdoc + elif data_obj.type == 'image': + base64_bytes = base64.b64decode(data_obj.content.replace("data:image/png;base64,", "")) + item_context['content'] = InlineImage(doc, io.BytesIO(base64_bytes), width=Mm(120)) + data_list.append(item_context) + context = { + "datas": data_list, + } + doc.render(context) + try: + doc.save(Path.cwd() / "media" / project_path(id) / "output_dir" / '测评对象.docx') + return ChenResponse(status=200, code=200, message="文档生成成功!") + except PermissionError as e: + return ChenResponse(status=400, code=400, message="模版文件已打开,请关闭后再试,{0}".format(e)) + + # 原来文档片段或者初始内容 input_path = Path.cwd() / 'media' / project_path(id) / 'form_template' / 'dg' / '测评对象.docx' doc = DocxTemplate(input_path) replace, frag, rich_text_list = self._generate_frag(id, doc, '测评对象') diff --git a/apps/createDocument/extensions/__pycache__/tools.cpython-313.pyc b/apps/createDocument/extensions/__pycache__/tools.cpython-313.pyc index ad5d0c7..5ad031d 100644 Binary files a/apps/createDocument/extensions/__pycache__/tools.cpython-313.pyc and b/apps/createDocument/extensions/__pycache__/tools.cpython-313.pyc differ diff --git a/apps/createDocument/extensions/tools.py b/apps/createDocument/extensions/tools.py index b0cdfac..b3424e7 100644 --- a/apps/createDocument/extensions/tools.py +++ b/apps/createDocument/extensions/tools.py @@ -1,4 +1,6 @@ from apps.project.models import TestDemand +from docx.oxml import OxmlElement +from docx.oxml.ns import qn def demand_sort_by_designKey(demand_obj: TestDemand) -> tuple[int, ...]: """仅限于测试项排序函数,传入sorted函数的key里面""" @@ -6,4 +8,32 @@ def demand_sort_by_designKey(demand_obj: TestDemand) -> tuple[int, ...]: sort_tuple = tuple(int(part) for part in parts) return sort_tuple -__all__ = ['demand_sort_by_designKey'] +def set_table_border(table, **kwargs): + """docx-设置表格上下左右边框""" + # 获取或创建表格属性 + tbl_pr = table._tbl.tblPr + + # 查找并移除现有的边框设置 + existing_borders = tbl_pr.find(qn('w:tblBorders')) + if existing_borders is not None: + tbl_pr.remove(existing_borders) + + # 创建新的边框元素 + borders = OxmlElement('w:tblBorders') + + # 只设置外边框:top, left, bottom, right + # 不设置 insideV 和 insideH(内部边框) + for border_type in ['top', 'left', 'bottom', 'right']: + border_data = kwargs.get(border_type, {"sz": "12", "val": "single", "color": "#000000"}) + border_elem = OxmlElement(f'w:{border_type}') + + # 设置边框属性 + border_elem.set(qn('w:val'), border_data.get('val', 'single')) # 线条类型 + border_elem.set(qn('w:sz'), border_data.get('sz', '12')) # 线条粗细(8代表1磅) + border_elem.set(qn('w:color'), border_data.get('color', '#000000')) # 颜色 + borders.append(border_elem) # type:ignore + + # 将边框设置添加到表格属性中 + tbl_pr.append(borders) + +__all__ = ['demand_sort_by_designKey', 'set_table_border'] diff --git a/apps/project/controllers/__pycache__/project.cpython-313.pyc b/apps/project/controllers/__pycache__/project.cpython-313.pyc index cb18655..271c037 100644 Binary files a/apps/project/controllers/__pycache__/project.cpython-313.pyc and b/apps/project/controllers/__pycache__/project.cpython-313.pyc differ diff --git a/apps/project/controllers/project.py b/apps/project/controllers/project.py index 72f9836..5170dab 100644 --- a/apps/project/controllers/project.py +++ b/apps/project/controllers/project.py @@ -271,6 +271,21 @@ class ProjectController(ControllerBase): return time # 项目级信息前端告警数据获取 + @route.get("/project_info_status/") + @transaction.atomic + def project_info_status(self, id: int): + # 全部状态 + all_status = { + "soft_summary": False + } + # 1.查看软件概述是否填写 + project_obj = self.get_project_by_id(id) + soft_summary_qs = ProjectSoftSummary.objects.filter(project=project_obj) + if soft_summary_qs.exists(): + # 存在还要判断是否有子项 + if soft_summary_qs.first().data_schemas.exists(): + all_status['soft_summary'] = True + return ChenResponse(status=200, code=20000, data=all_status, message='查询成功') @classmethod def bulk_create_data_schemas(cls, summary_obj: ProjectSoftSummary, data: list[DataSchema]): diff --git a/conf/base_document/form_template/dg/测评对象_2.docx b/conf/base_document/form_template/dg/测评对象_2.docx new file mode 100644 index 0000000..7570326 Binary files /dev/null and b/conf/base_document/form_template/dg/测评对象_2.docx differ diff --git a/logs/root_log b/logs/root_log index 13b5263..d2e1320 100644 --- a/logs/root_log +++ b/logs/root_log @@ -2758,3 +2758,493 @@ Traceback (most recent call last): f'is not JSON serializable') TypeError: Object of type StuctSortData is not JSON serializable [ERROR][2026-02-02 16:30:12,684][log.py:249]Internal Server Error: /api/testmanage/project/get_soft_summary/ +[WARNING][2026-02-03 09:38:03,966][log.py:249]Unauthorized: /api/system/getInfo +[WARNING][2026-02-03 09:38:04,044][log.py:249]Unauthorized: /api/system/logout +[WARNING][2026-02-03 09:38:09,074][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2026-02-03 10:37:41,293][log.py:249]Not Found: /api/testmanage/project/project_info_status/ +[WARNING][2026-02-03 10:37:48,403][log.py:249]Not Found: /api/testmanage/project/project_info_status/ +[WARNING][2026-02-03 10:38:19,591][log.py:249]Not Found: /api/testmanage/project/project_info_status/ +[WARNING][2026-02-03 10:38:23,503][log.py:249]Not Found: /api/testmanage/project/project_info_status/ +[WARNING][2026-02-03 10:38:26,111][log.py:249]Not Found: /api/testmanage/project/project_info_status/ +[WARNING][2026-02-03 13:54:28,018][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" (2, 'No such file or directory') +[ERROR][2026-02-03 13:54:28,018][errors.py:131][Errno 2] No such file or directory: 'E:\\pycharmProjects\\cdtestplant_v1\\media\\R25999\\form_template\\dg\\测评对象_2.docx' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 316, in create_softComposition + doc.render(context, autoescape=True) + ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 480, in render + self.render_init() + ~~~~~~~~~~~~~~~~^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 60, in render_init + self.init_docx() + ~~~~~~~~~~~~~~^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 56, in init_docx + self.docx = Document(self.template_file) + ~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\api.py", line 27, in Document + document_part = cast("DocumentPart", Package.open(docx).main_document_part) + ~~~~~~~~~~~~^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\opc\package.py", line 126, in open + pkg_reader = PackageReader.from_file(pkg_file) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\opc\pkgreader.py", line 22, in from_file + phys_reader = PhysPkgReader(pkg_file) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\opc\phys_pkg.py", line 76, in __init__ + self._zipf = ZipFile(pkg_file, "r") + ~~~~~~~^^^^^^^^^^^^^^^ + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\zipfile\__init__.py", line 1383, in __init__ + self.fp = io.open(file, filemode) + ~~~~~~~^^^^^^^^^^^^^^^^ +FileNotFoundError: [Errno 2] No such file or directory: 'E:\\pycharmProjects\\cdtestplant_v1\\media\\R25999\\form_template\\dg\\测评对象_2.docx' +[ERROR][2026-02-03 13:54:28,061][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:26:54,530][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:26:54,532][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:26:54,580][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:27:08,046][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:27:08,046][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:27:08,053][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:27:29,619][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:27:29,619][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:27:29,634][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:27:42,348][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:27:42,349][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:27:42,368][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:28:06,158][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:28:06,159][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:28:06,177][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:28:12,615][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'endfor'.",) +[ERROR][2026-02-03 14:28:12,615][errors.py:131]Encountered unknown tag 'endfor'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 7, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'endfor'. +[ERROR][2026-02-03 14:28:12,636][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 14:36:12,071][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Encountered unknown tag 'tr'. Jinja was looking for the following tags: 'elif' or 'else' or 'endif'. The innermost block that needs to be closed is 'if'.",) +[ERROR][2026-02-03 14:36:12,071][errors.py:131]Encountered unknown tag 'tr'. Jinja was looking for the following tags: 'elif' or 'else' or 'endif'. The innermost block that needs to be closed is 'if'. +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 315, in create_softComposition + doc.render(context) + ~~~~~~~~~~^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 489, in render + xml_src = self.build_xml(context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 436, in build_xml + xml = self.render_xml_part(xml, self.docx._part, context, jinja_env) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 322, in render_xml_part + raise exc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 312, in render_xml_part + template = Template(src_xml) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1214, in __new__ + return env.from_string(source, template_class=cls) + ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 1111, in from_string + return cls.from_code(self, self.compile(source), gs, None) + ~~~~~~~~~~~~^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 771, in compile + self.handle_exception(source=source_hint) + ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\jinja2\environment.py", line 942, in handle_exception + raise rewrite_traceback_stack(source=source) + File "", line 4, in template +jinja2.exceptions.TemplateSyntaxError: Encountered unknown tag 'tr'. Jinja was looking for the following tags: 'elif' or 'else' or 'endif'. The innermost block that needs to be closed is 'if'. +[ERROR][2026-02-03 14:36:12,117][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 15:01:08,760][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("No module named 'docxcompose'",) +[ERROR][2026-02-03 15:01:08,761][errors.py:131]No module named 'docxcompose' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 308, in create_softComposition + subdoc = doc.new_subdoc() + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\template.py", line 617, in new_subdoc + from .subdoc import Subdoc + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docxtpl\subdoc.py", line 11, in + from docxcompose.properties import CustomProperties +ModuleNotFoundError: No module named 'docxcompose' +[ERROR][2026-02-03 15:01:08,764][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 15:15:47,401][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("no style with name 'outertable'",) +[ERROR][2026-02-03 15:15:47,401][errors.py:131]"no style with name 'outertable'" +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 314, in create_softComposition + table = subdoc.add_table(rows=rows, cols=cols, style='outertable') + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\document.py", line 157, in add_table + table.style = style + ^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\table.py", line 137, in style + style_id = self.part.get_style_id(style_or_name, WD_STYLE_TYPE.TABLE) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\parts\document.py", line 87, in get_style_id + return self.styles.get_style_id(style_or_name, style_type) + ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\styles\styles.py", line 98, in get_style_id + return self._get_style_id_from_name(style_or_name, style_type) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\styles\styles.py", line 125, in _get_style_id_from_name + return self._get_style_id_from_style(self[style_name], style_type) + ~~~~^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\styles\styles.py", line 47, in __getitem__ + raise KeyError("no style with name '%s'" % key) +KeyError: "no style with name 'outertable'" +[ERROR][2026-02-03 15:15:47,430][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 15:32:08,488][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("Table.cell() got an unexpected keyword argument 'row'",) +[ERROR][2026-02-03 15:32:08,488][errors.py:131]Table.cell() got an unexpected keyword argument 'row' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 319, in create_softComposition + cell = table.cell(row=row, column=col) +TypeError: Table.cell() got an unexpected keyword argument 'row' +[ERROR][2026-02-03 15:32:08,493][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 15:55:25,723][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("int() argument must be a string, a bytes-like object or a real number, not 'NoneType'",) +[ERROR][2026-02-03 15:55:25,723][errors.py:131]int() argument must be a string, a bytes-like object or a real number, not 'NoneType' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 327, in create_softComposition + cell.width = None + ^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\table.py", line 311, in width + self._tc.width = value + ^^^^^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\table.py", line 565, in width + tcPr.width = value + ^^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\table.py", line 889, in width + tcW.width = value + ^^^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\table.py", line 418, in width + self.w = Emu(value).twips + ~~~^^^^^^^ + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\shared.py", line 94, in __new__ + return Length.__new__(cls, int(emu)) + ~~~^^^^^ +TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType' +[ERROR][2026-02-03 15:55:25,751][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:01:04,826][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'Table' object has no attribute 'allow_autofit'",) +[ERROR][2026-02-03 16:01:04,826][errors.py:131]'Table' object has no attribute 'allow_autofit' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 327, in create_softComposition + print(table.allow_autofit) + ^^^^^^^^^^^^^^^^^^^ +AttributeError: 'Table' object has no attribute 'allow_autofit' +[ERROR][2026-02-03 16:01:04,871][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:08:40,814][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'_Cell' object has no attribute 'font'",) +[ERROR][2026-02-03 16:08:40,815][errors.py:131]'_Cell' object has no attribute 'font' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 325, in create_softComposition + cell.font.bold = True + ^^^^^^^^^ +AttributeError: '_Cell' object has no attribute 'font' +[ERROR][2026-02-03 16:08:40,818][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:10:37,247][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'_Cell' object has no attribute 'font'",) +[ERROR][2026-02-03 16:10:37,248][errors.py:131]'_Cell' object has no attribute 'font' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 325, in create_softComposition + cell.font.bold = True + ^^^^^^^^^ +AttributeError: '_Cell' object has no attribute 'font' +[ERROR][2026-02-03 16:10:37,250][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:10:57,505][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'_Cell' object has no attribute 'font'",) +[ERROR][2026-02-03 16:10:57,505][errors.py:131]'_Cell' object has no attribute 'font' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 325, in create_softComposition + cell.font.bold = True + ^^^^^^^^^ +AttributeError: '_Cell' object has no attribute 'font' +[ERROR][2026-02-03 16:10:57,509][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:12:30,953][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'_Cell' object has no attribute 'font'",) +[ERROR][2026-02-03 16:12:30,954][errors.py:131]'_Cell' object has no attribute 'font' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 325, in create_softComposition + cell.font.bold = True + ^^^^^^^^^ +AttributeError: '_Cell' object has no attribute 'font' +[ERROR][2026-02-03 16:12:30,959][log.py:249]Internal Server Error: /api/generate/create/softComposition +[WARNING][2026-02-03 16:18:12,617][operation.py:131]"GET - GenerateControllerDG[create_softComposition] /api/generate/create/softComposition" ("'_Cell' object has no attribute 'font'",) +[ERROR][2026-02-03 16:18:12,618][errors.py:131]'_Cell' object has no attribute 'font' +Traceback (most recent call last): + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 212, in run + result = self.view_func(request, **ctx.kwargs["view_func_kwargs"]) + File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view + result = self.route.view_func( + ctx.controller_instance, *args, **ctx.view_func_kwargs + ) + File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner + return func(*args, **kwds) + File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 325, in create_softComposition + cell.font.bold = True + ^^^^^^^^^ +AttributeError: '_Cell' object has no attribute 'font' +[ERROR][2026-02-03 16:18:12,624][log.py:249]Internal Server Error: /api/generate/create/softComposition diff --git a/media/R2237/form_template/dg/测评对象_2.docx b/media/R2237/form_template/dg/测评对象_2.docx new file mode 100644 index 0000000..7570326 Binary files /dev/null and b/media/R2237/form_template/dg/测评对象_2.docx differ diff --git a/media/R25138/form_template/dg/测评对象_2.docx b/media/R25138/form_template/dg/测评对象_2.docx new file mode 100644 index 0000000..7570326 Binary files /dev/null and b/media/R25138/form_template/dg/测评对象_2.docx differ diff --git a/media/R25999/final_seitai/测评大纲.docx b/media/R25999/final_seitai/测评大纲.docx index efa942c..1832b16 100644 Binary files a/media/R25999/final_seitai/测评大纲.docx and b/media/R25999/final_seitai/测评大纲.docx differ diff --git a/media/R25999/form_template/dg/测评对象_2.docx b/media/R25999/form_template/dg/测评对象_2.docx new file mode 100644 index 0000000..7570326 Binary files /dev/null and b/media/R25999/form_template/dg/测评对象_2.docx differ diff --git a/media/R25999/output_dir/主要功能和性能指标.docx b/media/R25999/output_dir/主要功能和性能指标.docx index 1d78202..9d96cec 100644 Binary files a/media/R25999/output_dir/主要功能和性能指标.docx and b/media/R25999/output_dir/主要功能和性能指标.docx differ diff --git a/media/R25999/output_dir/代码质量度量分析表.docx b/media/R25999/output_dir/代码质量度量分析表.docx index 9969f1f..b6de3a4 100644 Binary files a/media/R25999/output_dir/代码质量度量分析表.docx and b/media/R25999/output_dir/代码质量度量分析表.docx differ diff --git a/media/R25999/output_dir/动态测试环境说明.docx b/media/R25999/output_dir/动态测试环境说明.docx index 5097ede..c668eb1 100644 Binary files a/media/R25999/output_dir/动态测试环境说明.docx and b/media/R25999/output_dir/动态测试环境说明.docx differ diff --git a/media/R25999/output_dir/动态硬件和固件项.docx b/media/R25999/output_dir/动态硬件和固件项.docx index 7cd3daf..76c4976 100644 Binary files a/media/R25999/output_dir/动态硬件和固件项.docx and b/media/R25999/output_dir/动态硬件和固件项.docx differ diff --git a/media/R25999/output_dir/动态软件项.docx b/media/R25999/output_dir/动态软件项.docx index 7fbcd04..5785cc6 100644 Binary files a/media/R25999/output_dir/动态软件项.docx and b/media/R25999/output_dir/动态软件项.docx differ diff --git a/media/R25999/output_dir/反向需求规格追踪表.docx b/media/R25999/output_dir/反向需求规格追踪表.docx index be8db08..b7a20ba 100644 Binary files a/media/R25999/output_dir/反向需求规格追踪表.docx and b/media/R25999/output_dir/反向需求规格追踪表.docx differ diff --git a/media/R25999/output_dir/技术依据文件.docx b/media/R25999/output_dir/技术依据文件.docx index 1194525..ec95a05 100644 Binary files a/media/R25999/output_dir/技术依据文件.docx and b/media/R25999/output_dir/技术依据文件.docx differ diff --git a/media/R25999/output_dir/标准依据文件.docx b/media/R25999/output_dir/标准依据文件.docx index 3d721d1..9549b26 100644 Binary files a/media/R25999/output_dir/标准依据文件.docx and b/media/R25999/output_dir/标准依据文件.docx differ diff --git a/media/R25999/output_dir/测评对象.docx b/media/R25999/output_dir/测评对象.docx index cf4977c..33f05fd 100644 Binary files a/media/R25999/output_dir/测评对象.docx and b/media/R25999/output_dir/测评对象.docx differ diff --git a/media/R25999/output_dir/测评数据.docx b/media/R25999/output_dir/测评数据.docx index 8a31afb..55a3188 100644 Binary files a/media/R25999/output_dir/测评数据.docx and b/media/R25999/output_dir/测评数据.docx differ diff --git a/media/R25999/output_dir/测评时间和地点.docx b/media/R25999/output_dir/测评时间和地点.docx index 5cec2ec..fcac75e 100644 Binary files a/media/R25999/output_dir/测评时间和地点.docx and b/media/R25999/output_dir/测评时间和地点.docx differ diff --git a/media/R25999/output_dir/测评条件保障.docx b/media/R25999/output_dir/测评条件保障.docx index 66fecd0..3f00977 100644 Binary files a/media/R25999/output_dir/测评条件保障.docx and b/media/R25999/output_dir/测评条件保障.docx differ diff --git a/media/R25999/output_dir/测评组织及任务分工.docx b/media/R25999/output_dir/测评组织及任务分工.docx index 772f02a..7ccefe3 100644 Binary files a/media/R25999/output_dir/测评组织及任务分工.docx and b/media/R25999/output_dir/测评组织及任务分工.docx differ diff --git a/media/R25999/output_dir/测试内容充分性及测试方法有效性分析.docx b/media/R25999/output_dir/测试内容充分性及测试方法有效性分析.docx index 898d128..405de51 100644 Binary files a/media/R25999/output_dir/测试内容充分性及测试方法有效性分析.docx and b/media/R25999/output_dir/测试内容充分性及测试方法有效性分析.docx differ diff --git a/media/R25999/output_dir/测试策略.docx b/media/R25999/output_dir/测试策略.docx index 02a7f6a..4b2f293 100644 Binary files a/media/R25999/output_dir/测试策略.docx and b/media/R25999/output_dir/测试策略.docx differ diff --git a/media/R25999/output_dir/测试级别和测试类型.docx b/media/R25999/output_dir/测试级别和测试类型.docx index 9b13aa1..a5d1300 100644 Binary files a/media/R25999/output_dir/测试级别和测试类型.docx and b/media/R25999/output_dir/测试级别和测试类型.docx differ diff --git a/media/R25999/output_dir/测试项及方法.docx b/media/R25999/output_dir/测试项及方法.docx index 8aa281e..9c00388 100644 Binary files a/media/R25999/output_dir/测试项及方法.docx and b/media/R25999/output_dir/测试项及方法.docx differ diff --git a/media/R25999/output_dir/环境差异性分析.docx b/media/R25999/output_dir/环境差异性分析.docx index 1ee47ca..af048b7 100644 Binary files a/media/R25999/output_dir/环境差异性分析.docx and b/media/R25999/output_dir/环境差异性分析.docx differ diff --git a/media/R25999/output_dir/研制总要求追踪表.docx b/media/R25999/output_dir/研制总要求追踪表.docx index 6bb60b1..28faab8 100644 Binary files a/media/R25999/output_dir/研制总要求追踪表.docx and b/media/R25999/output_dir/研制总要求追踪表.docx differ diff --git a/media/R25999/output_dir/缩略语.docx b/media/R25999/output_dir/缩略语.docx index 3b071a5..f5fee85 100644 Binary files a/media/R25999/output_dir/缩略语.docx and b/media/R25999/output_dir/缩略语.docx differ diff --git a/media/R25999/output_dir/联系人和方式.docx b/media/R25999/output_dir/联系人和方式.docx index 4c8e0ac..0733c24 100644 Binary files a/media/R25999/output_dir/联系人和方式.docx and b/media/R25999/output_dir/联系人和方式.docx differ diff --git a/media/R25999/output_dir/被测软件基本信息.docx b/media/R25999/output_dir/被测软件基本信息.docx index 93f660b..7eef6bb 100644 Binary files a/media/R25999/output_dir/被测软件基本信息.docx and b/media/R25999/output_dir/被测软件基本信息.docx differ diff --git a/media/R25999/output_dir/被测软件接口.docx b/media/R25999/output_dir/被测软件接口.docx index 9d760b1..9d76e9a 100644 Binary files a/media/R25999/output_dir/被测软件接口.docx and b/media/R25999/output_dir/被测软件接口.docx differ diff --git a/media/R25999/output_dir/需求规格说明追踪表.docx b/media/R25999/output_dir/需求规格说明追踪表.docx index 60e9a00..763e741 100644 Binary files a/media/R25999/output_dir/需求规格说明追踪表.docx and b/media/R25999/output_dir/需求规格说明追踪表.docx differ diff --git a/media/R25999/output_dir/静态测试环境说明.docx b/media/R25999/output_dir/静态测试环境说明.docx index c3738b7..51fea9f 100644 Binary files a/media/R25999/output_dir/静态测试环境说明.docx and b/media/R25999/output_dir/静态测试环境说明.docx differ diff --git a/media/R25999/output_dir/静态硬件和固件项.docx b/media/R25999/output_dir/静态硬件和固件项.docx index 10c7e5e..16c2346 100644 Binary files a/media/R25999/output_dir/静态硬件和固件项.docx and b/media/R25999/output_dir/静态硬件和固件项.docx differ diff --git a/media/R25999/output_dir/静态软件项.docx b/media/R25999/output_dir/静态软件项.docx index 159262c..9142837 100644 Binary files a/media/R25999/output_dir/静态软件项.docx and b/media/R25999/output_dir/静态软件项.docx differ diff --git a/media/R25999/output_dir/顶层技术文件.docx b/media/R25999/output_dir/顶层技术文件.docx index eefdca2..b40b8aa 100644 Binary files a/media/R25999/output_dir/顶层技术文件.docx and b/media/R25999/output_dir/顶层技术文件.docx differ diff --git a/media/R25999/temp/测评大纲.docx b/media/R25999/temp/测评大纲.docx index 8a605db..4f0d76f 100644 Binary files a/media/R25999/temp/测评大纲.docx and b/media/R25999/temp/测评大纲.docx differ diff --git a/pyproject.toml b/pyproject.toml index 3dd83f0..4c5f222 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,7 @@ dependencies = [ "django-redis>=6.0.0", "django-shortuuidfield>=0.1.3", "django-tinymce>=5.0.0", + "docxcompose", "docxtpl>=0.20.2", "faker==40.1.2", "ipykernel>=7.1.0", diff --git a/uv.lock b/uv.lock index dad0e3e..d402dbb 100644 --- a/uv.lock +++ b/uv.lock @@ -46,6 +46,15 @@ wheels = [ { url = "https://mirrors.aliyun.com/pypi/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a" }, ] +[[package]] +name = "babel" +version = "2.18.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35" }, +] + [[package]] name = "beautifulsoup4" version = "4.14.3" @@ -74,6 +83,7 @@ dependencies = [ { name = "django-redis" }, { name = "django-shortuuidfield" }, { name = "django-tinymce" }, + { name = "docxcompose" }, { name = "docxtpl" }, { name = "faker" }, { name = "ipykernel" }, @@ -101,6 +111,7 @@ requires-dist = [ { name = "django-redis", specifier = ">=6.0.0" }, { name = "django-shortuuidfield", specifier = ">=0.1.3" }, { name = "django-tinymce", specifier = ">=5.0.0" }, + { name = "docxcompose" }, { name = "docxtpl", specifier = ">=0.20.2" }, { name = "faker", specifier = "==40.1.2" }, { name = "ipykernel", specifier = ">=7.1.0" }, @@ -392,6 +403,19 @@ wheels = [ { url = "https://mirrors.aliyun.com/pypi/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af" }, ] +[[package]] +name = "docxcompose" +version = "1.4.0" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +dependencies = [ + { name = "babel" }, + { name = "lxml" }, + { name = "python-docx" }, + { name = "setuptools" }, + { name = "six" }, +] +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/5d/25/07597a0fda04adf2f2fc375f48f704612a91c0c1da64f4c18e78a4a26630/docxcompose-1.4.0.tar.gz", hash = "sha256:bcf2799a0b63c29eb77a3d799a2f28443ae0f69f8691ff3d753f706be515c3e9" } + [[package]] name = "docxtpl" version = "0.20.2" @@ -484,7 +508,7 @@ wheels = [ [[package]] name = "ipython" -version = "9.9.0" +version = "9.10.0" source = { registry = "https://mirrors.aliyun.com/pypi/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -498,9 +522,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://mirrors.aliyun.com/pypi/packages/46/dd/fb08d22ec0c27e73c8bc8f71810709870d51cadaf27b7ddd3f011236c100/ipython-9.9.0.tar.gz", hash = "sha256:48fbed1b2de5e2c7177eefa144aba7fcb82dac514f09b57e2ac9da34ddb54220" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/a6/60/2111715ea11f39b1535bed6024b7dec7918b71e5e5d30855a5b503056b50/ipython-9.10.0.tar.gz", hash = "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77" } wheels = [ - { url = "https://mirrors.aliyun.com/pypi/packages/86/92/162cfaee4ccf370465c5af1ce36a9eacec1becb552f2033bb3584e6f640a/ipython-9.9.0-py3-none-any.whl", hash = "sha256:b457fe9165df2b84e8ec909a97abcf2ed88f565970efba16b1f7229c283d252b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d" }, ] [[package]] @@ -790,40 +814,40 @@ wheels = [ [[package]] name = "orjson" -version = "3.11.6" +version = "3.11.7" source = { registry = "https://mirrors.aliyun.com/pypi/simple" } -sdist = { url = "https://mirrors.aliyun.com/pypi/packages/70/a3/4e09c61a5f0c521cba0bb433639610ae037437669f1a4cbc93799e731d78/orjson-3.11.6.tar.gz", hash = "sha256:0a54c72259f35299fd033042367df781c2f66d10252955ca1efb7db309b954cb" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/53/45/b268004f745ede84e5798b48ee12b05129d19235d0e15267aa57dcdb400b/orjson-3.11.7.tar.gz", hash = "sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49" } wheels = [ - { url = "https://mirrors.aliyun.com/pypi/packages/ae/45/d9c71c8c321277bc1ceebf599bc55ba826ae538b7c61f287e9a7e71bd589/orjson-3.11.6-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e4ae1670caabb598a88d385798692ce2a1b2f078971b3329cfb85253c6097f5b" }, - { url = "https://mirrors.aliyun.com/pypi/packages/ac/7e/4afcf4cfa9c2f93846d70eee9c53c3c0123286edcbeb530b7e9bd2aea1b2/orjson-3.11.6-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:2c6b81f47b13dac2caa5d20fbc953c75eb802543abf48403a4703ed3bff225f0" }, - { url = "https://mirrors.aliyun.com/pypi/packages/40/10/6d2b8a064c8d2411d3d0ea6ab43125fae70152aef6bea77bb50fa54d4097/orjson-3.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:647d6d034e463764e86670644bdcaf8e68b076e6e74783383b01085ae9ab334f" }, - { url = "https://mirrors.aliyun.com/pypi/packages/5a/50/5804ea7d586baf83ee88969eefda97a24f9a5bdba0727f73e16305175b26/orjson-3.11.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8523b9cc4ef174ae52414f7699e95ee657c16aa18b3c3c285d48d7966cce9081" }, - { url = "https://mirrors.aliyun.com/pypi/packages/9e/2e/f0492ed43e376722bb4afd648e06cc1e627fc7ec8ff55f6ee739277813ea/orjson-3.11.6-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:313dfd7184cde50c733fc0d5c8c0e2f09017b573afd11dc36bd7476b30b4cb17" }, - { url = "https://mirrors.aliyun.com/pypi/packages/10/15/6f874857463421794a303a39ac5494786ad46a4ab46d92bda6705d78c5aa/orjson-3.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905ee036064ff1e1fd1fb800055ac477cdcb547a78c22c1bc2bbf8d5d1a6fb42" }, - { url = "https://mirrors.aliyun.com/pypi/packages/d2/c7/b7223a3a70f1d0cc2d86953825de45f33877ee1b124a91ca1f79aa6e643f/orjson-3.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce374cb98411356ba906914441fc993f271a7a666d838d8de0e0900dd4a4bc12" }, - { url = "https://mirrors.aliyun.com/pypi/packages/87/e3/aa1b6d3ad3cd80f10394134f73ae92a1d11fdbe974c34aa199cc18bb5fcf/orjson-3.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cded072b9f65fcfd188aead45efa5bd528ba552add619b3ad2a81f67400ec450" }, - { url = "https://mirrors.aliyun.com/pypi/packages/f6/cf/e4aac5a46cbd39d7e769ef8650efa851dfce22df1ba97ae2b33efe893b12/orjson-3.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ab85bdbc138e1f73a234db6bb2e4cc1f0fcec8f4bd2bd2430e957a01aadf746" }, - { url = "https://mirrors.aliyun.com/pypi/packages/0b/04/975b86a4bcf6cfeda47aad15956d52fbeda280811206e9967380fa9355c8/orjson-3.11.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:351b96b614e3c37a27b8ab048239ebc1e0be76cc17481a430d70a77fb95d3844" }, - { url = "https://mirrors.aliyun.com/pypi/packages/28/d1/0369d0baf40eea5ff2300cebfe209883b2473ab4aa4c4974c8bd5ee42bb2/orjson-3.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f9959c85576beae5cdcaaf39510b15105f1ee8b70d5dacd90152617f57be8c83" }, - { url = "https://mirrors.aliyun.com/pypi/packages/ab/1f/d10c6d6ae26ff1d7c3eea6fd048280ef2e796d4fb260c5424fd021f68ecf/orjson-3.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:75682d62b1b16b61a30716d7a2ec1f4c36195de4a1c61f6665aedd947b93a5d5" }, - { url = "https://mirrors.aliyun.com/pypi/packages/8d/43/7479921c174441a0aa5277c313732e20713c0969ac303be9f03d88d3db5d/orjson-3.11.6-cp313-cp313-win32.whl", hash = "sha256:40dc277999c2ef227dcc13072be879b4cfd325502daeb5c35ed768f706f2bf30" }, - { url = "https://mirrors.aliyun.com/pypi/packages/88/bc/9ffe7dfbf8454bc4e75bb8bf3a405ed9e0598df1d3535bb4adcd46be07d0/orjson-3.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:f0f6e9f8ff7905660bc3c8a54cd4a675aa98f7f175cf00a59815e2ff42c0d916" }, - { url = "https://mirrors.aliyun.com/pypi/packages/6f/7e/51fa90b451470447ea5023b20d83331ec741ae28d1e6d8ed547c24e7de14/orjson-3.11.6-cp313-cp313-win_arm64.whl", hash = "sha256:1608999478664de848e5900ce41f25c4ecdfc4beacbc632b6fd55e1a586e5d38" }, - { url = "https://mirrors.aliyun.com/pypi/packages/31/9f/46ca908abaeeec7560638ff20276ab327b980d73b3cc2f5b205b4a1c60b3/orjson-3.11.6-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6026db2692041d2a23fe2545606df591687787825ad5821971ef0974f2c47630" }, - { url = "https://mirrors.aliyun.com/pypi/packages/ff/78/ca478089818d18c9cd04f79c43f74ddd031b63c70fa2a946eb5e85414623/orjson-3.11.6-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:132b0ab2e20c73afa85cf142e547511feb3d2f5b7943468984658f3952b467d4" }, - { url = "https://mirrors.aliyun.com/pypi/packages/39/5e/cbb9d830ed4e47f4375ad8eef8e4fff1bf1328437732c3809054fc4e80be/orjson-3.11.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b376fb05f20a96ec117d47987dd3b39265c635725bda40661b4c5b73b77b5fde" }, - { url = "https://mirrors.aliyun.com/pypi/packages/7c/3a/35df6558c5bc3a65ce0961aefee7f8364e59af78749fc796ea255bfa0cf5/orjson-3.11.6-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:954dae4e080574672a1dfcf2a840eddef0f27bd89b0e94903dd0824e9c1db060" }, - { url = "https://mirrors.aliyun.com/pypi/packages/cd/8e/3d32dd7b7f26a19cc4512d6ed0ae3429567c71feef720fe699ff43c5bc9e/orjson-3.11.6-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe515bb89d59e1e4b48637a964f480b35c0a2676de24e65e55310f6016cca7ce" }, - { url = "https://mirrors.aliyun.com/pypi/packages/6c/9c/1efbf5c99b3304f25d6f0d493a8d1492ee98693637c10ce65d57be839d7b/orjson-3.11.6-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:380f9709c275917af28feb086813923251e11ee10687257cd7f1ea188bcd4485" }, - { url = "https://mirrors.aliyun.com/pypi/packages/82/83/0d19eeb5be797de217303bbb55dde58dba26f996ed905d301d98fd2d4637/orjson-3.11.6-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8173e0d3f6081e7034c51cf984036d02f6bab2a2126de5a759d79f8e5a140e7" }, - { url = "https://mirrors.aliyun.com/pypi/packages/32/a7/573fec3df4dc8fc259b7770dc6c0656f91adce6e19330c78d23f87945d1e/orjson-3.11.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dddf9ba706294906c56ef5150a958317b09aa3a8a48df1c52ccf22ec1907eac" }, - { url = "https://mirrors.aliyun.com/pypi/packages/c2/0e/23551b16f21690f7fd5122e3cf40fdca5d77052a434d0071990f97f5fe2f/orjson-3.11.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cbae5c34588dc79938dffb0b6fbe8c531f4dc8a6ad7f39759a9eb5d2da405ef2" }, - { url = "https://mirrors.aliyun.com/pypi/packages/b8/63/5e6c8f39805c39123a18e412434ea364349ee0012548d08aa586e2bd6aa9/orjson-3.11.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:f75c318640acbddc419733b57f8a07515e587a939d8f54363654041fd1f4e465" }, - { url = "https://mirrors.aliyun.com/pypi/packages/1d/4d/724975cf0087f6550bd01fd62203418afc0ea33fd099aed318c5bcc52df8/orjson-3.11.6-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e0ab8d13aa2a3e98b4a43487c9205b2c92c38c054b4237777484d503357c8437" }, - { url = "https://mirrors.aliyun.com/pypi/packages/a8/a3/f4c4e3f46b55db29e0a5f20493b924fc791092d9a03ff2068c9fe6c1002f/orjson-3.11.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f884c7fb1020d44612bd7ac0db0babba0e2f78b68d9a650c7959bf99c783773f" }, - { url = "https://mirrors.aliyun.com/pypi/packages/ee/86/6f5529dd27230966171ee126cecb237ed08e9f05f6102bfaf63e5b32277d/orjson-3.11.6-cp314-cp314-win32.whl", hash = "sha256:8d1035d1b25732ec9f971e833a3e299d2b1a330236f75e6fd945ad982c76aaf3" }, - { url = "https://mirrors.aliyun.com/pypi/packages/d3/b5/91ae7037b2894a6b5002fb33f4fbccec98424a928469835c3837fbb22a9b/orjson-3.11.6-cp314-cp314-win_amd64.whl", hash = "sha256:931607a8865d21682bb72de54231655c86df1870502d2962dbfd12c82890d077" }, - { url = "https://mirrors.aliyun.com/pypi/packages/55/74/f473a3ec7a0a7ebc825ca8e3c86763f7d039f379860c81ba12dcdd456547/orjson-3.11.6-cp314-cp314-win_arm64.whl", hash = "sha256:fe71f6b283f4f1832204ab8235ce07adad145052614f77c876fcf0dac97bc06f" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/25/6e0e52cac5aab51d7b6dcd257e855e1dec1c2060f6b28566c509b4665f62/orjson-3.11.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a5/29/a77f48d2fc8a05bbc529e5ff481fb43d914f9e383ea2469d4f3d51df3d00/orjson-3.11.7-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4" }, + { url = "https://mirrors.aliyun.com/pypi/packages/89/25/0a16e0729a0e6a1504f9d1a13cdd365f030068aab64cec6958396b9969d7/orjson-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785" }, + { url = "https://mirrors.aliyun.com/pypi/packages/66/da/a2e505469d60666a05ab373f1a6322eb671cb2ba3a0ccfc7d4bc97196787/orjson-3.11.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539" }, + { url = "https://mirrors.aliyun.com/pypi/packages/23/bf/ed73f88396ea35c71b38961734ea4a4746f7ca0768bf28fd551d37e48dd0/orjson-3.11.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/73/3c/b05d80716f0225fc9008fbf8ab22841dcc268a626aa550561743714ce3bf/orjson-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/61/e8/0be9b0addd9bf86abfc938e97441dcd0375d494594b1c8ad10fe57479617/orjson-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c9/ec/c68e3b9021a31d9ec15a94931db1410136af862955854ed5dd7e7e4f5bff/orjson-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace" }, + { url = "https://mirrors.aliyun.com/pypi/packages/d2/45/f3466739aaafa570cc8e77c6dbb853c48bf56e3b43738020e2661e08b0ac/orjson-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e1/84/9f7f02288da1ffb31405c1be07657afd1eecbcb4b64ee2817b6fe0f785fa/orjson-3.11.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157" }, + { url = "https://mirrors.aliyun.com/pypi/packages/18/07/9dd2f0c0104f1a0295ffbe912bc8d63307a539b900dd9e2c48ef7810d971/orjson-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a5/66/857a8e4a3292e1f7b1b202883bcdeb43a91566cf59a93f97c53b44bd6801/orjson-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223" }, + { url = "https://mirrors.aliyun.com/pypi/packages/0a/5b/6ebcf3defc1aab3a338ca777214966851e92efb1f30dc7fc8285216e6d1b/orjson-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3" }, + { url = "https://mirrors.aliyun.com/pypi/packages/00/04/c6f72daca5092e3117840a1b1e88dfc809cc1470cf0734890d0366b684a1/orjson-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757" }, + { url = "https://mirrors.aliyun.com/pypi/packages/03/ba/077a0f6f1085d6b806937246860fafbd5b17f3919c70ee3f3d8d9c713f38/orjson-3.11.7-cp313-cp313-win_arm64.whl", hash = "sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539" }, + { url = "https://mirrors.aliyun.com/pypi/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/46/19/e40f6225da4d3aa0c8dc6e5219c5e87c2063a560fe0d72a88deb59776794/orjson-3.11.7-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0" }, + { url = "https://mirrors.aliyun.com/pypi/packages/9d/7e/c4de2babef2c0817fd1f048fd176aa48c37bec8aef53d2fa932983032cce/orjson-3.11.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6" }, + { url = "https://mirrors.aliyun.com/pypi/packages/eb/74/233d360632bafd2197f217eee7fb9c9d0229eac0c18128aee5b35b0014fe/orjson-3.11.7-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf" }, + { url = "https://mirrors.aliyun.com/pypi/packages/79/51/af79504981dd31efe20a9e360eb49c15f06df2b40e7f25a0a52d9ae888e8/orjson-3.11.7-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5" }, + { url = "https://mirrors.aliyun.com/pypi/packages/67/e2/da898eb68b72304f8de05ca6715870d09d603ee98d30a27e8a9629abc64b/orjson-3.11.7-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c5/89/15364d92acb3d903b029e28d834edb8780c2b97404cbf7929aa6b9abdb24/orjson-3.11.7-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e" }, + { url = "https://mirrors.aliyun.com/pypi/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/b9/0e/45e1dcf10e17d0924b7c9162f87ec7b4ca79e28a0548acf6a71788d3e108/orjson-3.11.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183" }, + { url = "https://mirrors.aliyun.com/pypi/packages/63/d7/4d2e8b03561257af0450f2845b91fbd111d7e526ccdf737267108075e0ba/orjson-3.11.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650" }, + { url = "https://mirrors.aliyun.com/pypi/packages/78/cf/d45343518282108b29c12a65892445fc51f9319dc3c552ceb51bb5905ed2/orjson-3.11.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141" }, + { url = "https://mirrors.aliyun.com/pypi/packages/a9/3a/d6001f51a7275aacd342e77b735c71fa04125a3f93c36fee4526bc8c654e/orjson-3.11.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2" }, + { url = "https://mirrors.aliyun.com/pypi/packages/1d/d3/f19b47ce16820cc2c480f7f1723e17f6d411b3a295c60c8ad3aa9ff1c96a/orjson-3.11.7-cp314-cp314-win32.whl", hash = "sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576" }, + { url = "https://mirrors.aliyun.com/pypi/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl", hash = "sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/6f/1c/f2a8d8a1b17514660a614ce5f7aac74b934e69f5abc2700cc7ced882a009/orjson-3.11.7-cp314-cp314-win_arm64.whl", hash = "sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d" }, ] [[package]] @@ -1220,6 +1244,15 @@ wheels = [ { url = "https://mirrors.aliyun.com/pypi/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl", hash = "sha256:23c52b208f92b56103e17c5d06bdc1a6c2c0b3106583985a76a18f83b265de2b" }, ] +[[package]] +name = "setuptools" +version = "80.10.2" +source = { registry = "https://mirrors.aliyun.com/pypi/simple" } +sdist = { url = "https://mirrors.aliyun.com/pypi/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70" } +wheels = [ + { url = "https://mirrors.aliyun.com/pypi/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173" }, +] + [[package]] name = "shortuuid" version = "1.0.13" @@ -1342,10 +1375,10 @@ wheels = [ [[package]] name = "ua-parser-builtins" -version = "202601" +version = "202602" source = { registry = "https://mirrors.aliyun.com/pypi/simple" } wheels = [ - { url = "https://mirrors.aliyun.com/pypi/packages/fd/82/aab481e2fc6dee0a13ce35c750e97dbe3f270fb327089c99a8f5e6900e0c/ua_parser_builtins-202601-py3-none-any.whl", hash = "sha256:f5dc93b0f53724dcd5c3eb79edb0aea281cb304a2c02a9436cbeb8cfb8bc4ad1" }, + { url = "https://mirrors.aliyun.com/pypi/packages/10/4a/ce8a586f7376f6bceabfe5f12f5e542db998517f08a461bb18294ff19bd1/ua_parser_builtins-202602-py3-none-any.whl", hash = "sha256:07e44db44e916076cf999cbe2ccc37f25bd689844e8748511caec23e961a04cb" }, ] [[package]]