From 3caff91aec9ad65f19e0052d2e691faa6d0afe60 Mon Sep 17 00:00:00 2001 From: Kiruidyno Date: Thu, 8 Jun 2023 18:50:27 +0300 Subject: [PATCH] complete assignment --- lib/models.py | 105 +++++++++++++++++++++++++++++++++++++++++++++++++- lib/seed.py | 42 ++++++++++++++++++++ 2 files changed, 145 insertions(+), 2 deletions(-) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..8e5d52785 100644 --- a/lib/models.py +++ b/lib/models.py @@ -15,15 +15,116 @@ class Company(Base): id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) + created_at = Column(DateTime(), server_default=func.now()) + updated_at = Column(DateTime(), onupdate=func.now()) + devs = relationship('Dev', secondary=company_dev, back_populates='companies') + freebies = relationship('Freebie', backref=backref('company')) + def __repr__(self): - return f'' + return f'' + + def give_freebie(self ,dev, item_name, value): + # creates a new Freebie instance associated with this company and the given dev + Session = sessionmaker(bind=engine) + session = Session() + freebie = Freebie(item_name=item_name,value=value) + freebie.dev = dev + freebie.company = self + session.add(freebie) + session.commit() + + + @classmethod + def oldest_company(cls): + # returns the Company instance with the earliest founding year. + # ipdb.set_trace() + Session = sessionmaker(bind=engine) + session = Session() + old_company = session.query(Company).all()[0] + return old_company + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) name= Column(String()) + created_at = Column(DateTime(), server_default=func.now()) + updated_at = Column(DateTime(), onupdate=func.now()) + companies = relationship('Company', secondary=company_dev, back_populates='devs') + freebies = relationship('Freebie', backref=backref('dev')) + + def __init__(self, name): + self.name = name + + def __repr__(self): + return f'' # - delete this next time!! + # return f'' - use this next time!! + + def received_one(self,item_name): + # Dev.received_one(item_name) accepts an item_name (string) and returns True if any of the freebies associated with the dev has that item_name, otherwise returns False. + for d in self.freebies: + if d.item_name == item_name: + print(''' + + TRUEEEEEE + + ''') + return True + return False + + + def give_away(self,dev, freebie): + ### + ### + #-- broken need to fix!!! + ### + ### + # Dev.give_away(dev, freebie) accepts a Dev instance and a Freebie instance, changes the freebie's dev to be the given dev; your code should only make the change if the freebie belongs to the dev who's giving it away + Session = sessionmaker(bind=engine) + session = Session() + # # dev = self + #freebie = session.query(Freebie).filter_by(dev_id=dev.id).first() + print(''' + + + + + ''') + print(freebie) + + session.add(dev) + session.commit() + + dev_just_added = session.query(Dev).order_by(Dev.id.desc()).first() + + freebie.dev_id = dev_just_added.id + session.commit() + + + + +## join table +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + + item_name= Column(String()) + value = Column(Integer()) + company_id = Column(Integer(), ForeignKey('companies.id')) + dev_id = Column(Integer(), ForeignKey('devs.id')) + created_at = Column(DateTime(), server_default=func.now()) + updated_at = Column(DateTime(), onupdate=func.now()) + def __repr__(self): - return f'' + 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..29f77dc6e 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,45 @@ #!/usr/bin/env python3 # Script goes here! +import random +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Company +from models import Dev +from models import Freebie + + +# fake = Faker() + +if __name__ == '__main__': + + engine = create_engine('sqlite:///freebies.db') + Session = sessionmaker(bind=engine) + session = Session() + + session.query(Company).delete() + session.query(Dev).delete() + session.query(Freebie).delete() + session.commit() + + # company + + ibm = Company(name="IBM", founding_year=1911) + fi_school = Company(name="Flatiron School ", founding_year=2012) + # dev + + malcome = Dev(name="Malcome") + nick = Dev(name="Nick") + + # Freebie + book = Freebie(item_name="Book", value=12, company_id=1, dev_id=1) + planer = Freebie(item_name="Planer", value=13, company_id=2, dev_id=1) + + # got = Freebie(item_name="Game of Thrones", value=6, company_id=1, dev_id=1) + + # pen = Freebie(item_name="Pen", value=5, company_id=1, dev_id=1) + + session.bulk_save_objects([ibm,fi_school,malcome,nick,book,planer ]) + + session.commit()