From cc1af0816553ff82c3c2b7679bd6bb1259424751 Mon Sep 17 00:00:00 2001 From: Mammet-tech Date: Tue, 27 May 2025 00:18:18 +0300 Subject: [PATCH] Complete lab --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 1930 bytes lib/debug.py | 6 +++- lib/freebies.db | Bin 20480 -> 24576 bytes lib/models.py | 40 ++++++++++++++++++++++++++ lib/seed.py | 30 +++++++++++++++++++ 5 files changed, 75 insertions(+), 1 deletion(-) 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..bc5d6f1d1828e50c716ccd03cb2327a7a556c3d3 GIT binary patch literal 1930 zcmb7F&5q+l5O(_~{)wH<@XxY91VSQ*Bs&b^!f1uaYE}p_msvRU#d6Y>i5a(@Z99QP z+_DEQ`vhnoU|z{rPWuXbfhyaRiGWChrLJ^!byrt^RbS=DAn-K&E}ncje`RXgpQP-6 zxTbxBBmW(R&;&~~$vBfb*QLP?X>wCq++t+Yla{o(EgkMux{`N4U>5;X<%Acn5V)v{7$Y`aRTr5uhGadRKHVwEn$U7>(AqO7ARF z5MQR>!@6vZvt%jL(*7$9>eV46eTQ4Xa(yV`s`y9z)1yoe?VglQz9pQAdh?g<~>uAmE03PiZS6P+I6 z8H^yDX6Xu2x)v85iQxzgXG)LQ|8`)X;VNjH361N5aRW@Swg|8=Ug*4qn!VMwj63x@ z&Rp;aWCT~|ZD9-NxyF6rB2->!k2AT5(lvLd)g*@e=`}0c3l+;qt-~wC&OTEBlNh*N z?^$0n@hA-&$1!g`$*|dMuPh+FK}iFw2&yptP?cQp%;0oc-S-uujomPrX5&-XuZj|MR(oLl4JIR(w3Oml0pxr$Zl*ctGMq z5b%z zX})L)8<`mh2kGKgFjrC6uy1Ti!7vsZf5%kR{slihdyFH02gNN1k&6tuXuP!0xk+4X zNZs4my(n=lldRSE}hf5pFE=enNy2+z`D#g QbWQ)uG(6qYyMDL*H?_Q}umAu6 literal 0 HcmV?d00001 diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..c796884e4 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,13 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker -from models import Company, Dev + +from models import Company, Dev, Freebie, Base if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') + Session = sessionmaker(bind=engine) + session = Session() import ipdb; ipdb.set_trace() diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..8c10fec76eb24f6676f7b12800c6ed09e10a682e 100644 GIT binary patch delta 561 zcmZozz}Rqrae}lUHvwp1f~aBzH~%14Pj^2BZ`Vi-h`6RgkgJ<(kgK1wYp?=X zjYejQCLZGu7RN)FKyNA-BO8oRfnqp9HOK}o&CODLuN1kM`L8nYf8u|_e|58Wae}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..7dcca7e74 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,8 +16,20 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship("Freebie", backref="company") + def __repr__(self): return f'' + + def give_freebie(self, dev, item_name, value): + return Freebie(item_name=item_name, value=value, dev=dev, company=self) + + @classmethod + def oldest_company(cls, session): + return session.query(cls).order_by(cls.founding_year).first() + + + class Dev(Base): __tablename__ = 'devs' @@ -25,5 +37,33 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship("Freebie", backref="dev") + def __repr__(self): return f'' + + def received_one(self, item_name): + return any(f.item_name == item_name for f in self.freebies) + + def give_away(self, other_dev, freebie): + if freebie in self.freebies: + freebie.dev = other_dev + return True + return False + +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'' + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" + \ No newline at end of file diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..627fe0b16 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,33 @@ #!/usr/bin/env python3 # Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Base, Company, Dev, Freebie + +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + +Base.metadata.drop_all(engine) +Base.metadata.create_all(engine) + +google = Company(name="Google", founding_year=1998) +amazon = Company(name="Amazon", founding_year=1994) +netflix = Company(name="Netflix", founding_year=1997) + +alice = Dev(name="Alice") +bob = Dev(name="Bob") +carol = Dev(name="Carol") + +freebie1 = Freebie(item_name="T-shirt", value=20, dev=alice, company=google) +freebie2 = Freebie(item_name="Mug", value=10, dev=bob, company=amazon) +freebie3 = Freebie(item_name="Sticker", value=5, dev=carol, company=netflix) +freebie4 = Freebie(item_name="Hat", value=15, dev=alice, company=amazon) + +session.add_all([google, amazon, netflix, alice, bob, carol, freebie1, freebie2, freebie3, freebie4]) +session.commit() +print("Database seeded successfully!") + + +