From 9392121163b07829af07f7dd113c35a676deaca9 Mon Sep 17 00:00:00 2001 From: Ryan Greer Date: Sat, 29 Nov 2025 13:47:47 -0700 Subject: [PATCH 1/3] draft for transformation helper function --- sbs_server/app/utils.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sbs_server/app/utils.py b/sbs_server/app/utils.py index 54a1556..ffaed4e 100644 --- a/sbs_server/app/utils.py +++ b/sbs_server/app/utils.py @@ -1,6 +1,7 @@ import sbol2 import sbol2build as s2b from sbol2build import abstract_translator as at +from sbol2build import bacterial_transformation from typing import List, Tuple @@ -54,4 +55,25 @@ def sbol2build_moclo(part_documents: List[sbol2.Document], backbone_doc: sbol2.D composite_list = assembly_obj.run() - return assembly_doc \ No newline at end of file + return assembly_doc + +def generate_transformation_metadata(plasmid_uris: List[str], chassis_uri: str, transformation_machine: str, protocol: str, params: str, sbh: sbol2.PartShop) -> sbol2.Document: + plasmid_docs = [] + + for uri in plasmid_uris: + temp_doc = sbol2.Document() + sbh.pull( + uri, + temp_doc + ) + plasmid_docs.append(temp_doc) + + chassis_doc = sbol2.Document() + sbh.pull( + chassis_uri, + chassis_doc + ) + + return bacterial_transformation(sbol2.Document(), chassis_doc, plasmid_docs) + + \ No newline at end of file From 8babc697f9cdc4599e530150121b36adb93f7826 Mon Sep 17 00:00:00 2001 From: Ryan Greer Date: Fri, 5 Dec 2025 02:07:17 -0700 Subject: [PATCH 2/3] upload transformation endpoint draft --- .../app/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 633 bytes .../app/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 531 bytes .../app/__pycache__/main.cpython-311.pyc | Bin 0 -> 991 bytes .../app/__pycache__/main.cpython-313.pyc | Bin 0 -> 823 bytes .../app/__pycache__/views.cpython-311.pyc | Bin 0 -> 13403 bytes .../app/__pycache__/views.cpython-313.pyc | Bin 0 -> 12011 bytes sbs_server/app/utils.py | 2 +- sbs_server/app/views.py | 51 +++++++++++++++++- 8 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 sbs_server/app/__pycache__/__init__.cpython-311.pyc create mode 100644 sbs_server/app/__pycache__/__init__.cpython-313.pyc create mode 100644 sbs_server/app/__pycache__/main.cpython-311.pyc create mode 100644 sbs_server/app/__pycache__/main.cpython-313.pyc create mode 100644 sbs_server/app/__pycache__/views.cpython-311.pyc create mode 100644 sbs_server/app/__pycache__/views.cpython-313.pyc diff --git a/sbs_server/app/__pycache__/__init__.cpython-311.pyc b/sbs_server/app/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d81909937e12fe20462bf2d38f5b74c3e3346754 GIT binary patch literal 633 zcmZWmze^lJ6n?Wid#;Cifh1^1bA`=XIC_Ou2*e{1QW$Vaa|DLX?WlwMza%fksLt?A&DR+9YPGZA}h8#HgfwDbZAI@@SF?N;*r966$N?^32ndG^1IiAs#gus z#%B~F96^Svla);rapMH{Pj9{*Lgq}W01nVeXoa>UlKiG8*mZi-iGG~07TGa9M4tzM zuBJ9WT5PG9N|oG^i7v31Y#yq9z4p?#Z(X zJLvT)u8m}~Iex+3YN0e!gCJoWGTRcpl=*{XU8a6tW`g@d?F+^9d(E-XP#nQHmx;_c zU+xWxdRK`6E6wNzPBn`9CBhKS>y2;j7xtA6+vn8%{P6hk_a{Hwd2=OSSj}nc4{iOW zEhJ?PoQ0gu-;UCSna1$-2nWHY=M>Ji`6>U8SFbqlrb<@_taN{YdVsZR4q@y*i_@?l kiRbDOrsj_HIznj^Le5}5zZ+-pG`|}qohFSE?n9+<1@$J9a{vGU literal 0 HcmV?d00001 diff --git a/sbs_server/app/__pycache__/__init__.cpython-313.pyc b/sbs_server/app/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94c7d5cd6872465b9bb71c5e02e7b5ecb89fbefe GIT binary patch literal 531 zcmXv~&r2Io5T3XDHm*S%L5n|nS)`X$=te=IPzoBbkcfhhoKkpfEF zuL>SL>VG3WKJ?_to49!C$$6_8c*8gIX1;G`^2y0Ekp2Jpe7Md49&9i&=N;sW1TH{; zU=64POI5_T5=`2i2TN81oG<85_feMErQcK1ZvW=B>c;L^*t$z4E;G~cW> zQiHYkTna63^xGtD;Rv_Ns!Z^&4yk&g)Nt!OWdStdGlXM1f1GH^jAfV{B&jxRi3S)) zrL#V^m439WcD9p5o$Am-JB9J3OygrEC2|`A+G~W4apP{cz}k)#1ZE>@YK1z&L7YZE zlHQ)`W|0`An@J}6Nl!_k@I+yxe`!gD77|4yWs)X6DZg|FrrbsqQ>CS@5UW+x%jAY| zSFW7%LMA76bbfj9T$!$f6R@CLeF@=?TO!(C>L0^ wGt|Wz1^W%)6xHGfa>oC5obC5J>O0O*XfL7d=ab7AyNB6(_>}W;Rw+7O0mr9zEdT%j literal 0 HcmV?d00001 diff --git a/sbs_server/app/__pycache__/main.cpython-311.pyc b/sbs_server/app/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..72b2f612bf48df9c27e5a43e9f8dc79dc79fe642 GIT binary patch literal 991 zcmZut&ubGw6n>N4&E{uQo0!llQp8JJo0Z~Gg(?~aQAt|FMOe1kX*xF94Kuqf%_)jt z!Ao!U*i)^vf6TTN40|eg>MdG9=*hQ9gAMrhy_s*`eEYpO?`t}p0JQVBzg9E};752E zSo8v%0Ri{|7FeVX4Wbhg;z&KxkaVesrMlcubcH|!D523^09l(>_Mu^aNFRl7rLbohF8BqGH+_sizug zJxzc{t;}k#8lOOgk;{J$ur+F3vBnOv!xd2{SLwyn)zgqVMFQnX-4v?`d72FFo z>KbC*tko#@n6Xs%Xp=MBZAG-{Ky^5)F2UYOR3=cC!#D77vO%JUjjF>1m&3$pKXK8F;W4g+X)F?U zV;F&iodwCt>-kdYaoJcbKM&OTSI>GN`=2=kW1QBQa4G*cn*ew^6qUGVe}glGaDHD~ z6qE~%Z9j&rqKV(kDV=gr+l&?{)h0{P{2(b|@e0j0CaUQ$Za4fG*AMi<3 z3kM|r;L?={Ass0A!`^{w{;+r8u0QPED5$A6-F*7q`RKHz4#;h}UD;aPezPa}*Khl| zSs#jrP&|er0%T_<+R090vaO!vXZ`$aN6vKQWG9v1j{C`*T~#hbegZDP!^MYecLa$1 z9r8zz_Y2d9FmntuKFoAuKyr9}*-xb8X6r~A_oeX@S^ZS{P}&;bxwW^@E*;8q$MT#% O@U8;#1hV)IeEVPO3=g3I literal 0 HcmV?d00001 diff --git a/sbs_server/app/__pycache__/main.cpython-313.pyc b/sbs_server/app/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36311b3840f5f0486b21283c905c89fe49d96210 GIT binary patch literal 823 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 literal 0 HcmV?d00001 diff --git a/sbs_server/app/__pycache__/views.cpython-313.pyc b/sbs_server/app/__pycache__/views.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a505e118cbeb5c011d7c45a8bb359f5a9cc3b540 GIT binary patch literal 12011 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 Date: Fri, 5 Dec 2025 02:09:02 -0700 Subject: [PATCH 3/3] remove pycache --- .../app/__pycache__/__init__.cpython-311.pyc | Bin 633 -> 0 bytes .../app/__pycache__/__init__.cpython-313.pyc | Bin 531 -> 0 bytes sbs_server/app/__pycache__/main.cpython-311.pyc | Bin 991 -> 0 bytes sbs_server/app/__pycache__/main.cpython-313.pyc | Bin 823 -> 0 bytes .../app/__pycache__/views.cpython-311.pyc | Bin 13403 -> 0 bytes .../app/__pycache__/views.cpython-313.pyc | Bin 12011 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sbs_server/app/__pycache__/__init__.cpython-311.pyc delete mode 100644 sbs_server/app/__pycache__/__init__.cpython-313.pyc delete mode 100644 sbs_server/app/__pycache__/main.cpython-311.pyc delete mode 100644 sbs_server/app/__pycache__/main.cpython-313.pyc delete mode 100644 sbs_server/app/__pycache__/views.cpython-311.pyc delete mode 100644 sbs_server/app/__pycache__/views.cpython-313.pyc diff --git a/sbs_server/app/__pycache__/__init__.cpython-311.pyc b/sbs_server/app/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index d81909937e12fe20462bf2d38f5b74c3e3346754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmZWmze^lJ6n?Wid#;Cifh1^1bA`=XIC_Ou2*e{1QW$Vaa|DLX?WlwMza%fksLt?A&DR+9YPGZA}h8#HgfwDbZAI@@SF?N;*r966$N?^32ndG^1IiAs#gus z#%B~F96^Svla);rapMH{Pj9{*Lgq}W01nVeXoa>UlKiG8*mZi-iGG~07TGa9M4tzM zuBJ9WT5PG9N|oG^i7v31Y#yq9z4p?#Z(X zJLvT)u8m}~Iex+3YN0e!gCJoWGTRcpl=*{XU8a6tW`g@d?F+^9d(E-XP#nQHmx;_c zU+xWxdRK`6E6wNzPBn`9CBhKS>y2;j7xtA6+vn8%{P6hk_a{Hwd2=OSSj}nc4{iOW zEhJ?PoQ0gu-;UCSna1$-2nWHY=M>Ji`6>U8SFbqlrb<@_taN{YdVsZR4q@y*i_@?l kiRbDOrsj_HIznj^Le5}5zZ+-pG`|}qohFSE?n9+<1@$J9a{vGU diff --git a/sbs_server/app/__pycache__/__init__.cpython-313.pyc b/sbs_server/app/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 94c7d5cd6872465b9bb71c5e02e7b5ecb89fbefe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 zcmXv~&r2Io5T3XDHm*S%L5n|nS)`X$=te=IPzoBbkcfhhoKkpfEF zuL>SL>VG3WKJ?_to49!C$$6_8c*8gIX1;G`^2y0Ekp2Jpe7Md49&9i&=N;sW1TH{; zU=64POI5_T5=`2i2TN81oG<85_feMErQcK1ZvW=B>c;L^*t$z4E;G~cW> zQiHYkTna63^xGtD;Rv_Ns!Z^&4yk&g)Nt!OWdStdGlXM1f1GH^jAfV{B&jxRi3S)) zrL#V^m439WcD9p5o$Am-JB9J3OygrEC2|`A+G~W4apP{cz}k)#1ZE>@YK1z&L7YZE zlHQ)`W|0`An@J}6Nl!_k@I+yxe`!gD77|4yWs)X6DZg|FrrbsqQ>CS@5UW+x%jAY| zSFW7%LMA76bbfj9T$!$f6R@CLeF@=?TO!(C>L0^ wGt|Wz1^W%)6xHGfa>oC5obC5J>O0O*XfL7d=ab7AyNB6(_>}W;Rw+7O0mr9zEdT%j diff --git a/sbs_server/app/__pycache__/main.cpython-311.pyc b/sbs_server/app/__pycache__/main.cpython-311.pyc deleted file mode 100644 index 72b2f612bf48df9c27e5a43e9f8dc79dc79fe642..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmZut&ubGw6n>N4&E{uQo0!llQp8JJo0Z~Gg(?~aQAt|FMOe1kX*xF94Kuqf%_)jt z!Ao!U*i)^vf6TTN40|eg>MdG9=*hQ9gAMrhy_s*`eEYpO?`t}p0JQVBzg9E};752E zSo8v%0Ri{|7FeVX4Wbhg;z&KxkaVesrMlcubcH|!D523^09l(>_Mu^aNFRl7rLbohF8BqGH+_sizug zJxzc{t;}k#8lOOgk;{J$ur+F3vBnOv!xd2{SLwyn)zgqVMFQnX-4v?`d72FFo z>KbC*tko#@n6Xs%Xp=MBZAG-{Ky^5)F2UYOR3=cC!#D77vO%JUjjF>1m&3$pKXK8F;W4g+X)F?U zV;F&iodwCt>-kdYaoJcbKM&OTSI>GN`=2=kW1QBQa4G*cn*ew^6qUGVe}glGaDHD~ z6qE~%Z9j&rqKV(kDV=gr+l&?{)h0{P{2(b|@e0j0CaUQ$Za4fG*AMi<3 z3kM|r;L?={Ass0A!`^{w{;+r8u0QPED5$A6-F*7q`RKHz4#;h}UD;aPezPa}*Khl| zSs#jrP&|er0%T_<+R090vaO!vXZ`$aN6vKQWG9v1j{C`*T~#hbegZDP!^MYecLa$1 z9r8zz_Y2d9FmntuKFoAuKyr9}*-xb8X6r~A_oeX@S^ZS{P}&;bxwW^@E*;8q$MT#% O@U8;#1hV)IeEVPO3=g3I diff --git a/sbs_server/app/__pycache__/main.cpython-313.pyc b/sbs_server/app/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 36311b3840f5f0486b21283c905c89fe49d96210..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 823 zcmZuu%WD%s9R6+gnU|?eOlW-&ikDWKEux2t3RN_kh)SkKg@t9CPPe1&?lQC6(wrh5 zTJX|~(4)utpLmQ_Fb)(do_b3yUOYLQrr3isF!TN1-+XhF&89%CKi01$QwI1M8z)N} zfTK?WyaxnGszXhpQaQ$ndZH#%xsT<#Qd6l~21^T*S5n=Qg{>n6sYsiWrX-|K zCq#uo4V0uwOBGSWN}?1>i&$n_rYTErlm>H8T~_L(r>M@NGxba@OS590hH^Jw064=S z<}@yzDj7gDgwCR2l%Ez%-GW;fKX(vE#wD&kSa#TJ0hD`B8%W$G7l$@mb6gkGh}iSX z5e_Kv!dAkZ;JQzVOFYJ<36YwlnE4THV%AEUPC(2BzsXt!lZ8%5n&zNMrtd8h_aIhEnCdFQYm6JVz2Xqhwp;pCrN3v%yS&Jdxw7Q5kgE%L zK61Gd_%wVnp5y9b{01t14tT1M?WRu|Rbt1`v135SjtEs_w-^$$v2893W;~6a&s3}T z8}?k|G1q6FJ?ew}e{|r(6uX3lnEum-1I@-wWg2-O;YdK>x6L_*DKqK1wCNMbJscF`Of*N$Kzzc9Qc+u`Mq5X^PlJ`8;kB>f4k4bFds4k zBd{rEj-6y#bemG9IrF4>&N6A4vrby)Y?C$`Zcf?fxJeG&7Qvcw%sD5WG~AYQO}aqO zmU2(J>DM#qpeo_u# zCVd7Che5+xr_pNAa0%`i_EXP&X!9rV(~aP*(`z&6@eTEw>h$~uz2=5`Ep>VUgPyOU zUTd9R(4g1WP|shd7c%Gt8tMh>^umH|f{BK{z>bTunk$h`XR?WGGLx307R`D(m5{G$ zydd9|$yVkF1G82zC0WBfFkd!7EiD%`o1U3wzn+nC-FC(@HPQr!oo1 zcS_bQuf00)O&B}-oS40m5o$*a+et_4IE)>vE^HP8%BI?yYpmqYTFc=KvpH4mn8GRp zW4bxMnv1}ODp};295ahONsVB>O8?6xlVF*Em=&B!b*6Te$+LpBaXC<16VCs}v4V9| zElfF6!&=xu+f}W=tgYmp<= zIH`19HcgvYW`eot+p4!4_hxN*ER)4aR5G(%*|kM~Y#NoES#Vc-2iAWELOgXL-f9TM z^EJMv8eembucgN4tNMi2PuuQ$VXcRsZt^wdkZ69n}!Q zpWRvY<+$4UQMV4$d3Om$JI}q(O_aXZ+3U=E=1a_VHfI+CLhz0$@7P>M&akWFese+N z&WqUuE>|C$7Tp&z5nR$D^9d>Y#Rsr9Y77K7L9i^Q#ObUk(0HjG>Z;jZOGt@184~y) zf$piQ(=-ql*sQ!M5si;>n(gvzd_hWS9DK8xt72NS%TrfqkOLihm=m4TnG{q)NyBnd}E z!hw)>q1cTAw?=6@iXITpwq40)=jFjzOumtxN@lJsOzq1^GqIUWdNFZe|Fw_3T2nGT zzmScK?@f!T_e91Ix#0| z7D-G9ngusM&5FB|tZ`W>Ii0w&AZq5fPMy@8$#gQCOr(;FqUKCxX5z^->|j?kN6CG8 zR^z8LX&9L-j3Y#4Qks88Op6kL7wU~)Nyt~?bBTG)Q`!M(x+|Ky>V;gqqgg0-LCCrd?R!nDQ%{5QwCf%SlU)dvN=Hg|<#Eb9E(-{pzgwq(> zk6+FFo-nPC3@d6u#3rShNYJBz#>BXgoX*O)enl!q-}ytOl(Z_Bu`pDh&p^kT9;mr5FH@(Z=BEOyR+t*z!H;>&8tFE4=^VxqockA5J`J$cw(e+z-V($T4ghM95qeaSIa z=MQ(^?7!_)ojVjuk80^5mY#KI%gw%j+x=<(L#Nt%ve>p~HK?{7Ec(OLMpvV%|Ak_p z9c}0S2OVnXa4|YWj$KfruNFIE4|uiXc(Hxo>icT@a52!kI;aL-DhBtio>PMZ#o)k3 zyVvFY4FlqLD3(rcL>$&wk#qf{_Xl2u3#wd@aKT1?&ksD`=Wp`MJVdT>?FFt~;W|~W zlW?6hWP5?zu5djn*F(6TVoTdv%Z@_J4y9$M+Ol)mPLl)+Tu|Y{Di}Z{-_5_TTlBz#fHOejnkC_A4+OX3)nk$F#N=TiQ3Q<}TX?1AT{?(sI}ahvmu!~D3b>x{+xc$fwE6N?q(Vv7NH!aSb_wTh`A z&A0xFG?`6!_peA3rbsQy1mB+>VM3m*RlEtlwyFN@1+hDohY`Uz*S6&fQUMEc(xA%Vkjt3+mEgTC>lYwC`R<6K(zWtWUv?2 z`cS-x;w2P^L6mTlG=Kp|Pz<6tied=GF%-inMo=6_aRS9Cijyc#p%_DP8pSvY~L>RDoOK*VMtEh@+^S^MA@eTzUW%+*$GD`5mZ}^sRMEU#sfk%5W*zpI! zjm_}Fh(-Rg;YI}EM&vngqZQyrH}kmLd8W<$cyHI4Ci4>~3+^XPR*;MBvBVSr;lwnM zW1^g#NyiVyfy9*Ok_Ltg&m?B#B>xM}pU-8uYB(3cB$(^Y$rj`*pTjyCbFgiZgS{~m z1B{R{2d;4rjrCWco%P1ZMCP~P#kSD4)^Z2=Ef~Trv<-I!dD9gaJay)&_pEpZZ2tA2d8T+T>y zr4uPozjQ~4TBJ9jdD2@bE}@tNA!DQQ%%~q1!{yf0|3gUcLdx%<%725vrM%mTewa)%RXFu6@TIn2DJI9G7ydH|&=~xRz3!y0K9acgkYG{O5{OirZTODi7-G%1v zl|H38rZ&fxUVdtE5N9XpdXXGH`(#kDTvRO=N!jY8cnEF0v z>|5l()#On5-)K+=N8=nC>#sns)EmLTF2ed!=^cit_S6>Irn>c|u{N&bbw;omv`vkf z?;K-DXU>_osE@NYrlk-e4z{_v1 zCZxQ)w{|wvoQe!%*l3%D*xn)!)Q6Ft25 zHD6CICM3ABq&EYwp~}xf<%D`v>CynBG$-zo7ZWMCt=7E2af@?PsT*+h02iE^^?c@J zDzg|ko4y8IvJfdpNAwF&tr@6SB%X2C9!oFY0B+img&>;lS?G;)naYI%@ftZoIq$*9 z7rz4p8Ew_iXt*5dM>cxSdK2l_zEWbTr&>1kR9q}|6%Jxt$V|h{GF*=U!wqiDHZ_G|n!A!k ztuHe*t2w7LbHHAMlB{_oF}olEy-%AWeFJJG0! ziTTn7O(?-F}2*ix#)Bru@xM^ygELts*e2{&A{hwtsa+gFp<5D6Sp_+gbFeq<*6Ny43c z8rXI#w-(r42<#?%jw*p6H84aht?Lk+UkmIh1on{VreI(A*0D9;o`P@B>NdqUp!x=u zUIDn&*?s3_viq>oF`#w;l^!bk_pbS41%K>;Tk#)L{m0h)qXqvcIq|yUpHTf1ORsL& z7%p&ox6aL%+Av50M-_fZ<%b?l6MmF%qmU{bTMHd5gbqF!QbNbo(DAjX5Z4;Vp9j4(yZI4ShlQteK*sJcbn?nwrobWoBILxL2K!%fooplkgC4z zt1#R^azFL7-29f}=~O+POQ(w#=iiO1_<_2?3L?IL+=mZaWOd^c3zjipyMEN<(0w%FFa*0!_Iwo_@_t+wr6c77i0Sqttj z1otb!gKF^LvIi>O1mt?hS5IASc)tK7d09ODLrL;=S1VHN=i#EFDog!3_KS%}%|E;N z^NXZ=3~k`F!jG%`_!GdpuMo~?%bfdp7F;qCO^^3S&xDyLVdu+c^OK&gvkvpG%`CWo z?eL)VZ$CS1{`CM28MZ->VS&=|D-55SMw=P3Vgp!Io>a|_T~0~#y(Tfi?P z?E6z8=ca4?*$Q~81C8)lWQ+P3An+Ec>W;HOLp!$sjjl#uV1fbI!mi*krOwpCk;V@v z1h)Y+TC#1`jAkofur@DzuCme?{#k1CW0~|IKp-SvO9miNf8JILfdo$$N!gOg8OE|9 zJb{Bz37**Ahlf4zPyxQx2MP|RrUb9R*Y#c#9<88m$OM-Rg=dDkJ+EeUd2Ugw-`oD? z=atg1{VmULf7DlkXP(OTiu;xTv9X_U1CZw%JSM9r`}j> zEu$zJRf159)`jfl{(;3-3O*3PQ91=Lss|(Z&`g#SGveYl%psyH;!BAnJTnv#0KvPD z8)7#3CEzLP3YMM(5p8-tvZ?~A5`GfI=?pwyyowp5u=-AXVW5K}Nybn_MUn&}YL}3B z(pt)WKrxm6-fjUS-1_3G;~weT7}Q*w7VwM?Q*eDKK@=UHICWiIn5DmmNCH3k>~jE# z|D%~ZbHu(EY-u|gAb}$aKdAD94^I+)gm5E&8q@&xq;oCQTL|^8jwqp{YUn6z>VS^w zK!tD5ny;_m>sx(C@eQiJ!8PA-!8iOculUZZzVoo}0;XvF;99{B0IG9KT(sf0TF zVDDNmRtUzF-~lywU@bUM2o5|9D8W%RIJ)dv@94gBLFwpIJNgJ0DsrJUuBX8Dth}pm zhg9wmp%yN;>85*zZn|YzD){&>%nwI@X8XB~bRS0>7*+TaDu3b;^w~J!jJCY#p21Cb z!{&mW{7Wa(6u9jmJ5G|oDTNY#v*dLkVk^C{ zhcg(yTPeR|X^bphqSSek*@`*_(&746#BgrY^TNCdR_e+j9LOO+EV}t)o>d|NjEAh7 zBe1SlNDhX9b-fR$;!S%x;2=C)lnhYD(4Oi8_PTZ5R9S7!@0;}pnXu!4ySn4lb$Ew31%NTKi~Z6rJr2-@!NObR>B9= z@PXyA4|=|TZu#6->wFOKvIDfsV%-`%Y;2n8JosHnd@4 zS$wX<#(raFOyNq1t(@+t!Uj|po{O<;Kc?%)biqnUIUR9ztom0u!X8lA11fu9!}J2C z2Z8AiRzgy2DP!X5T0OlwK-d=)_63!Fp;qC=O2{UKJr7=bu!pcvqoXQ&bi>56Z^B-L z63ZB>hV@j+*!95w04jAvVUMWn5iA4Gj3`lMuo_k=X8G94ODj;yUWMJOvU@j7F{*+R eRr;!7LbWN~hNie!nDih}LvKnsga*@_kN*Y2l~)G< diff --git a/sbs_server/app/__pycache__/views.cpython-313.pyc b/sbs_server/app/__pycache__/views.cpython-313.pyc deleted file mode 100644 index a505e118cbeb5c011d7c45a8bb359f5a9cc3b540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12011 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