From d41069dbd06c27bdf3fa643fe8bf590778f1ae33 Mon Sep 17 00:00:00 2001 From: Cheriroh Date: Mon, 3 Mar 2025 11:49:44 +0300 Subject: [PATCH] Completed Code challenge --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 3519 bytes lib/debug.py | 31 ++++++++++++++- lib/freebies.db | Bin 20480 -> 24576 bytes lib/models.py | 53 +++++++++++++++++++++++++- lib/seed.py | 25 +++++++++++- 5 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 lib/__pycache__/models.cpython-38.pyc diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..75804d983d58ed0649e9a6916e5e4c4b08c8405d GIT binary patch literal 3519 zcmb7H-HzMF73K^niQ-CHt>gUEPE#g9nkdL>jTi~qWMLRx$4OCiFY*V3KuT~qqm{h; zk!PrNBq%ps1Idk_ph#g~?t}Ch3h=g9eTCe#-x*StcHsaHfjOGt3}?>y&N<&4ebw!H z7M_2e{OkDNTbA`78f-oe2Dj1lj}XEVEU{7+u#^WpwF5hK0w-+*4MuZ3X{N29mAZjz z#&*(9y}(1?5se88wq!$YiRL2~bfhOcqJ>`fQ%ks_{m>F^**&v^9>$*7!g$M!w=wRB zF2-Fm?u*_R)?oX;(8d}xO7Cv2)(i%H|h^nqSoC3Uvh3iOGn~r-{LBG@U?5 zD`3J3xL|=T9oaYoz`}mSgC<6;GwX~6ZuK6$w)6;O(FCYAfc6Mf!O*-%PS6osqVv!S zx}qz3`0dGUu`T)!X^+0x0iajP)f2}sXu1a>*wVUZ{R8&@WJ6c`aM9kcwe^2yx6WDVkZ4u?_Qx%54A(c3U#TNZqh2d&4ZqP*ikSnPfBi==)u$KHD8N!zK(h=;D^L=B<9`j}6 z31b#|_7e-4!pXqJYo8(t{m8G?@{1e;KrNGeD%Eh{lueAni736=6Vz`{3YnUqEE}g$ zGLwe`M-hM}$E+O*Q8uwWofLznx=!y~T564`ENyJ3UdJo-hIwBfY=Er9Z|QyKn6jgu zB#<@PXz{DeV~eXRKsFb}1}$2Ihx#^}0p%rhV79fip0LLR4971(003<9!RNA=smw3N z($5nib>Y{B`jnf(&#SpnKFb6$%%97Ma0wdsXHv}rH&;Tc@MvCkS4%=#5;R5=r3(;& z9Vc4-9y(mMu~(gkoHhACcvLR87cZ?Wytw3WutOn2F&KuW7lw$O83-dRJ7IW#7A5se zH>~)f8Y)6U5x=T8Nl^4C3NS_CqFN+gB+)1F8i@f!xdoci8XPjtg?f)(lOr|+c}juH ztuC6r3gI$`_uwMW?(sf%ZMVspSrKFM!b9%7ji&zw@mvhl-ryZiwlDC`R?RygaKk&@ zigkis#W{*}GvTT+ENbHaxLn<67V16x8H1O;eJBJ7MezSJ#$o z$wO;tKW4<2nOoq3JY#={2Mp?iia8%d^9^)~KC>KLqBcl$@zFQ=%#WiCGd{uYN0+`D zM};qPsk65W{|M9zn!!%H*TYa-iEl*$zdmx#5RG@w6=V%mlw>9~)` zKo`Q|9&0j>FS-QG)A_@}w%Vl)ha~n$+#q3-Ae1h1$C@@w3K`lU+!gtFBk-Swfk{Hr zR1?qCOtIn#$IQlNE41ar5ZKNs3W_mUl=MFjtZp< zCaL<{RK=ib>DO$sBf4;PuVM>g$cjA{ErD8OI1!6ZMct@iFftYlSXFBfnOw*ysx^ps zO`s9MtZNNQXVe__PYs;rP|b0-Dq{Qvf3KnxME=t|^B0-rbL_femVUj(nq5eN)pJ1^ z@*GsClrYyL6+n1nlUhb8d+}j?O@c^rl}1GYQqiX9^$nv4RGO1S`}xR_OU*XJh3n@J zGK~ybG(kam>LYFq@0$C^*tCuFpJh|oMManuVZHTNShmXP7gyF@SaCSG^4uZ3Mw7B% z{f>lB!i2Ta(CB5t`j0fRrt)<}Q^{i-dg<z1`$?3^%9SpZv%$5E8Tnl?-1rNj+Oz=G*{bkY^gpX~{)FnKy3@?%N2)%{ hhSJ@yiilej6y_3tmGxQ2;THd&V|(1={pwp1f~aBzH~%14Pj^2BZ`Vi-h`6RgkgJ<(kgK1wYp?=X zjYejQCLZGu7RN)FKyNA-BO8oRfnqp9HOK}o&CODLuM~M$`1djJzvsWte~y3OW%tSs3J*LQ<166rA&m3fM33F`+47L{q>Ej5ZejI}H5a z_}}qA;lBek_YA)g8w)douv2~#2QxE+xMNOcaw;1WRD=;G0@BIMe~tmD?*acgpuPkA yMgq)i4AP8@jKL+D$=RtzOw24iOl%CoKoQ^4bXFE-0Y->?h;DI4W>EWae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ Y#rH~)i9rC!xz9gwf;1a1NF$sJ0HVYZR{#J2 diff --git a/lib/models.py b/lib/models.py index 2681bee5a..5ed8b8a3c 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,14 +16,65 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company', overlaps="devs") + devs = relationship('Dev', secondary='freebies', back_populates='companies', overlaps="freebies") + def __repr__(self): return f'' + def give_freebie(self, session, dev, item_name, value): + """Give a freebie to a developer.""" + freebie = Freebie(dev_id=dev.id, company_id=self.id, item_name=item_name, value=value) + session.add(freebie) + session.commit() + + @classmethod + def oldest_company(cls, session): + """Return the oldest company based on the founding year.""" + 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', back_populates='dev', overlaps="companies") + companies = relationship('Company', secondary='freebies', back_populates='devs', overlaps="freebies") def __repr__(self): return f'' + + def received_one(self, item_name): + """Check if a developer has received a freebie with the given item name.""" + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, dev, freebie, session): + """Give away a freebie to another developer.""" + if freebie.dev == self: + freebie.dev = dev + session.commit() + else: + raise ValueError("You cannot give away a freebie that doesn't belong to you.") + + +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')) + + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', back_populates='freebies') + + def __repr__(self): + return f'' + + def print_details(self): + """Return a formatted string with details of the freebie.""" + return f'{self.dev.name} owns a {self.item_name} from {self.company.name}' diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..6288e5667 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,26 @@ #!/usr/bin/env python3 -# Script goes here! +from models import Company, Dev, Freebie, Base +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +engine = create_engine('sqlite:///freebies.db') +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +company1 = Company(name='Tech Corp', founding_year=2000) +company2 = Company(name='DevWorks', founding_year=2010) +dev1 = Dev(name='Alice') +dev2 = Dev(name='Bob') + +session.add_all([company1, company2, dev1, dev2]) +session.commit() + +company1.give_freebie(session, dev1, "T-shirt", 10) +company1.give_freebie(session, dev2, "Mug", 5) +company2.give_freebie(session, dev1, "Sticker", 2) + +session.commit() + +print("Database seeded successfully!")