From 0cb93104435d2647aa4d0909bb5f7665a3614109 Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 23 May 2025 15:10:36 +0300 Subject: [PATCH 1/2] Freebie tracker --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 2396 bytes lib/debug.py | 2 +- lib/freebies.db | Bin 20480 -> 28672 bytes lib/migrations/__pycache__/env.cpython-38.pyc | Bin 0 -> 1691 bytes .../8df67b75fdf7_added_freebie_table.py | 33 ++++++++++++ ...bf48c_create_companies_devs.cpython-38.pyc | Bin 0 -> 1061 bytes .../7a71dbf71c64_create_db.cpython-38.pyc | Bin 0 -> 696 bytes ...b75fdf7_added_freebie_table.cpython-38.pyc | Bin 0 -> 964 bytes ...31288a4_fixed_relationships.cpython-38.pyc | Bin 0 -> 1280 bytes ..._aggregate_methods_compiled.cpython-38.pyc | Bin 0 -> 1523 bytes .../a252e31288a4_fixed_relationships.py | 38 ++++++++++++++ ...df49495cf2aa_aggregate_methods_compiled.py | 47 ++++++++++++++++++ lib/models.py | 22 ++++++++ 13 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 lib/__pycache__/models.cpython-38.pyc create mode 100644 lib/migrations/__pycache__/env.cpython-38.pyc create mode 100644 lib/migrations/versions/8df67b75fdf7_added_freebie_table.py create mode 100644 lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/8df67b75fdf7_added_freebie_table.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/df49495cf2aa_aggregate_methods_compiled.cpython-38.pyc create mode 100644 lib/migrations/versions/a252e31288a4_fixed_relationships.py create mode 100644 lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66e4f19a5660fb597779dd7b50c93c11dec737ae GIT binary patch literal 2396 zcmb7GOK;mo5ayDUC{ffSPM>MesA$thMJxr#tu>6GHc|vdjQ~lCf)|3~t}MoUC`;Lh zgxs8~Z@m@y0sc#S?WyP9a%sO=>Qy%aQVKh}v$K!c`M#aivu4vZ@V$=ijgPB_@dqiJ zpAF>!O7R;6H#kd-l=&<*eKWOuE46()t@ss2HZ!TFj_;&3zovC7si&^*>b9LUQqT9$ zuJCHi{HCagCU-8F-x989@fup~9}QmT?rVd)qJ3`p9q0}2LHD$N4SJKeptrQX!`n}c zUguAEX7nn`eV9uTA7?*_nW`S-$!VG?=TSBl$3m*=lc|ieV^#ZEOvA%)8um=(Ns)xp zIM0f4JW@&k@?G+GDj!#??)%W?K{(O zn1~H`m;<+hD9_GBM!ul4mcmC4A0s;1=2wC80Hyd9 zLKr^dhHrA_Tf!EVb0EO23)8PcbIy%(=GV%8wCcj;HpL$HhVZzGn6 z_$}T-MBBD#sMc;^Hh~@Ot@C+d?@&DTsqp;}z(2!Qg;-)MN4^^j$K!gQ~}H%Ck#Degfs~ zFN1NOiosCEVK#Uy^XDR(7K4MFiy#_@Ng}diQ4AiBf!pr=!DKca=h^P${_et;-Km6= zLJpF6IOq>j%u9;?WTt9+Nth0Kxc>om`3uFEcNTHzFHH!76G;(HbGiLAEllO?mGRv8 z9gw`Sa3bqyUf)|R)_u$Nv5rl2p}G*sNS~|}pJKME1%VV383YuC!h|r`+MA{E2vA`p zEffUG4FVkI6hsV^7X&X(!(?G;1|{!GRZ`d`U2J8>ToR{b7s79j^3#kH9cLnx(jmi# zBnTd51HnRmNjkx>A;@D%hi;-2)TlArY%v!*SuLDnrQ2&x8dfPQaTJkHJbeqK2B)%cB zqJX?Z>WTwbK$mT@ZpHjtSjmUNgIHp&5hu%k5MR9|V_4q{ah=r!a6f0~rtg;740=WD zl*g)^;T19Qo_NS;WxG{oHowgq;DT3TPed-cF!xqTtsnEbL%c>qv$SM~_Wo+Js$+oz zl!BtTzTUXz4Ae#zV*M5;FyL0oq?!4JuWP#w(AyoHn7ZB^VhPh{# zfON5ka!WsFLCjSZUZR%U7%(8umU&{aV}H$p&i`WpEhO)f*d?Jef#yD?qwRd4Tup2% z=*lhm&|w|ZW1gvDIO<(jZt)@slV~i`nbaGt$*6gVzae;u)`R-FOiLGPWVx|n5ih6x zjkj77M*giU12!IR{ce}(48dJKxsvjhvVXvXQIdf0FIls`Yr0kD=Djk_?h``_ipWjY UL89|4(=h+GE!T9-j@N1Y1MsH>Z~y=R literal 0 HcmV?d00001 diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..bacb17545 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -6,4 +6,4 @@ if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() + import ipdb; ipdb.set_trace() \ No newline at end of file diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..6511d293e53f0f6184da85e40eeb407ca77fff46 100644 GIT binary patch delta 709 zcmZozz}WDBae}lU9|HpeI}pPF&qN(#Nj?U>vQA$99}H~V#SHws{5yH}^40T6aTjlF z{LN+35H5lSP z6hpykK<062Hbt?qi%Uy0wsIo}2GrT?C_$kF6;)Eu;NnDtfr6iZh=O0JkB^Qk(EFJs zsk!laiMgo?VU9u09**E3Doe~MO+^kfglCaOAuh!qk|6()>`k1(hAUc(NsJdR&18Wae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaPQL nW|=I*m&(YzxrwhxkjFI5+$h=9A}P(pB6*X-7k(6hMFt80<_i{T diff --git a/lib/migrations/__pycache__/env.cpython-38.pyc b/lib/migrations/__pycache__/env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe15e8401a9425051ecf4e46d1c2fe0721604f6f GIT binary patch literal 1691 zcmZvc&2J+$6u|A7$xJdy(+}9yiUasoBB6kgc25W`Eg&sIRViJ8BBYTsb`qx^Pq01x zShc6+0EcQN&K%Ms|I%DJ@h>0{JbRLD3rsZ5v!DGw{C;nqZ)~Ipp2MRLW+!cgeshz% zPY9Ez@S2}tV2ELf3OvHt$$<=ta1?qu1UVW-UXEm|h(|F-Jf0_`geUVhYn^oT7aTkJ zWpg@~ogy8juq&N+M?KbJ$uF3-S?7mnw6U6{tP8U~kC&S_NdL$;ULuTC%=_-2wZ2A! z-tQ0>8sIve2+8+LH4#&o?Qk^}if0pD7FoVtjTU7oL7Tve<>&SQ;r~8?k_eEE1Ttt|56FEL%6|Ro_eT4FvfOdW^n8 zN9bF`VhA^(pM%k(N|8cLHMOEth6qJ=%gIDSz`LX<86T!8f#-N83~7R|G&jV~xSP7j z$(gV-GOvs!lsrHB((k8=5mmy9BA@y6--9D%HJ#nA5U@z|oG&aLOYTq2xaNc!a>k_` z60&ze%!ybmgqnJXjU|$6?xXcb&NyME+O>qAazzy945IjS?~}u4#Fk_X=1!@Q&ciB` zeJUlyU#`O+@^hY7mcKh7-aRjb_1>n!Su|FA_oZ9&9!;*r!jiJGi^{HyzUZ6pC6)P% z7Z<}y%i}s-P)!SCFC?#9iWZy=qB;asy=keQa+?+0QbsMUH>9v!Q<;s0Vy5mfK_$;^ zRxYeL7$kMv+b|a2c3b2D)~?Zh zMfwf+`(yi7^FCLn!^K7Y@cw~pMa0{%-R!`CdMS=@;D7O-agt*F09Nk-8^D5dx$ruNje_dHy*A+A>4Y^5 z-8(Q0f;wJkJ`v}2$F+Pe!PxO2tkYXVP2n~*SB&e7nruvMK06rnbO`sR`!Lj9SA5er zu6LT6XF`efnvUGA_CY1(A-M716&I(6L~l7e4iCNU23JD}th)-qb%%cB6b^`HcoU@h z!M{21_xS`=<}Dad65tddi2jOW4+IKO@OK;m4)1_=ur=z-atbs~hfToRK~bl-*V82E zLr(zuVl46|V4w5WDoyt}&0G(SV)sdsM#s)hd)+}zW{yDbx84+Hjcn!)+)2wP=yPj- h1gc8%kKLEmr_&317~aSwkj6b6xBHL!58JpM`~yhT&v5_% literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py b/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py new file mode 100644 index 000000000..cf71a0a67 --- /dev/null +++ b/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py @@ -0,0 +1,33 @@ +"""Added Freebie Table + +Revision ID: 8df67b75fdf7 +Revises: 5f72c58bf48c +Create Date: 2025-05-23 14:24:44.151085 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8df67b75fdf7' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebie', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('freebie') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc b/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d0b39622804a68c22a43e8f49c4097cbb62b422 GIT binary patch literal 1061 zcma)5O>fgc5cOAV$4yXGD#S4or%0qunxrWaLP)6)6;c(oaLL75dnbvDy>@qN5+MO?7I1QK?1k8)H_lygGHzbEtlyw0AyU z1sq5Qtsse0!a@*FTNJK^GU`!(KI#QW z17}j=oFLe^b=W=Zce?#fZ`kS$$K9jxVfWzKU@$yBa-8qjfYMf_mZWF0v5hPn+lY9@ zI|hRwQVGNOO`ztC&galx460F3pRKW3t?z@-QZR{RY;Pgo%ukkY!&LzK1x4 z`ElbelNel|hlIIPo?JqZ33rlE@PZ|YB47&;?sQ26boy?(&Xx)5r2WpE1Nb3y5HffV z+>Jutjl%^e8NLJIUIWh`gmAYt^Qyw{+V}Fd4$`%>Rw<@Zc$f?I2#und>RvJJpN3iP z?O%K!PySLkf9{3Ck8x8fyiqHSP_K%2{fzJ6IXBU?wUSAP@+2*Jyr-nx<(0@fO+K)q zuqWsW1C63ND$gry??}t@XcBmyv`7T89|jewxQa*=EFoU=Cf<}bul^6&%mKZ7*XM)< vOAn=oNJxi53XBRbVMV9Kcm7$J{X9 literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc b/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba755800cb6bf4dd540814a05de3a17463c869b4 GIT binary patch literal 696 zcmah`O>fgc5M6&Hc1(kiIB@kf2iI|p6DdLnDLufYidt1dzF2F|v^K0i*mVlw%+KHt z^e_3!iNC;!u~QV^7;B#9d1q(e+r6F79Y(RcUgozNW50Sb4ui-$O7)%qSj<2JU1+5q z>sntM!iY^U;|Un?l+vQK!GOt64W?lIFyq-1vtdTe0po@(obMkqiM&M@QpdT*he8!~ z<$k!_xNE)+AiY}$+3NLi1=YrNw#W8M+Ou&lmKUM7480(7gJ`piHc@mQ1*=sUIL>d< z$rf6t*UeRYHl9X5rxM$}tg^mm9ORsBDV0e8?1nvRSC33ih@IfiH$SgS^ix^z%HPTQ z6K1XQw>4mroGbJ~zd5vdU3pFD-ATl>K(CcN`;5{TMe3Kuz2q&KR{jIZ z-o5h2Vw2aW!>`W4ZCqiw1e z&pInfpw5z{v$()AEi&03-8t%u;3CVhJaoF^oh_f!uW-pXXs8xw zRHuaL83~A9?hR%HCN+ZwZ3GrI0vne@4QhSYsZE`)X3(s?CUwzssd1sT_dfI2lmhim z1VEgEcNxVDT=zZPq%zI9cX~YW#&q_46pw~8IvZ_IKu)~jY}8MN<9Ie0C+<{0RDgGk zX5#g`{b8p&?DUVk-eA%nOa_C)-mupl4_)^cve(+WBKh(xXzgYWTDuuB#1c@f1W(Ev zyQ9=;ic7vjQ)st3)eCZEP*RXvbE9FE<~O548i+IyvHl`<9aAH>79|^f(?A6^RKqz_ z_G~MJA}KvV5)NN6R%)V}X#rWtqYN%p<0fJ&XxoAy1=UKb>cgUnBQjFfG-s=fEBlle zFbAQmi$bJ)uAZKYG>gRgEv%)4Avpnk5ygQgOxd!30H1@M}E}{b4DE%7{Wk03AD|r}| zy$|cFTmFa3wX#=Byh!0msd5XAMlAhtHJv;02>pMWQhv{>DF?XOHf5vNvXV1lBHAWf zxm+sp<@T}ry0^QB7^a#u|HP~JpP?&Di8UfhF6}*Khat_AFjRKLAdAza&M7~#h$Rci z)}s6$$`SPsR{LeT@ZOC@#FIscO$8>EOJNC|$}s0uVbweTrRBWHa=K#hQpfzVWNO+i M-7!tQn#RH2ADTV-H~;_u literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc b/lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9be6523fe613a4728d9aaa7010e7b0bd3faab0e GIT binary patch literal 1280 zcmZ`(&2HO95Z)yzlA`Q1O@b6nfmT-?6xy<68$wVNwGYk3NYfTAbSSanj3nCBlG&x) zDo8Fx(Ob|L=)pebmG;_R`U*XDmQ-z}XqVXG{Ok;8XTIS#ySovi^~d*ni_;ckzguB@ zxg>l>TYo_W*n|NGC+ACN;&98mxjXT|o3x-c@xh%0v_o*g|BXWc;m_Wry^-1wkraXZ z73+0g%31a!LRVofs;rQDk(D}%p5tYvN$fs79e2fGG{A%X!SS&eHWt+5?lH^`kETbX z8O)BN6NRF}?kSORcd$1Y_4h{o!9jO_I3Dhg2gAqvhl9Q0VHEvI*|Q!uPEnpscD5s% zo$ZKp#8+6YluWJ1KZ_I7rhP(N|3ai<=bUcOzR!a}V6gy=q-E@Syd^ zz2^MZ;{S)mC%*uKYYrj!a}Mn}zxHaM#uAaG1MaQmTQ*`}vghnO>IKzt=gb5%g*eUd zEoH9L1ulh&(qdT(xlS_pnl2Q|Ri2A!j>ZSPB&B&cyGS-}Nu#naZM>Q~bmEh(6SvWl zhRsl$_6^$$l|vOV?@vXQE)tPfsFJGwUL*j>Ctoe4akMc0Ny7(EWrcH8=3ZJiFqst! zv$;$zaBcXEt`auEit;T}A5!$ceu@{x662}Lgp8l5;vCaT$0r3~k}gD^qnx9TpDl#O z{y|)>t3@IEgsdVwm=vuV7{=Bhzme2L29O~>1iNNQ{*?_l$Bxi-P7BuBve z76tX#ICuG@`cWT|?*Ab(A?rJk`P@S0+@bcnKrpG{LIZW9^S5Ht_6u@~T#V<*AlDdi84i&m-kf~4>5DP)kK#3cpfMGak2QI{k??f@?hkB%3 zsB@MM-8&S8HTqw=wdm0Qp!L*u6l1e(x|PH|@_pXp-H-Qmx9cc){T2=v7lxwzDwXD? zq4EWe;w1`Dd<6)o2}xC7CGuTMG+zhZZ$Zm9K=Vx;7HDAnOuz)|t?t{kW`l#81KKO4 z-~N6@qlmMJmaLbua*;#P3-fdtCk!0toL$C6oM*k0=aU}H504Iy#^Kzfbn9Woq({B6 z$3~C6Cr{|1Gv!PcdX8e!^M>AdFdPrOQSb41GV~^gpFdhtC%4=VYO*NS#_iqR2b7dS*4jUPqLClj0@vc z$>S^%d&fCvag=?<*3&#IN>1af6l5;;&UlN%;vLj@S8FEmK3J}WxmsdAun(}gVh@F)8stHJ?~{FE{i)mh6SV&~ zf4`vjf9FpF`(H##@*Es(=+rDCpU}mzv$Y_pl0v(p(1P7t3h$lrUF?$M!J-^<6Q!`@ zlBL0xzt$y9R*cI7h_|Ka$cRtx2zoDayemWHZzvu%LL02{7CQTO#TmaRqwh=cK&F@{ zr>|dp`Qlud-#j~?zI=AhKa{>lQtV4{%ggrdW0_<_{#{mW*k`B~4^cEXY`byRAG*V( zzuy*S5I`OVfiP*p(pemCnRkkB6PknzmaeOogvINVPIToI!JRteGz%92{;w=4gad5J mGAM#PtEi~vd2g%M(=>-w!agUmQ~B|_*&&v$lj_!XcK-q-PnlW( literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/a252e31288a4_fixed_relationships.py b/lib/migrations/versions/a252e31288a4_fixed_relationships.py new file mode 100644 index 000000000..ec7ae21ad --- /dev/null +++ b/lib/migrations/versions/a252e31288a4_fixed_relationships.py @@ -0,0 +1,38 @@ +"""fixed relationships + +Revision ID: a252e31288a4 +Revises: 8df67b75fdf7 +Create Date: 2025-05-23 14:41:24.162046 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a252e31288a4' +down_revision = '8df67b75fdf7' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebie', schema=None) as batch_op: + batch_op.add_column(sa.Column('company_id', sa.Integer(), nullable=True)) + batch_op.add_column(sa.Column('dev_id', sa.Integer(), nullable=True)) + batch_op.create_foreign_key(batch_op.f('fk_freebie_dev_id_devs'), 'devs', ['dev_id'], ['id']) + batch_op.create_foreign_key(batch_op.f('fk_freebie_company_id_companies'), 'companies', ['company_id'], ['id']) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebie', schema=None) as batch_op: + batch_op.drop_constraint(batch_op.f('fk_freebie_company_id_companies'), type_='foreignkey') + batch_op.drop_constraint(batch_op.f('fk_freebie_dev_id_devs'), type_='foreignkey') + batch_op.drop_column('dev_id') + batch_op.drop_column('company_id') + + # ### end Alembic commands ### diff --git a/lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py b/lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py new file mode 100644 index 000000000..5d723f078 --- /dev/null +++ b/lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py @@ -0,0 +1,47 @@ +"""aggregate methods compiled + +Revision ID: df49495cf2aa +Revises: a252e31288a4 +Create Date: 2025-05-23 15:02:45.029533 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'df49495cf2aa' +down_revision = 'a252e31288a4' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.String(), nullable=True), + sa.Column('company_id', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name=op.f('fk_freebies_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_freebies_dev_id_devs')), + sa.PrimaryKeyConstraint('id') + ) + op.drop_table('freebie') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebie', + sa.Column('id', sa.INTEGER(), nullable=False), + sa.Column('item_name', sa.VARCHAR(), nullable=True), + sa.Column('value', sa.INTEGER(), nullable=True), + sa.Column('company_id', sa.INTEGER(), nullable=True), + sa.Column('dev_id', sa.INTEGER(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name='fk_freebie_company_id_companies'), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name='fk_freebie_dev_id_devs'), + sa.PrimaryKeyConstraint('id') + ) + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..598f7675e 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,6 +1,7 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", @@ -16,6 +17,9 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company') + devs = association_proxy('freebies', 'dev', creator= lambda dv: Freebie(dev=dv)) + def __repr__(self): return f'' @@ -25,5 +29,23 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', back_populates='dev') + companies = association_proxy('freebies', 'company', creator= lambda cm: Freebie(company=cm)) + def __repr__(self): return f'' + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + name = Column(String()) + company_id = Column(Integer(), ForeignKey('companies.id')) + dev_id = Column(Integer(), ForeignKey('devs.id')) + + company = relationship('Company', back_populates='freebies') + dev = relationship('Dev', back_populates='freebies') + + def __repr__(self): + return f"" + \ No newline at end of file From 98ec81fa94519dd86cb71b2ff53d24473d0fe0de Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 26 May 2025 14:36:49 +0300 Subject: [PATCH 2/2] final commit --- lib/models.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/models.py b/lib/models.py index 598f7675e..fc27dda69 100644 --- a/lib/models.py +++ b/lib/models.py @@ -30,7 +30,7 @@ class Dev(Base): name= Column(String()) freebies = relationship('Freebie', back_populates='dev') - companies = association_proxy('freebies', 'company', creator= lambda cm: Freebie(company=cm)) + companies = association_proxy('freebies', 'company', creator=lambda cm: Freebie(company=cm)) def __repr__(self): return f'' @@ -46,6 +46,14 @@ class Freebie(Base): company = relationship('Company', back_populates='freebies') dev = relationship('Dev', back_populates='freebies') + def __init__(self, company=None, dev=None, name=None): + if company is not None: + self.company = company + if dev is not None: + self.dev = dev + if name is not None: + self.name = name + def __repr__(self): return f"" \ No newline at end of file