From 43b5c66befe0780d62fff97a933aab20e66e26fb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:26:12 +0000 Subject: [PATCH 1/4] Initial plan From a00311982837adba842b103cdffcd28edba0dcae Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:26:53 +0000 Subject: [PATCH 2/4] Update requirements.txt to modern compatible package versions Co-authored-by: erokemwa <111133254+erokemwa@users.noreply.github.com> --- requirements.txt | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/requirements.txt b/requirements.txt index b4b9df5..bb3d7f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,20 +1,20 @@ -bcrypt==3.1.4 -blinker==1.4 -certifi==2016.2.28 -cffi==1.11.5 -click==6.7 -Flask==1.0 -Flask-Bcrypt==0.7.1 -Flask-Login==0.4.1 -Flask-Mail==0.9.1 -Flask-SQLAlchemy==2.3.2 -Flask-WTF==0.14.2 -itsdangerous==0.24 -Jinja2==2.10 -MarkupSafe==1.0 -Pillow==5.3.0 -pycparser==2.18 -six==1.11.0 -SQLAlchemy==1.2.7 -Werkzeug==0.14.1 -WTForms==2.1 +bcrypt==4.1.3 +blinker==1.7.0 +certifi==2024.2.2 +cffi==1.16.0 +click==8.1.7 +Flask==3.0.3 +Flask-Bcrypt==1.0.1 +Flask-Login==0.6.3 +Flask-Mail==0.10.0 +Flask-SQLAlchemy==3.1.1 +Flask-WTF==1.2.1 +itsdangerous==2.2.0 +Jinja2==3.1.3 +MarkupSafe==2.1.5 +Pillow==10.3.0 +pycparser==2.22 +six==1.16.0 +SQLAlchemy==2.0.29 +Werkzeug==3.0.3 +WTForms==3.1.2 From af6221cf612a753067d274fabe6ceca3e0b73970 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:33:56 +0000 Subject: [PATCH 3/4] Fix code compatibility with Flask-SQLAlchemy 3.x, SQLAlchemy 2.0, and itsdangerous 2.x Co-authored-by: erokemwa <111133254+erokemwa@users.noreply.github.com> --- flaskblog/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1728 bytes flaskblog/__pycache__/config.cpython-312.pyc | Bin 0 -> 839 bytes flaskblog/__pycache__/models.cpython-312.pyc | Bin 0 -> 3923 bytes .../errors/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 161 bytes .../errors/__pycache__/handlers.cpython-312.pyc | Bin 0 -> 976 bytes .../main/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 159 bytes .../main/__pycache__/routes.cpython-312.pyc | Bin 0 -> 1389 bytes flaskblog/main/routes.py | 4 +++- flaskblog/models.py | 14 +++++++------- .../posts/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 160 bytes .../posts/__pycache__/forms.cpython-312.pyc | Bin 0 -> 730 bytes .../posts/__pycache__/routes.cpython-312.pyc | Bin 0 -> 3908 bytes flaskblog/posts/routes.py | 6 +++--- .../users/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 160 bytes .../users/__pycache__/forms.cpython-312.pyc | Bin 0 -> 5077 bytes .../users/__pycache__/routes.cpython-312.pyc | Bin 0 -> 8204 bytes .../users/__pycache__/utils.cpython-312.pyc | Bin 0 -> 1854 bytes flaskblog/users/routes.py | 8 ++++---- instance/site.db | Bin 0 -> 20480 bytes 19 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 flaskblog/__pycache__/__init__.cpython-312.pyc create mode 100644 flaskblog/__pycache__/config.cpython-312.pyc create mode 100644 flaskblog/__pycache__/models.cpython-312.pyc create mode 100644 flaskblog/errors/__pycache__/__init__.cpython-312.pyc create mode 100644 flaskblog/errors/__pycache__/handlers.cpython-312.pyc create mode 100644 flaskblog/main/__pycache__/__init__.cpython-312.pyc create mode 100644 flaskblog/main/__pycache__/routes.cpython-312.pyc create mode 100644 flaskblog/posts/__pycache__/__init__.cpython-312.pyc create mode 100644 flaskblog/posts/__pycache__/forms.cpython-312.pyc create mode 100644 flaskblog/posts/__pycache__/routes.cpython-312.pyc create mode 100644 flaskblog/users/__pycache__/__init__.cpython-312.pyc create mode 100644 flaskblog/users/__pycache__/forms.cpython-312.pyc create mode 100644 flaskblog/users/__pycache__/routes.cpython-312.pyc create mode 100644 flaskblog/users/__pycache__/utils.cpython-312.pyc create mode 100644 instance/site.db diff --git a/flaskblog/__pycache__/__init__.cpython-312.pyc b/flaskblog/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e4a5a7943aeffdae2c9459591fcca0e88b1d7ca GIT binary patch literal 1728 zcma)6&2Jk;6rc6ZuD`z$nuHdVloYjw)<)t(0#%^Y6wx$p1c3t<(rWD;JDbk#n%Q+L zSFz-%NICQp38Zr1j-V2M0sjFUsAP#`6ibzW1Gl1Z>WMeAUON(s!pffcz4w0a?c2A% zou9MW6oPB}ryuQKRD^yPMs&r-;OGYc50Ql|g(63(D~iA|8gtaTDzQqjqt!KuG1Z-T zJub0E6Hc<8lvt-JCtXh~D29moXk5CU0ZW@$S+L?0D`&+?&d5jYSP8HSkp;};gjpo% zmSQEpRO&OmR4M(JAe9uZeLzkBHh|Q|M{6szxk;QJSo*al>vaM^nKiF%yEW4_+k}CQ zYo<*Fqw2XWyL~U+^$GLKRIoU<-Imu>q6T1xfyw{T6YxGn!6X($qeG9zzP_@pY~f?M zW4IOnuP;bMz9<_8ctXAvy9(q$zC@9=m5p+z`?fNz6XYWQsm#f!Pi4;h-_-;Pb6=LCj&Dg&R&(2g@UP$_Zi zUeW)8+5vf|QmOc`m#qe$7t&g*et5n1neqP0Co9)hHm)0=etd%o34oL|DIozmo*(!^ zWR7XOLS%$7kNKrpCUnFThT)nHF$}IZrTTcf#XQIG8e60pFrf(^gBvDn*A5J`)8TqU z>X>JxJ`E?7v8+$|TuW%b0ikjzV&-)N;?Nr%~PP||rOd?2FVL5GTGMwEy?TI z+m%hvAr;njUBW7NJ$AcN^(=A)zSk+3^inYlITWMZ>G4#P5i=lSLTm{t7UA!I2g?8* zrt)7W9#jU^eH`Ci-C6w&pM8wae*4xCzqEh(y+Kv@e$8Kcj7xuDefQ?h%{_I9pF6~< z-SwUIz3LDz9O7b_^v&x-ym*KcyS1I#-trL7{fRG+#P5|6ehtcxS#J*U`ID?ShInZj z6HPox=LV}s&?>rBn&p~&zEB(mi4BmS86IOyoFzOHxO}NsbOG<)?iSktFfp=56FlhSCyeA^!Dv3bE>g5`U}&I`N< z%d^B)$FsVWyvtq%QyhT)IxJ6BMNvj*euOTL(BcSP7@>0`wEVY@^uqnm2eE@>{=vdP rKPbHLRc?^oKX+-69ioN(i&w;c;UJ#Ae`kQ7>gdJgf6%OwmpA+uum*|* literal 0 HcmV?d00001 diff --git a/flaskblog/__pycache__/config.cpython-312.pyc b/flaskblog/__pycache__/config.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae934ddbcb95a0a496b408d0a28e5b92edf9d099 GIT binary patch literal 839 zcmb7?zi-n(6vxkYn%|LV6B?;VQ8$z!2}~>%l1bf?#7T?of@+3S$hpC(?JJiC6vPmu z{sWn;PVI^+@fYwPuvE%o9U~K4MFyl!oSirznDU0NKHqou-ksjv*Gwh}SbX^M+1%j( z`0kr9B6FB-GH?L`h_iqWc(4l)e+H0n#m{!=+>k3qe)y)P4%jYzNZw75^zQW@^jTz2clVFDm zUE`Fju!)i=6PgM-v&PR^??hns_Y{q$!xNzIAbXpA3or(E{0P$!cj-_X?XAz4P9MbM9Q1b|!`0>&QKC?f$6Y-N}w>UN%3Hz1+H6AJ^U1xOKTT z$vqe~|IK`ClDpw)MV_QXCOMyirFBNP@vYe`ACo+@{vYhGF}V>qj{61@zoIej;ZMLM GsQC?8*0vA; literal 0 HcmV?d00001 diff --git a/flaskblog/__pycache__/models.cpython-312.pyc b/flaskblog/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f5f60cd90bc3d9589d89ab12bd093c1f98e72bae GIT binary patch literal 3923 zcmd57)V6|U~-p6U7X*prQa62gW}7H7aei*fJ|`C*edPVm}UVh1TBM5{ejp0v~R zv(-J=W4y}<<>0wsM}TZAyTmJy){!mn37G?soIpZCj$$dMMZ^IvzIkzwP{e`vdS*Jd zu@Bi3CC!^x?^V67dR6axul^Jc2MDzP{PvgnPrZcv9Xpi-!!K`t2goe393hfX(Pdp`RCZaHu_}HimcJsLBunLQES0Sc!e$0yGRMKT&t#^l zXVSJO$t+vKh1niGZNW}_Iq0Z5HF5s&7ags)GAY)|bLlkWtz#K}yY*s*vgUU($(PKC zp_#XbVZW^@&>3b+HgEflj7C*7#;d`S0zdO8kOKKfFg)E|?4CYXJon+rUw9UJe;#@g zY+jR^w?R!3NGh$e+wEV&YGw%|aehHNS)icTTF#zvEqfe_n^6sylVGM z>`_m}lT@J6vh3ax<&`aY53uBaWlJyDBvIe8;;t$1%9i}@nxy4`>!qM$r+y!A1ZfET z8Fs%IrcqjTM~GLk2#xHB%xYSFhs100HL*iH1a^iVK#*j)p3-<;z0LBQuYvF~go-zp z*5Au9TS?~(LmM{O<~V33f|QMDIm2oh%_bj+ybffxuPoa<1HA`ANhrOWF)iDx<*Zv7 z4)%P*TH-cmBerB{6Zyo>7(yg)A`N2|yWDvPf!tuu2-b5xnq9<*c=2BVH7Ihl) z*pkVN5j)7nvpQ#{YO;ham?rM$`0?XBg7YE}%_=B?TAAA{J@FbwcFP{=VHj$*0x6Kc zhH8KE{ik)Y$91vArpI+1PePqj!bYTedaO7$=U-_5q~qg`wYo1qi8QS#O}qx??1C=W zp??O=XLhLICzHZ{E}ev=vFxc_N-E(oyf0dAh>zmM+S5kS5qp}20OYhu7YGK)31Ybr za*}XJOgBlMjFEBAO)@6L%Fem)7>dx+?(>U&4=%z;e%BG!IY;=v3Ur3~T_6Cc`<>#J z=<(NY)Yi==?Ec0~UjkAf8#Q%v(*5v!c;*KSbg}(c-4D7K zn^x#*`|r>H=KNZB-yhr7A_Hs6fD;S@F@ZP1v{=*z)3^>*wF9aOSukfHA5zu#a+*=n zlv1zvV#dg&(zfqv+G22@_!q%|?H#nZo=)=9(BWT0(t%$d<}E#I z%UJ+DljD-@kZFM;kzxRVlz#>1b^&=noFzINcW$3U!k{r90l7mq{L!iCbVIRWrfs(S zZuesQy8o@hg^fu46rau)^K%Vz(fbYa4GV4ejxAcNY&~+RaAhNOcDA>JLyf$}v@ycrZdgvR4o^45#o3|9=jeaV6<>qYf5W3V?$!@!9qiU)++20=v@MAD+h#vyFNr7DEp99Jfz9yVnvqh)7-~=xYK9b9zfz`pOM*da&W;+n55M)cY3}y$huvamV80DRy+JO{K1Wkl-a!Umy znsEpsMFk`R^MRSkh4w}1>8Z}gr#jafyH=xXkuz(`nKC#;c{dE_Uq^zQDdmK-$elxi zkbY_fS#f~(@#x2_ib%6!13_EZ+!=fskq94SaoU7hjq)OS{h(6lQUa#+)zz;ZgB~Basr4gJ5P;LmE?Dy9VN$N9=5-*D5C!2GIrfZP z2KqPB_>6pE%S*(_Q{l*C;mD_=AhZBViAT4Pd#=<9*MzCI>CR&3%+2Qnd(Ybx;cQ9t KF9NLNf&T((Zylfj literal 0 HcmV?d00001 diff --git a/flaskblog/errors/__pycache__/__init__.cpython-312.pyc b/flaskblog/errors/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..237597da8eac4c1c8db251bb42854d0e5750316e GIT binary patch literal 161 zcmX@j%ge<81T}lsWrFC(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)ELDpPQ;*RGOEU zTBKi|UzDxyoS%}a>yw|3V5H?F7H22r0EJSEit>w!_2c6+^D;}~}M9JxTcCW?~Aouf-dmDxRWrhy`2rF%C!`}WP7*>9D~B*FFZ>zAEF zO2{v{xm@}v$j&f0CY*5U5uY}x&zg)9Mg-+dXkC``n!3>6l`k)k|6J>$vRqvMM7nuM zn#MKkQo%N^uqUozPZVtP3ftVbYLf$5sm4<4rPme_>;y?#1rcxoP9prsa}$vo0w9EV zaD)!GMlO{>4N-pCV}xUp6la_k71=g>O={Z4hia~3FV~kBTZ!+1ftNZI8%XHP^_StD+{D5-fyRwFUCs$IcpX5BD+$ z6$y6{27hnG#!9`O+nAQZH`zcY+(*)sBo;O{YF1iO^9A|7>Wxyyw|3V5H?F7H22r0EKcBGxPN0<1_OzOXB183Mzkb*yQG?l;)(` X6|n-1V+7)25aS~=BO_xGGmr%UM0O_n literal 0 HcmV?d00001 diff --git a/flaskblog/main/__pycache__/routes.cpython-312.pyc b/flaskblog/main/__pycache__/routes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9be0c7314f6df0e1f30c40c046e7971ad06d461 GIT binary patch literal 1389 zcmZ`&&1(}u6rb6zd~DkK)f!vH>P2#B;=!U|DAf1`N)hz5sA1a~)1)@9md?fjENYfBIOA zX$bw2M!1YF*!>FNH6n;$5Bb=^zUFAY?&w(hG|%u&$5dGNEI;Bz6gIr5A9G?DX^85? zr14d#FPCFeyL7CB|J{kTiaYi`_mS|PM4zJ7ZfbZs1N&sfdRg&)mNQtlQ;98EBc+QW zM$3eGVK;77AjI(9VtEf|mdwn2 z#iw)KzSLpCuEVn%g)e)Jc<-*%<)Y^RP%{6uI+$Rhaal#JroJkx!Fq&vtb-s=DHvLv zlMjS89}H2*L+N1X>7V_m(xJXLM5W;n_0N#^u<9}*M$_!|hxySkmRQTU841>I%?zuR z%ammnD{LW?s}MSIvr_1T2c8=&%zEIGLy%#W8mB?JS{H_Fn~g##DN}F{wg&oRp~T^r z*%#Rjd#q)Ttz3OK-OR1oV{Q9v-M=dO104-S=cNSXsZv-V(Y6Oo1fD!Ee zVhDa_qQO9Q2N7g3W|rbAU(qehX<19M&WqfmDXggafY=xmV)FkLrV3}{fE9H^02=5w zG?sn8xNe_cGtR5%nbeRl6<4Z;l8;HfMLc-ux!&A7_3KJ75$jRf(epshPWwQ=7jz}f z=gY27^LZxu6{ccd@vXXHC&AlqbT68PZ|Albh(oCQ5Fi zQ$HgIUX83I+mX`^W7|TS^=$O<==0o@li#qZ;I%eBvZLvEa#u&%u-p!A8(?lH!r<#| QJiMb}d_i80D5QG%3k>=q*#H0l literal 0 HcmV?d00001 diff --git a/flaskblog/main/routes.py b/flaskblog/main/routes.py index 6e6b730..a47e6bb 100644 --- a/flaskblog/main/routes.py +++ b/flaskblog/main/routes.py @@ -1,4 +1,6 @@ from flask import render_template, request, Blueprint +from sqlalchemy import select +from flaskblog import db from flaskblog.models import Post main = Blueprint('main', __name__) @@ -8,7 +10,7 @@ @main.route("/home") def home(): page = request.args.get('page', 1, type=int) - posts = Post.query.order_by(Post.date_posted.desc()).paginate(page=page, per_page=5) + posts = db.paginate(select(Post).order_by(Post.date_posted.desc()), page=page, per_page=5) return render_template('home.html', posts=posts) diff --git a/flaskblog/models.py b/flaskblog/models.py index a16d302..691cd9f 100644 --- a/flaskblog/models.py +++ b/flaskblog/models.py @@ -1,5 +1,5 @@ from datetime import datetime -from itsdangerous import TimedJSONWebSignatureSerializer +from itsdangerous.url_safe import URLSafeTimedSerializer as Serializer from flask import current_app from flaskblog import db, login_manager from flask_login import UserMixin @@ -7,7 +7,7 @@ @login_manager.user_loader def load_user(user_id): - return User.query.get(int(user_id)) + return db.session.get(User, int(user_id)) class User(db.Model, UserMixin): @@ -19,17 +19,17 @@ class User(db.Model, UserMixin): posts = db.relationship('Post', backref='author', lazy=True) def get_reset_token(self, expires_sec=1800): - s = Serializer(current_app.config['SECRET_KEY'], expires_sec) - return s.dumps({'user_id': self.id}).decode('utf-8') + s = Serializer(current_app.config['SECRET_KEY']) + return s.dumps({'user_id': self.id}) @staticmethod def verify_reset_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: - user_id = s.loads(token)['user_id'] - except: + user_id = s.loads(token, max_age=1800)['user_id'] + except Exception: return None - return User.query.get(user_id) + return db.session.get(User, user_id) def __repr__(self): return f"User('{self.username}', '{self.email}', '{self.image_file}')" diff --git a/flaskblog/posts/__pycache__/__init__.cpython-312.pyc b/flaskblog/posts/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e40f2ef4eafd3179d2976176de4046b3b35893e4 GIT binary patch literal 160 zcmX@j%ge<81T}lsWrFC(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdWv`!+pPQ;*RGOEU zTBKi|UzDxyoS%}a>yw|3V5H?F7H22r0EG(ji%W|2(N- zAo~}>iXdM72VNrPvJJt5CvQUZl9Scb8*{P`)$esxzkXHyrPXQxt~Z}Q#7_vo4@J(F zJq0H|f_ zsLx#t(iTdTI|{pNT8pdxq*GMGIe-&naN6yx=PB#(GRqk6?Bsl-)5|Hl`z#-vgT9*d zYJx|b=%(oO(Rb0_9P&C!R6#vdv@z_#q<8Ll>v#?el?EU28j+ xR9&Szhv>A{)x%ogSCOhuD6V7pWfDS;;l_8E{|fWRaQnAol3VYFe*m}Y`d|0HyAc2Y literal 0 HcmV?d00001 diff --git a/flaskblog/posts/__pycache__/routes.cpython-312.pyc b/flaskblog/posts/__pycache__/routes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..598a3f86026228fe4a7f5ea497cbe7be256a875e GIT binary patch literal 3908 zcmc&$|7#q_6`$SPyWRVuJ6T^M$(O2UN3Fe1tZOSLv0d4QMou6xYQSkB+lJ+IvzG3( zd#BFs)kHaiTnd(`!8Q#@hJgK}j6|#al>Cyvpe;zb1BvDQLusMpw=)g|{8QhXz1@?< zx-R{t12^;L&3m&mZ$9sH?=L+)2?DM5)t^eTLdZXG;06;tvYK1GF`vmYcD;=zZcFb960Nd5bvRn`_%q#@KCDkW|&c-2GbqGS}+Ta;mS2;>es5w zjb1Yg_MEFQgO-?4bX=Jkzo{9v<37uf;~;T5Atu4I+#q#QMvFtu45o^5^Sxj-N@I0GW1I4ZJZqz9`CcvjytvG-KH&&>@%dy4mht(R( z;p^t+3U+SBFeLx$ z=i%F>YQ>EdD0O4Ss)bGn4ThLtctwWqr-}>%Sz>&zFEpHJ>iOzlie{q@()jJ7Pbl*FCHO5#p> zC4JXvDld2DyUNIpGSXDCEv08W{p$LMP36s2X6Q5dVX`s&S|f9MTRGiI9^KBK-qQAR zW9!#K;kHQ!F~u9*&m))< zy!rfaL#&JCjIZsE{yJNN^)SZj>)QHKUC@J5fEPZ@p;iv}3YgUi?8`3&Vjz?Q#tKvc z>jR&4S?nOs1^nfF-}j>uL^0>jy5nZl2j)KhLu~O@##}wrXl(u@#QP1{FCVFnyf!9qE|=qZ>L$HAcwsj>P3Ad0C_LD&NcgB&y>Ub?H_GcJULo;6W`^0$Fhq|CKQ||YXUZh(Uo(x1 z>^v-Cd15!AYexh@_)Zjrv)>Wuo?!Pca^^7^eoT%%Ca3(1w literal 0 HcmV?d00001 diff --git a/flaskblog/posts/routes.py b/flaskblog/posts/routes.py index ba5e407..ae371b3 100644 --- a/flaskblog/posts/routes.py +++ b/flaskblog/posts/routes.py @@ -24,14 +24,14 @@ def new_post(): @posts.route("/post/") def post(post_id): - post = Post.query.get_or_404(post_id) + post = db.get_or_404(Post, post_id) return render_template('post.html', title=post.title, post=post) @posts.route("/post//update", methods=['GET', 'POST']) @login_required def update_post(post_id): - post = Post.query.get_or_404(post_id) + post = db.get_or_404(Post, post_id) if post.author != current_user: abort(403) form = PostForm() @@ -51,7 +51,7 @@ def update_post(post_id): @posts.route("/post//delete", methods=['POST']) @login_required def delete_post(post_id): - post = Post.query.get_or_404(post_id) + post = db.get_or_404(Post, post_id) if post.author != current_user: abort(403) db.session.delete(post) diff --git a/flaskblog/users/__pycache__/__init__.cpython-312.pyc b/flaskblog/users/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68c8cbf10dd53abca7038c8bf59b07beb89f011f GIT binary patch literal 160 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 J-YnDg{R>|!N^k%G literal 0 HcmV?d00001 diff --git a/flaskblog/users/__pycache__/utils.cpython-312.pyc b/flaskblog/users/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df037850ccebb391368feee9b0e9b8c1e114c768 GIT binary patch literal 1854 zcmah}&2JM&6rb_#`eSXAm=FqWlx))v$%Q5=5=Ej`RfIsKq!DU!!9rbaykloK`{B;a z5@OksBT)e-;1sH=Du-Sw5b7V$KLDwhM2VDW8dM}s+@gjPr@mQxV>orBo%fsf-u~vj znfKGByZ)adGtl)C?rQBk!jDE;GFL2cy5Czh;xGGV+1`*l(srH$K43rrpLe|9Lo%_CR*P@;2(6Eu)^s;xefxx(mZ zw$e%Sk=_a+_eg>UvW=41I+=FHeP>`vP&=J?U<4k=6a7H8wKqJ}?@(Etdzl4uYlLx& zJGJR14eO3a%%)Rg<pCfCMFA?tm)rA*5}{Ko zutPuI3!6f#n{o%eZ#L_JC?q(JA|FP)8F7<2Eh4bPWNt=(ysk_yhCZ35Q4kP1y&Te| z>GPpYKAjC415o!YwzS}ZDq@7P>4-ZXn`*9zf($STj7|WtJQsEwrY_no9osHVZj>e; zezsZqsQdNqQ0eaSo#pMJiH)I&hlOq9^oDVIbLjKcOWkwbXs7hv1F}*20Q^Qq*UsEO zvsSrZ`7Ph`T0b-U)ZHAp+MRuVc&vMQH(R``-_h??HnT?e+>WZCe27-6AC3mYEILE_lC7j&4&h!|6B

_XleID4g7>S&$KSBe`YkjZl zGj#)a4coDeAmoN`EfL^!80;CxDK`iV=J*h*;WT8>Jv))_o&lu|{~5JKD`*gAEIXcO zED)fv$&_Bsh@l4I<{NQPd7DCuf2Q(Gg}M;hD^y+p^be$8R)i|Uryoj{;") def user_posts(username): page = request.args.get('page', 1, type=int) - user = User.query.filter_by(username=username).first_or_404() - posts = Post.query.filter_by(author=user)\ - .order_by(Post.date_posted.desc())\ - .paginate(page=page, per_page=5) + user = db.first_or_404(select(User).filter_by(username=username)) + posts = db.paginate(select(Post).filter_by(author=user) + .order_by(Post.date_posted.desc()), page=page, per_page=5) return render_template('user_posts.html', posts=posts, user=user) diff --git a/instance/site.db b/instance/site.db new file mode 100644 index 0000000000000000000000000000000000000000..ae51d820b177b72b1203591ba0f62adf6acf6d9a GIT binary patch literal 20480 zcmeI)&u-H&90zcx?KWDeWS3}1EFowkv8sR8NsP-v@kT|PZCQ%gDGG}_g4(7uE^tDc zIPoBG<3V=f%3JKp5j$PCwPNGE?Q6xUYdemAALZgC%Kly}6r6UWQQsG|MwW@Dkxfbo zAsLw$WS*v!EU3C^(x!!Lelw)>@mpU1Lo)fFv@Y&RYQxpY#7j{?Xqp=PP zLUUOWiXNx0EvNC)a*CC5*_>$(e8D|61P|y7IjGxgvzZQu(LnHlpe}nO2fZ}#IOZeo zij(d-&9>zn&{yn$7Q?_)6WQ8vSaaJ}b;Yw|P3o{M<}ka#_Nl5%I_J#eFWMw-FNs^V zsGORKd(!{PxK;DO?_Y#oor|3J{jhfdGv6Hc{Uh#m!%KMcU50)fe~L!I`5^0ar}!5` z$8PR*7)=P&{1TgKWilr-XBN_nE6)s#goA*8jz9F|lHK#iB1-;yDm1UE_L)NJza1;8 zV_IHl_teFfms!()6S*Nl00Izz00bZa0SG_<0uX=z1R!w31RiUP#3(#81doNvn`&1& zjQRoZ`s1D`y&oQ_`xQAEmnNUj%MA$v5P$##AOHafKmY;|fB*y_0D)U3u#`5k>XyJ{ z{eMdI(_0oG!hrw;AOHafKmY;|fB*y_009WxU4i9vAzAjHzYZ{Y|Nn&OCwCVGkwX9i z5P$##AOHafKmY;|fB*z;j6hw!@c+Pily&7peYz_@;7~1B*H_E6)$&tXsczJ28 Date: Mon, 9 Mar 2026 12:34:22 +0000 Subject: [PATCH 4/4] Add .gitignore to exclude __pycache__ and instance/site.db Co-authored-by: erokemwa <111133254+erokemwa@users.noreply.github.com> --- .gitignore | 6 ++++++ flaskblog/__pycache__/__init__.cpython-311.pyc | Bin 2068 -> 0 bytes flaskblog/__pycache__/__init__.cpython-312.pyc | Bin 1728 -> 0 bytes flaskblog/__pycache__/config.cpython-311.pyc | Bin 902 -> 0 bytes flaskblog/__pycache__/config.cpython-312.pyc | Bin 839 -> 0 bytes flaskblog/__pycache__/models.cpython-311.pyc | Bin 4028 -> 0 bytes flaskblog/__pycache__/models.cpython-312.pyc | Bin 3923 -> 0 bytes .../errors/__pycache__/__init__.cpython-312.pyc | Bin 161 -> 0 bytes .../errors/__pycache__/handlers.cpython-312.pyc | Bin 976 -> 0 bytes .../main/__pycache__/__init__.cpython-312.pyc | Bin 159 -> 0 bytes .../main/__pycache__/routes.cpython-312.pyc | Bin 1389 -> 0 bytes .../posts/__pycache__/__init__.cpython-312.pyc | Bin 160 -> 0 bytes .../posts/__pycache__/forms.cpython-312.pyc | Bin 730 -> 0 bytes .../posts/__pycache__/routes.cpython-312.pyc | Bin 3908 -> 0 bytes .../users/__pycache__/__init__.cpython-311.pyc | Bin 171 -> 0 bytes .../users/__pycache__/__init__.cpython-312.pyc | Bin 160 -> 0 bytes .../users/__pycache__/forms.cpython-312.pyc | Bin 5077 -> 0 bytes .../users/__pycache__/routes.cpython-311.pyc | Bin 8929 -> 0 bytes .../users/__pycache__/routes.cpython-312.pyc | Bin 8204 -> 0 bytes .../users/__pycache__/utils.cpython-312.pyc | Bin 1854 -> 0 bytes instance/site.db | Bin 20480 -> 0 bytes 21 files changed, 6 insertions(+) create mode 100644 .gitignore delete mode 100644 flaskblog/__pycache__/__init__.cpython-311.pyc delete mode 100644 flaskblog/__pycache__/__init__.cpython-312.pyc delete mode 100644 flaskblog/__pycache__/config.cpython-311.pyc delete mode 100644 flaskblog/__pycache__/config.cpython-312.pyc delete mode 100644 flaskblog/__pycache__/models.cpython-311.pyc delete mode 100644 flaskblog/__pycache__/models.cpython-312.pyc delete mode 100644 flaskblog/errors/__pycache__/__init__.cpython-312.pyc delete mode 100644 flaskblog/errors/__pycache__/handlers.cpython-312.pyc delete mode 100644 flaskblog/main/__pycache__/__init__.cpython-312.pyc delete mode 100644 flaskblog/main/__pycache__/routes.cpython-312.pyc delete mode 100644 flaskblog/posts/__pycache__/__init__.cpython-312.pyc delete mode 100644 flaskblog/posts/__pycache__/forms.cpython-312.pyc delete mode 100644 flaskblog/posts/__pycache__/routes.cpython-312.pyc delete mode 100644 flaskblog/users/__pycache__/__init__.cpython-311.pyc delete mode 100644 flaskblog/users/__pycache__/__init__.cpython-312.pyc delete mode 100644 flaskblog/users/__pycache__/forms.cpython-312.pyc delete mode 100644 flaskblog/users/__pycache__/routes.cpython-311.pyc delete mode 100644 flaskblog/users/__pycache__/routes.cpython-312.pyc delete mode 100644 flaskblog/users/__pycache__/utils.cpython-312.pyc delete mode 100644 instance/site.db diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7921090 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.py[cod] +*.pyo +instance/ +*.db +.env diff --git a/flaskblog/__pycache__/__init__.cpython-311.pyc b/flaskblog/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index f039f4184437e2613be0b65c7fe528558b27fecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2068 zcmb7E&1)M+6ra_ORSTS^Hnj*`+kc0%jsP!U*U?MT^lKh)W^ zi-QdtV{ijGxX_Yb3OW8V zzh<*31Y`1_U&!wwLVvPFZ^Vw6!>7PJLMl=P9T`GR5EviRV}@80IWOwih}Ytr$GT)B zY6;HA^`tRW8{)jAr;KzhEua`8;$w*Tq_+>MWk41mkYz!Z7?9=E1j#A+o}-$C)o^bG z_Co{qBP87v)S+#mHmatUQ91oLGcF53{1d%ye+^7(`SZnjy>W*a>#&lpH0XNU0WPy> zwKQ|7Zq{3b!Wu8tHJw>hEwib$?xk04LhXvqtOBf=O{*dF5`jOIl7EMDP{c>bIiYiU zWd)PRAb)bK+Y~m0yT{r+7UQMiB>SSMHxxPIuf{Hesl%@~^x2d8zI|>(7>wiO`r1?b z9A5)Mr}i2B|NE$-iW!hLV{l$kjq4dByU9Q(s*;{F@|&3R34PcY*#tmt2zw`X>F>7@ z8$9(ZEyYt?;!|73U$z8zCU4vuvA@wZhkPi@vJL-=x)Mw4^1{)?dQ*)GhyB$a?ydQ!r$GKvJ?ZD&fL7~ZdXa!W2uoJXb|Sez3| zo>k>YnPti|eNUEYPsd;vyw=x+*;nq=O;v|xqpa_PQA%2x?GUQ0=&PhnHPb0eK_)zq z(twogK!n_R8kB8ESzPXHvj!;f@!|vd7VBWyzT`OXm@QkrYBg33Vmh{5wN!Eu`d>ay zMOGAE6Q$B#4^jJDKAq9q780-rqrUF@R$RQ|{01NousR(+h(Iseo{H7NrAHVHI36ehA?Y$13 z?&4_=Pye^<-3~5wammA_zFq&g&(k?~;SlPBZj{G@IIm}j#bM4XfcAR$`ce#5K_(Q3 zu%mG%N{1qjK*}yKNQDxBj!qLy5C-E&3~|7*OvgY+&#vedD*bkRh@i9--0E3ukB|r9f*P;_-Mk5l8?@NQS#B0 z7bPE^^P=RVNiRx1n)RY|AR%ekt=+%9ecO%sL;3Ft4~h?quH+BDzMJ_z_e0Lj`jc~R jwu_4X`HSp-&QGLW=l; diff --git a/flaskblog/__pycache__/__init__.cpython-312.pyc b/flaskblog/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 2e4a5a7943aeffdae2c9459591fcca0e88b1d7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcma)6&2Jk;6rc6ZuD`z$nuHdVloYjw)<)t(0#%^Y6wx$p1c3t<(rWD;JDbk#n%Q+L zSFz-%NICQp38Zr1j-V2M0sjFUsAP#`6ibzW1Gl1Z>WMeAUON(s!pffcz4w0a?c2A% zou9MW6oPB}ryuQKRD^yPMs&r-;OGYc50Ql|g(63(D~iA|8gtaTDzQqjqt!KuG1Z-T zJub0E6Hc<8lvt-JCtXh~D29moXk5CU0ZW@$S+L?0D`&+?&d5jYSP8HSkp;};gjpo% zmSQEpRO&OmR4M(JAe9uZeLzkBHh|Q|M{6szxk;QJSo*al>vaM^nKiF%yEW4_+k}CQ zYo<*Fqw2XWyL~U+^$GLKRIoU<-Imu>q6T1xfyw{T6YxGn!6X($qeG9zzP_@pY~f?M zW4IOnuP;bMz9<_8ctXAvy9(q$zC@9=m5p+z`?fNz6XYWQsm#f!Pi4;h-_-;Pb6=LCj&Dg&R&(2g@UP$_Zi zUeW)8+5vf|QmOc`m#qe$7t&g*et5n1neqP0Co9)hHm)0=etd%o34oL|DIozmo*(!^ zWR7XOLS%$7kNKrpCUnFThT)nHF$}IZrTTcf#XQIG8e60pFrf(^gBvDn*A5J`)8TqU z>X>JxJ`E?7v8+$|TuW%b0ikjzV&-)N;?Nr%~PP||rOd?2FVL5GTGMwEy?TI z+m%hvAr;njUBW7NJ$AcN^(=A)zSk+3^inYlITWMZ>G4#P5i=lSLTm{t7UA!I2g?8* zrt)7W9#jU^eH`Ci-C6w&pM8wae*4xCzqEh(y+Kv@e$8Kcj7xuDefQ?h%{_I9pF6~< z-SwUIz3LDz9O7b_^v&x-ym*KcyS1I#-trL7{fRG+#P5|6ehtcxS#J*U`ID?ShInZj z6HPox=LV}s&?>rBn&p~&zEB(mi4BmS86IOyoFzOHxO}NsbOG<)?iSktFfp=56FlhSCyeA^!Dv3bE>g5`U}&I`N< z%d^B)$FsVWyvtq%QyhT)IxJ6BMNvj*euOTL(BcSP7@>0`wEVY@^uqnm2eE@>{=vdP rKPbHLRc?^oKX+-69ioN(i&w;c;UJ#Ae`kQ7>gdJgf6%OwmpA+uum*|* diff --git a/flaskblog/__pycache__/config.cpython-311.pyc b/flaskblog/__pycache__/config.cpython-311.pyc deleted file mode 100644 index 7bfa44a340ed2fcccd43f94d4ff564f67c79d8cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 902 zcma)4O>fgc5MA48zM4pcghm1>;s!Y+X@$h8LYTx2Y3#Jv38=oT(yVKx^+&N2BslrN zFQ_U-LP+FPg!&UW@edj)2WzjK;1m>2J+XFdghCIQ)y}>*<2SP!@8@(n2|WAuwYNh7 z@ZBeYiv;KVAps+R0HQP?0~*u;qTd6=T+jeqlD#mQLX-rGkslsy^@6B>FaeqWBwz#- zK)wYstuV)74=`T)R}f-EU65N{lD#lFx`KvY(!>xW$5BL1pfx$UfZ>>@aaECP!zOot^U@2R<*Uy*;Q-dyHv5c~IM@*z@3OW&I4!HDscMSe z?Q7+psrQ>?z-^r51h&D$j>L%}-e)DLRZQbJghp3aAjC-sbrTIW52qk}J?v^hhBj>+ zQ;au#%QP^fDg(RH z0sDkF=kIbe+4H-j!dYRQnq*4TOv%}G3->=Be=o73E;Bis;j1V^y$gx!m@l?t(y^N^p~Am}>2y%_BiD^IBR hAnm8b%@~TJT##`5HH*fmtr_^={qkbJZ%FtZ{s18t$!`Dv diff --git a/flaskblog/__pycache__/config.cpython-312.pyc b/flaskblog/__pycache__/config.cpython-312.pyc deleted file mode 100644 index ae934ddbcb95a0a496b408d0a28e5b92edf9d099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmb7?zi-n(6vxkYn%|LV6B?;VQ8$z!2}~>%l1bf?#7T?of@+3S$hpC(?JJiC6vPmu z{sWn;PVI^+@fYwPuvE%o9U~K4MFyl!oSirznDU0NKHqou-ksjv*Gwh}SbX^M+1%j( z`0kr9B6FB-GH?L`h_iqWc(4l)e+H0n#m{!=+>k3qe)y)P4%jYzNZw75^zQW@^jTz2clVFDm zUE`Fju!)i=6PgM-v&PR^??hns_Y{q$!xNzIAbXpA3or(E{0P$!cj-_X?XAz4P9MbM9Q1b|!`0>&QKC?f$6Y-N}w>UN%3Hz1+H6AJ^U1xOKTT z$vqe~|IK`ClDpw)MV_QXCOMyirFBNP@vYe`ACo+@{vYhGF}V>qj{61@zoIej;ZMLM GsQC?8*0vA; diff --git a/flaskblog/__pycache__/models.cpython-311.pyc b/flaskblog/__pycache__/models.cpython-311.pyc deleted file mode 100644 index d9ae3470c8c778e65847d3d7c82d10ebd2308d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4028 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 diff --git a/flaskblog/__pycache__/models.cpython-312.pyc b/flaskblog/__pycache__/models.cpython-312.pyc deleted file mode 100644 index f5f60cd90bc3d9589d89ab12bd093c1f98e72bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3923 zcmd57)V6|U~-p6U7X*prQa62gW}7H7aei*fJ|`C*edPVm}UVh1TBM5{ejp0v~R zv(-J=W4y}<<>0wsM}TZAyTmJy){!mn37G?soIpZCj$$dMMZ^IvzIkzwP{e`vdS*Jd zu@Bi3CC!^x?^V67dR6axul^Jc2MDzP{PvgnPrZcv9Xpi-!!K`t2goe393hfX(Pdp`RCZaHu_}HimcJsLBunLQES0Sc!e$0yGRMKT&t#^l zXVSJO$t+vKh1niGZNW}_Iq0Z5HF5s&7ags)GAY)|bLlkWtz#K}yY*s*vgUU($(PKC zp_#XbVZW^@&>3b+HgEflj7C*7#;d`S0zdO8kOKKfFg)E|?4CYXJon+rUw9UJe;#@g zY+jR^w?R!3NGh$e+wEV&YGw%|aehHNS)icTTF#zvEqfe_n^6sylVGM z>`_m}lT@J6vh3ax<&`aY53uBaWlJyDBvIe8;;t$1%9i}@nxy4`>!qM$r+y!A1ZfET z8Fs%IrcqjTM~GLk2#xHB%xYSFhs100HL*iH1a^iVK#*j)p3-<;z0LBQuYvF~go-zp z*5Au9TS?~(LmM{O<~V33f|QMDIm2oh%_bj+ybffxuPoa<1HA`ANhrOWF)iDx<*Zv7 z4)%P*TH-cmBerB{6Zyo>7(yg)A`N2|yWDvPf!tuu2-b5xnq9<*c=2BVH7Ihl) z*pkVN5j)7nvpQ#{YO;ham?rM$`0?XBg7YE}%_=B?TAAA{J@FbwcFP{=VHj$*0x6Kc zhH8KE{ik)Y$91vArpI+1PePqj!bYTedaO7$=U-_5q~qg`wYo1qi8QS#O}qx??1C=W zp??O=XLhLICzHZ{E}ev=vFxc_N-E(oyf0dAh>zmM+S5kS5qp}20OYhu7YGK)31Ybr za*}XJOgBlMjFEBAO)@6L%Fem)7>dx+?(>U&4=%z;e%BG!IY;=v3Ur3~T_6Cc`<>#J z=<(NY)Yi==?Ec0~UjkAf8#Q%v(*5v!c;*KSbg}(c-4D7K zn^x#*`|r>H=KNZB-yhr7A_Hs6fD;S@F@ZP1v{=*z)3^>*wF9aOSukfHA5zu#a+*=n zlv1zvV#dg&(zfqv+G22@_!q%|?H#nZo=)=9(BWT0(t%$d<}E#I z%UJ+DljD-@kZFM;kzxRVlz#>1b^&=noFzINcW$3U!k{r90l7mq{L!iCbVIRWrfs(S zZuesQy8o@hg^fu46rau)^K%Vz(fbYa4GV4ejxAcNY&~+RaAhNOcDA>JLyf$}v@ycrZdgvR4o^45#o3|9=jeaV6<>qYf5W3V?$!@!9qiU)++20=v@MAD+h#vyFNr7DEp99Jfz9yVnvqh)7-~=xYK9b9zfz`pOM*da&W;+n55M)cY3}y$huvamV80DRy+JO{K1Wkl-a!Umy znsEpsMFk`R^MRSkh4w}1>8Z}gr#jafyH=xXkuz(`nKC#;c{dE_Uq^zQDdmK-$elxi zkbY_fS#f~(@#x2_ib%6!13_EZ+!=fskq94SaoU7hjq)OS{h(6lQUa#+)zz;ZgB~Basr4gJ5P;LmE?Dy9VN$N9=5-*D5C!2GIrfZP z2KqPB_>6pE%S*(_Q{l*C;mD_=AhZBViAT4Pd#=<9*MzCI>CR&3%+2Qnd(Ybx;cQ9t KF9NLNf&T((Zylfj diff --git a/flaskblog/errors/__pycache__/__init__.cpython-312.pyc b/flaskblog/errors/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 237597da8eac4c1c8db251bb42854d0e5750316e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmX@j%ge<81T}lsWrFC(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)ELDpPQ;*RGOEU zTBKi|UzDxyoS%}a>yw|3V5H?F7H22r0EJSEit>w!_2c6+^D;}~}M9JxTcCW?~Aouf-dmDxRWrhy`2rF%C!`}WP7*>9D~B*FFZ>zAEF zO2{v{xm@}v$j&f0CY*5U5uY}x&zg)9Mg-+dXkC``n!3>6l`k)k|6J>$vRqvMM7nuM zn#MKkQo%N^uqUozPZVtP3ftVbYLf$5sm4<4rPme_>;y?#1rcxoP9prsa}$vo0w9EV zaD)!GMlO{>4N-pCV}xUp6la_k71=g>O={Z4hia~3FV~kBTZ!+1ftNZI8%XHP^_StD+{D5-fyRwFUCs$IcpX5BD+$ z6$y6{27hnG#!9`O+nAQZH`zcY+(*)sBo;O{YF1iO^9A|7>Wxyyw|3V5H?F7H22r0EKcBGxPN0<1_OzOXB183Mzkb*yQG?l;)(` X6|n-1V+7)25aS~=BO_xGGmr%UM0O_n diff --git a/flaskblog/main/__pycache__/routes.cpython-312.pyc b/flaskblog/main/__pycache__/routes.cpython-312.pyc deleted file mode 100644 index e9be0c7314f6df0e1f30c40c046e7971ad06d461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1389 zcmZ`&&1(}u6rb6zd~DkK)f!vH>P2#B;=!U|DAf1`N)hz5sA1a~)1)@9md?fjENYfBIOA zX$bw2M!1YF*!>FNH6n;$5Bb=^zUFAY?&w(hG|%u&$5dGNEI;Bz6gIr5A9G?DX^85? zr14d#FPCFeyL7CB|J{kTiaYi`_mS|PM4zJ7ZfbZs1N&sfdRg&)mNQtlQ;98EBc+QW zM$3eGVK;77AjI(9VtEf|mdwn2 z#iw)KzSLpCuEVn%g)e)Jc<-*%<)Y^RP%{6uI+$Rhaal#JroJkx!Fq&vtb-s=DHvLv zlMjS89}H2*L+N1X>7V_m(xJXLM5W;n_0N#^u<9}*M$_!|hxySkmRQTU841>I%?zuR z%ammnD{LW?s}MSIvr_1T2c8=&%zEIGLy%#W8mB?JS{H_Fn~g##DN}F{wg&oRp~T^r z*%#Rjd#q)Ttz3OK-OR1oV{Q9v-M=dO104-S=cNSXsZv-V(Y6Oo1fD!Ee zVhDa_qQO9Q2N7g3W|rbAU(qehX<19M&WqfmDXggafY=xmV)FkLrV3}{fE9H^02=5w zG?sn8xNe_cGtR5%nbeRl6<4Z;l8;HfMLc-ux!&A7_3KJ75$jRf(epshPWwQ=7jz}f z=gY27^LZxu6{ccd@vXXHC&AlqbT68PZ|Albh(oCQ5Fi zQ$HgIUX83I+mX`^W7|TS^=$O<==0o@li#qZ;I%eBvZLvEa#u&%u-p!A8(?lH!r<#| QJiMb}d_i80D5QG%3k>=q*#H0l diff --git a/flaskblog/posts/__pycache__/__init__.cpython-312.pyc b/flaskblog/posts/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index e40f2ef4eafd3179d2976176de4046b3b35893e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmX@j%ge<81T}lsWrFC(AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdWv`!+pPQ;*RGOEU zTBKi|UzDxyoS%}a>yw|3V5H?F7H22r0EG(ji%W|2(N- zAo~}>iXdM72VNrPvJJt5CvQUZl9Scb8*{P`)$esxzkXHyrPXQxt~Z}Q#7_vo4@J(F zJq0H|f_ zsLx#t(iTdTI|{pNT8pdxq*GMGIe-&naN6yx=PB#(GRqk6?Bsl-)5|Hl`z#-vgT9*d zYJx|b=%(oO(Rb0_9P&C!R6#vdv@z_#q<8Ll>v#?el?EU28j+ xR9&Szhv>A{)x%ogSCOhuD6V7pWfDS;;l_8E{|fWRaQnAol3VYFe*m}Y`d|0HyAc2Y diff --git a/flaskblog/posts/__pycache__/routes.cpython-312.pyc b/flaskblog/posts/__pycache__/routes.cpython-312.pyc deleted file mode 100644 index 598a3f86026228fe4a7f5ea497cbe7be256a875e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3908 zcmc&$|7#q_6`$SPyWRVuJ6T^M$(O2UN3Fe1tZOSLv0d4QMou6xYQSkB+lJ+IvzG3( zd#BFs)kHaiTnd(`!8Q#@hJgK}j6|#al>Cyvpe;zb1BvDQLusMpw=)g|{8QhXz1@?< zx-R{t12^;L&3m&mZ$9sH?=L+)2?DM5)t^eTLdZXG;06;tvYK1GF`vmYcD;=zZcFb960Nd5bvRn`_%q#@KCDkW|&c-2GbqGS}+Ta;mS2;>es5w zjb1Yg_MEFQgO-?4bX=Jkzo{9v<37uf;~;T5Atu4I+#q#QMvFtu45o^5^Sxj-N@I0GW1I4ZJZqz9`CcvjytvG-KH&&>@%dy4mht(R( z;p^t+3U+SBFeLx$ z=i%F>YQ>EdD0O4Ss)bGn4ThLtctwWqr-}>%Sz>&zFEpHJ>iOzlie{q@()jJ7Pbl*FCHO5#p> zC4JXvDld2DyUNIpGSXDCEv08W{p$LMP36s2X6Q5dVX`s&S|f9MTRGiI9^KBK-qQAR zW9!#K;kHQ!F~u9*&m))< zy!rfaL#&JCjIZsE{yJNN^)SZj>)QHKUC@J5fEPZ@p;iv}3YgUi?8`3&Vjz?Q#tKvc z>jR&4S?nOs1^nfF-}j>uL^0>jy5nZl2j)KhLu~O@##}wrXl(u@#QP1{FCVFnyf!9qE|=qZ>L$HAcwsj>P3Ad0C_LD&NcgB&y>Ub?H_GcJULo;6W`^0$Fhq|CKQ||YXUZh(Uo(x1 z>^v-Cd15!AYexh@_)Zjrv)>Wuo?!Pca^^7^eoT%%Ca3(1w diff --git a/flaskblog/users/__pycache__/__init__.cpython-311.pyc b/flaskblog/users/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 53ea301868eaca99a2464d07a851497299aacb98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmZ3^%ge<80ta^|gQ&+K0tOhNjL&R9#&m`hhF}IwM!%H|MNB~cXOQGCJN?k&)S_bj zV&jq$!@TrjeV6>?(%jU%l45=5{FGE(pZs+Fw4B7^?4%qZs}!s@K0Y%qvm`!Vub}c5 khfQvNN@-52T@fqLIFN2X#0(Sz0KTUv?*IS* diff --git a/flaskblog/users/__pycache__/__init__.cpython-312.pyc b/flaskblog/users/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 68c8cbf10dd53abca7038c8bf59b07beb89f011f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 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 J-YnDg{R>|!N^k%G diff --git a/flaskblog/users/__pycache__/utils.cpython-312.pyc b/flaskblog/users/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index df037850ccebb391368feee9b0e9b8c1e114c768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1854 zcmah}&2JM&6rb_#`eSXAm=FqWlx))v$%Q5=5=Ej`RfIsKq!DU!!9rbaykloK`{B;a z5@OksBT)e-;1sH=Du-Sw5b7V$KLDwhM2VDW8dM}s+@gjPr@mQxV>orBo%fsf-u~vj znfKGByZ)adGtl)C?rQBk!jDE;GFL2cy5Czh;xGGV+1`*l(srH$K43rrpLe|9Lo%_CR*P@;2(6Eu)^s;xefxx(mZ zw$e%Sk=_a+_eg>UvW=41I+=FHeP>`vP&=J?U<4k=6a7H8wKqJ}?@(Etdzl4uYlLx& zJGJR14eO3a%%)Rg<pCfCMFA?tm)rA*5}{Ko zutPuI3!6f#n{o%eZ#L_JC?q(JA|FP)8F7<2Eh4bPWNt=(ysk_yhCZ35Q4kP1y&Te| z>GPpYKAjC415o!YwzS}ZDq@7P>4-ZXn`*9zf($STj7|WtJQsEwrY_no9osHVZj>e; zezsZqsQdNqQ0eaSo#pMJiH)I&hlOq9^oDVIbLjKcOWkwbXs7hv1F}*20Q^Qq*UsEO zvsSrZ`7Ph`T0b-U)ZHAp+MRuVc&vMQH(R``-_h??HnT?e+>WZCe27-6AC3mYEILE_lC7j&4&h!|6B

_XleID4g7>S&$KSBe`YkjZl zGj#)a4coDeAmoN`EfL^!80;CxDK`iV=J*h*;WT8>Jv))_o&lu|{~5JKD`*gAEIXcO zED)fv$&_Bsh@l4I<{NQPd7DCuf2Q(Gg}M;hD^y+p^be$8R)i|Uryoj{;@mpU1Lo)fFv@Y&RYQxpY#7j{?Xqp=PP zLUUOWiXNx0EvNC)a*CC5*_>$(e8D|61P|y7IjGxgvzZQu(LnHlpe}nO2fZ}#IOZeo zij(d-&9>zn&{yn$7Q?_)6WQ8vSaaJ}b;Yw|P3o{M<}ka#_Nl5%I_J#eFWMw-FNs^V zsGORKd(!{PxK;DO?_Y#oor|3J{jhfdGv6Hc{Uh#m!%KMcU50)fe~L!I`5^0ar}!5` z$8PR*7)=P&{1TgKWilr-XBN_nE6)s#goA*8jz9F|lHK#iB1-;yDm1UE_L)NJza1;8 zV_IHl_teFfms!()6S*Nl00Izz00bZa0SG_<0uX=z1R!w31RiUP#3(#81doNvn`&1& zjQRoZ`s1D`y&oQ_`xQAEmnNUj%MA$v5P$##AOHafKmY;|fB*y_0D)U3u#`5k>XyJ{ z{eMdI(_0oG!hrw;AOHafKmY;|fB*y_009WxU4i9vAzAjHzYZ{Y|Nn&OCwCVGkwX9i z5P$##AOHafKmY;|fB*z;j6hw!@c+Pily&7peYz_@;7~1B*H_E6)$&tXsczJ28