From 6d553acd2bb9ac402253e888881a26eb23e9d61c Mon Sep 17 00:00:00 2001 From: XiyaoWang0519 Date: Thu, 12 Mar 2026 07:54:38 +0000 Subject: [PATCH] Fix: Handle missing config file gracefully - Create default config file if it doesn't exist - Load config on startup to ensure it's available - No longer crashes with FileNotFoundError Fixes issue: Fix: Crash when config file missing --- __pycache__/task.cpython-311.pyc | Bin 0 -> 3426 bytes .../test_task.cpython-311-pytest-7.2.1.pyc | Bin 0 -> 6256 bytes commands/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 234 bytes commands/__pycache__/add.cpython-311.pyc | Bin 0 -> 2046 bytes commands/__pycache__/done.cpython-311.pyc | Bin 0 -> 1943 bytes commands/__pycache__/list.cpython-311.pyc | Bin 0 -> 1603 bytes task.py | 29 +++++++++++++++- test_task.py | 31 ++++++++++++++++++ 8 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 __pycache__/task.cpython-311.pyc create mode 100644 __pycache__/test_task.cpython-311-pytest-7.2.1.pyc create mode 100644 commands/__pycache__/__init__.cpython-311.pyc create mode 100644 commands/__pycache__/add.cpython-311.pyc create mode 100644 commands/__pycache__/done.cpython-311.pyc create mode 100644 commands/__pycache__/list.cpython-311.pyc diff --git a/__pycache__/task.cpython-311.pyc b/__pycache__/task.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abbd6c4ccdc860cb323cfbd1c89b1974d37ab34e GIT binary patch literal 3426 zcmZ`*O>Eo96&^|>YDE3mk{!oCvdvuw$tq4{XBTca-n76*j)P=vV*&3az6e~Ab{JEl zLQ-p6kQXYDgHr@(3Z$rkqJYsu)773sm)Q{RmKEdLCL zk8j@0y!U42@q6<_I4mG2{L_D`fA=HwAKGXYPm}pj1m=%OMk`3>WRJ$JaO~?@@xa%s zd9!#0bF>d@zAV4OGv259vt)%Zp4S3dVMPGm{|v1JWdby$gyq0GvtfihNC~|LD{or1 z5sdXLvo|3W2ba}sUQ)Jy3$DxtmBcC{w4 zZ}&{|ehEFH)>zr*O57f9wN8FzEaSJn*P!uDTPth`zwH4#zLO(ce97|~ynWO5m_t^$ z)d#-%OXyGN&u7Qt0pHBNO_Z_IDXgpj*hq8=g(?BecPB z=n)(%tb;70M4&jjpi8ot(Q~WnTEUPkRnLj5hMpByRZU42{mDjGke7nr_UB zmQhfkRmiCsT~?ay;&94PBukM+xyw^gvc#oCz@YKr;>UVcae1~b)8!irb$!`&Sv6c? z!%!_HZ7G|U>&qKz&T_GyS8^@}#c~3>&5cUu;iqtg#;&F5%t+H@x*>D9Rg(sw2<7K{ zQ`F|vhLl^|RJSDk)9LBYrjk@|Mw2$CHgsd%%u5+%N>XpGsg|BMZ(53J-LxcQO|hov zDJAn;Zcu|`ZR$5JgK`>&CLBI0qaR}fuM)qXd^NcjsKgTc4=b@>{A;uln=gM==TYeL zL2$Gh9IXV$o#1#KMSZhJmqh2%wH={GVh3cfN(T4(|AB2XSRpeGnX$=C9Sg&FCsH3k zf&K$BRwZM*-&aV|AxWDg4@uaLe7^q$5U3S$+ab4Ya{I?XcxSy57NUu@RBAYtMT`7a&yKT0~X^SI;Vki7H)1v`nE*c${BWFhA628Eb9*ZTi#zN%Yx6#+&!<)7r;1$}VSbwH;W7)PZ zfUFa!*xk#a-1P}$^>&n8LB{AdZ}oK~a;(IkhqaF&fo}8P^Ku`gHO6gl8>oSdCEt^_ z_cGs1iUSt?dzuACgj#$zP6M8zWz?l1*woN#jkM+_%tadDasBOU1r(GC3sYpsbh~L(S79;QBLq7LvSNjHDWjXz8L+$N}PG7zbeYSkdyX z7gBvO@}(?`l9*FA7`i7oBMwd&LqLkX4CGI0#`H!|j4S{ZB~4>fOi&7!g5sq`xF0l9 zgk%DM(+h{CxPFRjX;m)vGi?v%s5A5`A<|jYC2K3MFssFZdximNh5{g@lV$>%6@Q{x zIT3}siLnMiZYpl%OJl8&h1B&mZ2~OQTZ>uvmh~E@E6{eM;f5#=Gue38OTk`XT~uf? zgmnY=HZuy_JcFK=F-!>scD4})#T0|5L<9oUY05~`O-%S%ZlOL19s9;rIxNVpPfag^ zbhRy)FtzM*iU~JHmOCJQ7z1<;⪻|_!QU#yyhPm>K}$LIpHhzt$90qzY@OhgzuN< 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 H_L=_%gE literal 0 HcmV?d00001 diff --git a/commands/__pycache__/__init__.cpython-311.pyc b/commands/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fdf7489eec7488c01ee43b22a38dafb0c992380 GIT binary patch literal 234 zcmZ3^%ge<81cwSXWvT$_#~=<2FhUuhK}x1Gq%cG=q%a0EXfjpFI_Kx+Cg!Cm(aj>iKCh-eQlBPsvY?k6+2~8Dz?@ApMN|+*JMY#Ju#1%*w=k zBLf3teZBmG)V$=J#B%-e{G#mQg2d!h{lrY&^vsg{f@0m0)Z!A|lEk9))DrzscYh-)MBD*w)VnW=w+qdLGzALG_8=R>s2oaHUiF3?27>`wl7j&vtz=}$3?u4uUXqbAg8qb+_Q8UAsyP`RI zHNhMlFPcU*$!2b@@E>EV-yv5SKdj@=7zESmiXk=a1KxJBcPiY|8EuF)p}{flNOs1k4d*O{H`bvN^PCghX6bu~qPL^@vmsIz=Qh>E=qZt^ zaIzuQ#0CTE5Y?m_6dw|Md>|_Y1itXHcJNBX^X^yFL=t}{M)E3`L3z;#<1Mveth`DLCyaCDZirbW3uC6O z5jX5}bd40KzD}JKGZWV;P`F5#TyqSn^Mf!(Zj~!;7^^sjMYFi&Ppc~O5*5aHxe8@A z6b$0BY*B$)?v>C^QucX2Af z@9f~rHqJDzJpahU86VFEc-F(SFOQ_^S9j&~jy$q0kNEOfAdj)I=KL@7KjUi<|Ou<)0f~`WiGJF9vwg z!;3F*Y6p*Q)1i{95 z@t2&HL%C2OcCk=!PQVv4oau^b+~j{E9HSOmEG`avB>WnW+MC4XvQ2K8`X|mgIAH1E y{s62g34*YThCMX=5-D~5+eIT@v^C?R@P*JsJv=E3r<$nChWdr6COXWx2mb?gUekjB literal 0 HcmV?d00001 diff --git a/commands/__pycache__/done.cpython-311.pyc b/commands/__pycache__/done.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46746811a22de89caa2c9a9d486aa753f2e62846 GIT binary patch literal 1943 zcmZWq&1)M+6rcT)WbInAoW^q6*j|M+K{l4s51Qu7^kB!eNll??3vP?L)oh%#SG!_& zT_+nEMCic*AAGYR1YAf`2lr5V^0|M(t`S5m7y=~+-vp+Y^wKx8lI%@Kvv0oM*Zk(a zr{8*elL*>h)jzcakI>&_(P?aZa&!qMn+T(Mgc;20%sc}lr?VAqo?{T^e?jv+7Jv#k z1~i7*uTVbjX1`FZCD~EzB^jHBDwoYlMKN&Ukm#MuGXejl;@mB_tBBd30_4+SZ^i=C-GOacpPN7eC#*?u*kNKW!y|t=xGjm?L<_5W??a zvWaT&R!d|b*{5pENkD7pIY7GGg>{KYBCFpamu@%A)|kiW2^-~n$kZ5smvaZdQFIL} zjvBu5%%rT|(`?5s91^W=X2$rLFmz6@%6T^6bkzuwAh@hfS(a(RmO$?x#K}<7uuZNb z%T^BzK_ArsCMZa7YGq(sg3rDJq>frKlt^!69zLi)*jRYRZBPB0e45-J81)854^o5P znNN1U1p?hqU2dc1E z)i}(Z>9W?)66LXOVIEF|>!JMKlV1NF-|LF~U7yEqUw* zgc<*~REW{~cM)lkN=r|;x4CKA>2(Kb*-^rvQ*2Ups=Dex(x>OTMZjD(aBePOHGDhZ zNiH4|5TGW-Gy|)K<4Qz}+74YeDT5-yc2y2UtlDKut2&x#xWa8x-r(FY9r+H?n(v`G z9K^y@2!yJo8BV~HiV_IAsbD+ku~Y?@9QB?fSQ?3N*a!r?T&dc5-s%H~g0LKg zr6El=c$zCDQePW4y492hUP`%rDfjIB z)6t!;_df8>-SE%dXaJQa8q$O(O&mxWuYYDc3k3QflY2vrkEg?hFU>ZjSx=g6O8sj$ z*KW3Ykd*sJLPF9@zQ1u1NZ5V;LW95HbvjM&d_0Jk0GD#9WW5V`1ab0Lpld(Tx=x>o z;!jbtNW@by3hJB0^@@p?b#=lz4+kXO?H_@(IEG=GXvjlDuaH=$za|>=qP-Pkna>%( W_?RXIh9K1;eHrFr3;mx^5B>u?VZqt} literal 0 HcmV?d00001 diff --git a/commands/__pycache__/list.cpython-311.pyc b/commands/__pycache__/list.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cd383c974362205aa93718907722ce196ff577e GIT binary patch literal 1603 zcma)6&uimG6rPbKS+VlVX}#XG!BtAO;HH+t?xkh7ZA!PKgklPX9#R&gdelT&*)p2R zCJ{FH(1Qy;1bWy&Q^;wXvbUak-oL5dG9Lfx4(fib>c-5*^Bj%s{%u*gl^5+)YsSGWMftv#t(8W5yL&Pu) z!?rt`KLW|)D>1ke=m-%>U_zkG5zH$=cEe^y9jqA48+!4LPw-X>*=`x!pcH_F5RAjjjo*eCkNaO zkwzSOu5=eXm_Ly{K;eacs9x3rp-GL1+lHm&$hojFiCiq9`J zQtG}_W0B0uDN}r@T z^s