From c2c0717f0d3a2d6ebdcd04a0f13e9a2247601553 Mon Sep 17 00:00:00 2001 From: Maxie <79106345+MaximIce1@users.noreply.github.com> Date: Mon, 7 Sep 2026 03:50:17 +0300 Subject: [PATCH] the thing --- library_api/api_v1/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 163 bytes .../api_v1/__pycache__/admin.cpython-314.pyc | Bin 0 -> 2566 bytes .../api_v1/__pycache__/apps.cpython-314.pyc | Bin 0 -> 462 bytes .../api_v1/__pycache__/models.cpython-314.pyc | Bin 0 -> 2215 bytes .../__pycache__/serializers.cpython-314.pyc | Bin 0 -> 1300 bytes .../api_v1/__pycache__/urls.cpython-314.pyc | Bin 0 -> 506 bytes .../api_v1/__pycache__/views.cpython-314.pyc | Bin 0 -> 5041 bytes library_api/api_v1/admin.py | 71 +++++++++++++++ library_api/api_v1/apps.py | 5 ++ library_api/api_v1/migrations/0001_initial.py | 40 +++++++++ library_api/api_v1/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-314.pyc | Bin 0 -> 2387 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 174 bytes library_api/api_v1/models.py | 28 ++++++ library_api/api_v1/serializers.py | 15 ++++ library_api/api_v1/tests.py | 3 + library_api/api_v1/urls.py | 8 ++ library_api/api_v1/views.py | 84 ++++++++++++++++++ library_api/db.sqlite3 | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 168 bytes .../__pycache__/settings.cpython-314.pyc | Bin 0 -> 3043 bytes .../__pycache__/urls.cpython-314.pyc | Bin 0 -> 1453 bytes .../__pycache__/wsgi.cpython-314.pyc | Bin 0 -> 659 bytes library_api/library_api/settings.py | 28 +++++- library_api/library_api/urls.py | 6 +- 26 files changed, 285 insertions(+), 3 deletions(-) create mode 100644 library_api/api_v1/__init__.py create mode 100644 library_api/api_v1/__pycache__/__init__.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/admin.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/apps.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/models.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/serializers.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/urls.cpython-314.pyc create mode 100644 library_api/api_v1/__pycache__/views.cpython-314.pyc create mode 100644 library_api/api_v1/admin.py create mode 100644 library_api/api_v1/apps.py create mode 100644 library_api/api_v1/migrations/0001_initial.py create mode 100644 library_api/api_v1/migrations/__init__.py create mode 100644 library_api/api_v1/migrations/__pycache__/0001_initial.cpython-314.pyc create mode 100644 library_api/api_v1/migrations/__pycache__/__init__.cpython-314.pyc create mode 100644 library_api/api_v1/models.py create mode 100644 library_api/api_v1/serializers.py create mode 100644 library_api/api_v1/tests.py create mode 100644 library_api/api_v1/urls.py create mode 100644 library_api/api_v1/views.py create mode 100644 library_api/db.sqlite3 create mode 100644 library_api/library_api/__pycache__/__init__.cpython-314.pyc create mode 100644 library_api/library_api/__pycache__/settings.cpython-314.pyc create mode 100644 library_api/library_api/__pycache__/urls.cpython-314.pyc create mode 100644 library_api/library_api/__pycache__/wsgi.cpython-314.pyc diff --git a/library_api/api_v1/__init__.py b/library_api/api_v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/library_api/api_v1/__pycache__/__init__.cpython-314.pyc b/library_api/api_v1/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61e3e94b10f911125aa63fa3d886fafcd3a1864e GIT binary patch literal 163 zcmdPqL8g&@PG(Y3Vo_y0kfRU8@nwek@$s2?nI-Y@ jdIgoYIBatBQ%ZAE?TT1|27;_C1~EP{Gcqz3F#}luf1f9W literal 0 HcmV?d00001 diff --git a/library_api/api_v1/__pycache__/admin.cpython-314.pyc b/library_api/api_v1/__pycache__/admin.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a4991f45d50f74cdc3b65ed6909e5cddc400f134 GIT binary patch literal 2566 zcma)7&2QX96d!wS@2>Z&Nt3jckdKyxE~ts163Ej1 zJ(&nv5J>Hr1DrT;s}O8wy+W6$a~}6CM_Ug$#34g_vX#l@Au}R zYQ-k-{b+r7&d(F_3wDN|HBkCHpd@6KINB+4QWM%VS=AivtSt~5?SMT&;ZUO~?unnnQ%X zYKfeq31h_+)+!Ns#}oxe7eyy0Y{!6!ELl>CPlbUWvUUWc(~r^{=@;pzAiwTjNw>P2 zGu<& z_oZ}eM#X-Yehtx=y6-K#^a)vlWf-B`Vlp3ZFwbYPwAS2~A9Q4~$^7-Epk7Os{g|!= z(FMl+a9!FgY`Eb%FO3+KL+O0QEAZ=i6>D@YE<>^LZ?AqhSQ@Jf)4u zqm&!4YiYtT7D$u5A-D_k`z&b0a$nqxE>N$DQ&AZCnjEJz7OwC;>I%XAvu(j*$WeeC zefWudVzC*u*ka3l!)J@jJUYib5ifdC5U_Q2%-!%GSq%KM+~pk#okjTR>klugdtTV+ za3BLw0$C7Gfw)9|Fgn}ik>t7UawU1Lr{}9y@_cU}IXL;fF~;v14!8plxF`JjO%U#0 zNQ{fz1c?CU!f^7!bPB?9iXy*KSkM5`_VR=pcZUFu0q-6gfDHL|n*(LX5S5pSs5&O% zR@Qa_`V2z1Jqel84-ibp5L0&nCjAmXUTUz|;U`^(tv*%)*WPY9>f<~59992>B-n+K4 zu*Z2HM91SG67q9x^vcC|FW#z6cWcu(YqM!#HoFsq#8Taqy5HbM%w7m050Dduvg`$Z z%N2}Xj6%kbfU~ag2e8pqD4)+vIILddHE1|iBtC*-6of1Xek^Fik6~3ESyH_GTudn@|3(Yv$p8j#y9qiCT7anA3y*_Gb>X{wtvDsc(m&z7+t-MF6r5K-Qqfm7vCz zp~jVky?T!*Il7Z`DvR22-7!F`D$N9~hT8F*C<7HLP9CtbPuj}}6op)AtNUgRAbJ}Q zKmD-#CR8!3eJHm$G9|Mr#EHK4bh55OtFuM;&8#U9uW+f87r=6!T8qxGOD3 zcGR_trDMAr1o&a9f5r~1IJ-P>0U(Rjm#%SkzRg0fLmO@<-klrZiwnzUsQw#n`BC)O zQQ%W0s|}<<(`Qf+y=I3$gvR{}%|KBoos_cxLK*6sK^b*>4v+` zWHB={5i2OG!_5$dx4<7Bio>A99T1mD&#=d=9z-vvY1*%3<|i_@W0keZt8=$T=enbFI|Mqt zDWc~uPi;H8R^B Qne7wkVB~>6(5#m9H`qG0qW}N^ literal 0 HcmV?d00001 diff --git a/library_api/api_v1/__pycache__/apps.cpython-314.pyc b/library_api/api_v1/__pycache__/apps.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5a5cbbef6d61aac47dd721df3678db1e888154a6 GIT binary patch literal 462 zcmXv~Jxc>Y5Z%4I#F%J;m>}3lu<;OcL@a|4w9qEV7U_~icyETcb6nmoBK=5`_7Jgq_{`3H(jv|wa&upXx>#+tljI_fMttmNhOFWhS?p^tM?EAlLDK3w(k56s z#F9B;>phMtwG-ZLW-C;lCLHdYZ>ZzuRRJKPAp=lFfG{3T1B15!?xr+YDHVVb7pV+* z#G+WsjuBK1AeB^dAE=aq52li(0AfRjS(s$1<=w_1^FsQ-nRg@N3G-#@`Ed}iF+0&I zPQ8E+1Qj#T#LHsomZXhjCd|#2#nB)&Tc6N-Y4`C`l-EkfwN+_2q0u;Qm@#4Qmkk7%Q6rT0}|4$s}r%4@Lrx8{~END?xekw}S^oJ0l1$s+Ho857|Wxbouj$6!W zZ_rcA1#VRZm-JR4Dgpv}<>mW;6Ss;)lp}9;oz#gE6)~2dXWskX%zJOB_66<8Zm5DEO*9kKzBi-KuF7oNit%-6+iQjAPX%Amb`R! zJlx+RTG3?bwB#vS=up&e1E}z!sNq>8hdz*G-)Uce$B677MJy@@SnMidaXBaw;jxR9 z5VK}AY;s@XvAXgpHi)^#YGoe{gC`HGHA`2Ct@a~xcN23cUS#VCOdNC-ExGEwqJ-{C zi?C_HRO({$fK805EnH{#*-Fi-lL{QClgbjct`U{l71c5fvPND}*7esahQ3M_+QhJ^ zz!%?mwc=HKcD>2N7~70u%!i)GKik*E;e@RO2nY4jx!cWK%~oV=OT=~`EtdUdACE9< zt?Q~{G*X~#ee>99{n~oe+HC#Q+5~fyk@`BJ3L}jnVgI)EbL$~s9=3jg&x6Oe0TWQD zu6gcvz_i)=zHdtK2*x5~2rh;(gxoO1Jc04`hGO(BX^g8nwV9!t#I!J`;wkdz`Is+ zq$|#)UT(abE46c_UM|lw*SCZI;gGZNEG7lVpCS-6x3lk_-UxwKjIHk=ggw2HenD@1 zHSp>W?~Os!;k}{BKH2}gFQA9SHSZfmv>XG=$UZeJ<$xSKEy@LhB>*FuVBaXBQ+*9f z0iv+a49fvT1`x*%LdYRGyvqnffSNf7wR_SqAP!@e!Ho0&>AVp+0(>zlN7)$g#kd>; zzKHYSlA)N4ii`Ycha!Tjp!??;cy20)6z=XhwoAn;!Fw7RqN9dT)j0+*|jk+jtn{-kLx9`IC zI#G3E^H5c(>qe8u<}FI}HS;~vben~T&!7A7{JFUcJhryWpMWwfg}MF9qcyx=31y+WxrVEhTyGFlZDLJn+C1^DWf?>FN zl};8rS9+O|Zl>7I6rW^D&gEWVx?4EYE}VH%c(WClaCu~=otxQcbaJmd3+^t(cDDE= zTLRboL^prDoj?8{w>j6zpK}&n`*b@yz437;d(ye`EU=exL?(;nAdhO-pa9maw(2o! z@O|+|?XjJkvUm;NyAX-<$Xgy!pQUfZQt+ewGKi;sNs@j?liPu)G=68~>&Y)Cw-HRY U$CA?c7xT9lZY}(cVCwGlFIW!q%m4rY literal 0 HcmV?d00001 diff --git a/library_api/api_v1/__pycache__/serializers.cpython-314.pyc b/library_api/api_v1/__pycache__/serializers.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb7706470c5f7574ae7a43c9cf9c34ef733168f5 GIT binary patch literal 1300 zcmah|&rcIU6rR~%Ern803QCP)M3ZV{gCTIxa4}IhK*;J9CQBJ)VY`bnQ?w=~oQMYx z9z7Ya-uzccOu$Ku2T$HiigNY6-Tt7a#A*7?%+5FO&AjiMJA?Tgfi_`&*nUk3`GJ#G zvzvp)9t`%$8u92NS)htuBWu(%7L5f{nG2S(u8|_SPCRprc-AUiNg}p_r2UMU_R2|^ zHZYz4Ff(4}1}SHM;>I%7{gR8o4}(`+$g-jBmC%or&OH{KM_X}C@=BT^MXNb!+=jtE zStW{kL>X(AGLr*PIDj!@q%385rm{T?(%HI@1b)&^))f{il(fcG=+1<-mAPs`2&x>< zP#MpJP?jF~C)CsuSH8|L=7%9;pU84KtFw$new8z(bBtBvjarD~0mh!!{II!FU~DrG zQiVapqnI&)x6?MTd8nPufQK7W7a5bvS3!mON{L{-rnm%ZKTsQZX8q9JimTkM`Y!|S zu84S>SCn)saTxMv{I0(n+;hWVUHGETVB*4`?M=I9sy?+_*A`wu^g%o{ha3PnAjd<+ zH}>)H_*+L@gb$*KfQgsOjzEgYBMc%G5E8-#93d;+G=if{3-E@`=%psE#4HidX zz3U9;86)4*7?*qHNZcXt?KEqb?O8j#tr$WWM(9<=q`W0q#j>|G8b42?-g&Uh+S$cd zCeIga49|do=a!cM4#?O1m5-C3C%@$9_8*;E-Qpn?Z9gcuRBTg#^)P*JVct?lSAW710=jiN%^zqD#3D}5oNEhIjNh$qCZha>=Pb`y`-t8QXP9Kg= ZpAeXw4A`{v{{B&E_OLYjhrlFp*k9XK3|9aE literal 0 HcmV?d00001 diff --git a/library_api/api_v1/__pycache__/urls.cpython-314.pyc b/library_api/api_v1/__pycache__/urls.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..292acde03578c9fa10a3b3f8914334a2fcf9fbce GIT binary patch literal 506 zcmZut&r1S96rR~%Xy%F#UM;#Lkz3-SgLDegOUMS@R5lxRb=Q@dSS&2$XS2vw1ZOQ?uB zPNOO|rIJ*Xxm;AZl13H0hVpYcS1W2c9-1twDOcpYG{dm*zecGje>D1HKkRtKRM$~P zdk=^V7V&-3uzZJ`p3e!*NMgC{SY3W>lfe<;B6&aw>9#zdk&x1Qfq;ov^LNA!Gf|PE zgz;K~S}qxQw3DSjj*QB1NT_`M%{B9(j;3}&(0Z+eL^idtN}0}YW*D}u*>#_B2sX@Q{N$b zGzn%Hg6%^3kTJ$jX!{xEUZbh&^hkR|+GXNAF^=9ACTJr>`orqZ1m#}zm7C60=ORWE Gu>1`oAAbJ; literal 0 HcmV?d00001 diff --git a/library_api/api_v1/__pycache__/views.cpython-314.pyc b/library_api/api_v1/__pycache__/views.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86acd5e71b37eb8979ae3fe7205a2709b6a62ae5 GIT binary patch literal 5041 zcmbVQT})fa6`pHf+tdDyM?r9aPovN4j;RjNelL)EvWM5{jb%)S1D5J)?M zGjryfbB=x7<8~luKQ{gLR?vmeKj@&^ES1jI@1Qe}K0^XChN6thL`|xxla5Ve z<|wPOdfz-|iCR@F^cjI2vqd?Ti`rGYKDLZGqE6Krb*ZjS zhs{P`_2`luNZR+2|O;#HwJb&D2ktW#TAS^EYt zB&L#@by}KB$@d^6dW@bZrtn>elbR<(QZuQvn8@VPDxneww$IcgT`5JJmNR!CSf*#f z3~7NY(HuCPl+rVp;3Q1>^{F{9H;Yp(0_3jgz7@ ztzrV|d~HHC^gY#yDLkDac&7*$37a)mB{{4ygPQpsR>F2-qx-UDrf%T`WD2t+%bJbg zFLGE>H5Yu4dtz21(j4$+unOKvfgPe*^wVk(iFo?jvczZCSXT1LGJTt_ZF5 zQ=v;B6gaeef9d{8e&_!pL#}e~`C{++QtySrhvUWGajJ3?RNlV7m0RV| z>0;<~DRj1QAyy2P0Ga9)x&r-o6FbgRW?7HlwKbol`ma^S%VZk`82R601@Q&^m|J*-TQ= zxEzrItLki`G4s~)Gp$MH5#-oPW}&954RU0oPGwqvQtwPv! z(~efnHJxa}US)ygE-Oyds-qZv5jz^>*oqEBHFg{dH#RA$lE%(SX&Rk)BBc~8;=2i) zrB&WjhOl5FY|}gx^GdChBd1_m;~;3=hT1L(k5{^l39UVJ1+6JMJ{}W?1_s5Cgwadm zqa$H62~+M7s^_R1QfLhp3U!eal%ZdcXk3uiy6w%;tE+I%fT;2bka_gNA1wQOi~io# znLo%+<-fKR{Jkar6?j~nugtXd&fnE%>Z9=KW@ zxVphd3tW^$=ngD!{fXHMQgT`F4&EIMSM(d(-SwDAUC$gh z^;GO80SHii8v>DOZ01w#rHh^*g}0s{&-74p)OI z>Pc16I^V?eHi3&^LRkO;u=e;Du>EmaCL*>9wF);MnVs7!gL}s_=HHVs8m;09b%Dzz1 z7g|jee4&zWsO&qp?mJiXUHWzeNZv+YM(1izp>?RlpDb`EjVA$NQpPH-ya{8l?M=`S z0f^_e9_X9jJwR4Nm>vdqc^@@CV0^DHIS>MC0a5^TZ9@{2X2$+1S083cAM8o97zNn( zp|9UR%-5n3IYwu%0a55d=p{A=Bg5Wq!N}lzOcm+o;nv*V#@yfJTjrLyUpn%ZP0q1s zU$B4WG#uPrXdNi=g9UC-cQ6?R?Q3DL#))EDn!}=~IYem=87scrm zQB*mV#_5bGHo)~gFr#tRl7&EgKw48h(uxULQWV`Egrb#Dypb_Ven3V2qDa5wrxK#1 zsw6d)Q?UZedqqPrnM$Y$EX$$@56#^$32HPSeyBT*(4?aiy1eo;ApiLVxMq`YS^RS0 z%QD|p+Ylie~*1x7&tx~~ox{Ie^^*1p`Zj8Y3jlz)Z!j&==4)6FH|zt$@8 z7;Vw(Z}_o6P|g4U4-KkAFhNu^Yu@_L9hL9>m8*7=>#!aXD7it&I3@I3x)FHjO_H0G z&}>fPl>CqqiWK80G(?ggRSC7E&@%Yv;OStQKV0Mwm-+4@-(BK+sIQN2uq}on)wvdK z(mVv}b8#B#a(pL4J}2}^8o4{ToztJhi42j{3{iC4Xn`Gk80tR*=`TyO0&uac7`UWI z(wub+Dmp6lQ)#YGs9@DGI&SpyY(JyMT`*q4MKT4(DAJVofxI*`4D(NP{O{-l{5?nA q&(X!#aNEq#!?We)-ePm_YeYw{1(S(6@rWz8_7z+EzC$q3{qSFEpd3X2 literal 0 HcmV?d00001 diff --git a/library_api/api_v1/admin.py b/library_api/api_v1/admin.py new file mode 100644 index 0000000..b58444d --- /dev/null +++ b/library_api/api_v1/admin.py @@ -0,0 +1,71 @@ +# garden/admin.py +from django.contrib import admin +from .models import Plant, Greenhouse + + +class PlantInline(admin.TabularInline): + """Позволяет редактировать растения прямо на странице теплицы.""" + model = Plant + extra = 0 + fields = ( + "name", + "species", + "family", + "height_cm", + "is_flowering", + "endangered", + ) + show_change_link = True + + +@admin.register(Greenhouse) +class GreenhouseAdmin(admin.ModelAdmin): + list_display = ("id", "name", "location", "climate_zone", "plant_count") + list_filter = ("climate_zone",) + search_fields = ("name", "location") + ordering = ("name",) + inlines = [PlantInline] + + @admin.display(description="Кол-во растений") + def plant_count(self, obj): + return obj.plants.count() + + +@admin.register(Plant) +class PlantAdmin(admin.ModelAdmin): + list_display = ( + "id", + "name", + "species", + "family", + "greenhouse", + "height_cm", + "is_flowering", + "endangered", + "planted_at", + ) + list_filter = ( + "greenhouse", + "family", + "is_flowering", + "endangered", + "origin_country", + ) + search_fields = ("name", "species", "family", "origin_country") + date_hierarchy = "planted_at" + ordering = ("-planted_at",) + list_select_related = ("greenhouse",) + autocomplete_fields = ("greenhouse",) + list_per_page = 25 + + fieldsets = ( + ("Основное", { + "fields": ("name", "species", "family", "greenhouse") + }), + ("Характеристики", { + "fields": ("height_cm", "watering_frequency_days", "is_flowering", "endangered") + }), + ("Происхождение", { + "fields": ("planted_at", "origin_country") + }), + ) diff --git a/library_api/api_v1/apps.py b/library_api/api_v1/apps.py new file mode 100644 index 0000000..8e78bcf --- /dev/null +++ b/library_api/api_v1/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ApiV1Config(AppConfig): + name = 'api_v1' diff --git a/library_api/api_v1/migrations/0001_initial.py b/library_api/api_v1/migrations/0001_initial.py new file mode 100644 index 0000000..f1045f9 --- /dev/null +++ b/library_api/api_v1/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# Generated by Django 6.1.1 on 2026-09-07 00:26 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Greenhouse', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('location', models.CharField(max_length=200)), + ('climate_zone', models.CharField(choices=[('tropical', 'Тропики'), ('temperate', 'Умеренная'), ('arid', 'Аридная')], max_length=20)), + ], + ), + migrations.CreateModel( + name='Plant', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=150)), + ('species', models.CharField(max_length=150)), + ('family', models.CharField(blank=True, max_length=100)), + ('height_cm', models.FloatField()), + ('watering_frequency_days', models.PositiveIntegerField()), + ('is_flowering', models.BooleanField(default=False)), + ('planted_at', models.DateField()), + ('origin_country', models.CharField(blank=True, max_length=100)), + ('endangered', models.BooleanField(default=False)), + ('greenhouse', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='plants', to='api_v1.greenhouse')), + ], + ), + ] diff --git a/library_api/api_v1/migrations/__init__.py b/library_api/api_v1/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/library_api/api_v1/migrations/__pycache__/0001_initial.cpython-314.pyc b/library_api/api_v1/migrations/__pycache__/0001_initial.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..060411379480706803f67ef31463325ec58d7fc7 GIT binary patch literal 2387 zcmb_eOKclO7~WmK9XDC0cHBITn+V}HweuoTaa)llQ?{ z$^mhuCzKOHZ~$&SP+<^Ijy-N%OB>CFN}RYwq~grKyLOYRjsOW;o}GXGZ~pn``ycDG z-6w(!e7<*oe)ox&VScxS_Q%tj9IU`(n^|WBc9kJ4Jh@eF#YJ2zZsLwJQ6|9%t{5Y@ z*IZfKTHAp0oN+l%;t|+UCh7UZ5^p3q8Z662ED>2#b?Pl^d8Ft$2kMN`mT)iz7Pgr+ zI9p%{x9%e@fhFz~Lp*EVZ1>SE&K&&V1lO8B+uKpc3asE3Jc4)5?dYdD!3XF_C-iz= z@XxU?ae-rTPhY_WkHe)HVdN&e9ud0cxVF`lTL`tKV{dfgf4k9VuXx&hoTuxr;(Ct5 z2`q5LxBUk$!+`AT#N|wD5iq@gIrR^ilYklMgn{Tqj>IGixS>wCBj@!2rel0x^FH=3 zPdx>=kxr+s@!8X_uV?uVYhxYO-h6#c=obcr!MRo)O>?QP!+c3`Bq9uvs4xt*6{msg z?V7qxgUc8pwWL*bL^(OXM7h<)q??AMD$&FoMiN1J+Eu}FS;94O6V+%yM_85=`2nJ# zErd5T9f_(`M$~PMNft_0`bboeS|lavSG1g6y)=|lzy?9$15HIx*uGpzlXFPNJ#d#K zhpiH&-hzyjyiPq?MN$d%=@pcd5mbIbD$7a@ws|%{vuSUlffAC7B_ig^GciZ^Icw*FzAB{Sw0|b>T2-+R0T3yNb%J|8644B8p&+vV;`zc`D5|;DM z_J^RV8{f55ebg`72Z|yMiX!yNs)Ar162*H}NwI$XgUv0p z3Iqd-&T8ngrYT5LTU!_5mhG(?hCr%UA-TNyyFk1~x%>w8+iXJTr@n>xTMP4x@6n)U z(__C4qN1o1$gLbikYIVEN{}v!*eaI;_%ZZmx}=p+8nRJF=`7anq8!oFIZaW(sdEs* zsk9<*U@NadNINl2AHHwW6B84YVvC+srH0|%$Jm1pCi>UV@IPUmclT~D@4MNEcl+AD zp9!2a{UZ(k$X+PsfZ8MMK5Sm~QZ7FC5$HGy9W`{^X-u&HnQS z|IS``aOVSa_*`T7T>WHo_@cpI+6%|O=ra?Ojl|@i43oLT?K6zbZE`Od=Coo7;WD=$ z@I<;_c>ICje(#aPPyN@!2X>asq4CDhc-_?;x?u1Z_rm=Bi`EeeCIUbM&UcXIrSLMtrLNb~8S2@RwUl6OH&pefG)uAI_VZ ztGk)2X6E*8=C+x+vzxhNZ0f*6jlE`(^2T+WlpEZBEM$?=1EfR;dc7ZC!57+*OL}R) zlVYj-M#}j=k!t4|p0&~@@KSFVft~kG=&jUpOkK2q{tHfxUBd5zXubaRI1KwPmSqpT b44e3kdFzEY!FnGCO@3^bANz{|!8Y(WZYfo> literal 0 HcmV?d00001 diff --git a/library_api/api_v1/migrations/__pycache__/__init__.cpython-314.pyc b/library_api/api_v1/migrations/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..78d0807ba4d16bf1f4b2051cc7d6b03e75afdd66 GIT binary patch literal 174 zcmdPqL8g&@PG(Y3Vo_y0kfRU8@nwekxtZxji6xo& udByti@tJv>P{wCAAftgHh(Vb_lhJP_LlF~@{~08C%T+%kKQ~oB zH?bl!RX?C8KPxr4q*y;WKPM+OJykccAk#=cCo`!iv8Xa0$U$Mp$7kkcmc+;F6;$5h fu*uC&Da}c>D`Ewj3bMBt#Q4O_$jDg43}gWSIEpD> literal 0 HcmV?d00001 diff --git a/library_api/library_api/__pycache__/settings.cpython-314.pyc b/library_api/library_api/__pycache__/settings.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e297da21fef0d4df0c08cadd86a10893e0f60967 GIT binary patch literal 3043 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 bdVgF$ZQVWoae8XZUaeNnmY+1ldC2)My(6R} literal 0 HcmV?d00001 diff --git a/library_api/library_api/__pycache__/wsgi.cpython-314.pyc b/library_api/library_api/__pycache__/wsgi.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7875c15eb0f068f22b631f9f67d6be74824475c4 GIT binary patch literal 659 zcmY*XO>fgc5Z!eGsT?&zsO^>I;}X$&+p6M#5K^VK!3fgGDdGgq)}A;Ut#>W&Hf?$W zE*$v<`~dz<5lBep0z%wDxpH9LG&Ia%_l-vL=FQXGZ7jOT#_FH{=A7wI&>IIm@ z7Q8|MGUz1=u#XM4zvDZPDyDJ+y}+G?SHr9l%j05WZ2La;*tglWP^ zs^TL7YXU|f$cW|qyd+r)G3oVKmI)p)!HCz%D$-s&WHM1RO_53|NP5rPpaXSm6pbMhYMg>J^jIgHy6q+|mJ%>wnc98+ zDJWKU9&fi>`(bzY;J|OUy5ZCPoo7#WPnYJF_cR#8Wulw4q85f$K^PW}(#5r@4llCu zy^=aFEiP&xM?6=uaBX7@eRd>FQJ