From c3fea9b80c211c6f1cd7ae51fcad04f1bcc75dca Mon Sep 17 00:00:00 2001 From: Trevor Karuma Date: Tue, 3 Jun 2025 04:32:22 +0300 Subject: [PATCH] fixed the issues --- lib/debug.py | 13 ++++++++++++- lib/freebies.db | Bin 20480 -> 24576 bytes lib/models.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ lib/seed.py | 35 ++++++++++++++++++++++++++++++++++- 4 files changed, 91 insertions(+), 2 deletions(-) diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..a7df17f29 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,20 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker -from models import Company, Dev +from models import Base, Company, Dev, Freebie if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + session = Session() + + print("Ready for debugging!") + print("You have access to: session, Company, Dev, Freebie") + + import ipdb; ipdb.set_trace() + + session.close() diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..f43c3930f683c637c7608fb8c92dcd880f77e17a 100644 GIT binary patch delta 373 zcmZozz}Rqrae}lU8v_Fa2*Uu&L>*&sHU_og8;nqaVmLxI$ObOW%~E{N92YqV007I`Z-)Q? delta 61 zcmZoTz}T>Wae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ I#rMn+05sDJLI3~& diff --git a/lib/models.py b/lib/models.py index 2681bee5a..0521801f9 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,8 +16,19 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company') + def __repr__(self): return f'' + + @property + def devs(self): + return list({freebie.dev for freebie in self.freebies}) + + + def give_freebie(self, dev, item_name, value): + freebie = Freebie(item_name=item_name, value=value, dev=dev, company=self) + return freebie class Dev(Base): __tablename__ = 'devs' @@ -25,5 +36,39 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', back_populates='dev') + def __repr__(self): return f'' + + @property + def companies(self): + return list({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, 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')) + + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', 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..bffb5ed52 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,36 @@ #!/usr/bin/env python3 -# Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Base, Company, Dev + +if __name__ == '__main__': + engine = create_engine('sqlite:///freebies.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + session = Session() + + #sample company here + apple = Company(name='Apple', founding_year=1971) + google = Company(name='Google', founding_year=1975) + microsoft = Company(name='Microsoft', founding_year=1975) + + #sample devs here + trevor = Dev(name='Trevor') + hildah = Dev(name='Hildah') + mike = Dev(name='Mike') + + session.add_all([apple, google, microsoft, trevor, hildah, mike]) + session.commit() + + #sample freebies here + sticker = apple.give_freebie(trevor, 'sticker', 10) + mug = google.give_freebie(hildah, 'mug', 5) + t_shirt = microsoft.give_freebie(mike, 't-shirt', 3) + + session.add_all([sticker, mug, t_shirt]) + session.commit() + + print('Database seeded successfully!') + session.close()