From bf05a8aa376f10bd57825e848ff65791c3446cf9 Mon Sep 17 00:00:00 2001 From: Babuze <134912091+Babuze1@users.noreply.github.com> Date: Wed, 6 Sep 2023 17:01:36 +0300 Subject: [PATCH] Completed assignment --- lib/__pycache__/models.cpython-311.pyc | Bin 0 -> 4488 bytes lib/freebies.db | Bin 20480 -> 24576 bytes .../__pycache__/env.cpython-311.pyc | Bin 0 -> 3084 bytes .../versions/0a1bfa536eec_add_freebie.py | 28 +++++++++++++ .../0a1bfa536eec_add_freebie.cpython-311.pyc | Bin 0 -> 800 bytes ...f48c_create_companies_devs.cpython-311.pyc | Bin 0 -> 1842 bytes .../7a71dbf71c64_create_db.cpython-311.pyc | Bin 0 -> 770 bytes .../b96a7f18344f_add_freebie.cpython-311.pyc | Bin 0 -> 2010 bytes .../versions/b96a7f18344f_add_freebie.py | 37 ++++++++++++++++++ lib/models.py | 34 +++++++++++++++- lib/seed.py | 22 ++++++++++- 11 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 lib/__pycache__/models.cpython-311.pyc create mode 100644 lib/migrations/__pycache__/env.cpython-311.pyc create mode 100644 lib/migrations/versions/0a1bfa536eec_add_freebie.py create mode 100644 lib/migrations/versions/__pycache__/0a1bfa536eec_add_freebie.cpython-311.pyc create mode 100644 lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-311.pyc create mode 100644 lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-311.pyc create mode 100644 lib/migrations/versions/__pycache__/b96a7f18344f_add_freebie.cpython-311.pyc create mode 100644 lib/migrations/versions/b96a7f18344f_add_freebie.py diff --git a/lib/__pycache__/models.cpython-311.pyc b/lib/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..934290800512964d1c8d0b7ab86d91829412884c GIT binary patch literal 4488 zcmcIn-ESMm5#PHbc|3mTsE^8tTsd?k$EIS-Uu_lFvI@(x9M_FqLrH*M6x_o$8tx1SR@yS;lD!+g@zwWFa}qE^bm=oWEW;J%3$4a3~j_OHn-&Pt%wQ%>-XZKi2Gl zDJWyq&|4*8(ry?78t92^W|?MiS?KhqK^+6sNw~(~AD`RU{yS9e6G}9}Aev|hngr(c zpy?k1=aDN$;J6-34@KyK*D0FMm6Y2hJC4P_`+OZz3P=SETsLTV+j-ys?dygN`3}*- zvcgg5WVFH%&;IZP@ zq^Wrmr;NTlJ@x(BDY{Hk*~K&*+w8flL1!29xog?Xk;Rio<{f>G| zQs(Gl-uCM{ql-+}3lVpv(R$CfV0IHpk<`?KYu|Zrs-hlrAOFE^R5sy3>J}e-`KAs- zws$$6TB5dO&}G&Klf?wq ziyyBoB~m7P9qKHKWIqsFc6VqZenhdbZ)1OG0fWP37W(SjYwbnzn}a}#+s!KR!F-muD6(^DGg`e zn7czB*V$3pU3P|S3TQs>jU~$9JhRN8OrOi!;rZ-R#=v;a(>Sxe^GRmrVj>%Y32oV= zrir+ME7uLyl}#Dc%t8EfFE8}hP1fFz_A-wHDUxSu|F3R;e0y!Cs_wVc{a>gfPt}o) zlh&K#RrQRep7}yO_f$PsRnJ@M`HKHMH{|75H+mg9vaZ_!T?c1e0>IMkkgnfYilPS%3mrSFyBD8F&< z(CVRTaIY2ITb!!(4V0(X#@5DubLzpVYTp5??*Po9?k%mXUEH|2aq~&Odi1Py^lU|) ztg4fiI$3;s%OiLXZIK4?5nuO~D0=s75g^YcXx{m$)8XeV!84!&|8aaqA-NkU^GDi zR1H0wp`+ueY$BdACq^4W7+dC>K)(8tdA3>WlZEn_)jPbQJncR1^t4iLI!JXS zxK|l&2q0=Nd>m~!JpGI-gUL{H^+KdmAG~$UL%4X6{8{a3UE{O9-w#5&+H=JMs$Q|w zD;570=g@G!^@6MMLqnT_HN~bKSBPUrrocTW>h%$jh|ci0ZqwI+6O)`BV4YjmHL80r zDf|YC-;C!AVcbNcc@*SL90V6`u;=dSwc)41eU;$8+Q4Ax!re=xS(tx?YK-V`8 zbGzib?cu9oe(IrKCrfSTb!4abx1}!Gk;!&Qh72EvOBuky@8BZFkAss1*#OKOO&W!e zbDcx33avH>f&X8QyZ?wAsXYsAA`|ALtvL#`C1^JSr%lrH39948%yrsHJfj7FG?(qHzKm&?odZmr&`Mxs_ETD({b^^~T|W96}Xr&do@LxWamuz0=}?k&Av zzObgPX&Xv)@PsvZq8dJFg-;fzYu$Uw{cH02!1}<(@0Nr+y((rTaebHnM2LwF4-6_tEoEQIw&yV2e~?ixGID=I{CONKt(4z^2s=5mZav! z=OyN*Dug)(IeRz;=_qhVS-_F~0z}Un2L5mS zZ#D}WJm6R2U}9zvcS$W%Fydf@vJ640nE5X<@PFig$bS)N_F;Z~K4vxsNk&FaPhgZN a7<)7EF@gA;j9|Wz5fd*Xm=BRROaTA{kDE~d delta 120 zcmZoTz}T>Wae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ s#dk}P+ceGGDB08^Db2)U^MCoT{6a_q$-E$=1c0jV^G}>0&4$Va0IVDurvLx| diff --git a/lib/migrations/__pycache__/env.cpython-311.pyc b/lib/migrations/__pycache__/env.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0a2c273e84325e7e4ccc4c349928177a6986a99 GIT binary patch literal 3084 zcmaJ@O>ERg6dtd=yI${KAS6H%MFS)(%TENfp;DT6`{ZROElzd=J`Ls+(#xdB^yjk;GCmay6SI$tCa~j&J&6h)CU%bqS#daEC+qN!Y21HmiXjZ7CgTW;3Q{ zs^2QJS$L-4nFCLWrF^7c2j)Taf@lV`*ndx;AK&AYtS-n*m;#(mfI+C}B0~811D1!;`^N`uru3`-lOJ z##;N+BME<+Qg2%BAr|lGm!j=KcM)r+7G}jv*;Fj)VSHVIWWXH`sdskUQ*Rn3(GI&r zG{4sl(wN}C^%%r}JBnc@uAw974Dyua*lqa+T83h|0Y16?HB?OMpTMVHtvR@2m8s4w z*YU9B;DWobU_*inxZ;{*Lense>x-6$!(`Ve@i1E?{FP@KFI#L8FV#GTb^PVkFND4B znAmYa;^2?PcAbPNZmqo7kznws8wRN|ecmQw)*_(<>mFVvwmpII)C%@)TGguMltsYM z6E-Ljs})n02{v7)z%aQ*9PAKc!YVFJUA%G`GZ)W;yIZqfMJ13y737&t%Y>CGgz2Wv^dM_nj8NS!&0CJ?1sT)QZDO#JTV>u% zF&QMnya#zPOSc@Zf!(6K9)eVRS7?^M@0llXJW7n}j;9;kF38cEQ|fGTQKA{J^mw7; z*VC8YpSuLfv)yWiIBaejHhr$T0=wm$s=jk-ff6!rkyGH$xJl@oZOzYhT+I>Z)jNiSsdzl`3<25Vq{YdL9Mbmqsl$!bn4cPJAt`=HkWDr3tD_AS`zo%hxFtsl zp?${fw%W#>X}fW+UcK5)+>v>E;afJc`z}t%8xzXKv&oG~38(?m_GshFPmpB5mo7|U z?GuX7S{L7*i@Gg3$kK~HrqqoyOKk*s7+VJ{dH{Dg?g1jLwQ(bo@@FrGOrm=dYeP3e zod$7NV*G=*hbcc)dLsZvb;wRjOnL}(=eX@ha01}`=TQInrkZ=A4n0F< zJwrgYIB9Y6LPfa&KYO&1J?3YR!SPLv3$mH%_cMnZnK3^zR?mz9RBS7R7N8&)$NAxgYym4?-cB?|J4FLsNQj_j?RaQT0x9?#@P|LLjo@*{cQ)RFk3{Ta?5QKky1 zM+KSl$0g365d3*%>O%6*m;|&Kqx^5lOtCM>*=`vcM0p}C3(BD)&^kpJmXRosB=n)m zyk&%CAu6kHyO{VtvJ!7=L4yBFuszBlFHobV7S<1ke^CQL-twZRP~sDQL(f5nMDe^< zKLAn9CLhuhAmdo+y#xYVBS}p(Uhlo0qGG-GYNFwK@Ab6z6|^lCI>(Qrs|jEf&6kJj z^3kS}Tm9_2TYmm%Ln-)5p{^95-lPL{w7>gm^2%JzxB3Po=r+CNbiV|9+e=O&Wq9>H t2+@#7e0ijWWND None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/__pycache__/0a1bfa536eec_add_freebie.cpython-311.pyc b/lib/migrations/versions/__pycache__/0a1bfa536eec_add_freebie.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab3805eec42ecae38f88bffc5d4524f95c9ae9cf GIT binary patch literal 800 zcmah`OK;Oa5Z<-Z*l}YhD&loOzUGk1N!qlrP$kp|iA#{^&9Y>zy%S>L7i%X~dddNQ z13v-v-*Alfgv5!PMK7o)c9S3yF06LG+1c57d^=xE(?DYV{Pc^yQ4snrjXz7+t95%W z)MrGIizuc_j1$FGuso}=>egt@-J^SMovN-TM5hg^eXO|+p>?4Rs$Qa&aXo%Xsr8Bh z1Q8g||p<~&k6O748uMZHeJy1ASFzA!hap$aed^|QT7?2XIp#aC~+TC8; z9<=Sg)j4%++v%Jg4eUYpq;D8MWXmngl`J3e=5}V@+|J1B49Y1>!xhC1V4+nZw{-!M z@g=&!qZ`B;@=^%8BSXgbO=R3HK0w{1rXg-b*BIHoMYM^VvdQ9z0)|%Y%mk%m)jjsw=orp6kMf+5YZ}Fwq-kV$)OejH;G%C(t{8ztDTX(@qT4? z<)Gk$4>^>c9B@br>D5h95B*al(7_D!RC?%5#VwSa`bI0SC4)-osl(21KHk1J@BQYz z`97D^5wx%O{vy{gLcfT`X_H5jliM(Pfe5N0A`#h=>n0|kN605I*HzdREVw zp6Svrc&_QUJYsuWMw^<9V^IeMl?fVnHZBt*8Y;-4$(42AX}KO(H@t{$QO1=A5d&pD z^BJ>UleO>C_PXzd5i@Ns`T?DYyLr7+t<va}xhM_VUTM zdoTBXB3-=J!)txK20DHG&NtN_zShUre$S-S${z?|AmGm|N~>_@o&R{|xMdX!%K(E( zV3!~`3wqMT&53^UCBXE@VzN}G7RR}g8l_fhljXoV(*O!`oGdzFeh{Y$n-N0c8M_R? zGsJ)F#g}pw*6%|PZve!Xa{u6Z56|}TY!}Z8rtTkn(8F_mJl8$_hNj>gk^h^8H@IpT z#J3ECtENNUhHZ^J2p>77V{KEn&EA4vxyDA%InN0XjI(8fnVz+6KqXKoD>XE0z*pv1`?=@e*gdg literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-311.pyc b/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4fa9b095a700c9e472aad1a0f5025bb6b445e50 GIT binary patch literal 770 zcmah`J#X7E5G5r?k`*gR(V_u5Y4xDMiYprsiY)Qc#Y3|cf&f7hFSSs8m69E}=%67} z{y=|1k$=bjeOd+hnB$2Ma zgH=)`MQ*;Gx#l#S+9bM}+VSLdSAohk^{a0CjGuAMi_yi{8jUU6F>S{kIj-ZJJN9HU zwsrldpgF`$D#|$K0Ib>5Rf7c0;Yy3WKj}R@heQPKBZwAFCbepsS24!cfDeUxH$NmMl{UhMUaLO zq!rT%l#r7uDDtf;Djxrb+mrStE66g1ODbrIPE@xXS{Y;9N(%0^NWclgXW!Aw{kcJW jWj9+54PG_c=JZ8lbYMJd^j5*R-=ag%4%5Tx_D6mLF$umW literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/b96a7f18344f_add_freebie.cpython-311.pyc b/lib/migrations/versions/__pycache__/b96a7f18344f_add_freebie.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..daba90db050c5bd7a5043f944bfb17d7370aa54a GIT binary patch literal 2010 zcmb_d&2Jk;6yIHs?e)eksfZ}FByuYb1d%BIh-14|5p@)i5CWncTFYX!_Kclv_QTAs zQ#mS91U+zUrBqEM=NgRKL;nD{!F?_5AsUGj;=s))98kIN)@wU3bvYj|=Q7GtHIYrF z(^cO>tbBa2x|FOeX3N!dwjvcMQEU=l29}Q}7m}&Dh1}diCZ5RT)46;yJ-?L8<`Nl6 z`omlFEYAe9zQLlS$SgXF$U>CZ4Qf>So9uOyzym-h-@x7%9!oWTEO+6db>ax}_+*&Nr_uk&#VMu;n6Wc4&;1Wfakvs;-0LU;>jLr{+%67o z&1)M>tom2RVuFfSps+=wp=nB4BP^oYM3)UkCttAOwxTr%3t_S?tC&d@Q?DyV6Xcz! zFRR3w2TQ!VB@ZCw(^-8HCP4_~VeW(htLJiI)Wr`Vd$!pK^~#k+E4|Ap+r3o@mcl{> zQ)}o33$GeBsS(OTH*KmKH8!pC&)Qo+QeRBzgwrZHDf&Gol42WXWoLQ9%jF6nBGDmFYYR%x41@1?Oy zqmO~CU_3a7`FfLu8+CBNgib@i*MY2mfbDX>qtN|NAFTZf-RgJv(T%;ehwFRm?L`MA zIw;|ygm2k8Otx|dS6f$~O*tsjK^Yfid`s;S-P?J1Z|`0kJ1EsbDHo-D%jTibk`AJ+ zXxnyBx`Wa#O8XY=@J4IxV7;~eEbX9d2W4H91&fO=?U(j9+Fv^FU;8EbbK3dnPN%Tt z7PcIub&%#Ftv~73{#yI3_QX$DetgII;8rJp+s)s0P_cuGE-LotEO*dl7hV4Id?Xn9 ziv!jjXY>;6zXCLDUamblnFn_E<2YW{{X!Nts8{*3f?qKbre@u*7kUx&y95y*K-A2@3L;pPOz{nW3wX5EUaimFRPV)MC&U} z(JGrnZ&EM4Or-rk5Q}*c< None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.Column('company_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') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..0f174c23f 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,14 +16,46 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', backref=backref('company')) + def __repr__(self): return f'' + @classmethod + def give_freebie(cls, dev, item_name, value): + freebie = Freebie(item_name=item_name, value=value, dev=dev, company=cls) + return freebie + + @classmethod + def oldest_company(cls, session): + return session.query(cls).order_by(cls.founding_year).first() + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) - name= Column(String()) + name = Column(String()) + + freebies = relationship('Freebie', backref=backref('dev')) def __repr__(self): return f'' + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, dev, freebie): + if freebie.dev == self: + freebie.dev = dev + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + dev_id = Column(Integer, ForeignKey('devs.id')) + company_id = Column(Integer, ForeignKey('companies.id')) + + def __repr__(self): + return f'' diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..b7a1a51da 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,23 @@ #!/usr/bin/env python3 - # Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Company, Dev, Freebie + +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + +company1 = Company(name="Company A", founding_year=2000) +company2 = Company(name="Company B", founding_year=1995) + +dev1 = Dev(name="Dev 1") +dev2 = Dev(name="Dev 2") + +freebie1 = Freebie(item_name="Item 1", value=100, dev=dev1, company=company1) +freebie2 = Freebie(item_name="Item 2", value=50, dev=dev1, company=company2) +freebie3 = Freebie(item_name="Item 3", value=75, dev=dev2, company=company1) + +session.add_all([company1, company2, dev1, dev2, freebie1, freebie2, freebie3]) + +session.commit() \ No newline at end of file