From 493ab8752608e17a6b8b658054ee68184b781eea Mon Sep 17 00:00:00 2001 From: Maria Jenkins Date: Fri, 13 Oct 2023 04:37:24 -0500 Subject: [PATCH] complete challenge --- lib/debug.py | 10 +- lib/freebies.db | Bin 20480 -> 45056 bytes .../0ce79d4be740_added_freebie_model.py | 37 ++++++++ ...c32_add_company_d_evs_association_table.py | 36 ++++++++ lib/models.py | 73 ++++++++++++++- lib/seed.py | 86 +++++++++++++++++- 6 files changed, 237 insertions(+), 5 deletions(-) create mode 100644 lib/migrations/versions/0ce79d4be740_added_freebie_model.py create mode 100644 lib/migrations/versions/9e711ec79c32_add_company_d_evs_association_table.py diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..23b367467 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,15 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from faker import Faker -from models import Company, Dev + +from models import Company, Dev, Freebie, session if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') + # 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..1cc73484e641c828367678a02749a6c9e627fe5f 100644 GIT binary patch literal 45056 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 F{vY&66L|mt delta 122 zcmZp8z|^pSae|Z(11kdq7y~IVV4kRBBnA}GiD7T^ULB(Pa9;0^!806sQUE&!<@8Y}<+ diff --git a/lib/migrations/versions/0ce79d4be740_added_freebie_model.py b/lib/migrations/versions/0ce79d4be740_added_freebie_model.py new file mode 100644 index 000000000..712b99464 --- /dev/null +++ b/lib/migrations/versions/0ce79d4be740_added_freebie_model.py @@ -0,0 +1,37 @@ +"""Added Freebie model + +Revision ID: 0ce79d4be740 +Revises: 5f72c58bf48c +Create Date: 2023-10-12 21:50:44.557056 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '0ce79d4be740' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.Column('company_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name=op.f('fk_freebies_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_freebies_dev_id_devs')), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/9e711ec79c32_add_company_d_evs_association_table.py b/lib/migrations/versions/9e711ec79c32_add_company_d_evs_association_table.py new file mode 100644 index 000000000..6b9f13e4d --- /dev/null +++ b/lib/migrations/versions/9e711ec79c32_add_company_d_evs_association_table.py @@ -0,0 +1,36 @@ +"""Add company_d +evs Association Table + +Revision ID: 9e711ec79c32 +Revises: 0ce79d4be740 +Create Date: 2023-10-13 00:47:44.282790 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '9e711ec79c32' +down_revision = '0ce79d4be740' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('company_devs', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('company_id', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name=op.f('fk_company_devs_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_company_devs_dev_id_devs')), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('company_devs') + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..92d62f6d1 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 create_engine, ForeignKey, Table, Column, Integer, String, MetaData +from sqlalchemy.orm import relationship, backref, sessionmaker from sqlalchemy.ext.declarative import declarative_base convention = { @@ -9,6 +9,19 @@ Base = declarative_base(metadata=metadata) +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + +company_dev = Table( + 'company_devs', + Base.metadata, + Column('id', Integer(), primary_key=True), + Column('company_id', ForeignKey('companies.id')), + Column('dev_id', ForeignKey('devs.id')), + extend_existing=True, +) + class Company(Base): __tablename__ = 'companies' @@ -16,8 +29,28 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + devs = relationship('Dev', secondary=company_dev, back_populates='companies') + freebies = relationship('Freebie', backref=backref('company')) + def __repr__(self): return f'' + + def give_freebie(self, dev, item_name, value): + if isinstance(dev, Dev): + new_freebie = Freebie( + item_name=item_name, + value=value, + dev_id=dev.id, + company_id=self.id + ) + session.add(new_freebie) + session.commit() + else: + return TypeError("dev must be an instance of the Dev class.") + + @classmethod + def oldest_company(cls): + return session.query(Company).order_by(Company.founding_year).first() class Dev(Base): __tablename__ = 'devs' @@ -25,5 +58,41 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + companies = relationship('Company', secondary=company_dev, back_populates='devs') + freebies = relationship('Freebie', backref=backref('dev')) + def __repr__(self): return f'' + + def received_one(self, item_name): + return item_name in [freebie.item_name for freebie in self.freebies] + + def give_away(self, dev, freebie): + if isinstance(freebie, Freebie): + if freebie in self.freebies: + if isinstance(dev, Dev): + freebie.dev = dev + session.add(freebie) + session.commit() + else: + return TypeError("dev must be an instance of the Dev class") + else: + return ValueError(f"The {freebie.item_name} freebie does not belong to {self.name}.") + else: + return TypeError("freebie must be an instance of the Freebie class.") + +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}" diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..e6bbbf0ff 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,87 @@ #!/usr/bin/env python3 -# Script goes here! +from random import choice as rc +import random + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from faker import Faker + +from models import Company, Dev, Freebie + +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + +fake = Faker() + +swag = ['t-shirt', 'hat', 'water bottle', 'pen', 'sticker', + 'keychain', 'notebook', 'mouse pad', 'yoga mat', 'frisbee', + 'chapstick', 'lanyard', 'tote bag', 'reusable straw set', + 'hoodie', 'koozie', 'mug', 'tumbler', 'beanie', 'socks', + 'sunglasses', 'umbrella', 'yo-yo', 'calendar', 'duffle bag'] + +def create_companies(): + companies = [ + Company( + name = fake.company(), + founding_year = fake.year() + ) + for i in range(20)] + session.add_all(companies) + session.commit() + return companies + +def create_devs(): + devs = [ + Dev( + name = fake.name() + ) + for i in range(100)] + session.add_all(devs) + session.commit() + return devs + +def create_freebies(): + freebies = [ + Freebie( + item_name = random.choice(swag), + value = random.randint(0, 100) + ) + for i in range(300)] + session.add_all(freebies) + session.commit() + return freebies + +def delete_records(): + session.query(Company).delete() + session.query(Dev).delete() + session.query(Freebie).delete() + session.commit() + +def relate_companies_to_devs(companies, devs): + for company in companies: + for i in range(random.randint(1, 10)): + dev = random.choice(devs) + if company not in dev.companies: + dev.companies.append(company) + session.add(dev) + session.commit() + return companies, devs + +def relate_freebies(companies, devs, freebies): + for freebie in freebies: + freebie.company = rc(companies) + freebie.dev = rc(devs) + + session.add_all(freebies) + session.commit() + return companies, devs, freebies + +if __name__ == '__main__': + delete_records() + companies = create_companies() + devs = create_devs() + freebies = create_freebies() + companies, devs = relate_companies_to_devs(companies, devs) + companies, devs, freebies = relate_freebies(companies, devs, freebies)