From 2cca4777defb00fabc36fb9f77173c114f52d3a2 Mon Sep 17 00:00:00 2001 From: darkicewolf50 Date: Sat, 14 Dec 2024 16:04:17 -0700 Subject: [PATCH] fix(Container): moved into apporpriate folders --- NoSheet.py => ContainerContents/NoSheet.py | 0 ReadDB.py => ContainerContents/ReadDB.py | 0 WriteDB.py => ContainerContents/WriteDB.py | 10 +++------- .../interviewPackagers.py | 0 main.py => ContainerContents/main.py | 4 +++- ContainerContents/requirements.txt | 4 ++++ .../send_email.py | 0 Dockerfile | 18 ++++++++++++++++++ Interviews/OR25-L-Interview Data.xlsx | Bin 6872 -> 0 bytes .../AfterMergeCodeapceTestResults.png | Bin .../ConversionToExcel.py | 0 .../FastAPI test 1000 requests.png | Bin .../OR-L-Interview Data.xlsx | Bin README.md => Other Items/README.md | 0 .../TestBookAppointment.py | 0 .../TestResultsCodeSpace.png | Bin .../interview_database.yaml | 0 testhttp.py => Other Items/testhttp.py | 0 web1.html => Other Items/web1.html | 0 .../GetSchedulePackager.cpython-312.pyc | Bin 865 -> 0 bytes .../GetSchedulePackager.cpython-313.pyc | Bin 790 -> 0 bytes __pycache__/NoSheet.cpython-313.pyc | Bin 5201 -> 0 bytes __pycache__/ReadDB.cpython-313.pyc | Bin 3021 -> 0 bytes __pycache__/WriteDB.cpython-312.pyc | Bin 5852 -> 0 bytes __pycache__/WriteDB.cpython-313.pyc | Bin 6620 -> 0 bytes .../interviewPackagers.cpython-313.pyc | Bin 1802 -> 0 bytes __pycache__/main.cpython-313.pyc | Bin 3525 -> 0 bytes __pycache__/newMain.cpython-312.pyc | Bin 976 -> 0 bytes __pycache__/newMain.cpython-313.pyc | Bin 1754 -> 0 bytes .../postSelectAppointment.cpython-312.pyc | Bin 1085 -> 0 bytes .../postSelectAppointment.cpython-313.pyc | Bin 1386 -> 0 bytes __pycache__/send_email.cpython-312.pyc | Bin 4134 -> 0 bytes __pycache__/send_email.cpython-313.pyc | Bin 4217 -> 0 bytes docker-compose.yaml | 10 ++++++++++ requirements.txt | 4 ---- 35 files changed, 38 insertions(+), 12 deletions(-) rename NoSheet.py => ContainerContents/NoSheet.py (100%) rename ReadDB.py => ContainerContents/ReadDB.py (100%) rename WriteDB.py => ContainerContents/WriteDB.py (96%) rename interviewPackagers.py => ContainerContents/interviewPackagers.py (100%) rename main.py => ContainerContents/main.py (97%) create mode 100644 ContainerContents/requirements.txt rename send_email.py => ContainerContents/send_email.py (100%) create mode 100644 Dockerfile delete mode 100644 Interviews/OR25-L-Interview Data.xlsx rename AfterMergeCodeapceTestResults.png => Other Items/AfterMergeCodeapceTestResults.png (100%) rename ConversionToExcel.py => Other Items/ConversionToExcel.py (100%) rename FastAPI test 1000 requests.png => Other Items/FastAPI test 1000 requests.png (100%) rename OR-L-Interview Data.xlsx => Other Items/OR-L-Interview Data.xlsx (100%) rename README.md => Other Items/README.md (100%) rename TestBookAppointment.py => Other Items/TestBookAppointment.py (100%) rename TestResultsCodeSpace.png => Other Items/TestResultsCodeSpace.png (100%) rename interview_database.yaml => Other Items/interview_database.yaml (100%) rename testhttp.py => Other Items/testhttp.py (100%) rename web1.html => Other Items/web1.html (100%) delete mode 100644 __pycache__/GetSchedulePackager.cpython-312.pyc delete mode 100644 __pycache__/GetSchedulePackager.cpython-313.pyc delete mode 100644 __pycache__/NoSheet.cpython-313.pyc delete mode 100644 __pycache__/ReadDB.cpython-313.pyc delete mode 100644 __pycache__/WriteDB.cpython-312.pyc delete mode 100644 __pycache__/WriteDB.cpython-313.pyc delete mode 100644 __pycache__/interviewPackagers.cpython-313.pyc delete mode 100644 __pycache__/main.cpython-313.pyc delete mode 100644 __pycache__/newMain.cpython-312.pyc delete mode 100644 __pycache__/newMain.cpython-313.pyc delete mode 100644 __pycache__/postSelectAppointment.cpython-312.pyc delete mode 100644 __pycache__/postSelectAppointment.cpython-313.pyc delete mode 100644 __pycache__/send_email.cpython-312.pyc delete mode 100644 __pycache__/send_email.cpython-313.pyc create mode 100644 docker-compose.yaml delete mode 100644 requirements.txt diff --git a/NoSheet.py b/ContainerContents/NoSheet.py similarity index 100% rename from NoSheet.py rename to ContainerContents/NoSheet.py diff --git a/ReadDB.py b/ContainerContents/ReadDB.py similarity index 100% rename from ReadDB.py rename to ContainerContents/ReadDB.py diff --git a/WriteDB.py b/ContainerContents/WriteDB.py similarity index 96% rename from WriteDB.py rename to ContainerContents/WriteDB.py index bd302c4..e9329a8 100644 --- a/WriteDB.py +++ b/ContainerContents/WriteDB.py @@ -35,7 +35,6 @@ def ReadDatabase(file_path, lock_path): for _, row in df.iterrows(): # Convert Date and Start Time to string format for easier comparison date = str(row['Date']).split(" ")[0] # Format date to YYYY-MM-DD - # print(date) start_time = str(row['Start Time Slot']) # Calculate the slot capacity and current number of interviewees @@ -47,7 +46,6 @@ def ReadDatabase(file_path, lock_path): if interviewee_count < slot_capacity: # Organize data by date and time, keeping track of available slots and meeting duration if date not in interview_data: - # print(date) interview_data[date] = {} interview_data[date][start_time] = { 'Meeting Duration': row['Meeting Duration'], @@ -68,13 +66,11 @@ def AppendAppointment(file_path, date, start_time, interviewee_name, interviewee ``Contact``: ahmad.ahmad1@ucalgary.ca, darkicewolf50@gmail.com """ - # print(f"{file_path}\n{date}\n{start_time}\n{interviewee_name}\n{interviewee_email}") + lock_path = file_path + ".lock" available_slots = ReadDatabase(file_path, lock_path) - print(date) - print(available_slots) - print(date in available_slots) + # Check if the requested slot is available in the `available_slots` structure if date in available_slots and start_time in available_slots[date]: with FileLock(lock_path): # Ensure process-safe access to the file @@ -108,7 +104,7 @@ def AppendAppointment(file_path, date, start_time, interviewee_name, interviewee workbook.save(file_path) send_email(interviewee_email, interviewee_name, date, start_time) return True - print("False") + # If no slots available, return that the slot is unavailable return False diff --git a/interviewPackagers.py b/ContainerContents/interviewPackagers.py similarity index 100% rename from interviewPackagers.py rename to ContainerContents/interviewPackagers.py diff --git a/main.py b/ContainerContents/main.py similarity index 97% rename from main.py rename to ContainerContents/main.py index 3dfa9dc..7b82e46 100644 --- a/main.py +++ b/ContainerContents/main.py @@ -11,6 +11,7 @@ year_donation = int(str(datetime.datetime.now().year)[2:]) + 1 # gets the last t # Define the path to the Excel file and the lock file file_name = f"./Interviews/OR{year_donation}-L-Interview Data.xlsx" if not os.path.isfile(file_name): + os.makedirs(os.path.dirname(file_name), exist_ok=True) NoSheet(file_name) app = FastAPI() @@ -123,4 +124,5 @@ async def postSelectInterview(rawRequest: Appointment): }, # status_code=200 commented out just to show how to change it if you wanted - ) \ No newline at end of file + ) + diff --git a/ContainerContents/requirements.txt b/ContainerContents/requirements.txt new file mode 100644 index 0000000..5b1ff2d --- /dev/null +++ b/ContainerContents/requirements.txt @@ -0,0 +1,4 @@ +fastapi[standard] +pandas +openpyxl +PyYAML \ No newline at end of file diff --git a/send_email.py b/ContainerContents/send_email.py similarity index 100% rename from send_email.py rename to ContainerContents/send_email.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f65975b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +# Use an official Python runtime as a parent image +FROM python:3.10-slim + +# Set the working directory inside the container +WORKDIR /BajaCloudBackend + +# Copy the current directory contents into the container at /app +COPY ./ContainerContents /BajaCloudBackend + +# Install any necessary dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Expose port 8080 for the container to listen on +EXPOSE 8080 + +# Command to run the Python server when the container starts +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--reload"] + diff --git a/Interviews/OR25-L-Interview Data.xlsx b/Interviews/OR25-L-Interview Data.xlsx deleted file mode 100644 index 69195be6837565a98a2a54d20e5edb6abbede6dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6872 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 F>>mtm*~S0> diff --git a/__pycache__/GetSchedulePackager.cpython-313.pyc b/__pycache__/GetSchedulePackager.cpython-313.pyc deleted file mode 100644 index 33a56b0a79c6a15790786b0dc835be5c4fb646ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 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 L@ki*3aP)rw1ztZH diff --git a/__pycache__/ReadDB.cpython-313.pyc b/__pycache__/ReadDB.cpython-313.pyc deleted file mode 100644 index bffd474966627795e5676289d9d9f005a14b5680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3021 zcmZ`)T})fa6`uQJ{ELmj4lG9a!Ulpju|rB|0%5~XoDd+uu5YZ+;>Zm41q}AJGxq|) zm0BK?eF?3)Dv_!!Pi-pg18S=-ecPs6sgJgtEXfVhBJK8pH*bl$)ovep#^&O%QpfWA zocZR=nRC8#?qPMc1wp&><=y!{J3?R5h2D%ulfzpKLLVX#iOd)xOlf2Z3nM$mjq-#a zH4uYP-mfB6Am_%6qefypl9`C98Hs!&BIbxiH1tj(gfS}PVJ~8BMG+hPO`#h7>dF}M zROb4u`)Cqs(j}F#8*HUbtP&X>9j}ajkP(Myia6{@GEueX3o@qf5ml5Gw(Csdrc31Yj;4k97=ALKD;~X=G-sQY#j`7(J zsP+jTtC?;jlG3eoY)LcTPNbytvg%_r<3w6qkR&yB^p=t-Cg?f%AAZi#XoQi>gy9DI zE}0csnG-pg7kSw*CH8_n_}>UMqv>M}VOHctLl4U$0ZoI3atrbLtTMKuFazE*_ONnQ zCz6ffs*uiv3JB>js6#jZgwQf*%siYn>wvIXG#Ox_dqcLI*fXElv%XWP90Mjbsy-jEZtZ= zwbwfjF|mj3$995u#y>=8>UUQl9vFPyiKen=K+)7E;nK^fJWf$hfVtK1l4@#cCo`3$ zW7tZu<9|lT3egK26;`yszg>2(yB11s}@9h9X%10R-|M)BgKV;EMzcIh1oTF+2BG7$Il5v1TvW7uBBxa z$5gt7=~kfBUl>@9;p99fYk?R(2k#IB%gD70imWt@^UK8RH*>kw6HDFu~YqVe=S+0)18 zB}te7xX^KD0jq+V7Qo6Rbymu!aWa;(HRGT%A8 z03xYmjRHF~=6sg-1p#=0kXeJ5)9F!qk+Yx- zDk)Na3&CASMFG_d>yt0s&0F<(cgOlfu?p3>*T-JC8`dZG?T+=~7Zzv1;w`doo6mgZ zd}}kX-BNH~{K{SbtGmCryValTznyo7H&{5DpQO%az@(;e6Ndue-|lXP&eF zcz+}Kx(Y2ZGLw_<6~SWWN9@-KrI{bIhX~};EC{1)yu6CDAJ=^>ZrA0yr}Gyg1^?Y$ ze=P5h75vgO-y8rJ*(EmTY6k<)^yJ$IHYUHQZ{PUYzQfRpz9 zW{`j8vIJX=pEYxI-dgJ0E?xI>e{W`>*G$nU)Ezk*J)q@<(2r==5jcNL8s+?CD0|9( z%YQ5pC|?5ilgj-Ano&@3suFTsl2zX+ttx}%I93RyrN%ERX<0MT+@VQRO5IWt68d={ z^n<3EDETSrOXQ>0(7F|k5*LNg4-yn0nj~uyCR#P^qw%y{szFD2S}t^;2a|e=H^i4y z8HF^`IV1fZ0UN$D!N3QJnSls`gOldgU`hOzNE95Bh z9K-+1($B=1;tdw@wg=e)_tq=E?xm~#F}Hbhx5=Mx^6xfX$TwXmG;a{hC{>v7$EqO>7nU6FxKGwR-rEZ>pR{dD|%|J8hV?1 O>NE{Cb5ENMF#jJLK=5+_ diff --git a/__pycache__/WriteDB.cpython-312.pyc b/__pycache__/WriteDB.cpython-312.pyc deleted file mode 100644 index 401e4ac5dc3fe01ea4c805117385b742890ecc71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5852 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 diff --git a/__pycache__/WriteDB.cpython-313.pyc b/__pycache__/WriteDB.cpython-313.pyc deleted file mode 100644 index f74914285a9e972158e5e42186ebe048534c7204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6620 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 diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc deleted file mode 100644 index 203f206d8462f17bc99069eed4715dcdaceb5433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3525 zcmb_f%WoUU8J~UdwG#EB9<=1BQ{~|>)x)hs7jc6$dKr;qQwlfAMJ$%9clU)VJi60{sVilpv#WCv}nZaS(c;A?J`=zgcoASvJrX@Bp0s z_WQn>Z)U#V{J!OBJgy;VzxmrQR@^v3{}3-h3)h8HE+OjJ!!+#6p}7c+fNy9nN~5{h0Lp3bi)34Z5NFS9&zT%Z>AH|j2AZ>H z8rCG59@axDYP>~;Ku6&pwFM3~XtiN|9liwVjngY?eyyCc{OS;tD7j_FQbO5^K#@mFyzXw0u50 z{m$Y{c3RKpuj70^pK%?M&*MyO65+6roxe4s2M*#Kz)p#`P926#%vN3M;WA;&Tp`$Y zu(wL^vRl{^W2eXlDY+G)u9)Dqyd}a+P}f=$=1JG_Ov@9xf=SnGi)^~3V*2V^D`nFz z4O?zm(|Dvl_x6i#6W9@+!DbouW^a%|h;?DtywzqRHP^fVuY(=N%v$P zStVwHP{tz`1SgJ1RXAwKutH%A;*>GJGI>2WVZLwTDGE_?jjRn#nARF`3OQJvGhEr? z(G}tu)O9`D4Ffyi$Ht)BLDhcL+;!0Xvjgpooyo^x)SUdL`Gx(>sv@^*)hLQ5?o9gf zqgbq2tD;y)JB4uqa|xJIhb$G=OJo7U!J*Rawh_>dS1PXUcx6~KdkQkUF#2=~x)%`! z*qp&-NkGzX0qy}z0%U%x!An$`JjEE{fTfA`9A>!JnlzL{desn?bV&he>U~} zxAcF{1Pnj!#}Z(mT_+`Colp1^`BuPFw9^UbK1Df1B^^;&m#FeG)FGu zsSPRAkitUJp&G43Q!(Cj4qGP+VDSls2%adLo<|B7(>v)>3M<4nda5fRYUP7TmBVpe{#oBu8F~1QRZaHTi8(N!O{&QJ0zmZG*r> zP4o$j$rv%kksYa6Co@xqEoc+2y9V{j5wNS3Kmm2STKx znm;GpKa=mm0DicEJY;*M%;;-yuJp3#dPOI=FBPKV8PyUPCbXWFlS4vL+*!;bmCYJGQSKL6#BHu}G@>S+We7NqZ)Ao!05#s{R|^^9K* z|M3b)sXiVl!uOq7v8jMDZ?C@%!-s(XnaBM7^JrzOU^;L^srUmx1vGh7Fovi_Ty_~( z08;+Zam8^rxw=J6%HyJktMB+%-9JyRR!nb|hixY4j4NiP!WF0_{?`NVXaF;)`^+y! zer>5GMcikY1kTn!%nK~Rqi@tm=}kHXj^f_3e?wPQBuRRR`W~X!9-{t#p}wzC>(?mu zZCm13ll#%*Wa==PI!+E9CWnraBge_H!{pdeXZj2Ci{*pP*N@t+|KXj(wl{a;)i7%9 z-!JbQ2ZIv_&67K^2a(v`=IzbBk8Xc-$3BkW!wCM1+VsiHeYN}BaD3O^QNEGXy`I}W zpCooKKazVT?NmW>OI1kUT}RSr-Fy)1JCeZRQqAFos*t|BhNK@qR@oUG0V-1dM0BOz4uPD4_o6-u;kghtJ*m;@+rdeDPZEN*S&dqHYr<^k!3%z6XA zZ`+tB6J~2p#Ubzyr2QM2O(ESaQgnXkl;t8(_I+PA?k+Fx6P0_ovQ&P|Wj&50KPRPX ziUn90=yMvog{SIi6uvtB|#4l@U|3toYuT~>CDOX;uiZEt~xVLbUH z79mrEft>Rtzd3s^s>X~nWv%+5~-!lE~K)nan#^ZLztKpi5dda>B5ue z*GkP;Y|6S{<+8Mhx5SHpH>c

