From 93de81cf869bb28444e348fd3f9bef69981b7f02 Mon Sep 17 00:00:00 2001 From: ebby Date: Fri, 25 Sep 2026 17:02:37 +0200 Subject: [PATCH] fixed factories --- .../__pycache__/__init__.cpython-314.pyc | Bin 177 -> 177 bytes .../backend/__pycache__/main.cpython-314.pyc | Bin 848 -> 848 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 186 -> 186 bytes .../__pycache__/database.cpython-314.pyc | Bin 1256 -> 1256 bytes .../__pycache__/user_code_gen.cpython-314.pyc | Bin 689 -> 689 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 260 -> 260 bytes .../__pycache__/comment.cpython-314.pyc | Bin 1840 -> 1840 bytes .../models/__pycache__/user.cpython-314.pyc | Bin 3516 -> 3587 bytes backend/src/backend/models/user.py | 35 ++++++++++-------- .../__pycache__/__init__.cpython-314.pyc | Bin 185 -> 185 bytes .../__pycache__/comments.cpython-314.pyc | Bin 1173 -> 1173 bytes .../test_users.cpython-314-pytest-9.1.1.pyc | Bin 10816 -> 10816 bytes .../routers/__pycache__/users.cpython-314.pyc | Bin 2348 -> 2399 bytes backend/src/backend/routers/users.py | 4 +- .../test_users.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 10805 bytes .../test_users.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 10797 bytes .../{backend => test}/routers/test_users.py | 6 +-- 17 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 backend/src/test/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc create mode 100644 backend/src/test/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc rename backend/src/{backend => test}/routers/test_users.py (90%) diff --git a/backend/src/backend/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/__pycache__/__init__.cpython-314.pyc index e0ffbc46a1f774e2e80f3043a421e5d498c96009..a1b85ef92fe52daab45271660d56ef8425ccc88e 100644 GIT binary patch delta 19 acmdnUxRH@tn~#@^fq{X6t!~>y?qvWaxdc1_ delta 19 acmdnUxRH@tn~#@^fq{V`n|c7cssn~#@^fq{X6t!~>!ZdYaiF9ZZe delta 20 bcmcb>c7cssn~#@^fq{WRVdBz_+^)<3FV_TO diff --git a/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc index e8e4a826e996537f00079fa5a7daed9f3ee74764..41accb12e4c19b549aa9c8b75874590e4e91e27e 100644 GIT binary patch delta 19 acmdnRxQmfnn~#@^fq{X6t!~>y?)3mC1_W0C delta 19 acmdnRxQmfnn~#@^fq{WR+kfdq?)3mBwFEo> diff --git a/backend/src/backend/internal/__pycache__/database.cpython-314.pyc b/backend/src/backend/internal/__pycache__/database.cpython-314.pyc index b6681d4ac5c8d1051d7b255c38fe77d62424783e..33d0d58a55871f31612dd615a7f0fe21a2087b6e 100644 GIT binary patch delta 20 bcmaFC`GS*Mn~#@^fq{X6t!~>!?z=1iG%*Dg delta 20 bcmaFC`GS*Mn~#@^fq{X+tZV5;?z=1iHFO0) diff --git a/backend/src/backend/internal/__pycache__/user_code_gen.cpython-314.pyc b/backend/src/backend/internal/__pycache__/user_code_gen.cpython-314.pyc index fa720351079efc810468ef82c0d436aad872cea3..78eafdeebf79f8a469331340248d8ed344748fff 100644 GIT binary patch delta 20 bcmdnUx{;Mzn~#@^fq{X6t!~>!?qy5>D+dH- delta 20 bcmdnUx{;Mzn~#@^fq{WRbJo(0+{>5%EKdZK diff --git a/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc index 63e9ebfbd737b52d04fcd124e4f83c8451961ea6..9f0875104fdaf6dc25bff1b3ceb20d9a1f172952 100644 GIT binary patch delta 19 acmZo+YGLBm=HumJU|?WitJ^k_`zHV&+5|TM delta 19 acmZo+YGLBm=HumJU|?W)9kO&H_fG&MA_U<8 diff --git a/backend/src/backend/models/__pycache__/comment.cpython-314.pyc b/backend/src/backend/models/__pycache__/comment.cpython-314.pyc index 45f2bc9df58d7d09c584f2089e34821cd10d082d..beec30622c410b349ed11afd5b4a92204838ff80 100644 GIT binary patch delta 20 bcmdnMw}Fpan~#@^fq{X6t!~>!ZdG;wD<}i{ delta 20 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 diff --git a/backend/src/backend/models/user.py b/backend/src/backend/models/user.py index 3d922fc..f5e34d1 100644 --- a/backend/src/backend/models/user.py +++ b/backend/src/backend/models/user.py @@ -1,3 +1,4 @@ +from sqlmodel._compat import ConfigDict from uuid import uuid7 from datetime import datetime from backend.internal.user_code_gen import generate_user_code @@ -23,31 +24,35 @@ class User(UserBase, table=True): comments: list["Comment"] = Relationship(back_populates="user") - def factory(self, - id: uuid.UUID = uuid.uuid7(), + @classmethod + def factory(cls, + id: uuid.UUID | None = None, email: str = "Email@Test.mail", name: str = "TestName", user_code: str = "WYZZ", subscription: bool = False, - ) -> User: - self.id=id - self.email=email - self.name=name - self.user_code=user_code - self.subscription=subscription - return self + ) -> "User": + return cls( + id=id or uuid.uuid7(), + email=email, + name=name, + user_code=user_code, + subscription=subscription, + ) class NewUser(UserBase): email: str name: str subscription: bool - def factory(self, + @classmethod + def factory(cls, email: str = "Email@Test.mail", name: str = "TestName", subscription: bool = False - ) -> NewUser: - self.email = email - self.name = name - self.subscription = subscription - return self + ) -> "NewUser": + return cls( + email = email, + name = name, + subscription = subscription + ) diff --git a/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc index 5cd87a4947fca70048fa021d01271234cd6f1903..dfd4726223931b8c3b2dfae71cb4c108000d585e 100644 GIT binary patch delta 19 acmdnVxRa4vn~#@^fq{X6t!~>y?sWhr;RI9w delta 19 acmdnVxRa4vn~#@^fq{V`n|!?k*MpCpiQh delta 20 bcmbQrIhB)Jn~#@^fq{X6GkEDn?k*MpCHDj4 diff --git a/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc b/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc index ede2373f05abb74c155df7234fd5a100590c2757..765dc79aaf5963f9e2c14dbd8c4c2a21fd68c1fb 100644 GIT binary patch delta 20 bcmX>Qav+3Tn~#@^fq{X6t!~>!Zc{A)H=_jE delta 20 bcmX>Qav+3Tn~#@^fq{V`=lIf%+@@LpJI)1n diff --git a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc index c8ac1e34b61c79006bbe3df1593d744e0aa4056d..7942b1e9da40b9f8727c8c10aae380df4be1401a 100644 GIT binary patch delta 848 zcmXYt%WD%+6vofZJoA`o657)AmBvRj2!c`nqs8TDg=IBC~T6Go25Qfy6YdT4hlv;OFPFkd; zHr$kx5gDmX*K%xOOPzETXFv={opLoNE6!$RkaiU(Cvruo=StvZJgds8;Mv}Qmz`$Q z%*!pPL=7PF_5A9oz3(M$pagY$?_W_Hq)ar$CUR;C=KF0>m*r@M6|WC@h2u~e{Y8~Z zA|7;VwbjP_%uM6*;!?v~zPYx1s}>I(WoH{}D~oG2=Z5FrSzfBJSiKTpr@~@AjY&}AQ+7w!=VuAE%^hq5a8mBG` z`TAxkI5v7AM=VFb)t`$aR7p~z(F)oeM=92kiyn3>iC75*qDAuO-F@#v~riqb~rt{JO*m$#65FiHEgoehp0Pm@-H zF7KZ~{#O*4l~{O!0BCBtJS7og%@5W$yEp>?Q&hYZb&ZAgxAEDp_S_e9?ngS0gtk%{ zj&P*Cv!R7i}lsOg}kLU)V{rWhUF*PL@^=EvmwN%wNm%>w{@zVi0b z&Y4^3`wZX->_C$R;4{gpgfl_LH>9Dl5tzOuEsf0pd|TQYTS3-$q@%GN`&_Pm@@Aq z*!7sQ1&?@JdQ46G+uK{aYpbifw>Q)0EO-8itus3Z063QZ$(*qHb2OG2bJCY){YDl5 zl!HkW?S<__w5iOZ(I(Ciu2A0W366?!VFJL)O09-->2Gt2EvJ_CeX~p@IV#z0CmlX) zv60Ij#$HAlLL!c7wm1s_f|M`f98I6sTe@gB*g|^GuCR~kq5Y;`0GNmS?#Q!|_I=ib zB@%7Piw~<((LoBS5eU2P25jK*TYdxN!1DY2u5d&i=Lvv78lsr6$@hSk+ zD7gXYtL%FJS@OkM_*R(21pv6~T~OHvp^)Lx0aCYe#BtP3Iy};+tCEl*MqEnX5HgfK zp-t4stD-oL!l=E^yN?_Ew2j*GDYBc#orWGF8f2f=fOJ!;(jVmyV#zTMqedr`;a(^> z(kH+IZR9GFP0GfkCpjwfC=n9r#c4tBK+_)zbvC+5rx)>CcoP8V7Q|}+_+>E01~4;# UxdB`oKz#t-0Mf6{Q s user = session.exec(select(User).where(User.user_code == user_code)).one if not user: - raise HTTPException() + raise HTTPException(HTTP_401_UNAUTHORIZED) return "token" diff --git a/backend/src/test/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc b/backend/src/test/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8940c53be3ea437e7db2168749279862851c1a0f GIT binary patch literal 10805 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 qLV#C(f1T|AL