From 97d14769f92a97dfc05edc8597be3f81bb1d5710 Mon Sep 17 00:00:00 2001 From: anissalopez Date: Thu, 21 Sep 2023 19:53:26 -0400 Subject: [PATCH] phase3 code challenge --- lib/freebies.db | Bin 20480 -> 40960 bytes .../versions/5aaffc930b6c_add_freebie.py | 37 ++++++++++ .../versions/878f47015fcb_creating_freebie.py | 24 +++++++ lib/models.py | 64 +++++++++++++++++- lib/seed.py | 46 +++++++++++++ 5 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 lib/migrations/versions/5aaffc930b6c_add_freebie.py create mode 100644 lib/migrations/versions/878f47015fcb_creating_freebie.py diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..6b52ef1fc2b419dc82d3b974a28cfd36ddc65b67 100644 GIT binary patch literal 40960 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 G-G2k)ikyxB delta 118 zcmZoTz|^pSae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ q#dlkfE6v;}+0-H_&BS8!fBA3xf(U*xFUTMPpxXQV6DLTsp>hFyIT}6y diff --git a/lib/migrations/versions/5aaffc930b6c_add_freebie.py b/lib/migrations/versions/5aaffc930b6c_add_freebie.py new file mode 100644 index 000000000..282c4ddc3 --- /dev/null +++ b/lib/migrations/versions/5aaffc930b6c_add_freebie.py @@ -0,0 +1,37 @@ +"""Add Freebie + +Revision ID: 5aaffc930b6c +Revises: 878f47015fcb +Create Date: 2023-09-21 16:21:08.244303 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '5aaffc930b6c' +down_revision = '878f47015fcb' +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('company_id', sa.Integer(), nullable=True), + sa.Column('dev_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/878f47015fcb_creating_freebie.py b/lib/migrations/versions/878f47015fcb_creating_freebie.py new file mode 100644 index 000000000..26670b212 --- /dev/null +++ b/lib/migrations/versions/878f47015fcb_creating_freebie.py @@ -0,0 +1,24 @@ +"""creating freebie + +Revision ID: 878f47015fcb +Revises: 5f72c58bf48c +Create Date: 2023-09-21 15:32:09.924018 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '878f47015fcb' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + pass + + +def downgrade() -> None: + pass diff --git a/lib/models.py b/lib/models.py index 2681bee5a..7503810bc 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,6 +1,7 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", @@ -9,15 +10,37 @@ Base = declarative_base(metadata=metadata) + + + + + class Company(Base): __tablename__ = 'companies' + + id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) + freebies= relationship('Freebie', back_populates='company') + devs = association_proxy('freebies', 'dev', + creator=lambda de: Freebie(dev=de)) + + def give_freebie(self, dev, name, cost): + new_freebie = Freebie(item_name=name, value=cost) + new_freebie.company = self + new_freebie.dev = dev + print(f'Name: {new_freebie.item_name}') + return new_freebie + + + + def __repr__(self): - return f'' + return f'{self.name}' + class Dev(Base): __tablename__ = 'devs' @@ -25,5 +48,42 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies= relationship('Freebie', back_populates='dev') + companies = association_proxy('freebies', 'company', + creator=lambda co: Freebie(company=co)) + + def received_one(self, item): + for freebie in self.freebies: + if freebie.item_name == item: + return True + return False + + def give_away(self, newdev, freebie): + for freeitems in self.freebies: + if freeitems.item_name == freebie.item_name: + print("you successfully gifted this freebie") + return freebie.dev == newdev + else: + return print("you can't give this away") + + def __repr__(self): + return f'{self.name}' + +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')) + + company = relationship('Company', back_populates='freebies') + dev = relationship('Dev', back_populates='freebies') + + def print_details(self): + return f'{self.dev.name} owns a {self.item_name} from {self.company}' + def __repr__(self): - return f'' + return f'{self.dev} recieved Freebie: {self.item_name} from Company: {self.company}' \ No newline at end of file diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..9b525df57 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,49 @@ #!/usr/bin/env python3 # Script goes here! +from faker import Faker +import random +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from random import randint + +from models import Company, Freebie, Dev + +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + + +fake=Faker() + +def delete_records(): + session.query(Company).delete() + session.query(Freebie).delete() + session.query(Dev).delete() + session.commit() + +def create_records(): + random_freebies = ["watch", "ipad", "pen", "hand sanitizer", "charger"] + companies = [Company(name=f'{fake.company()} {fake.company_suffix()}', founding_year=randint(1900,2023)) for i in range(100)] + freebies = [Freebie(item_name=random.choice(random_freebies), value=randint(5,50)) for i in range(200)] + devs = [Dev(name=fake.name()) for i in range(50)] + session.add_all(companies + freebies + devs) + session.commit() + return companies, freebies, devs + +def relate_records(companies, freebies, devs): + for freebie in freebies: + freebie.dev = random.choice(devs) + freebie.company = random.choice(companies) + + session.add_all(freebies) + session.commit() + +if __name__ == '__main__': + delete_records() + companies, devs, freebies = create_records() + relate_records(companies, devs, freebies) + + + +