From bdca3164bfcfedbf700ddc41d2b3d4d79b927ab8 Mon Sep 17 00:00:00 2001 From: Arnold-Mwangi Date: Sat, 2 Sep 2023 23:10:31 +0300 Subject: [PATCH] Completed Task --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 2111 bytes lib/debug.py | 54 ++++++++++++++++-- lib/freebies.db | Bin 20480 -> 36864 bytes lib/migrations/__pycache__/env.cpython-38.pyc | Bin 0 -> 1757 bytes .../1b04dacf764a_seeding_4_freebie_model.py | 28 +++++++++ .../5f72c58bf48c_create_companies_devs.py | 10 ++++ .../versions/7a71dbf71c64_create_db.py | 10 +++- .../8954dbace60b_seeding_3_freebie_model.py | 28 +++++++++ .../90acd96a56c6_create_freebie_model.py | 33 +++++++++++ .../a357d3974d95_seeding_55_freebie_model.py | 28 +++++++++ .../a999e21a9763_seeding_54_freebie_model.py | 28 +++++++++ ...olished_relationships_and_added_forign_.py | 38 ++++++++++++ .../versions/d45d79e35116_seed_data.py | 28 +++++++++ .../versions/dd36c80e9ece_update_models.py | 40 +++++++++++++ .../ed6dd4d46944_seeding_freebie_model.py | 28 +++++++++ .../ff8003d387e3_seeding_6_freebie_model.py | 28 +++++++++ lib/models.py | 52 ++++++++++++++++- lib/seed.py | 30 ++++++++++ 18 files changed, 455 insertions(+), 8 deletions(-) create mode 100644 lib/__pycache__/models.cpython-38.pyc create mode 100644 lib/migrations/__pycache__/env.cpython-38.pyc create mode 100644 lib/migrations/versions/1b04dacf764a_seeding_4_freebie_model.py create mode 100644 lib/migrations/versions/8954dbace60b_seeding_3_freebie_model.py create mode 100644 lib/migrations/versions/90acd96a56c6_create_freebie_model.py create mode 100644 lib/migrations/versions/a357d3974d95_seeding_55_freebie_model.py create mode 100644 lib/migrations/versions/a999e21a9763_seeding_54_freebie_model.py create mode 100644 lib/migrations/versions/ae0c1a34c35e_polished_relationships_and_added_forign_.py create mode 100644 lib/migrations/versions/d45d79e35116_seed_data.py create mode 100644 lib/migrations/versions/dd36c80e9ece_update_models.py create mode 100644 lib/migrations/versions/ed6dd4d46944_seeding_freebie_model.py create mode 100644 lib/migrations/versions/ff8003d387e3_seeding_6_freebie_model.py diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e0a0e7052d462c0d020f354ac5624e4572ceec5 GIT binary patch literal 2111 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 VxfqCeRPY6P`&frtgayRoe*ht<1#tiX delta 94 zcmZozz|^pSae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ e#dk}P$285{DB08^Db2(pd6U8yeiVU41_}T+4HTRJ diff --git a/lib/migrations/__pycache__/env.cpython-38.pyc b/lib/migrations/__pycache__/env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..df36cd94a93dccf534953940e1d72efe684a0969 GIT binary patch literal 1757 zcmZux&5s*36t^dnNixZ1+d`{~1M;mzVmA^MoDeE)K`KJ4(hq?mq>(dzNu2d~g6-Ll zsy&qh9I8s3Ib=_We}F$`uAI1WMj&|hB;76Gkv-4P_ItnQ_j`W4vy&2RKmGE%IP4Pg ztDjtKEu7rKZhyc*5J43w=!8-)M=B~>lU9&hD94jH$gye{$t0l!l4WPofzGlk+J`;! z8Bi}jZ%!wwSEQ2^ccshzWFXq2^CJ~q(fc-@>}+PK=;Le%$$IyUnD1ccIiW-+F!X=X zen>`x-w+oW(K?+;1$Rn4lXIM10X>%*vY9E1EZ=J5Raq)r?V!fNi90|!zRfM*KQZ7c zqjPU=+b9Y>?02x+TR1qfrh=Z)XT(Lz)>GnQ5s8+FB^B)#7`%(t?KARn7^LJ3L4HZz zCtr{UZ?K{iu%D(3+oOfFtN~vcu*@yM zPd##WEZu@FE9)3%j~{#<_H!+mE>WY|Cn5ZI@km+C7v~y=7I~h-%JHd!aB2Yt7`N;g zl-g(P_9?T6arNHaZOsc1qquJ2QoZZAnS;v;a9nW5>m4N>7_PFZ)WX&SA-RIw zW#!7*gHfkWntQKz!znJcU%_mdHqxN(y~>K|`}yT5Al))&xVAj^`|6>obatNP5jDQh zekSG({QdE8yeJD8R~F3pF5aRlR|RM{UY%mb^!OOy@aAT+x4OAEGXPTwd*~oP#3M>h z$LF@kppW)fr}eehU1l3jy^Rj-6&%PQr7?}dm;9M@QfjWE_BF~!sPI4o<-bP35l7dN zqs!JAQs2ePwuoM|o{^_yjRb%B-ZSd3rk_&R^M&vNUjx@!r<)?^toyGQ!G&`0)tfx| z{{L!0|ECo0X`}*j*XE$PktMRV;hpD{rzUc4%lcQfz^yHF8P+`UH0BpG)0EDITH4a7 ze}PV;s7_V}X7Z%&`9~vHXzbCbRj22Mn$+(a&;m@xZ8qgDUmT1EriJ%rhB(xHPaoSj zuCFw#$)uKBor(Rf?m?y0eRLCECXX}F%v|zzJi*LmKlmJuqDg-P!Pl3$?iW0zn&C~9 z>Z||eLAcKkaLK-f1L;IGMH0k+B}pIziAeN!5+fZvRYsR4Lsia^&-48Tu<@j*)AQ?T z0u0bQST@B}<_+Kw^QBFg{z1-s6;2ZWs3~g_Z>PJh!6q`#z~Hyum3B+n%pbTARtPY} j*8LEdDg__;w>g9}hz1mU>;p)X0ZqEY>%(hZ+Kv7Jt%T`K literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/1b04dacf764a_seeding_4_freebie_model.py b/lib/migrations/versions/1b04dacf764a_seeding_4_freebie_model.py new file mode 100644 index 000000000..8012af4b5 --- /dev/null +++ b/lib/migrations/versions/1b04dacf764a_seeding_4_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding 4 freebie model + +Revision ID: 1b04dacf764a +Revises: 8954dbace60b +Create Date: 2023-09-02 11:58:37.206591 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '1b04dacf764a' +down_revision = '8954dbace60b' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/5f72c58bf48c_create_companies_devs.py b/lib/migrations/versions/5f72c58bf48c_create_companies_devs.py index c191bb2f9..66084b285 100644 --- a/lib/migrations/versions/5f72c58bf48c_create_companies_devs.py +++ b/lib/migrations/versions/5f72c58bf48c_create_companies_devs.py @@ -29,6 +29,16 @@ def upgrade() -> None: sa.Column('name', sa.String(), nullable=True), sa.PrimaryKeyConstraint('id') ) + + op.create_table( + 'freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(length=255), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), sa.ForeignKey('dev.id'), nullable=True), + sa.Column('company_id', sa.Integer(), sa.ForeignKey('company.id'), nullable=True), + sa.PrimaryKeyConstraint('id') + ) # ### end Alembic commands ### diff --git a/lib/migrations/versions/7a71dbf71c64_create_db.py b/lib/migrations/versions/7a71dbf71c64_create_db.py index 23e0a655b..395fe7be3 100644 --- a/lib/migrations/versions/7a71dbf71c64_create_db.py +++ b/lib/migrations/versions/7a71dbf71c64_create_db.py @@ -17,7 +17,15 @@ def upgrade() -> None: - pass + op.create_table( + 'freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(length=255), nullable=True), + sa.Column('value', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), sa.ForeignKey('dev.id'), nullable=True), + sa.Column('company_id', sa.Integer(), sa.ForeignKey('company.id'), nullable=True), + sa.PrimaryKeyConstraint('id') + ) def downgrade() -> None: diff --git a/lib/migrations/versions/8954dbace60b_seeding_3_freebie_model.py b/lib/migrations/versions/8954dbace60b_seeding_3_freebie_model.py new file mode 100644 index 000000000..21041a752 --- /dev/null +++ b/lib/migrations/versions/8954dbace60b_seeding_3_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding 3 freebie model + +Revision ID: 8954dbace60b +Revises: ed6dd4d46944 +Create Date: 2023-09-02 11:54:58.756855 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8954dbace60b' +down_revision = 'ed6dd4d46944' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/90acd96a56c6_create_freebie_model.py b/lib/migrations/versions/90acd96a56c6_create_freebie_model.py new file mode 100644 index 000000000..4b816bf9b --- /dev/null +++ b/lib/migrations/versions/90acd96a56c6_create_freebie_model.py @@ -0,0 +1,33 @@ +"""Create Freebie Model + +Revision ID: 90acd96a56c6 +Revises: 5f72c58bf48c +Create Date: 2023-09-02 11:33:27.263903 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '90acd96a56c6' +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.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/a357d3974d95_seeding_55_freebie_model.py b/lib/migrations/versions/a357d3974d95_seeding_55_freebie_model.py new file mode 100644 index 000000000..23aefad40 --- /dev/null +++ b/lib/migrations/versions/a357d3974d95_seeding_55_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding 55 freebie model + +Revision ID: a357d3974d95 +Revises: a999e21a9763 +Create Date: 2023-09-02 12:03:30.480276 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a357d3974d95' +down_revision = 'a999e21a9763' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/a999e21a9763_seeding_54_freebie_model.py b/lib/migrations/versions/a999e21a9763_seeding_54_freebie_model.py new file mode 100644 index 000000000..89461fbdf --- /dev/null +++ b/lib/migrations/versions/a999e21a9763_seeding_54_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding 54 freebie model + +Revision ID: a999e21a9763 +Revises: 1b04dacf764a +Create Date: 2023-09-02 12:01:16.615509 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a999e21a9763' +down_revision = '1b04dacf764a' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/ae0c1a34c35e_polished_relationships_and_added_forign_.py b/lib/migrations/versions/ae0c1a34c35e_polished_relationships_and_added_forign_.py new file mode 100644 index 000000000..074edf300 --- /dev/null +++ b/lib/migrations/versions/ae0c1a34c35e_polished_relationships_and_added_forign_.py @@ -0,0 +1,38 @@ +"""Polished relationships and added forign keys to Freebie model + +Revision ID: ae0c1a34c35e +Revises: dd36c80e9ece +Create Date: 2023-09-02 22:27:33.695026 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ae0c1a34c35e' +down_revision = 'dd36c80e9ece' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebies', schema=None) as batch_op: + batch_op.add_column(sa.Column('company_id', sa.Integer(), nullable=True)) + batch_op.add_column(sa.Column('dev_id', sa.Integer(), nullable=True)) + batch_op.create_foreign_key(batch_op.f('fk_freebies_dev_id_devs'), 'devs', ['dev_id'], ['id']) + batch_op.create_foreign_key(batch_op.f('fk_freebies_company_id_companies'), 'companies', ['company_id'], ['id']) + + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebies', schema=None) as batch_op: + batch_op.drop_constraint(batch_op.f('fk_freebies_company_id_companies'), type_='foreignkey') + batch_op.drop_constraint(batch_op.f('fk_freebies_dev_id_devs'), type_='foreignkey') + batch_op.drop_column('dev_id') + batch_op.drop_column('company_id') + + # ### end Alembic commands ### diff --git a/lib/migrations/versions/d45d79e35116_seed_data.py b/lib/migrations/versions/d45d79e35116_seed_data.py new file mode 100644 index 000000000..57688be0c --- /dev/null +++ b/lib/migrations/versions/d45d79e35116_seed_data.py @@ -0,0 +1,28 @@ +"""Seed Data + +Revision ID: d45d79e35116 +Revises: 90acd96a56c6 +Create Date: 2023-09-02 11:50:44.919728 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'd45d79e35116' +down_revision = '90acd96a56c6' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/dd36c80e9ece_update_models.py b/lib/migrations/versions/dd36c80e9ece_update_models.py new file mode 100644 index 000000000..c8169f97a --- /dev/null +++ b/lib/migrations/versions/dd36c80e9ece_update_models.py @@ -0,0 +1,40 @@ +"""Update Models + +Revision ID: dd36c80e9ece +Revises: ff8003d387e3 +Create Date: 2023-09-02 12:31:35.588055 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'dd36c80e9ece' +down_revision = 'ff8003d387e3' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('dev_companies', + 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_dev_companies_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_dev_companies_dev_id_devs')) + ) + op.create_table('dev_freebies', + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.Column('freebie_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_dev_freebies_dev_id_devs')), + sa.ForeignKeyConstraint(['freebie_id'], ['freebies.id'], name=op.f('fk_dev_freebies_freebie_id_freebies')) + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('dev_freebies') + op.drop_table('dev_companies') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/ed6dd4d46944_seeding_freebie_model.py b/lib/migrations/versions/ed6dd4d46944_seeding_freebie_model.py new file mode 100644 index 000000000..57b53caba --- /dev/null +++ b/lib/migrations/versions/ed6dd4d46944_seeding_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding freebie model + +Revision ID: ed6dd4d46944 +Revises: d45d79e35116 +Create Date: 2023-09-02 11:53:10.081778 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ed6dd4d46944' +down_revision = 'd45d79e35116' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/ff8003d387e3_seeding_6_freebie_model.py b/lib/migrations/versions/ff8003d387e3_seeding_6_freebie_model.py new file mode 100644 index 000000000..276a79969 --- /dev/null +++ b/lib/migrations/versions/ff8003d387e3_seeding_6_freebie_model.py @@ -0,0 +1,28 @@ +"""Seeding 6 freebie model + +Revision ID: ff8003d387e3 +Revises: a357d3974d95 +Create Date: 2023-09-02 12:06:40.253039 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ff8003d387e3' +down_revision = 'a357d3974d95' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..fb9a3a5f7 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,4 +1,4 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData +from sqlalchemy import ForeignKey, Column, Integer, String, MetaData, Table from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base @@ -9,6 +9,21 @@ Base = declarative_base(metadata=metadata) +##Association tables +dev_freebies = Table('dev_freebies', Base.metadata, + Column('dev_id', Integer(), ForeignKey('devs.id')), + Column('freebie_id', Integer(), ForeignKey('freebies.id')) +) + + +dev_companies = Table('dev_companies', Base.metadata, + Column('dev_id', Integer, ForeignKey('devs.id')), + Column('company_id', Integer, ForeignKey('companies.id')) +) + + + + class Company(Base): __tablename__ = 'companies' @@ -16,9 +31,17 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + devs = relationship('Dev', secondary='dev_companies', backref='companies') + def __repr__(self): return f'' + def give_freebie(self, dev, item_name, value): + # Create a new Freebie instance associated with this company and the given dev. + freebie = Freebie(item_name=item_name, value=value, company=self, dev=dev) + session.add(freebie) + session.commit() + class Dev(Base): __tablename__ = 'devs' @@ -27,3 +50,30 @@ class Dev(Base): def __repr__(self): return f'' + + freebies = relationship('Freebie', secondary='dev_freebies', backref = 'devs') + + def received_one(self, item_name): + # Check if any of the freebies associated with the dev has the specified item_name. + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, other_dev, freebie): + # Ensure that the freebie belongs to the dev who's giving it away. + if freebie.dev == self: + freebie.dev = other_dev + session.commit() + +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')) + + 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..edd681093 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,33 @@ #!/usr/bin/env python3 # Script goes here! +from faker import Faker + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Freebie, Dev, Company + + +engine=create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session=Session() + +session.query(Freebie).delete() +session.query(Dev).delete() +session.query(Company).delete() + +fake = Faker() + +freebies =[] +for i in range(50): + freebie=Freebie( + item_name =fake.unique.name(), + value=fake.random_int(min=1, max=50) + + ) + session.add(freebie) + freebies.append(freebie) +session.commit() +session.close() + + \ No newline at end of file