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
zcmcf^O>7hCb!I%a$M)Ehn4iE>wAtmyu{Mx21QKYVG!VirO@K|>3agSe@qF=47>~W*
zj0;J_$_EY+ibPta!l*%Vr4d)|cz$lEuYD|tvF)a2ujm>c>
z&guI!Uye`lPM_EOxj-tA3#Nk3*slq>P%6YSBsk~ng=;E-yUb&FKgEI5QW1_BXO!Sw
zMiEG0PHf^y=rIp`@VG4%b@)QS7v9eI*auwjY;nbu$P|+lH*uI`Z9$PuVyZa;{g0>N
zt$Zn6^*VO}Id?2!yn%7`Q<9n^S$rX!IE;O!J3&*66#K&lGcTL8I?N
zULnVRn$PylYO-;225#Ax1C(YQFU;E^EiWr+T#I(VLIOO-4*-;y|3swaGxyKkJNM{N
zIs348t+y6QSdm1PPrL#;lR?mIC=zV1mfJq8gy
zZHXxr@Nzq&mbet3S3C-<@EiU%ixA$sLf`{d2)%cO_A~HGa6@Q2L-@Tbgxb!)Z-m>V
z06qe8YWao|QAChcv~8EDvP+TfvZ)x6l#X}&tV8L%%cMG$I2h4xiXJ)r1T4Nl)tpS{
z(>KZd=59b<0=o|sbro#O7WAT~$uk<+ybY9vh(c!NqGleSD`cN=v9$4IE37-*B3EezgeDih6>gDvYj`T_6?>&+hMqZX>ILEPlXiG&?8290)9EW?
zH)ssl7yLzY_SkST0F+idp}3$O$mI1|HEa8oVyKW`bm`-5*ge2%oCi>1z7zNU?$=gVa=q8;
z8hU=9CXQL+*b-ZpI_}@PcdHz#41POQ?fR@H^;%NzzoZlYlukSwuSp}8G*T5tXeTV<
z32ZIp`~xWet8%;|zQcx?MRsT9v~jP1&lGdpcZ0dbni!O}+S>?H
zY38mb$$2kw-gAHweUtPM&>Zb0gY+==QD5{30Nao8&v2ZCMi7gx2m10mDxjYs3ia+)
zRs2_=``LMqwz?c`y-UE$89xUAA$7aLYT~dZ4ll6{&KKHO-`n*d``c`p{6=5ZD>tmY
zeM{p@8K?gtqMnt5G?(N1814PaX;aF
z9(`i;bewG%I*{F2a0=+T?f0&ev>b42+;Th^`yK@yCs+vJ)p`S!wx8r=RkOnoU9u!St7-(ILlSmzQIc7t`sli?ZfY
zDB6l0xRBS1Io%F^uA2lhJWV**DU+&tmJY&zomh4$lIl=KtEIihoK*RU`IN8vG|AnsD@R}aOP;>-J223F6k
z4^~6{wNSqm>MxDfrF~0udA_{A9ADdC8F+Yb?clokoK&TYHR+-yT`XO$i+h$vmp@-o
zS7uh#iVuxuefs%WRUEB}qn0>Y8mo7Hv=U$4Up`$PSUX+$^5NOFv(HYxI9BbvR_nZG
zbzUodvBNIU_Ee>znlxldL%7EQ*yC#X()#7+gH`c-O+0Uj=SyP^p7Wn=FkT=qfp~)p
z_!A8Vz)K$t@BY$7bg=%bY=hYux{^ZqWZ-GFrfe+c|G
zOb^1eX}SyGrUKv+#lntaJX&z7$K$Hvi5Ix96EAw8^8xX~_sG8$AFvAONzegY{{#T2
z1pKCIYQ&CUS)N9xAqpJ=(zc-Bc*{Z*Cm(OdgJa0j4FKc82*iVM6|$8yvd&vQ!)_Ph
zR{EMu#_4Hbre_fR2mzW7#S(>{MSwm|&mkBGU<()FIQVry@uE=vm>E5Pi(bY7KTU3%
zb`Y|-33am_zLci~z8$WRc_#xnr==HgDa@R%d!vXQIUj|N@fQFe;NCkpZ?P(#tcfQr
z@g%rz{J_emtI6`{+LdQVUhMn($JO}tTKu{dzh1ghk9950EURU1Ex3N98tbpc`mI=h
zY5XldT$!khemn6jSvx#p9Ugg6ti~p4u?Z_SQ5tXXEV}Nyz`YS(W-=+cq7hZoP-GqA
zWWH!n9!R#|`G9bXolxsz!j(AY8av`3)6RDk#jI^dFiQYJR<=GcZ2ts)d$@7Yk)Btg
zZ-fyyhM%L;umGkfqXD4dV_CM&9ISf(b!NEg{qMw+s4_eJ>&z!r@4pdXILTr^g0#!_
xfSlMKh-BP>7Dm|1Vkp}gE)6UXuiSX)P`}^KGa#@a^mhSHc!~J$cOW_%`7dh2b!q?r
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