From 22ecebbbc5a735dea26227957538ff0ae6ac2724 Mon Sep 17 00:00:00 2001 From: Natalie Mwiti Date: Fri, 5 Dec 2025 18:00:36 +0300 Subject: [PATCH] New changes --- freebies.db | 0 lib/freebies.db | Bin 20480 -> 24576 bytes lib/models.py | 51 ++++++++++++++++++++++++++++++++++++++++++++---- lib/seed.py | 28 ++++++++++++++++++++++++-- 4 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 freebies.db diff --git a/freebies.db b/freebies.db new file mode 100644 index 000000000..e69de29bb diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..4805902c287da8fb8024c2d516ffe07e14c46b02 100644 GIT binary patch delta 521 zcmZozz}Rqrae}m<2m=EH8xX?)-$Wf_aS;Z+vQA$99}KKKyBPR+`FHZw^GWgS+SusA zW6~7M$}TP|%h<|Wl9-f}npTvWnv|JZ45QhcgIpa$TopnboqSvsprVr<`DC0jOHy;= z^AdAY6~Y{YoIMwp1f~aBzH~%14Pj^2BZ`Vi-h`6RgkgJ<(kgK1wYp?=X zjYejQCLZGu7RN)FKyNA-BO8oRfnqp9HOK}o&CODLuM|0$_#ZOxf8u|*Sy13AzcxP; z3xhn9Z)S2)esO+U3Hx>)MivH1CindO^qf@obG*R#VB&wr!2gZ^-DW|9NBjzGOw0_z zPWee3jLZz;jyajhsUS7X{O1|?Kk(n@KMyqaAip6WGaG{>BPXL%eo0AADnAoH6B~mx eBO_;UNoI0(Y7r|FA0tSBlQTp&I3u&DL<9ieERt6M 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..1458364e1 100644 --- a/lib/models.py +++ b/lib/models.py @@ -2,9 +2,7 @@ from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base -convention = { - "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", -} +convention = {"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s"} metadata = MetaData(naming_convention=convention) Base = declarative_base(metadata=metadata) @@ -16,14 +14,59 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship("Freebie", backref=backref("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): + return Freebie(item_name=item_name, value=value, dev=dev, company=self) + + @classmethod + def oldest_company(cls): + return sorted(cls.query.all(), key=lambda c: c.founding_year)[0] + + 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'' + + @property + def companies(self): + return list({freebie.company for freebie in self.freebies}) + + def received_one(self, item_name): + return any(f.item_name == item_name for f in self.freebies) + + def give_away(self, dev, freebie): + if freebie.dev == self: + freebie.dev = 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..a696296d6 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,27 @@ -#!/usr/bin/env python3 +from models import Base, Company, Dev, Freebie +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker -# Script goes here! +engine = create_engine("sqlite:///freebies.db") +Session = sessionmaker(bind=engine) +session = Session() + +Base.metadata.drop_all(engine) +Base.metadata.create_all(engine) + +c1 = Company(name="Google", founding_year=1998) +c2 = Company(name="Microsoft", founding_year=1975) +d1 = Dev(name="Alice") +d2 = Dev(name="Bob") + +session.add_all([c1, c2, d1, d2]) +session.commit() + +f1 = c1.give_freebie(d1, "T-Shirt", 20) +f2 = c1.give_freebie(d2, "Sticker", 5) +f3 = c2.give_freebie(d1, "Bottle", 15) + +session.add_all([f1, f2, f3]) +session.commit() + +session.close() \ No newline at end of file