From 41b3e5bb917b2d894330cca4f3e6fae19bd35e82 Mon Sep 17 00:00:00 2001 From: grey-cat-1908 <61203964+grey-cat-1908@users.noreply.github.com> Date: Sat, 10 Aug 2024 17:38:54 +0000 Subject: [PATCH] some base for form (text question) --- database/form.py | 13 +++++++++++++ database/user.py | 1 + models/form.py | 21 +++++++++++++++++++++ requirements.txt | Bin 49690 -> 24555 bytes 4 files changed, 35 insertions(+) create mode 100644 database/form.py create mode 100644 models/form.py diff --git a/database/form.py b/database/form.py new file mode 100644 index 0000000..81fe25b --- /dev/null +++ b/database/form.py @@ -0,0 +1,13 @@ +from sqlalchemy import JSON +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from database import Base, User + + +class Form(Base): + __tablename__ = "forms" + + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] + owner: Mapped[User] = relationship(User, cascade="all, delete") + data: Mapped[dict] = mapped_column(JSON) diff --git a/database/user.py b/database/user.py index 62a7914..3fabae2 100644 --- a/database/user.py +++ b/database/user.py @@ -5,6 +5,7 @@ from database import Base class User(Base): __tablename__ = "users" + id: Mapped[int] = mapped_column(primary_key=True) username: Mapped[str] = mapped_column(unique=True) password: Mapped[str] diff --git a/models/form.py b/models/form.py new file mode 100644 index 0000000..9f207d9 --- /dev/null +++ b/models/form.py @@ -0,0 +1,21 @@ +from enum import Enum, auto + +from pydantic import Field + +from models import BaseModel + + +class QuestionType(Enum): + text = auto() + + +class BaseQuestion(BaseModel): + question_type: QuestionType + label: str = Field(min_length=1) + description: str | None = Field(None, min_length=1) + + +class TextQuestion(BaseQuestion): + question_type = QuestionType.text + min_length: int | None = None + max_length: int | None = None diff --git a/requirements.txt b/requirements.txt index 4a5088f192feaea27f7b9270c2cb3a2d185c82c2..7f2629f0b1d2091e96100863217332eeb47aae93 100644 GIT binary patch literal 24555 zcmb{4OV1uTb|3J)K84V$WYI#gE@V{_1qhH$7WUQ~0|OSxnpV;+bz1U_``i0>-hpkv z;4{D&8Z<`Id#R_2JUr)rIj8F9&tJaPZ=?VC?e|~D*N-2U59P!1{=dKf_4jW-efj){ zKaJnMe){tH{r~*<{)g>DNpZkCO=KpyA!~S9U;r&0pd+&cg{`gb<`qRg+Kh^cf z|1CYsI?j9F>iOJv+n#MKeSel`zn^xdE#2+j$GFFN?$>>eqm|-^YHG*1)?=Gqv_8*L z+H(1RUCz6m?P=}4+Iif|@uXU>y4L)xTUpOuuBEKov2XiwZu{QGdA+NjfB*F5$Z9F*00lD^$5CD@3xnvZez=PUvC?I zU(@Gx(RN+A9a~%WQkHU^%dw4Awxw_Tum*SDkJ_)J=55VK9nD%-3$gX{9A$pdWIIxS zavJV=5h(j!TXADOkGSUATN?NJ;WcP_{D@z+)SjdQfaKGnP&W4ZTZZ|Aj-!*$ltiu<&ScWQT$@3xjpt;rord}Dgi ztyI64?(2EZv!9Y+-|Rx)iZj*9*q$*;IkJ?Oid%ccS}JSZ%YIhNJiX{HEacJqNba(v zHQ!r~O*mU!gyQ1d?vMCb$8(PCQ^fC?@6r$d8s~gX54-T#_UFlCP0w|2SF4u`*zv6% zPwQ>e=g1z}$!MF?IMU(UX}e{^`JEoJbMHqwdKt(1>@B6*>$b{m7NgmM5l?l~c~J;lrZ!Lxin&R+08{v?@<6YRcNhhloi_ zo?rB~0DFE?K4k5uXUE{o+q34=Gv_RrN-OzZTUq;-^L<-?Ij&~EBLlv;sEYB3>ZhMQ zJ+eiP+;K`LV->)v<(k(09!{M!^Hc#llG@kTGJIiv(N=rf*1g}-@3YzS*4L%%mO1Tm z)95zDf!q6j_U@C<`jlhby-LhmYtxJ7C8c|jhp+R@_1;}xps)9HDdNXc9NfCy`yxAy zZQm~WW?6ErkCZH6=Ly9V)-8{FPj?n3j|ET_&w7ZT^>)~*WR=9up4-*7_N3d-)P4$r z-243T^CJwSa$bJ3r%U}9p6goP3TE5nl6xy^XY2X0U0Z)z%_%3z_K}FDk6)yRWeEPo z6I#HM%GL6^!YW%&`{_g;>Y`?0-!W^DJKmSyun_a)fMv)qcJ zN;to$!XWoNN#T$JuW_yClMV^4?x%RQAj(O0koUAcLbfC~-dpQW5{Sn_EMp?j+BaD}#jPN>{g1!qsP$d@k2H=DT0>(c~W(XX)y%1uOopW_Edg z8OxO=#-Pxa@#R95M6 zNlrh=moDgboDHU(ZdARj*s738?rPPYPpENoPV44$f>z@YoLSj-+#{5wX}L9TPO)pBJ-_IkR!LV*>moj_ z^*n|RP(@a_SmAPGskTjK$+Wm?A`i2ZFzC09d4=)9)K-K4nOIH$uW+2u@h$& z^!473avflVYO){Cx!oZ4azuilbg-;40l;_t7G!^zrOR-`8u)Yj(m! ziz0I6zUS_F<{QMPZn3RJWmvj3F^w&qaN{ z<8-F$M&MFl9U&@lLYl2T4!<*H4WLSeyxeng)6YE}Qpa;kRQHnI_okGTyx~&mj3s$$ zQpO<6XN3{g1XCSQ%nq#N7Z+_g?(`hb*86teihkK0vg0ZxP7eg+!}h${Bv@^zf2rYy zu}#l)&FKh`_l&FUu=sivcNzy>b+w$AXxjk+r7=iJ!t8+ZdSY}*5t6MSx9OUSQsAJu z*cnLQ1^WqClyu{8`%xm>j$?D9@;p8z9CE_$7Qd5^7rQUwtrJ92wg9_!=2DO970?9r zL|B}#>sAmFMABjNpwp@zbOZp+%ZW{q=T<+w+asCDUCLSto62(DJ>BJ8t)lV@O{(@d z{;{2y;Dy@1s8Mq8@I8b{$&lsG1LX(9J@vg*fKTSG(2wles)U&AcRsJPyUlW;-Y5>za;i=N zFV+_)-EYt<`i>go2e7k~m+Yp1BvFiln}tfyN^22~7;jPSVIufiXufM-e*W@X{iOz> z-9P02NNPJvM#A7YuOqu9YyWx`!0PhcfoKvz7m1~ z;_qm+Bru)>asgt{jQsAYU%%B~KgD_|9N(4UZ@c6wb_-G)c;>Jn9`FR{+AiQbAO@Ll zlAhiCODPmHpfUF1AWR>)gNJuJf?#No<=21R=3i?2>C@-&w$HWx)_%(S5AVPH_I~;U zzy8|t{_}YK1OI&HKm4@|)L;5v`}Y6(yZ`;yzWwJ`Fr2~uQM6)-!;ma z5GfR;dZ4Gs@jDRI&ShQlDeY1iB=b5DTL1H?H4AWst5k-$!x%?DCAQI_WWr$OXxRu%y zI_~R`j23c>5~OMi$%_*8;!dTjQo(D;>?@s2C3bKvThwfZ`L@in9{L{sgU+H$p>X;50=9|F-x zlD9N3o1F#Vm(=GMB|cp$jikDE`vvVNbzs?As38!`?LuO;(Q;7tl`ywR1LIREyy+mYVs1=G{4g)7r%P-8wn#7Cs1LFx-XGSjbk(CM!X%H(u;xg7xop8T%%j&r1$N z$(rq&gX~?h-3cBWRu;LBTjNw+f)a%dX^yqyBd<^!a_Rf+2327)%yT2!^Rq9PB0T7g zK(UUILjYIk$|pTs5;UelAffj%C05BPlgBEs1A81V$e;jq8+)*DFjZKE76ZC)TzpLx zse}gR4CpV}k#a6uM}_qGL+PJWtba>FScunqOmZ&IM9yHC-Q z(YO&O4o%yAnp$w9KIF+=EyTTop3|5}D(PW|;IRO{)!H-IJin+yx7+GtxAWI3v`6qa zYO1&byF`{E6Uhs>gb^jGDyE3oA>TgpW9n3fXvjZMi^U5~gcwsOzczSxoW!XFMps9H zoO_!3n@hM6I9G>adZ&t`B18+M*-C1KsO<4jUE~c(e6SP1k(PS~2cynd*s|b2O{lNr;*KrA;d}v>$^1??Vq6;Z_g8mkiYyoqGy!cah z+(wlLr+0etVhOauB~&A3v=wy-k2|tcqxD%g^2mcxs2@#yT*O;CtgBMt=Z}xi3Y42~ z_F&f(ql%Vdrv%yy&~wCAh#<@f49Mq7JLDR;rQLYSHYeEJBUnRnU}IJXhYx~lIHj0C z+v&4J$IFdjAY@CDz81_+sr58dOpmH%McrbHI^$s_TiS-lIOdeF?A< zl$x3cxpfMoLblDQ_iHJV*{@%ZF?r-=JP zpCPb^2|{ax7u*U6vPvnH3}W30o0e=KwWd=(Y4NKUe7q3NC?_#zXR;ISIry zEe@8`zE@2Xk#Il=&`%zhf*s>Azo@2*bnu79>Sl|BfUy@6LJ7sQFG%W^Q4ASN$)-9D zODUuPPKb!LJ>4i5RiXU`A@sqaSQ2bTo)l-5#0;QQogZE{1bvXn86|X58kodA*xK`p zMge9=Ls8*@6HhIz-%#X5q51-;^CzsbDtPbYba$b~Vl%AeXUbi@&L-EY62F6dLH- zt_MVK`@^t4ZX!P39q!GGi*ih0T9kdMNcF;!BFIo@06;tz z#@5X*S~jjU-UX>hLjGfN(P-U!+C#0qqHlm9cy>vJMFyvdy`usAo4A`_l%c}zg1eCW z#e#Zt+#c1FyBN(jkHkm*R2Tz1u4o|Mq83sVN!%|k%AD09MdW-KG|nFMwPJoFim9Fe z`Ac}N>|hcz7~OFBureH0SYTdGx{|EfC|uv=)|0Vm&xuR1QPJRJhn-U^Ot{u2Wv4hT zuIs>n!yx7SPTv@$O1CIe;#y8(aWOiHwv3Sriq@_Y(zv!17vuwT!+E#JW=P!Ai}EQn z^hD!@v_>qfJ2NCm5Y6K_RYSXV2)Te->a6mFo)cJ2F#YsNy>PaIuhU$ z0-=r*-bQ#dLV~hj)twU=m^YZOllQ;Rci)Ojcw|Ye@nL{J(C8D9GZd(sGY|c`6z2m3 zLLkX^4gxT@s1`J)>7DYEFC3%@nkV^aDfwXnf;@sex;z|7-Z_r?JQ$JI9BI+12fAGN zMdyRKcR(2K>|UKYGM%f1!)BEQle_i}Ee5(AoOY*F!jh}Hk5hcN?cGl)y~(QIw?8gc zj3G!@V907#(+ekh>|~L8WZytN7q5$DqumP|=UU?aQBcsoYhLA|HHQ3ya66U^-w@B) zya!Aa-U`+o=Bv7-3(z`}H>fGFK5$Zlj=uZUKhxB=@9H2}-?v7;{w!IwOnfo!3d{f+ zU5X(q8x}a#ZqV@H_xdY@2ZaXtdy&yqJCKbmr+I~0iXve%2?L7M3j{Ozm3o05!NTz! zK2R5#jPEh^x4irH_g+7L`_z7HUw#`OKdv8E%K3lNN0@4?+o9u;mKgA1wTF<37DXK_ zGDFj8z#DWq^%v zbsafmNtav!MlIF+)IkpAh)zjAOj)f~zQd-D7SU6T$TuNEZrmEuFr0mnafeglYc$C@ zh$9zb<5Wtrtec}s9v2N~tt27}O|n;>1-_7n6A0zRX-NuTBW%&h>EpAnofJNspO>u} z%ivGgn8am5F$PL{fdz>ck^DxW#_J%7MHZ}MO2$Ox4KXL}-BwZ5KA_%0V?087( z;qANv#<(92oiD@*B!k-E3GE6rwt$$6g5ey=ZN5Ub(&j?5*Mvrbcx%mkpQ}EE26hYWF~B8o|uEGmvjTMj3UGpC~>r*3|N8T(bWfC#@+D%ZVo5Ypy$_ z8tp8^N63|kr7}nVNVfP}$m>*sIW5A`z!L!K3>7FcI3f$Tp!}gt`nN_HH9VHcl2Wo% zO<6#nA*BDz?-cw+NVM)i8Ulr1Kje#+GzMuo@6FmqOkhlUiu2_BIA@J$^O?O{D zN390WgN09|)%@!(Z+nUN~QHEsK679ysdjp`jBP(BcMF*1Pf6B$lVR^BpL_Ix5Xw;i!b>M{%I;ADnF=Wd(rNXmoW>(_t zq^{X;$|xMF|Gb>o^=LOkqjf$K|1@rgEeinRpUw|;{?>$zwgSQn4@CbCPXw0oGa%YD z_&3E^giEDbqcz%r((+{3w$VYr2?+B?vxu(~!yN)Kh!6ojXaZ0Jre%iuiZqw5KleD;5MWMhcMOwqG1)%PEIV^N>{uL#pBEZ6zva4%^ z(4j4hU9_T1z{MO)FbiYmhR74$N|+Awnn0=AlLE-xSY%`XC)qN_jAT66-b3 z{Lt9WTUp(Ws)C`0*$`qsXhJ5pLxbfi+bf9Zx=bPQYC|K*NbE06a6AjedZLlaS>g+z zFltHH$;|h~lAJfqs)j=p{@WaaptwkV(Zb%z7xOiR$i$n|tqeOs(XB&q1C5ioV53|b z4f%Bxleg&yO>SXEMb!o*U)W13;;E04_I(Ku7@Vy@=!(wU4Oq7o>c7znoh+CKnLHS1 zKz0qPsOgI}RfByj2J5KUV14NfZuOew>v!b<_|5+?aDzt3B0rOabTq8j&Cluk9s)Y3 z32sG~)fGU|gE9P6teDp@EVVlQ)K|eTDgZjjgWPM|1nzuI?WkSaVI%Qr1zZj7A0!5nOl6F@|RXBgp5f2qDbsL8>e)3kd88cPb7$Cnd78$sW4n zyqq|ZI0)%XrP@MIL}voCQN?_QKA*QSEYKGxi}4FSto{aihqOu%pQk=D6hTz$6pIy) z;r8;>tfv}E!xFHr?cB>Zv|I8b#_ZF%TW&PwLgtSj1{{MzYN}dPsTCdH&N1%7{|YfV zU=(+RZlO2;$AJoW;Uq1re~snRkpU5#Wt;TOY38fi zm}!^F3_)*xQ38SfL~=E_p}6y!RMM!J*rH}*(!Dvm0qB$UqpI@Zf(fg7KJ|DJQfyhJ zJ^J-%{oG0sB@6NB1Y=Aml5VtQAyO2@kVt{SC^7T`9epoAuPTI+BZdK-h-j2>B$BTN zvughUNyvG+1%s_xV~Y{G`^{LYWULpub-=g9O(0yJGocimB*#Vv5%_IX<%}!?pJ@K! z*}KtT##`VQ*26k~e72!BG6JenM*kNnwp+5aapnjVfaoltZt`A5Eb~K;trku<3~AFE zrW+-P^uX?#{Z|Vm&og>%T_!Pk11u6LF4CL(4rU0-MUN1=lIePC`#ejDLn%k4aJ>CR zmj*x!{#GtBlZYu6%}R1E#mDC_VYWq^R@XKti02_CZM>PMW|hEaGBWz2@BGAa-Z`gO??K$IpuI@WNOVn8dkzYh{@DwWsD7{uEhlIU-lZdCAD z5YhZu3=xgD&V3yfkpV&ne4D4zPk`A+Z;s%M$`&BSXWpZ)2j5nDK*ShJm|s*207FhPr%I0MvXQvd_qW3m*4vTLhrC?I&@+d0!~4s%*#a9){O%sPuEnZDf8TM zVF8Ov09+msmME|$0`SLh2_xG*hYucO({{{Xpn5>_h1yd&D@r+cg3zIs1f!RWM3V)heibRg-2%mUb$wV^WkyH?$$-=^%?qb3?pcTI<58+8pwF_V`{L@c0h3WhZYxWrzel{B%R7fM@(!* ze=6Y*<>!wBuG)n3S%)6#38x_?AE7XCkNA#tWGkxGLPBci3YxgWFQ^xi2`_}X?kk5W zj_7NEwC8;P#>3wHHBAuF%Z{GllIBrJKB4TmJ*)&4w|&NiFzUbvJ}4%cK;ikFD({@R z7|C;krZr+9z`k!-jXz=}HN+038T?^d#!#nh0vG}5I3^=5x|gXzWGMc8|6|)DV>qer1v4rq_D18Y3a3t`&=PezL_pCH-^D2FswLpJ2pkWw&L@OTa;Bz5|}(-A%w#~kT2 z2rB;rsr+-9s@yRyB+D&=Pxq38D!Lf>dSqX`=Rg;{)(q}ij}AZSxvNv=Ee%)UYRIS@ z6}oa%K4u$lC%QCvcrnDx>6&hoMtZuN8C`x1<6AA_pfoB22ebjuJiv0`8{-caketT;(`800cdV>9We>}N$CN||TH;HzAx|+6smOSa zX}ml@*EREB4}eK6aGj8gLu%#FtYOEf$0Aza?E*&IGr?z4ejfawGtrp!O-Asrjj#`% zQM`7?NvR{!60A9GF=lFxn$X0ERuE9v4S$=iDUx+}?SIDdG}VSXVbkPHE3IgnvJJ2c z`^2jZ=(AYs9oQdhgV90z`9(#zVKnpD5Xh}=8UzJ@tzf6sN!O?=9xAB9)EB_~+AyBC z=)V>H^NTuAC_GgwIC%JtBWeeQSo#% zA^6b&rc4tN^*dkyG0Wlhr2R1Sl>>fkzS zl8ZS|Go|>D&x$T{dwF^-0x3b=o|ltoCc!=MWzv2Wcj6dFLO9B%(2aRQp$w2q_0Lin19%w8Mm<6;h4u)mqI?J^Y7gUG)$y)`=ro}&L@#uk z$7whbdMMNf$}Wv6Tn2GS<LgftdW84doaSS{#Cak-N zRPMwA?9o%FImEq+zBKQo6t%}Oq{XkebNH}i^S9_BCL%T zkA*AGe|zwF-t)uy9ldPzX7vzYcY!dX)zmh?2n3PvjXWURz!qtj#i*ewb;+$oEB>Q@ zex5r*8@j|#_r{U%n>9KR-s9CD+@s2MlK*_o-mAVM6BMC5clbHxy<0r*|NXP^ul2+C zeW6X@7%$K_$EZSG|j`tJE(r_U%rjcfBN__nR)x3 z-3r8Vx*We8hST*P%_&|}pgp~@zqPTWeq<4y2UbL(fQe$11sp97wBk9>4_?j!Pj z@qQ5_+7X262Tejfz<&T2=M9G;*icBdwW%DLhZ)nv8e{9cZUJ=`(c;8l8U*AHZ%aU#m{*1_ z(N&Him&Qwp_*3C4!?$Wj;Abe^(R53MOFH8U8MwRo4mYh)(e zgFwT$E2K+lhDIE4ePVHU`UPZG#6N#PAC`eNBo#OWBd4xNBM5?w~q z0C#wGI7`l;DMbRQh%P#wPrLyJHkCG+Jpep(t|NM7%EQs}o34A1bzW6Tg5nS8^q{1l zXvvOlb<=$48avr|0f{Bv)N+zhsW@q$3wy7*v%QSqB`{9j8B3BM=vOqz9vXQEU0JYz&PEw>G)(Pv;wDJV4W-m(PV7 zt(}dD4rFR#Ghjwe^`&@&iJn?7zSBn{mckm>UIWeey{jB#YKS4AKw6~1qWp{xY#3f5yfY!YQJ+@<1I6UM6g_A zAd}~<*lJqgtbp74OQ#o&X&g%)-IbNB!kDIg2X-S`W8+u~1*4kXi8%vQLn976&ACPy z+{*m%!!Gl77N4yW#8a79GODH+=<>Y`Q@CEVW%2>N%!kn=RFN!P(M*A9oB5pvCHK;p zn0ZpgHF6cC#yv*LaxzH37lKZ?hT%0#c-Yun;qk;Ap#3#0jAM|br*9#(wq7}$Nn@YYh>gZqcE`HtrE5x7o#eWd0d=$gYS~m zth)vS^^41=hH>z@r#u<6^jwF$gk+$JC>%Wr)~M69QSmc4Cd5 zpA~HH^CV4p3W^Q^adR!Dw26m#5fQ&D-nSSpmB-dz*VBQEFN6ZXXkhn4cE&>75$Rq&L#}g(=z$0-L*brah~>iXl*^E8Zj_13Fl5 zFObxfL9EqG1ene*8kvNw%PR{{#wf0zrps+$0I#3VVHHD%i)kN?WrR25jyu;R`Sk?>d3+ohN5R z?^!fEpuJ=mE^9ML5khs&T&N5n~C7`k=`=GZkqrdW7P6Y;T$!qG5m$|1CGI-*;P z?56cWogz%pq~AJ+;1kx0wtgeQbJ(LS_!YhZM!mBfUN$VovWAhGk!iI(>5}BP~&=!-@nQw1l*-FzQ$e!OlAw zyxisq8B5Lyc!iD4FRD)`im}uNCvZCBjZ~ywR0(0TxYTkJ8=#e-h}R}~Co75*`i0Ma z(cngjR*u;up-GwiaUtYMbEhN&`Kc;SoB~2kbD!FPjjl-vF&G5AwfQmShl?5+SqF5? z;mJ|jFylQIv^rwHWED;-K}h%7Lgx-N$&}>BKkduRh%U+*pWxn zCQ`1UAdEDsl?IV{NZ}gFh<-7MhMMb7{+=-qPcI>GXx@&4DKa$H;@EFegEkP{K=aOv zkwa@qf@&)(K&miv}2PDU_aJZ8aDHf#2pbG9%mDpCE5w zo=m{pqUIV)M-$?WS<(xc$035uVQZ8WjEZJbElfsgo_XP;K}%}p0Gw{CW!fa(>xbLK zy9A{dIU~9m{nLOU#3iJt=pqy!IEW6@jUvrBdlX&`tG7^Ohc^K`s7`A=6k3^G6R%LQU+ImL7pJ% z3(%h4DQ>MCIg;L*2Qvu(Ax}V4H@SYYwRE5vRpEHU0*scJGBgXLmg|RkaZ$dZvd%4# z{yh+G0^2y}>QDqEPHKA4VT;$lg{Q)?*1+W;grt+_8x?(>;J0^xt4BsT2;^c%s>hui zdF=<-GYq3DYpN_8wOi|q_u(NjFz7r>vA6WVK(g`C;zthp%PVieaQEuPRX~xa*FhC( zK#Wj9yie*k?^pU}IEEBazO$e>uqvQk^2V8C0u?Xx;6hs%ssEs~ZvZ0) zn5~~*GSN2z1yUEsJc^<##>5nx4S^4F1(+~TqI=yOj)NMgNu^c}y_8!*CZ&dxpw43w zPQ*K}eWw@yIR2T&7H@i|9Pja_@9!$Z5DPe&II>{p0Gq6^1TdPBtiavsrg!Ej$PkZW z4QW7S_KEZ#{S@=PmJebVsi(nKFV+v(-Q@g0@6P-);bt)t{`^1W$DRh^!sCE5cPa}<6ckTe*jmoa)c!{HP8 zs``taj+em4EOWg2MIH=xspTKO;8YU@7`EJ@%0BUeD03Fk3Ch4DxL_;#dX9Jh0s@&O A#Q*>R literal 49690 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 FzX8N5Hg5m`