From 9db8b28f5b248e3ea4da646445de4d63d4ddc5cc Mon Sep 17 00:00:00 2001 From: chenjunyi <314298729@qq.com> Date: Tue, 2 Dec 2025 18:13:30 +0800 Subject: [PATCH] =?UTF-8?q?[Update#1]=E6=94=AF=E6=92=91AI=E7=94=9F?= =?UTF-8?q?=E6=88=90=E6=B5=8B=E8=AF=95=E9=A1=B9-=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schemas/__pycache__/case.cpython-313.pyc | Bin 8908 -> 8790 bytes .../__pycache__/design.cpython-313.pyc | Bin 5850 -> 5784 bytes .../schemas/__pycache__/dut.cpython-313.pyc | Bin 4872 -> 4860 bytes .../__pycache__/problem.cpython-313.pyc | Bin 7215 -> 7203 bytes .../__pycache__/project.cpython-313.pyc | Bin 2972 -> 2960 bytes .../__pycache__/testDemand.cpython-313.pyc | Bin 8233 -> 8169 bytes apps/project/schemas/case.py | 20 +++++++++--------- apps/project/schemas/design.py | 8 +++---- apps/project/schemas/dut.py | 8 +++---- apps/project/schemas/problem.py | 8 +++---- apps/project/schemas/project.py | 8 +++---- apps/project/schemas/testDemand.py | 4 ++-- logs/root_log | 14 ++++++++++++ requirements.txt | 8 +++---- 14 files changed, 46 insertions(+), 32 deletions(-) diff --git a/apps/project/schemas/__pycache__/case.cpython-313.pyc b/apps/project/schemas/__pycache__/case.cpython-313.pyc index 39f3baf07cd90339d5ca165b06cd534781f8cb2b..20cf23efeba55073ad90fb41418a9b831a25b2af 100644 GIT binary patch delta 1905 zcma)7T}+!*818}gYYUW?pB4&~!Uh^P=@tx;fQt;+mK6pQj0yyy8=vrLY4P-fh_Ycq z;x^fw6wepzCridgZJOU~`3=?hoAk5>pHGdE>Q$?UWi zrOOryx%YefnOVQEa$3~7L7H@**IE(MM)%y&=R@fBspPmG@0&5Lj`vAp!bou6?{Yhy zKsa|%p4buZzAz+%t?v4?)kYudx0 zhZ*$cUoNs3sJLFML>Jx5ZyziBHyMk@W2pEbG@e$09Q z{aVnmhtR-AyN87DsPd;>GC7kNA2r5h2i+5lid7^HSjkbd%gCx+>xqM-u`xHy&DorF3Kcu7IpekPfWO9?&2mEsWNbh>z6#JSSX z#jp8CU>pYUZmb&gUZAdm^>TQ2tMg*hTx}MfS^A;mgqY<+YbhNS(>SDsavV~p)MKWe z9Xaci##B;+CXXTaIG`PX=Ex2}C*XhPa9+iXsb6a6LEw9HGJ9`q^rb88&qF2N?k)vu z_U7Q3qwD?}ZQ$68VSQR zVsYb@m}w*vY3H=mr;L;?Tj_SNvu@9+Tu><%&5MvO0p6gS-tvZQMR^&}%~tpN&j!_qd~+zlxw$`Xv0QSmmYu3P00`@U&BZSvQR--Fns65Vz-j zUx#g-7Hb|B>vX;5vkrca`T6aEi*G$&&^T1S57xq|F1nt$Tn>x;Z9i@r&wk|^Eb{x><5{&=SEqVM$JNPrq&<_qo*bjOqB8|yJ9$fe z^q|P;a!zIvYHIj;QcWeY^sTq7(NIiFtxksX$dPqQSh9TQ3EZ|C<20*EV z?y!PzqJd)WKz$9C0d6_6B@&h_e-#v1VP-`y(HKDay-Sx+qtZm0UP0akWC}llti!$@WGYh)_{oc)(@5YqMoX4wYGd> zzP1gP^5!lxCF<;GYC56HocNCMS({~ukQ`6)`6!e52=pzxcJo1l_G2F2Fet5z!mO@o zoD-!<%32eBX@Az;&uQr2O+%C9@|kiP>R0Jzap!mlMe9OIdZu-=a6MXbEScVAxdVn; z3xE%+UCd8S5>*hHZMU4U@ntMMU9qr>>wm)O_H{t}I^YPv1u#i>V%kX`I8GiS-N_03 z(Q(&n5|?(}W{5WW)!N!0{O1|+>|a65|HJ-GX~@P0*ptT@3H=-2HbgA}n9O6C#%Rvj zc8Gb5qMqQ^W9JRwIVWulyOx?x$)vO?$nT*yl?hBI=m+mjF#%%a ztM=0^kC)bu4)}(k8~`vWGZuyY&sDG-fM$Oe-Zafob!c=NExjysF4T7Eut=jYw<=JW zc1?}z>Rxx{D>EY9!iv@o?+bv}0LYTo3OEn=kCwY3ZARqSyP|wSdh!=UJ`jWUTAu@v znDG7~%(~4$Gef6*weBcilj!a>nc?)z`_^Tm%l*xwgL?f9$~?^HY0=*==C^+Ge=ihH z%@BPPh+Jak$e&Sc7WrNEeLjg{OHAv-kcOdkB-CtjEX@mXEZB85%X-7Ccop>oE5vD< z2)2h0rG60v_#{i1eF(S>;7$qM!E_l=3}Cu?Yw;%Y5my0GB}>q*Kgb z1&b^6Mb#T(g{DI2!g({1i?mjKRbkU&HeH43Dg|p=#44Lk)l7(WdKfIFKWZv{>rnGi z_Y2#>jvLTy(Am(-VnaGky#Q0grp~H*a#H2C(msa`_#b%4HX&}3tF~Tj(y7|*mIxO3 zHRacdFFIdFzDwNt+(evf&MhC0iEq%Kp>pb~J0kAUK;7B%G4b(G&Qd7kACt3CToIei wkgiBc5&dFwE@#0vchoL%O-lIY{0>N!Ig9+#qq=Z$RIELpvsgux?9X)n4anh?;zWMS{&A#Ppy1f&U$&|K$4uuNcE7pAvKelDtB) zY%w6on8^l0nT#<&Ny*8Zg{CrwO!gGE;s#pvA3j;GFFnGAw QfaDD8FAP9>a-CQV018cC761SM delta 472 zcmbQCdrO!1GcPX}0}z-!k;@R>$jijWs5n`GO`6R)KQApaeX>4VAUkhveoAUi{NzS9 z8AYggkseTs6cB&r0TOKtHw45wSZ_(VcJof&!xq8r#`uMSiPdegH2YyjX`pc;e0mV` zUMc~V7a2?r;8C8e#L)p$xOpST3T7rvj>!%jqMR%sC8j`Pay^@hf)9{k2E@h4775vR zvlmH#)cH?t=P_aQpByMGvH1#53zKmuNK_LicT&Rn#ve9 znO)dQ0BjrBUJi&lkd`D6Gih?ZuoGj_ IvW-{_062nfJOBUy diff --git a/apps/project/schemas/__pycache__/dut.cpython-313.pyc b/apps/project/schemas/__pycache__/dut.cpython-313.pyc index 263dfe9176788c6669ad7f9b2101fe68e920b7c0..48ffb9c8090ca10f24e4c669f68efe9d35263cd3 100644 GIT binary patch delta 183 zcmeBB`=iSHnU|M~0SH2-sb$t}V9EhV%04Y1!_)SY}% R+7!r%{=&cv63ReyRh@-=BK3Q#7|<8 zVTTDTvWT%r7+!Yoav0C>{=&e`P+Ft-2z diff --git a/apps/project/schemas/__pycache__/project.cpython-313.pyc b/apps/project/schemas/__pycache__/project.cpython-313.pyc index 065d87ca9aa836093e190793bc0d9d51f4631b42..788641d4e58e89ee7301ab0b2f126ff1e88b24dd 100644 GIT binary patch delta 159 zcmbOuK0%!KGcPX}0}z-_Q_Gau$a{;CQEKu8Mp0Hh-_(-C$t+A2jO>$}nR4V=K>Q+c zph}SPVjdvT#&APGyo2?YkW)ANWC7*~c4x*f3{0%foAa5am?gvmit@8klS`b7QWHy3 zJ@X1mOCV-0W(#Ez3g~9v{D*B96MG=zN1&d-&3if5FmgIG&hY-iz|818xrkc}0Gc5y A761SM delta 171 zcmbOrK1ZDQGcPX}0}!m;^*3E-BkwInMw!VI7)9Cjob&V2GSeqBF;%eh=H{oQ=EP5~ zX39}ygNPT21NDG37V`j!HijDl;vKBFBs{u#C$lj}uzNCoVPInQ+?>iR#VjQmP?VpQ znq1;sl$uzQ>X}ziS^_hDI$J1aeA3pn<-yRCjaa|Qd{Bc&YOi1S+m4sg!fFenGm>CVUjRK$PuOqT?CrQ5*`*3!6u%ecLqzrSC+wt6h>CP?;*!W zZ_3^nx3i0BOZYy@sr34?VGgIW3ufxOAbQD;I$jT-uc32`+(ZkNq7b2)FiQA4C@P^4 zx2a;|A!IOH3@{PCY~KEn?@%Q6+NJ2Xq2x4-`~J1elQNG@ZI9;X)UvXKnotQ^-7TzVOu_yz2V<+AuJFk6rc~}w;vAHkjjEMaJ delta 609 zcmaE9ztVyCGcPX}0}woWYL>yXkvB$=QDJhHpcI>PeqLH;`s5Bl?a6Lz;)2XTB}FPg z;uddieoAUi{N#KNY0X_;>RbNdX0l(kDL@G+|7i zTqq$iSx-ofJ%I5G0~2e&Y?&YhnUfubjTtjHmkI|nSrmXo!azhJh$sRPfgmCn zL==OF5D;MmB0!EW0-I4XNlb|?2gJ>ptReQAF=z5WUdhS2;%7}j2HxUKDJ}6U%}q)z z0vmfvC?&NxGd<5GH8(LY1u6lyN(iW0lYg>+fT&(2$TYAG;vkj;h+qd1J|F_!ognYA zm4jr;C-+OFGnRuLARxI~r3$XR8pHy7s|LhESjY>sP*VV_k#!)Ib(77cA{px@3(87P zUMaPav1M|!v>aO_NUCviy|gZ4BUnnDPi*pjDbC4HrE?eyCI`t>v$cbiv`@Y)W6RhM zR8q*-4H5tcAjqeaH?WDbfrYpxFO(6Ud_Y!&tq-K4Z}Kf!b;iEQOmf@g!Ql%ITCn%P k4gy;ZHoR~0bvaqasgu9TP2>zft4{}a=&~O0020Zv;Y7A diff --git a/apps/project/schemas/case.py b/apps/project/schemas/case.py index 342cbb9..bacdbb8 100644 --- a/apps/project/schemas/case.py +++ b/apps/project/schemas/case.py @@ -13,9 +13,9 @@ class DeleteSchema(Schema): # 测试步骤输出schema class CaseStepSchema(ModelSchema): - class Config: + class Meta: model = CaseStep - model_fields = ["operation", 'expect', 'result', 'passed', 'case', 'id'] + fields = ["operation", 'expect', 'result', 'passed', 'case', 'id'] # 测试用例的步骤输出schema,输出isPassed和isExe转换后的 class CaseStepWithTransitionSchema(ModelSchema): @@ -28,9 +28,9 @@ class CaseModelOutSchemaWithoutProblem(ModelSchema): testStep: List[CaseStepWithTransitionSchema] testType: str # 用例额外字段,用于测试类型FT的标识给前端 - class Config: + class Meta: model = Case - model_exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] + exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] # 输出case:关联问题单 class CaseModelOutSchemaOrigin(ModelSchema): @@ -39,9 +39,9 @@ class CaseModelOutSchemaOrigin(ModelSchema): # 新增:关联的问题单 problem: Optional[ProblemModelOutSchema] = None - class Config: + class Meta: model = Case - model_exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] + exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] # 输出case:关联问题单 class CaseModelOutSchema(ModelSchema): @@ -52,9 +52,9 @@ class CaseModelOutSchema(ModelSchema): # 2025年5月10日新增上级字段 test: Optional[TestDemandModelOutSchemaOrigin] = None - class Config: + class Meta: model = Case - model_exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] + exclude = ['project', 'round', 'dut', 'design', 'test', 'remark', 'sort'] # 查询测试项 class CaseFilterSchema(Schema): @@ -93,9 +93,9 @@ class CaseTreeInputSchema(Schema): class CaseCreateOutSchema(ModelSchema): level: Union[str, int] - class Config: + class Meta: model = Case - model_exclude = ['remark', 'sort', 'project', 'round', 'dut', 'design'] + exclude = ['remark', 'sort', 'project', 'round', 'dut', 'design'] # 新增接口schema class CaseInputSchema(Schema): diff --git a/apps/project/schemas/design.py b/apps/project/schemas/design.py index b4cd65d..a3244f8 100644 --- a/apps/project/schemas/design.py +++ b/apps/project/schemas/design.py @@ -23,17 +23,17 @@ class DesignFilterSchema(Schema): # 2025年改为2个输出,因为下级需要上级,原始不再嵌套上级 class DesignModelOutSchemaOrigin(ModelSchema): - class Config: + class Meta: model = Design - model_exclude = ['project', 'round', 'dut', 'remark', 'sort'] + exclude = ['project', 'round', 'dut', 'remark', 'sort'] class DesignModelOutSchema(ModelSchema): # 新增字段 - 上级的dut对象 dut: Optional[DutModelOutSchema] = None - class Config: + class Meta: model = Design - model_exclude = ['project', 'round', 'dut', 'remark', 'sort'] + exclude = ['project', 'round', 'dut', 'remark', 'sort'] # 处理树状结构的schema class DesignTreeReturnSchema(Schema): diff --git a/apps/project/schemas/dut.py b/apps/project/schemas/dut.py index b70f3aa..fad87c4 100644 --- a/apps/project/schemas/dut.py +++ b/apps/project/schemas/dut.py @@ -5,9 +5,9 @@ from datetime import date from pydantic import AliasChoices class DutModelOutSchema(ModelSchema): - class Config: + class Meta: model = Dut - model_exclude = ['project', 'round', 'remark', 'sort'] + exclude = ['project', 'round', 'remark', 'sort'] class DutFilterSchema(Schema): project_id: int = Field(None, alias='projectId') @@ -56,9 +56,9 @@ class DutCreateOutSchema(ModelSchema): effective_lines: Optional[Union[str, int]] = None comment_lines: Optional[Union[str, int]] = None - class Config: + class Meta: model = Dut - model_exclude = ['remark', 'sort', 'project', 'round'] + exclude = ['remark', 'sort', 'project', 'round'] # 删除schema class DeleteSchema(Schema): diff --git a/apps/project/schemas/problem.py b/apps/project/schemas/problem.py index 559d76c..21a30bf 100644 --- a/apps/project/schemas/problem.py +++ b/apps/project/schemas/problem.py @@ -11,9 +11,9 @@ class ProblemModelOutSchema(ModelSchema): related: Optional[bool] = Field(False) # 给前端反应是否为关联的问题单 hang: bool = Field(False) # 给前端反应是否是悬挂状态(即没有关联case) - class Config: + class Meta: model = Problem - model_exclude = ['case', 'remark', 'sort'] + exclude = ['case', 'remark', 'sort'] # 查询问题单 class ProblemFilterSchema(Schema): @@ -53,9 +53,9 @@ class ProblemTreeInputSchema(Schema): # 增加问题单 class ProblemCreateOutSchema(ModelSchema): - class Config: + class Meta: model = Problem - model_exclude = ['remark', 'sort', 'case'] + exclude = ['remark', 'sort', 'case'] # 更新,新增schema class ProblemCreateInputSchema(Schema): diff --git a/apps/project/schemas/project.py b/apps/project/schemas/project.py index 3af0cd1..f6c0a7e 100644 --- a/apps/project/schemas/project.py +++ b/apps/project/schemas/project.py @@ -7,9 +7,9 @@ from typing import List, Optional window_file_str = ['\\', '/', ':', '*', '?', '"', '<', '>', "|"] class ProjectRetrieveSchema(ModelSchema): - class Config: + class Meta: model = Project - model_exclude = ['update_datetime', 'create_datetime', 'remark'] + exclude = ['update_datetime', 'create_datetime', 'remark'] class ProjectFilterSchema(Schema): ident: Optional[str] = None @@ -26,9 +26,9 @@ class ProjectFilterSchema(Schema): class ProjectCreateInput(ModelSchema): ident: str - class Config: + class Meta: model = Project - model_exclude = ['remark', 'update_datetime', 'create_datetime', 'sort', 'id'] + exclude = ['remark', 'update_datetime', 'create_datetime', 'sort', 'id'] @field_validator('ident') @staticmethod diff --git a/apps/project/schemas/testDemand.py b/apps/project/schemas/testDemand.py index 8f3ff1b..f480d18 100644 --- a/apps/project/schemas/testDemand.py +++ b/apps/project/schemas/testDemand.py @@ -69,9 +69,9 @@ class TestDemandTreeInputSchema(Schema): class TestDemandCreateOutSchema(ModelSchema): level: Union[str, int] - class Config: + class Meta: model = TestDemand - model_exclude = ['remark', 'sort', 'project', 'round', 'dut', 'design'] + exclude = ['remark', 'sort', 'project', 'round', 'dut', 'design'] # 新增测试子项,单个子项的Schema class TestContentInputSchema(Schema): diff --git a/logs/root_log b/logs/root_log index 665ecc0..45fe3fd 100644 --- a/logs/root_log +++ b/logs/root_log @@ -332,3 +332,17 @@ AttributeError: 'str' object has no attribute 'testType' [WARNING][2025-11-17 16:45:54,859][log.py:253]Unauthorized: /api/system/getInfo [WARNING][2025-11-17 16:45:54,926][log.py:253]Unauthorized: /api/system/logout [WARNING][2025-11-17 16:46:10,800][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2025-11-18 15:07:15,118][log.py:253]Unauthorized: /api/system/getInfo +[WARNING][2025-11-18 15:07:15,177][log.py:253]Unauthorized: /api/system/logout +[WARNING][2025-11-26 14:01:13,585][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2025-11-26 14:01:13,879][operation.py:131]"POST - UserTokenController[obtain_token] /api/system/login" 401 +[WARNING][2025-11-26 14:01:13,881][log.py:253]Unauthorized: /api/system/login +[WARNING][2025-11-26 14:01:18,695][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2025-11-28 13:08:56,051][log.py:253]Not Found: /api/user/admin +[WARNING][2025-11-28 13:09:03,236][log.py:253]Not Found: /api/user/admin +[WARNING][2025-11-28 13:09:15,425][log.py:253]Not Found: /api/user/admin +[WARNING][2025-12-01 09:14:00,800][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2025-12-02 09:12:28,085][log.py:253]Unauthorized: /api/system/getInfo +[WARNING][2025-12-02 09:12:28,124][log.py:253]Unauthorized: /api/system/logout +[WARNING][2025-12-02 09:12:36,217][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) +[WARNING][2025-12-02 15:56:55,439][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []}) diff --git a/requirements.txt b/requirements.txt index 7b72150..416a4f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,18 +11,18 @@ typing_extensions~=4.15.0 python-ldap~=3.4.4 # 项目包 django-environ~=0.12.0 -django-ninja~=1.4.5 +django-ninja~=1.5.0 pydantic~=2.12.4 pydantic-core~=2.41.5 -django-ninja-extra~=0.30.2 -django-ninja-jwt~=5.4.0 +django-ninja-extra~=0.30.6 +django-ninja-jwt~=5.4.2 django-tinymce~=5.0.0 PyJWT~=2.10.1 cryptography~=45.0.6 ninja-schema~=0.14.3 user-agents~=2.2.0 numpy~=2.3.4 -docxtpl~=0.20.1 +docxtpl~=0.20.2 python-docx~=1.2.0 Jinja2~=3.1.6 django-redis~=6.0.0