From 7b3f6129251ff46a2acc983f78d83c57472a948f Mon Sep 17 00:00:00 2001 From: SirAlex36 Date: Fri, 28 Nov 2025 23:35:40 +0300 Subject: [PATCH] initial commit --- freebies.db | Bin 0 -> 16384 bytes lib/Untitled-1.html | 1 + lib/models.py | 51 +++++++++++++++++++++++++++++++++++-- lib/seed.py | 60 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 freebies.db create mode 100644 lib/Untitled-1.html diff --git a/freebies.db b/freebies.db new file mode 100644 index 0000000000000000000000000000000000000000..d1996a2f3b1e98e8d53dec48aac10e034e3f7d5b GIT binary patch literal 16384 zcmeI%L66cv6bJB`w$cTIvx&PQW`oQT67`^8z%D6BWDAyRvIo-?7L&k5ni*an^B%vRrgUC3{aElp7>&J{KOwt>Qu35@ zLWnLeOK;Zn%=l#*2$ykySz+L^Y00ZSYA#T5P$##AOHafKmY;|fB*y_aGk)L z*Q#D97U|o3>~%+C5DC%s#U!1zs%;vM$sOacY4SA6%ek!I=MBp->!!`Emcy-=&E^9x z!?75H?9NUn^`C#a#ExF4rlWD?hE!%9=t>kOvWxT>|vu4_+RW&<&k#o&<>wetjQlf0^ zyH42Hd!3vV$W?lZUfAEK^U8uZshnKu2J5n)f0Ax%ZlmNX^V?J}luC3i7FAX~tQN{f zy;b;%=eS*T5S|BpKR9t`!iz3H%0IhVoXy#1!hW)Ea>9TB1Rwwb2tWV=5P$##AOHaf zK;Q-lfZAFe?izU_MKha zfFFn!ApijgKmY;|fB*y_009U<00I#BtH6$`lEPsW_J%u(Tpjt7c$T3mxob>Llk>mE zJ`nbUePy5I0s{gNfB*y_009U<00Izz00bZaf&WQhSIdwCN@+*_(?1l^Ek$MOB9e6; lPEP$O-cy;9A@^iTJBxUVRTW=N4{v+Zywy54B?_%{LX;`smo literal 0 HcmV?d00001 diff --git a/lib/Untitled-1.html b/lib/Untitled-1.html new file mode 100644 index 000000000..e5fc48f53 --- /dev/null +++ b/lib/Untitled-1.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/lib/models.py b/lib/models.py index 2681bee5a..e743fc123 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,5 +1,5 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData -from sqlalchemy.orm import relationship, backref +from sqlalchemy import ForeignKey, Column, Integer, String, MetaData, create_engine +from sqlalchemy.orm import relationship, backref, sessionmaker from sqlalchemy.ext.declarative import declarative_base convention = { @@ -16,6 +16,20 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + + freebies = relationship('Freebie', back_populates='company') + devs = relationship('Dev', secondary='freebies', back_populates='companies', viewonly=True) + + def give_freebie(self, dev, item_name, value): + new_freebie = Freebie(item_name=item_name, value=value, dev=dev, company=self) + return new_freebie + + @classmethod + def oldest_company(cls, session): + return session.query(cls).order_by(cls.founding_year).first() + + + def __repr__(self): return f'' @@ -25,5 +39,38 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', back_populates='dev') + companies = relationship('Company', secondary='freebies', back_populates='devs', viewonly=True) + + 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 in self.freebies: + freebie.dev = dev + def __repr__(self): return f'' + +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')) + + # Relationships + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', back_populates='freebies') + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" + + +def create_session(db_url='sqlite:///freebies.db'): + engine = create_engine(db_url, echo=False) + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + return Session() diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..049d8f926 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,63 @@ #!/usr/bin/env python3 # Script goes here! + +from models import Company, Dev, Freebie, create_session + +# Create a session +session = create_session() + +# Clear existing data +session.query(Freebie).delete() +session.query(Dev).delete() +session.query(Company).delete() +session.commit() + +# Create companies +c1 = Company(name="Nintendo", founding_year=1889) +c2 = Company(name="GameFreak", founding_year=1989) +c3 = Company(name="Niantic", founding_year=2010) + +# Create devs +d1 = Dev(name="Ash") +d2 = Dev(name="Misty") +d3 = Dev(name="Brock") + +# Add companies and devs to session +session.add_all([c1, c2, c3, d1, d2, d3]) +session.commit() + +# Give some freebies +f1 = c1.give_freebie(d1, "Pokeball", 50) +f2 = c2.give_freebie(d2, "Potion", 30) +f3 = c1.give_freebie(d3, "T-shirt", 20) +f4 = c3.give_freebie(d1, "Sticker", 5) + +# Add freebies to session +session.add_all([f1, f2, f3, f4]) +session.commit() + +print(f1.print_details()) +print(f2.print_details()) + +print(d1.received_one("Sticker")) +print(d2.received_one("Sticker")) + +# Give away freebie +d1.give_away(d2, f4) +session.commit() +print(f4.print_details()) + +# Oldest company +oldest = Company.oldest_company(session) +print(f"Oldest company: {oldest.name}") + +# Dev's companies +print([c.name for c in d2.companies]) + +# Company devs +print([dev.name for dev in c1.devs]) +print("Seeding complete!") + + +