L!m^DdNpXeh|&nw^VkGH=c?(ZiowrwDFTS(6r#h z8{Vyba<8`L&oYo3J;{x|Z?+9O&^`E;AA>&6Ji_SvZIn`UMJ4n;e=V6~o%sGZKSn zy5fi-bd{H4Brf8g34LK2O$)xeV@K{pYyOKj^1rr40TD${nHw^Wl)Z|t#;*rLQ&vO0 zXa?t!JRX@)QHEcyD+B8%lB>dlKNaf|*R=K_DUpyq&)%-ZTG%^c9FO#<7+YJwj&$MA5qlAZIGdHTI`gDP>9_xOT-O6LLVx)UZk~hu5_pD zo@4BX;?z**(Jz7g3H5&y@JrcZaA{xsCL{NuFQqeg`ic`MJ-FG~-I>{$-~4tv>9j%M z8~?Ff|2|I0A2{iKv98kj2b7n@A{H$Zj-yhhC50;m)YY(2FxzCP9qIvB0k5{+h7e0pG=gqV8SD4E=ZIPdmM^gWY9o+%OrrAv2!N7W%5CbA@45gGfYH)!Q!Dm} zfQ)~t%#otLCiNy0!l|=e^J~^<_=RtM-l)kDSKvW+7QgVSa9B;oHk^iFQhV&zc8(OO zKVeRdaUu1p?*+^YxCW;}zAA@scw|A&uiULHJDX17bM8K4l~u6g&s?_s;j&ZxfqAux z$F?6hu6L`oBNKHN*xdI6o(10o{Nf`Jd*sv{KWx4>=Jr-D;v|(jO z?BPnNpC^+kqfL@AqXSL^V9G)~tNMi1wi@gq90vvR-PFR+>RZ_DgJYDo`aPF z8hi}m49bV1&HS-(ZExjIbMn86|65=aewv!0fWVl=8mt=JZ?$~a3!2cPH!AK`(wPUB zm!v{CwFp-%%GLKtMXSUt6q^-N;vOiMDe;K(ZnH<ZnZIi+J-H$GWjG;suDdN-6z~m?vcBgv_6i{O|GfzPqQMQte>!`Q(f2{_MGurbb64 zN~Vq4U-N`6_O|oKG}qssiuUucf1xQfb6C6}Fu=p2#13-LbFYorV|ul%WT^4WT!+Ab LQS;}x5K`)2#FB}; diff --git a/__pycache__/postSelectAppointment.cpython-312.pyc b/__pycache__/postSelectAppointment.cpython-312.pyc deleted file mode 100644 index da2fcedc5a1954dbb977d3dac6e1dd7c01d28572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1085 zcmZWoK~EDw6rSnswzyCcm8}j8RacO{|HKm~iPXJ5yNNompq5G$j~0 zc+jIKIQR#Qf5gNKLQHV=pz*{F!ILN7Y^h+JWZ!)A-ka~ex9`n|eBMQ{Hj7j9wuR6S zbLcGR0PNofu!bn2xQ=GqJD$Zf^8(Fgs0GquHnnRb2+7_IVh(&6>b%44`<)%57H;7} zcE_m8!GSgPF_9oT+V?=LA^q33f;zXK;T0?$3QR;mO<2}jy8AGwP<(H;l7gT zaM0`U3JJL(+$a0n`BW5?s+N6JE2KIS<)M- z316}CtM|$QoM~du3EBduz6gRok)dW&4IY>z6Wi36IJ6PP3Oss`{G^hxWZS$+4w^6l zEXp($I`n&dtSMwoL8q7+d%!i5OCf7snt;wRPRC-Q^farpK;JoR&1l?8`u@|(KAd_5(_~Divr8uT+-1E*EbUi{#G3LRNOCCNo)PsM4xZ2IJ2Ch*c_y z6HAy7%Q6rTO_I@_dfXcI_+k|Bh&Mr{-%isA^W+WDz)z=_xd3b9yE)?;UDdv}=~ zyGl+-TyjK0l{j*QTaUSL2zR7dRi!d2^iT3hML!yme-jMx;BZJQB2tS@@<4j z3ZbGoi;Bi9vW@FX59Ul_R83S9Y4aCpPAg(G8-~;`0}ni(H>l6ksyN>wb+1e~b!dZl zb@AMq6or7lFYRlL1g@d1Ps)D&O@+$ z(xef$tWt^mTfV%#Stym3ajDc>S=;**5A0)ES4{je=3ay1GUZU(NP;lRo6L`T!FQs- zFO{tKdN#}fB;tfOBOFv>Z7&FFo?pdo;8#4>AlwUliLy#tv>t@m^KnQR$9o47FvkM7 zhPS1|O5k(ia%n9SR`XnXH>g*xFW#)mCNH=_!x9%@7AR|Z^e&}w@3&!8F1h>EtvO{{ z_ga*ZJ+JQZ1EI@I^g@omURqy}OOq(Rd<8-gwfD|T^Y*8jnGd~gz@15y2{(>ZHW zm`2lXx-N|(VZ~z^pJ!bd6;h9AA+0glV=A~jI%Jk*hm%I_z7^%ExaG8dE& zghC@3fF+5gmE~fN+#z_CL3YKr&+@;PgE@d7q!Q|E%l|8i+WFC*b{MF{^>+9{gTc;oIwa45e>!)*LkH_Y}-aKA!UtKxfa!yON z_Ex=v&`oty1+k?P^;fCwNv)->X&~0M+Zq^K>W5N{f219)|C}0oH2>=He0wtcx!JMM zrKzJr$3&N}9>39^%z-Jxrtp2UomzUBT>7h{f#J_+77qPc zCTpN?6TnUkD?6>7r1b2Bc5+dX>j?w6NIDJ-jPE#y$=4Q_7Z-8%-9kDk%nz8y>1rrK74feK%4kMA8K1uU*;cJmmlg^IvUa^*$jmI1IO-xxc~qF diff --git a/__pycache__/send_email.cpython-312.pyc b/__pycache__/send_email.cpython-312.pyc deleted file mode 100644 index 1b561ac4a65d1d012b1201b20a480d9c42bded85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4134 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 diff --git a/__pycache__/send_email.cpython-313.pyc b/__pycache__/send_email.cpython-313.pyc deleted file mode 100644 index 9495a50ebb2a8b76aaee5f8b9cb1d03d50b554ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4217 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