From 1da2c688c0dbbbac3dbd12e3d0ef640ea7ac69d0 Mon Sep 17 00:00:00 2001 From: johnberengu Date: Mon, 3 Mar 2025 23:08:40 +0300 Subject: [PATCH] labcompleted --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 3629 bytes lib/database.db | 0 lib/debug.py | 10 ++-- lib/freebies.db | Bin 20480 -> 24576 bytes lib/models.py | 66 ++++++++++++++++++++++---- lib/seed.py | 50 ++++++++++++++++++- 6 files changed, 113 insertions(+), 13 deletions(-) create mode 100644 lib/__pycache__/models.cpython-38.pyc create mode 100644 lib/database.db diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed80ee3330761436c84ea4874aac34dbde9ce2d8 GIT binary patch literal 3629 zcmcgvTW=&s74E9;ndzRJ$Id28LLd_$umh|eSgwh&mh8$XLh*~2eP{`_+Fdnvulq8t z?(t?ugM_q};ALNUMUi$N{YUr_^~w`}VPD91s^_{Gk|)aQGpA17&h@MEA3B|;g?793 zkJCq&-#uKEC1#L|B3)R?2*qa-XNRZ>Ns$q&2_BXpATIwBa`lZzpc*`5t&j z)MDm0Wlc6k{W)bJYWFi)h7ZFs95CHhG6~B# z&x*5ngnm!RCh4Gs>XJiC+`od%(sLJI*cBGP@m)zG<*uXq9?EuRU?=YsjRbYx9%VL#`79ee|R z=SX7v%`^ zS(qd;JC(&|HyE8E?7_Xg(WE@fv%8~vcZZc#cS{9Rq}og3lf4vMB*pG%qTL`+a-@Rb z7FoeTEH>@UwcT9|{)gQ((b(MsBbeY<7TNv~@qoql(Z&LrY~wq|SL}eCVe%iFe_}KC z#QGb*aE>b@VY4mdC1S*PKh%x6;>P}pd>d=Ew_nJTB6RRJ?ML-ox41QZZ=p1{D0cUg zJPMQIV0SqiySwu(3-wK`dVOPu7T%^kjT`v1y}n~a2Q6B4=$Z>kYsP2x%$hO5p2MC2 zKN>jNi%XfB3e&aAFd0krCU#KogAAA=j}IL6?n0yn#Ql&6g?!EA_9+$gTzOJ`5vW@W z4c8|`Mt#hpMm%Y2g7prV8G8Zmzho~cS@{e5CGpNn1m~I^0fcI(2!*`Jm5?epnJ8MM z?XZY+Z5XSfM8eupQs_n@ivnoyy0YCo5wa+O7p591W($YDwNQ6+%F$ql@{p<^2y`G zJ5XaSekODuK(H?O@<8Z8iso&c;?Z)*QLG_y$O6 z{lyvr832NoK$C!b8%OHj^{WlP-A%?eq zDl_@{NFDr?_96#31d`t+t(A-<07V3OCf9thSV0AjYt&TFfLHir4l+ey4l+QD*T-s~ zpU^SJHMl-rKO`bgEE@4N(Ig*vXU3lZk8foXBaJ95Q{ZgojGi3g0&n!8uS#+Q9md03nITHLYf&sQNJQ? zg(#a~qJB-Iln?4Yk>3(AzF85Ie;;Fjf@AKyIdrT6hobQa-$q-)#-Abn3fQOtC>F0L z;yrpv(W~?sqgN{4R;{_Dv6Rqj%0(*D3#$vhIp?=3nDKjakl7Yn2tluc5dzW$xV!;= z+Flh=ET#>_q}T-r6IdF!sca*hSv2CwHWT)*dMzDRZ)&}y7w1QPMX7>xTwRhk zRVjh}r}&nsIN#~Nqta3*3K_j&%*)MOj`NqCO%n5xvyY~3KYyAP{jfi+_lGJ^`?$g1 z$I1#MjdBK$Zct8l@Dj~RBybtVN%7fIO+I~dq2|U6+>2j3PgicC+VY$8+c$`XUq^KC zTV09E2Z#Z0^$DrIN?XI3+@;3}R%jw#~AKzg+#BtX#iGfPe&Eg^nljuyQ6GdmQ zm655SI%K-LnzWm%)ac^BvnG_Em%D5Ky(lVQ4J#J^b11rlwetyHw^f#ra#eEPpuTqZ ct2e{}rJb?iUDDs?7XPdd){X$&bT~TF{^K%Ol^D5&rQ?N>> zq?X~53JCJ_bqtDB@OF(<(5TN$(F9rK?C%#G666T9Ng*ve9_H+Lge_1e&`%0({z0yu z?tUNxG!P0j6@pydT!UQwoLz$zAi^NU8u%?RgE%xENTC`G5l1l;tOjHrm*!?EzE_GI zO#BZS_&@PK+$<)G>Y70S delta 87 zcmZoTz}T>Wae}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..3be7fe198 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,29 +1,79 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData -from sqlalchemy.orm import relationship, backref +from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", } metadata = MetaData(naming_convention=convention) - Base = declarative_base(metadata=metadata) class Company(Base): __tablename__ = 'companies' - id = Column(Integer(), primary_key=True) - name = Column(String()) - founding_year = Column(Integer()) + id = Column(Integer, primary_key=True) + name = Column(String, nullable=False, unique=True) + founding_year = Column(Integer, nullable=False) + + freebies = relationship("Freebie", back_populates="company") def __repr__(self): - return f'' + return f'' + + @property + def devs(self): + return {freebie.dev for freebie in self.freebies} + + def give_freebie(self, dev, item_name, value): + return Freebie(item_name=item_name, value=value, company=self, dev=dev) + + @classmethod + def oldest_company(cls, session): + return session.query(cls).order_by(cls.founding_year.asc()).first() class Dev(Base): __tablename__ = 'devs' - id = Column(Integer(), primary_key=True) - name= Column(String()) + id = Column(Integer, primary_key=True) + name = Column(String, nullable=False, unique=True) + + freebies = relationship("Freebie", back_populates="dev") def __repr__(self): return f'' + + @property + def companies(self): + return {freebie.company for freebie in self.freebies} + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, new_dev, freebie): + if freebie.dev == self: + freebie.dev = new_dev + return True + return False + + +class Freebie(Base): + + __tablename__ = 'freebies' + + id = Column(Integer, primary_key=True) + item_name = Column(String, nullable=False) + value = Column(Integer, nullable=False) + + company_id = Column(Integer, ForeignKey('companies.id'), nullable=False) + dev_id = Column(Integer, ForeignKey('devs.id'), nullable=False) + + company = relationship("Company", back_populates="freebies") + dev = relationship("Dev", back_populates="freebies") + + def __repr__(self): + return f'' + + + def print_details(self): + + 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..a12943753 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,51 @@ #!/usr/bin/env python3 -# Script goes here! +from sqlalchemy.orm import sessionmaker +from sqlalchemy import create_engine +from models import Base, Company, Dev, Freebie + + +engine = create_engine("sqlite:///freebies.db") +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + + +session.query(Freebie).delete() +session.query(Company).delete() +session.query(Dev).delete() +session.commit() + +company1 = Company(name="Rubics", founding_year=2000) + +company2 = Company(name="Steelmugs", founding_year=2010) + +dev1 = Dev(name="Leo") +dev2 = Dev(name="Eli") + +freebie1 = Freebie(item_name="Plate", value=10, company=company1, dev=dev1) +freebie2 = Freebie(item_name="Mug", value=5, company=company2, dev=dev2) + + +session.add_all([company1, company2, dev1, dev2, freebie1, freebie2]) +session.commit() + + +print("\n- All Companies:") +for company in session.query(Company).all(): + print(f"{company.id}: {company.name}, Founded: {company.founding_year}") + + +print("\n- All Devs:") +for dev in session.query(Dev).all(): + print(f"{dev.id}: {dev.name}") + + +print("\n- All Freebies:") +for freebie in session.query(Freebie).all(): + print(f"{freebie.id}: {freebie.item_name} (Value: {freebie.value}), Given by {freebie.company.name} to {freebie.dev.name}") + +session.close() + +print("\nDatabase seeded successfully!") +