From f5739a4caa6b99a0c0d5fac1bd70f47a3745c45c Mon Sep 17 00:00:00 2001 From: + <+> Date: Fri, 14 Mar 2025 17:40:38 +0300 Subject: [PATCH 1/2] freebies-tracker --- lib/models.py | 111 +++++++++++++++++++++++++++++++++++++++++++++++++- lib/seed.py | 93 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+), 1 deletion(-) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..64474c522 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, ForeignKeyConstraint,Table from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base @@ -9,21 +9,130 @@ Base = declarative_base(metadata=metadata) + +# #Association table + +companies_devs = Table( + 'companies_devs', Base.metadata, + Column('company_id', Integer, ForeignKey('companies.id'), primary_key=True), + Column('dev_id', Integer, ForeignKey('devs.id'), primary_key=True) +) + + class Company(Base): __tablename__ = 'companies' + #one-to-many relationship + freebie=relationship('Freebie',backref='company') + + + # Many-to-many relationship with Dev + devs = relationship("Dev", secondary=companies_devs, back_populates="companies") + + id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) + def __init__(self, name, founding_year): + self.name = name + self.founding_year = founding_year + self.freebies = [] # To store all freebies associated with this company + + + # Method to give a freebie to a developer + def give_freebie(self, dev, item_name, value): + freebie = Freebie(item_name=item_name, value=value, dev=dev, company=self) + self.freebies.append(freebie) + return freebie + + + # Method to return all freebies given by this company + def get_freebies(self): + return self.freebies + + + # Method to return all developers who have collected freebies from this company + def devs(self): + return set(freebie.dev for freebie in self.freebies) + + # Class method to get the oldest company + @classmethod + def oldest_company(cls, companies): + #Find and return the company with the earliest founding year + return min(companies, key=lambda company: company.founding_year) + def __repr__(self): return f'' class Dev(Base): __tablename__ = 'devs' + +#one-to-many relationship + freebies=relationship('Freebie',backref='dev') + + + # Many-to-many relationship with Company + companies = relationship("Company", secondary=companies_devs, back_populates="devs") + id = Column(Integer(), primary_key=True) name= Column(String()) + def __init__(self, name): + self.name = name + self.freebies=[] + + # Method to check if the dev has received a specific freebie item + def received_one(self, item_name): + # Check if any freebie associated with this dev has the given item_name + return any(freebie.item_name == item_name for freebie in self.freebies) + + + + def give_away(self,dev,freebie): + if freebie.dev == self: + # If the freebie belongs to the current developer, change its ownership + freebie.dev = dev + dev.freebies.append(freebie) # Add the freebie to the new dev's list + # remove the freebie from the current dev's list + if freebie in self.freebies: + self.freebies.remove(freebie) + return True + return False + + + + # Method to return all the companies that gave freebies to this developer + def companies(self): + return set(freebie.company for freebie in self.freebies) + def __repr__(self): return f'' + +class Freebie(Base): + __tablename__='freebies' + id=Column(Integer(),primary_key=True) + item_name=Column(String(255)) + value=Column(Integer) + + +#foriegnkey to dev and company + dev_id=Column(Integer,ForeignKey('devs.id')) + company_id=Column(Integer,ForeignKey('companies.id')) + + def __init__(self, item_name, value, dev, company): + self.item_name = item_name + self.value = value + self.dev = dev + self.company = company + + def print_details(self): + # Format and return the string as specified + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}." + + + + def __repr__(self): + return f"" + diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..005174a96 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,96 @@ #!/usr/bin/env python3 # Script goes here! +from models import Company,Dev,Freebie,Base +from sqlalchemy.orm import sessionmaker +from sqlalchemy import create_engine + +engine = create_engine('sqlite:///freebies.db') + + +Base.metadata.create_all(engine) + +Session = sessionmaker(bind=engine) +session = Session() + +#creating a session +session.query(Company).delete() +session.query(Dev).delete() +session.query(Freebie).delete() + +#seed data to dev table +dev1 = Dev(name="Alice") +dev2 = Dev(name="Bob") +dev3 = Dev(name="Mary") +dev4 = Dev(name="James") +dev5 = Dev(name="Mark") + +#seed data to company table +company1 = Company(name="Tech Corp", founding_year=2000) +company2 = Company(name="Code Masters", founding_year=2010) +company3 = Company(name="Flat Iron", founding_year=2009) +company4 = Company(name="Google", founding_year=2011) +company5 = Company(name="Microsoft", founding_year=2019) + + +#seed data to freebies table +freebie1 = Freebie(item_name="T-shirt", value=20, dev=dev1, company=company1) +freebie2 = Freebie(item_name="Sticker Pack", value=5, dev=dev2, company=company2) +freebie3 = Freebie(item_name="Mug", value=25, dev=dev1, company=company3) +freebie4= Freebie(item_name="Book", value=30, dev=dev3, company=company2) +freebie5= Freebie(item_name="Pen", value=13, dev=dev3, company=company4) +freebie6 = Freebie(item_name="Watch", value=26, dev=dev2, company=company1) +freebie7 = Freebie(item_name="Bag", value=6, dev=dev4, company=company3) +freebie8 = Freebie(item_name="Mouse", value=19, dev=dev4, company=company5) +freebie9 = Freebie(item_name="Keyboard", value=28, dev=dev5, company=company5) +freebie10 = Freebie(item_name="File", value=17, dev=dev5, company=company4) + + +# Add Freebie instances to the session +session.add_all([freebie1, freebie2, freebie3, freebie4, freebie5, freebie6, freebie7, freebie8, freebie9, freebie10]) + +# Commit the Freebie objects to the database +session.commit() + +#Add and commit the data +session.bulk_save_objects([dev1,dev2,dev3,dev4,dev5,company1,company2,company3,company4,company5,freebie1,freebie2,freebie3, + freebie4,freebie5,freebie6,freebie7,freebie8,freebie9,freebie10]) + + +session.commit() + + +print("Devs:") +for dev in session.query(Dev).all(): + print(dev) + +print("\nCompanies:") +for company in session.query(Company).all(): + print(f"{company.name} (Founded: {company.founding_year})") + +print("\nFreebies:") +for freebie in session.query(Freebie).all(): + print(f"{freebie.item_name} (Value: {freebie.value})") + print(f" Dev: {freebie.dev.name}") + print(f" Company: {freebie.company.name}") + + +# Function of printing details +freebies = [freebie1, freebie2, freebie3, freebie4, freebie5, freebie6, freebie7, freebie8, freebie9, freebie10] + +for freebie in freebies: + print(freebie.print_details()) + + + +for freebie in freebies: + print(freebie.print_details()) + +# Example of finding the oldest company +companies = [company1, company2, company3, company4, company5] +oldest = Company.oldest_company(companies) +print(f"The oldest company is {oldest.name}, founded in {oldest.founding_year}.") + + + + From bbc553cd47ed73ceea9e1206fa37f472c6c68a9a Mon Sep 17 00:00:00 2001 From: + <+> Date: Fri, 21 Mar 2025 12:13:17 +0300 Subject: [PATCH 2/2] updated migrations --- freebies.db | Bin 0 -> 24576 bytes lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 4509 bytes lib/freebies.db | Bin 20480 -> 32768 bytes lib/migrations/__pycache__/env.cpython-38.pyc | Bin 0 -> 1691 bytes ...bf48c_create_companies_devs.cpython-38.pyc | Bin 0 -> 1052 bytes .../7a71dbf71c64_create_db.cpython-38.pyc | Bin 0 -> 687 bytes .../a050fe785c50_new_table.cpython-38.pyc | Bin 0 -> 1404 bytes ...generate_freebie_migrations.cpython-38.pyc | Bin 0 -> 757 bytes .../versions/a050fe785c50_new_table.py | 45 ++++++++++++++++++ ...ee3b064_autogenerate_freebie_migrations.py | 24 ++++++++++ 10 files changed, 69 insertions(+) create mode 100644 freebies.db 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/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/a050fe785c50_new_table.cpython-38.pyc create mode 100644 lib/migrations/versions/__pycache__/ee7bfee3b064_autogenerate_freebie_migrations.cpython-38.pyc create mode 100644 lib/migrations/versions/a050fe785c50_new_table.py create mode 100644 lib/migrations/versions/ee7bfee3b064_autogenerate_freebie_migrations.py diff --git a/freebies.db b/freebies.db new file mode 100644 index 0000000000000000000000000000000000000000..c661b8c6c3ecd37f674c7c6b37f973247f5ec06c GIT binary patch literal 24576 zcmeI(%Wu<290%|jKbw#+lu|`3l+LA6BNZe-oVbuiZt2pb#SI`%!AT~ql{5z1si@#m z1c#OOf8Y;5;xE`g0BN<-iW`p$LgLDmBQrK>FhV@Up%VIzP7Te8%w=MYfid(&0ap%unxKLIlJ6?Y%M%So7N9;7m zwWvrt*uL!zcE5_7I8%pySm0uX=z1Rwwb2tWV=5P$##AaHO3%rwZXw$zvZ)31cV zz<$9D6{z{`Fo=R~Y`-n&205-R2f=1v*sqRi2AR{UK}YbK7sVos?3awHOB$lR#j8Ph z+x|bj|9?){2l)%YJNBAAKez#+We7k30uX=z1Rwwb2tWV=5P$##epFz>)Jdt*_uFE^ zkhwqQvpA8h>twp-g*{tKGrJbm$<$)dQuqJzp?@R@KmY;|fB*y_009U<00Izz00e$x zfxH?U?*D(|8OG2c009U<00Izz00bZa0SG_<0)(jl|MTpYdjJ0o`&YjI|CBvuf3y2+ zAcIH{fB*y_009U<00Izz00bZa0SNq%Kp}6DDN1Q=xOv<(3%T@Y(c82P^YDa4N~$av zMq1fLj<74JWlnRWc literal 0 HcmV?d00001 diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..071d410531040c5cf29fe8a70876eb7e926926ec GIT binary patch literal 4509 zcmb_f&2JmW72la%l1qwQQL^l|=|@=0Zp=2K+`1^*MpoR&P+J7ip>|tjfnc%Xj3i3C zTzYn;gam^Ym4W7>zo0OX9(Cyd&_AN5z2=m2ZU&0<_hxtbWg0!SOU&cU?3*`l-pB9F z{=U(u8F>Ej?!S)z)HIAQXfXTG+ec{eKS6{cSYU+AWg&NYXu4)-xmH+mOJUh9hZVQN zh=&JuSaqvm&8_LN8LWhLw~oFgN5!&|8%iVawH1M{-e>revaa z$;67NUs;%G=ozP&xwPEouMM#(n$HckJmB2AvQ4H(Bm88<`biR z>r0%%XjjtOexzjYxc|N!rscgTI1l@2<+uGr9!r&$pCqc+KThorWa2;e6F=RUvhPLx zI8lDDpQNRy{$U{7JgqAk_(>0MPI`m1a_D!@lssy)v?*ja@D<)&Nbk^(Wy+7vM(-S* zd3Wz6wAkzWp=`$(cC`}T{pk!uNTsCkW;r2r4QrsD*NyrYvQOJ$(hi}kAYGkq6b}4; zPsW~*7jat4#zU_sUe+h?Iz939nx!iP)eC(!^v=i-;3uvMtph`sj5Yg|FnEL({~1IY zE)#~!1#?Yl2`)@wU2(UBeo2-EgM&@CB5hf{Gz6TBcQuSwE{#j(*0Xu^8loy{&kffh zXXAfWG=ziyX69Z-u29-Ztl#qvZs$aOskV~rImdpW0=3{wr z&E0A&VK{*^yACTa}ak1!_@Y?UcZ-k z-dzZf%OD0T<2P#N*6I`tU5j4k5BZju^-){sBy>!Z4lLM}^{F*BPTA*tZ2g@vV{9Rr z_`$W6R(pvIbp}6`C=+SLhW5LdFS@k`Qs&nVvac0^l@( zeDnuM1(KWHAXeXijKy7?c~LuH$*f?GZY|$!&cAfLNl-W#2;|kN@i!F97p4w}QFSMm z(|XBv5tbS!mbn25uH-;@-mfM~%q4gB@}RvzP(YaEd1=k_fDq>>I9^)!yl3ZrkiTho zS$)ZdstTD|RIO6)0TEJMkvCJ`6N-Rh3S#OG4Sz&ri#S$L@8TH6=p+*Amo)v5$nANu zNkhU@YVjK&HnYsS<(Lkuu^P84_?2vnvzn#(x?q`mCZ*^U)Bjs3$_r2*52AHxqx3hAMtXp_`cvMT}a!i)NHCN&H2qHILcsumU% z#?V`6!FmglPM5E#oIheF%S%3LE^hKlX{Y1u(FzLGF+TPS z30neb8gb7^n2y~1z!OogKk#xSE$u*)mU@SFBcNWoCBagEX3IQ-3h-Q0yR?#Oih4wZ zz&1n27WFhb>Ow(5q|s5mN4+UL-l5?>k>3z`Ee;Z(P&n(lKZAoD2w1iq+tiTL1;^Y& z$@B;ylZIsBFqxwGX70H zW4)wsd|PM(?=Pyf;qrK+j5x0 zkribfh;+xP#m@pi=$^=MsPryVMaXK3e61=(C`epq%HD}om}NA5AG&YMypf+IotaN} zwE_nEkS;#B6#-9by@zkJ3<=0D+08&-3U1SIN;Zkx-pOuYyA*+O3*-*NcZ|sm{e*kmvlXL(8 literal 0 HcmV?d00001 diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..03de8b78ee7d7f8f1cf7598a9fdbd4547c3cade2 100644 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/a050fe785c50_new_table.cpython-38.pyc b/lib/migrations/versions/__pycache__/a050fe785c50_new_table.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1dabb8dfaff26d00d54c8fe700a45bd1ab57420d GIT binary patch literal 1404 zcmZux!EW0|5ap5-Nzt;CI7XTlEgb@gJIu4?GH}6Cxg+6KRO#64~G8PiSN1}h_lvXN*DQM(Ao8@I=ddp#FALf zC6B8WyX_7s=kygFrfH>i&488qO9S*$zcyDI?ah2^)JW?iqy_qvfi-2c$^v`Ez^N_i zqzG@Xad(4X+n_^hrLQd3#M!I8c0TfIz&_y)9KfBo4DQ}UzqhvAA{#ziWW#xb+-7*V zVe;}e!}}YY7JmLu!A>g7=Zlf>51fJ2EI((j{)fFp?rU|_2 z+$=awAoy`KCXX__va2A~!f!rZ*aT>3I1`CDCRR#MK(&(+v#@gT z;Xk^_>aJ7d({lEkYAvF4jzO2)ZI*nNLGZ<{#ZIVRTk7Ofb>ccD!#bgrUPQ_|7wJ6X z%6`sEoT5}m&xFKe%74b?x!^@9qlA}=P1MmZGRY#jyggyPC}qN@?=|_50@UIk;YlG% zZzeMIE^vXV$TQ@n7YjfypG5`sPrZCu&IIr0r~UPo`V=aDh0;rtv6m%N8I@FPg||Ri z6$zN+JhQtFz0Xi6h&T+D9i^C!lX&g5_#=(dc!t?h-Xlxp$n_hf_A7_sRvpWT$Fq>~7*on{ oz#KUgq2TpS>o}h!<~+>=%v1b<-VLp|OTx4}%rQ+?cjMr}|B+gNLjV8( literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/ee7bfee3b064_autogenerate_freebie_migrations.cpython-38.pyc b/lib/migrations/versions/__pycache__/ee7bfee3b064_autogenerate_freebie_migrations.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a39cbe57c2799e0a24a535efa97f1d4fc600fabf GIT binary patch literal 757 zcmah`J&&6}5M4fOFlR@RQlzD|6b_8fcV~2pBAtt*xgw`DGzi$SK>?QRVn@F2q~u@Z z4_uKyv{I^6`3tEs5J%8uR`WDZyZd(L?T6XSA{gIa{n$M!g#2vDFf=4@FvVL0N(sjC z&`NC(0^9femE$cPe_=2Dz*`5NcfP({EY`kd{lZDeT#+iP@51R&Sx$$Fcx23>+4CxG zZwv#SBDa`AN1)`MJSlfigpZN+@cXOF8Ef2(mEdmR00pZ{s2VqA6x=$C1vpE$J~kPv zoOi~{SxUv=?T{JGigK-WoZ;iBQBs!@|3qvOG|tz;v&tUJW5r> z(&VRama|qZ>S@B`D$SxIPM{FdqEJIcMZ~JEdEP!VXsENk>&m<-8QmA~y8R^a96>jx MimB^Lx3p*aA4;LTjsO4v literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/a050fe785c50_new_table.py b/lib/migrations/versions/a050fe785c50_new_table.py new file mode 100644 index 000000000..ce93d9e23 --- /dev/null +++ b/lib/migrations/versions/a050fe785c50_new_table.py @@ -0,0 +1,45 @@ +"""new table + +Revision ID: a050fe785c50 +Revises: ee7bfee3b064 +Create Date: 2025-03-21 12:10:42.250410 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a050fe785c50' +down_revision = 'ee7bfee3b064' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('companies_devs', + sa.Column('company_id', sa.Integer(), nullable=False), + sa.Column('dev_id', sa.Integer(), nullable=False), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name=op.f('fk_companies_devs_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_companies_devs_dev_id_devs')), + sa.PrimaryKeyConstraint('company_id', 'dev_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(), 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') + op.drop_table('companies_devs') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/ee7bfee3b064_autogenerate_freebie_migrations.py b/lib/migrations/versions/ee7bfee3b064_autogenerate_freebie_migrations.py new file mode 100644 index 000000000..7b939ec5f --- /dev/null +++ b/lib/migrations/versions/ee7bfee3b064_autogenerate_freebie_migrations.py @@ -0,0 +1,24 @@ +"""autogenerate freebie migrations + +Revision ID: ee7bfee3b064 +Revises: 5f72c58bf48c +Create Date: 2025-03-21 12:09:00.961192 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'ee7bfee3b064' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + pass + + +def downgrade() -> None: + pass