From d7060ae1dd13299159be69ca50df330767366b5e Mon Sep 17 00:00:00 2001 From: ppp Date: Wed, 20 May 2026 17:06:21 +0800 Subject: [PATCH] fix: handle missing config file without crashing Auto-create default config file and parent directories when ~/.config/task-cli/config.yaml does not exist. Gracefully fall back to defaults on malformed config content. Fixes FileNotFoundError crash when running commands before config is initialized. Closes #2 --- __pycache__/task.cpython-313.pyc | Bin 0 -> 3159 bytes commands/__pycache__/__init__.cpython-313.pyc | Bin 0 -> 225 bytes commands/__pycache__/add.cpython-313.pyc | Bin 0 -> 1825 bytes commands/__pycache__/done.cpython-313.pyc | Bin 0 -> 1714 bytes commands/__pycache__/list.cpython-313.pyc | Bin 0 -> 1430 bytes task.py | 19 ++++++++++++--- test_task.py | 23 ++++++++++++++++++ 7 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 __pycache__/task.cpython-313.pyc create mode 100644 commands/__pycache__/__init__.cpython-313.pyc create mode 100644 commands/__pycache__/add.cpython-313.pyc create mode 100644 commands/__pycache__/done.cpython-313.pyc create mode 100644 commands/__pycache__/list.cpython-313.pyc diff --git a/__pycache__/task.cpython-313.pyc b/__pycache__/task.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..933326a03f492d41e2751cb976e269f17ad94c73 GIT binary patch literal 3159 zcmb7G+i%;}89%&8qC}CF-o)TMVk)@lRq=PHPg|F$%2-qM40wYq6YKhVg z=`|sW!W}Sl!%!@1HzXJa)WG`S0sR9~Y{0fAz+TCufjrg$GBms7&8P=#SYP%X%Cub9 z*|1~lobP;hp3CoiJAx2F(B8N%y!u86p-;)gZ_F;S^L-$Gj%0+9Ov&^tg(+{OG3|{E zW?*Dy*_i+iNJNL74bFsc$fE6V|3QZQIv?p7H`N7srU#7-*gk;+58Pe;hh!z6}EzsTve|1-+LU_;&epz!d z{AHfZ!e3yVmWT~RIoL{3pR*|XRCgRgrIRp1v%p zT2)!Cn^LVRHEMkOm4BgOW*(0)yySo(S z79fO6Rb5ImNM@2G{i6V5eqyO;XxLb4wOUIB%~&y;t)-`Lz5TbJz4zq9A5TvIb?rBQ z|J9pIN^NYp1|nn3)C_aXRPeH9E|K-lwQjgP$)em@4m<>2$(1r5LAQpUB>HY;-^spv zW2xoZlF;#c%x9_?`8kb)TEr>KU}T!EHJaNNox6 zn`b^2QtO$m-eb4M-xc9d!K**#eXtLOt*y;{D1x=8f!--Cn~)^V)LhW5DkXJ z^Qraku2<~rge{)Gck+*?|8V*~HxJGqa)Y052SDlH#s&DokNWw127Pq$WIo2+4Tgcf z8;j&qp}PYNp;KO;87Pb}ch6@EL(IJ-1@yh40Q42G-)jW!$j#z$0GOj0&!`2u`}8O0xk~ zfoh5Q4k4LM39ssado1Vywp`QdEti4Xz!E1_RZ=8fd(EpRvJ@VH(0CX+D|Q90GeB6^ zGfPScOPqsVQtEZj!~mzHia0tC1x2SMQ4D}WQlXeoK@dzR*Hr6>=WV(`k|DK+M65_k z=8cx-Ma_y(ui$0CL_>4MNxZz;03?2eOtCAHO2$~d>PfNTM##J~aifF=OHbcr2sB1K z5n&qmE98q<|FbYDI54?f_zZNQNwBm`mLwbW5SfIFbVK3ih#K!zPrCtmlDi+BB|!}0 z5HJ)P&JcaJq11FdLAdZU{sr9{+7gboh2i_cu>Jg$BfPvewHZIwj-PVkr#7bT3v+h- zlpUX6o7oPcM6$zQU$xKXJ$_+rW|I}$>+?35EIj7pZ9eJn$p?IDt?)R+zxDc?uispK z5K3-wv71NQ@r)DCJmiKp!@^IJKT6*2dk{`F7f){g@Nm+;N9H z{*XJd1K*BZu3RQdQZ8p>Zm0~EXQf=mV<5rgVqj88k!RVwR>@yM=pc9s-l-oxYV0Ew+D4Xs@MHNxkK$lD_BLZhj!*0mRL0eBSrj7!jM zGZaPr8Kpi&J)fY+Cy0N9`u~D5kI?WVbn>w@dgrJU|K^(bSx}%-pGo~xa{C3uMt^8M SV2=NZ<$f@=%^-Hb3-cdEXUdcS literal 0 HcmV?d00001 diff --git a/commands/__pycache__/__init__.cpython-313.pyc b/commands/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3192a725f86d2f5f55dd4376099dbccd5687094 GIT binary patch literal 225 zcmey&%ge<81X2~eS*k$#F^B^Lj8MjB4j^MHLoh=TLpq}-QSTotd4P zo&AoE2m*+&b}Zcz5PC`vKJYDKKMlktQV>B3r|`2J;b0HU@;3q`AR|SHBO)k4z(FMh zIJCeg#d7SLrpb6c3_gu-rR?9oYg;vSYG9Z21Gdh|}dzx@Z>Eq8GFmRf5Z5 z8f2>cFwY_+%&eA9n;F~-TUm% z2M>3D+_?76AC;f}`sQv<)l&;Pi0qVuZ71cZWC1(5RwnG6s%dF!&5Hsv&z$CIXoS{6 zgk=u^s-Rt|^Ye*MCpMsUUATbcN!?LFU zRnWg7)ZV)j?W^@)tVb`^!k2c$$of=W?A>~?E}mwBH|o)=weZz#>10DX-U2?2>rmmK2^-nw;zK61eQ9FG2!T2^1H#{=V|sBWO<*f1X92;0$D!uLQ8mLdw)cM zfssDwD4F`|Iik=ak3@L#c_~E5Dwd31iN%J87i5FP6X}-MHJf&i4AAWRFpL~F zYRD_Vr`fc>1q4Ip#LLx>>L)H#W_M#}>#=i{8{0y(A@sOHPeVw!LZUkT=(QT9ELhrSxBW*?2Z@$tvP#T}t-eRfN{zgFd|Q`J;0 zGV-f1%05+6^u&B#GYk1VISql+ayg4d{WhD^EY;1V)8`TTOW3v63cpzy5;H(RAdioDnbLt;nQW@Fw< zrag?dnwp0q@iw$p8hhFvnf6a43Kglvoq`HCo$JII;z&NeKIizJbAIRJysImO zfCjd@))Op3C*;E;x_vlL!eIwV2qTG-=miQ>@Mae1c?L5glGp)+S&0MANj~7dRXXms zqf0X05G~o<5EVmL#ez{P$-0s}BeyQcDTn=3w$=)5AMT4dWZ*fU2DXE;u8^=5FO-f1 zp*t>^R(CyZ+Ap=lgTDYwtJ0 zw`ze~O}@9X+(M_5GyG5Ba@%YRq|jy^o!3x0ECXDD-cqa^RyD>VI`tf zI_vY~E5zR=8iqQoK#N``&x3c9PG`G3n|tD9yT&@o&{xpx0zx{IVI+oxkU^r&gfqm+3-uJ(qQ4v@*2hll)Vi>Wdfi3}jFkNkQ-sBA%g3ST9}?k=%LU z7jWTSdtrk4-wHNFm)-Af2)WfMvPm{Xxu{w&o88NuSv59wCARF)nsV1+$-tZu5MX`y zG+j}3%NEEjYP;X;kO&tMvy|xYifR_HR<<-lx4FAy6MDh*eq1Tk4kOwxARG3Tvb-LEv!8W~pq(SxgXgT3e$vzXWiHbsL;a zq6pM#>|hCE&6DtO3>0s`WBv*ZW;`;~h{P)MP5$Z;f1}RdIN}HE{NQn*s}>$Q42aD@ z_*Ce5JpXXMY9B?%>(TK>G|>=}m6_x4;O=H4oUEizdaiD>O}@LzK1l6GpYvk#`q1`t zweP`VQ|LPqVs#<*Y~<&$pT_nx2k+L0KROid91D@^;$CzwxIggQ^uf*gd+FN5Y^`_h zP?&!q^#04ENZ;!);zHXq)zRv;-LYEe&FAb}?nuS`jz15%6!LjI0692*vSo|f7w*b* zp>;8HGsR?`xxcl52;43i%4Si$gGWF?2GAS?_L89}>IJ%ag7`mC|0^F&%~G#I9ChWq KCqj+7|NjT?cYB!t literal 0 HcmV?d00001 diff --git a/commands/__pycache__/list.cpython-313.pyc b/commands/__pycache__/list.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8839565907d70ee48a2e9fe0917284d8b0b83a9 GIT binary patch literal 1430 zcma)6-ESL35Z}EoJHFWYC{99%!X*k-P4Mx6Dp3f9szC`Z4Jaq`5?9vMcO;iyeAe!! zN)I8KC!$uUK~Tv^NR7lxc;tIxkbgnP(B1XEt7dC&lm7&bu(WOYuX_(9*mW)Ix$D*1m_ z&BKfK$w9RLs`{id2)A^CfQ8R@F*4Ayw4{J1L5o@<{k>0e?06+lQG#9KsgBF||3oX} zGiZJqp}JI-ELjDw$yYX@Zz=C#ORdYNa@ERm4p}L%PIGIJdqB>_@+(>r-#}N32NeM5-Uy4vl(tpZTiPn%O2hQ#&8G zUwmV?aB(;H=1=Ljj#V@;Bs#2+ic;086V$3zG6eZVDgHC@z3bx7AX;8PA+jcXYQ<-9 xRq2_vz*+a*i{yDw@D8I~_)EqZ|BRkJMEb92