From 2b100581bbbcb8c9283294899a1652a368c412d8 Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 13:38:49 -0500 Subject: [PATCH 1/6] updgrades initial database --- lib/models.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..5c1da40ca 100644 --- a/lib/models.py +++ b/lib/models.py @@ -27,3 +27,14 @@ class Dev(Base): def __repr__(self): return f'' + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + + + + From 8dd363540817b084a10cd2030d9564a085792965 Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 13:56:51 -0500 Subject: [PATCH 2/6] Adds Freebies table --- lib/freebies.db | Bin 20480 -> 24576 bytes .../71c68f233f42_add_freebie_model.py | 37 ++++++++++++++++++ lib/models.py | 16 ++++++++ 3 files changed, 53 insertions(+) create mode 100644 lib/migrations/versions/71c68f233f42_add_freebie_model.py diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c963e832db481e7a7493e3029e691ac4dc..5e7aab5d2856b2dc38dd77535eb430b535708843 100644 GIT binary patch delta 406 zcmZozz}Rqrae}lUI|Bm)8xX?)%S0Vxadrm1a4%l|9}KKKyBPR+`FHZw^GWgS+SusA zW6~7M$}TP|%h<|Wl9-f}npTvWnv|JZ45QhcgIpa$TopnboqSvsprVr<`DC0jOHy;= z^AdAY6~Y{YoIMvb$LYY8!DY*Fuxq7<$DR{d^Y9JJ7Dg?Q@xdyrVIlBfc zK!ibxH8N8)@mK(KoH5WH@jx2YV2GWae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ e#dk}P$285{DB08^Db2(pd6U8yeiVU41_}T{Q53rX diff --git a/lib/migrations/versions/71c68f233f42_add_freebie_model.py b/lib/migrations/versions/71c68f233f42_add_freebie_model.py new file mode 100644 index 000000000..7432d672d --- /dev/null +++ b/lib/migrations/versions/71c68f233f42_add_freebie_model.py @@ -0,0 +1,37 @@ +"""Add Freebie model + +Revision ID: 71c68f233f42 +Revises: 5f72c58bf48c +Create Date: 2023-08-07 13:55:36.900290 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '71c68f233f42' +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/models.py b/lib/models.py index 5c1da40ca..07b315600 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", @@ -16,6 +17,10 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', backref='company') + devs = association_proxy('freebies', 'dev', + creator=lambda dev: Freebie(dev)) + def __repr__(self): return f'' @@ -25,6 +30,10 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', backref='devs') + companies = association_proxy('freebies', 'company', + creator=lambda comp: Freebie(company=comp)) + def __repr__(self): return f'' @@ -35,6 +44,13 @@ class Freebie(Base): 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'Freebie {self.item_name}' + + From deec8e1f4605e904228b130abc83c9e266133123 Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 14:40:43 -0500 Subject: [PATCH 3/6] Creates seed data --- .gitignore | 1 + lib/seed.py | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/.gitignore b/.gitignore index 1fcadf3de..ef1b6ac6c 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ jspm_packages # Virtual env metadata .venv +.vscode # pytest cache .pytest_cache diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..ae02d9130 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,95 @@ #!/usr/bin/env python3 # Script goes here! +from faker import Faker +from random import random as rc +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +import random +from models import Company, Dev, Freebie + +engine = create_engine("sqlite:///freebies.db") +Session = sessionmaker(bind=engine) +session = Session() + +fake = Faker() + +company_name = [ + "Amazon", + "Apple", + "Google", + "PlayStation", + "Microsoft", + "Meta", + "TikTok", + "Netflix", + "FlatIron", + "Spotify", +] + +item = [ + "t-shirt", + "backpack", + "lanyard", + "laptop case", + "sticker", + "pen", + "cup", + "bumper sticker", + "headphones", + "phone case", +] + + +def delete_records(): + session.query(Company).delete() + session.query(Dev).delete() + session.query(Freebie).delete() + session.commit() + + +def create_companies(): + companies = [] + for i in range(10): + company = Company(name=random.choice(company_name), founding_year=fake.year()) + session.add(company) + session.commit() + session.append(company) + return companies + + +def create_devs(): + devs = [] + for i in range(50): + dev = Dev(name=fake.name()) + session.add(dev) + session.commit() + session.append(dev) + return devs + + +def create_freebies(): + freebies = [] + for i in range(100): + freebie = Freebie(item_name=random.choice(item), value=random.int(0, 50)) + session.add(freebie) + session.commit() + session.append(freebie) + return freebies + + +def relate_one_to_many(companies, devs, freebies): + for freebie in freebies: + freebie.dev = rc(devs) + freebie.company = rc(companies) + + session.add_all(companies) + session.commit() + + +if __name__ == "__main__": + delete_records() + companies = create_companies() + devs = create_devs() + freebies = create_freebies() + companies, devs, freebies = relate_one_to_many(companies, devs, freebies) From 10eb97393d3adcf0e87d66dbe76f2388a1346079 Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 15:22:08 -0500 Subject: [PATCH 4/6] Completes table creation --- lib/freebies.db | Bin 24576 -> 24576 bytes .../0aef27113b29_generate_new_seed.py | 28 +++++++++++++ .../versions/42926826b376_create_seed.py | 28 +++++++++++++ .../versions/b1f8203fe609_modifies_dev.py | 28 +++++++++++++ lib/models.py | 38 +++++++++--------- lib/seed.py | 17 ++++---- 6 files changed, 111 insertions(+), 28 deletions(-) create mode 100644 lib/migrations/versions/0aef27113b29_generate_new_seed.py create mode 100644 lib/migrations/versions/42926826b376_create_seed.py create mode 100644 lib/migrations/versions/b1f8203fe609_modifies_dev.py diff --git a/lib/freebies.db b/lib/freebies.db index 5e7aab5d2856b2dc38dd77535eb430b535708843..57c3d0acec8cf110e690a14ae3c3248198b53d1b 100644 GIT binary patch literal 24576 zcmeI4YiuJ|701V(vBxvMGk5&RI-6{gn@zHblWaE0b{{EyWfLd6**vz6yG!XKo!B?= zDE3Skk2m##KwDA7LoFZp00Jsi2vvm-R06c6ph^e?lnNn%U=aoJsiIYp3PK2hpn@~D z6-@9x$lx$gcQFq8mPUCz&?jAxoF7y+QcfW9(yPtCVF~&k1LM8S)f}srJDvV?SBX7(y7@@iezTbEvLx7m5j)eks}vYGpWT? znyjv6$m)H|%i{#h4lQn&dXbXLv+23>vuW3ORWFq3zPoG4(W@J`0=Sl}RovChN|W_c z`ohX=`hIdTbw3#~a!J>7Zf$ivlb(g-WNT+*U(&{{0QFs{f-J11Qx_Ij-T5Q89FioR zT1cf+t8=M!QZu{G{~khb|fCp>M{cVvp z(`<$!C$EQjG11rOyH2ZF8YMM$1W&$(`QNN#bJ8uVY~~Ded!s^i``}WxQIqtEiLo)? zV^UR(UZBNIBfD{x+9ks>n-2XRWle*wzWTHcvs~P7sgaY@Nl()qXo;o>8@oGM;*oeD z9xTtD{$S$XF&}4`Ir?bn{RL>>4ZZAG)#HukU{g&79!|87d$K9;@!>ym@Q-bb03*N% zFanGKBftnS0*nA7zz8q`i~u9>4k4iW{6m{lTW6;yPj1oElQS~Z#qR&#A&bk(U<4Qe zMt~7u1Q-EEfDvE>7y(9r5nu%B1Ta4&9lZZ{|NmdcB@X`yzlv|-@8jq3m+@2hQ}{X< z*~SPk0*nA7zz8q`i~u9R2rvSS03*N%FarN80VE6DVSmQh$yht$50P}>=-Vjd9?cf@ zYnCZ~O%?^N!@mO0Mu@MVpgXc?S=$9FzKj9~j&5Q>;QIV4M%K1U)|Mmw6!8a!UqF8M zsGjgeND!6 z;racd`hdEmo>Yk%QU0#{Uip>sBjtJJS>-dzN0eRVLFJ-yRynFD=pX2H^h@+z^mX(_ z^aT1KBw-sPzz8q`i~u9R2rvSS03*N%yn6^J(>&Lo(Tl|jS+HpZPx0K)Wonz2N!E*o zlaEdE-0@|-Y*Uk@t(c7W#)8p&aUWYbd2Z5=IsfxXqY<5=#_$H<54#<)lHHrROiQ%5NgRP z<;yx*$!6i5XhwD?KEiV+F6s^~R7`T7!sFI9q>2plT+&rV$%^hcdAe7^#~|E#UN_x( z&RcslIs`fAtg`Kxv_jU)x=pV|2f@}zk<(3s79s->Yel!A!r6Lwd=z4VsRA4}Hx09- z^tZDBHH+l1gzu&g_D7kI-Otl2h> zxU1>HAy@PQ2#RP`tkuPVY`L8EXbi&wr}awFGIL~3FBG7kOsu-XZMtm%nfbD5Y6`@@ z2rc4voUyfKm{9~W(?%Ag=b#5{8*0X3n05|Y)gjCJ9<&6O!LVYPMpm!2b6DcJo_T17 z1az_139i(=C&q64v4q|jiH;_JoI_conGyN%euX-my`g^SfZtp8*te;BJkYZ zD|TsuKr`kGfC}n#cAz)N{QSDcL%ezYD!iNGlHoY8kWs&@8Gusa+G}1u@Pcy%8irf~ z{?t~ahqzp*+#{{wH}G%p_waN0bJAV-qu9X@;|q8acVR&qS6^3uroN~?r#_`VuI@>_ zYF52Zy+a*U6B1JXsr*j)x$*<$8_F}vXG4EcKBm~pBk)&%8ReJ~SA6Ktp;ysw(M#wC zdKx{6DrhHk6J^i>nnA-T8hR=GR`?I$o8cG3&xUS$X4lGRIeW>VDVYJSe~Qr@tgWI#rD2DupcWy`z$$7FP-cC<^)&bXkRsCn1(j0^_j zLoHF`SkQVrQKJ(9lxRdf6W}%Mi8B?Eu~@Z8b-h|A@--%?)9%ZY!}X2J1V2YK~1mat!D}J^YKSoqMc62iH&vvk|B7}llG9Ow6PvPda$81bW}<_ z&~9ok7Pa?za!V%yk^6&OkGpt!c4rqpA`;^7ZIN?kP!3C9StlpA-yVXjFDwLgyQ01R^1{*a$f@E+iJ( zVLc^C@l*@3BM~7n-_E^T^K)G6TyshN9a3Vpo&WF@pSY*pKr#?QcQ@n>jrp~^Je8?I zx7^qr%^2cCA?-aL&#~!1_;xpv4?T!ZH=J-(jGbyu({~-JVL0NK&G!UDQdDM~7>2;LH{UQS0=`O<-tebf_V?TMHfPfIx5=^!_~Pm9)5L zX0lgAvBo?c6l2lm9y)O}7>~4+G&0O5w02sD;SW9>7gt+m#55tUv{R1N%f7Cm^{oVTwGDxnZ)IMVgVZahi$ICWSBjLdXKV3_u{TSy13U L|HKK>Y 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/42926826b376_create_seed.py b/lib/migrations/versions/42926826b376_create_seed.py new file mode 100644 index 000000000..b52f009b8 --- /dev/null +++ b/lib/migrations/versions/42926826b376_create_seed.py @@ -0,0 +1,28 @@ +"""create seed + +Revision ID: 42926826b376 +Revises: 71c68f233f42 +Create Date: 2023-08-07 14:41:35.629937 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '42926826b376' +down_revision = '71c68f233f42' +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/b1f8203fe609_modifies_dev.py b/lib/migrations/versions/b1f8203fe609_modifies_dev.py new file mode 100644 index 000000000..0e3ab01b7 --- /dev/null +++ b/lib/migrations/versions/b1f8203fe609_modifies_dev.py @@ -0,0 +1,28 @@ +"""modifies dev + +Revision ID: b1f8203fe609 +Revises: 0aef27113b29 +Create Date: 2023-08-07 15:19:39.694027 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'b1f8203fe609' +down_revision = '0aef27113b29' +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 07b315600..49e7b5e79 100644 --- a/lib/models.py +++ b/lib/models.py @@ -10,47 +10,45 @@ Base = declarative_base(metadata=metadata) + class Company(Base): - __tablename__ = 'companies' + __tablename__ = "companies" id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) - freebies = relationship('Freebie', backref='company') - devs = association_proxy('freebies', 'dev', - creator=lambda dev: Freebie(dev)) + freebies = relationship("Freebie", backref="company") + devs = association_proxy("freebies", "dev", creator=lambda dev: Freebie(dev=dev)) def __repr__(self): - return f'' + return f"" + class Dev(Base): - __tablename__ = 'devs' + __tablename__ = "devs" id = Column(Integer(), primary_key=True) - name= Column(String()) + name = Column(String()) - freebies = relationship('Freebie', backref='devs') - companies = association_proxy('freebies', 'company', - creator=lambda comp: Freebie(company=comp)) + freebies = relationship("Freebie", backref="dev") + companies = association_proxy( + "freebies", "company", creator=lambda comp: Freebie(company=comp) + ) def __repr__(self): - return f'' + return f"" + class Freebie(Base): - __tablename__ = 'freebies' + __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')) + dev_id = Column(Integer(), ForeignKey("devs.id")) + company_id = Column(Integer(), ForeignKey("companies.id")) def __repr__(self): - return f'Freebie {self.item_name}' - - - - - + return f"Freebie {self.item_name}" diff --git a/lib/seed.py b/lib/seed.py index ae02d9130..5a544a99e 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,11 +1,11 @@ #!/usr/bin/env python3 # Script goes here! +import random from faker import Faker from random import random as rc from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -import random from models import Company, Dev, Freebie engine = create_engine("sqlite:///freebies.db") @@ -54,7 +54,7 @@ def create_companies(): company = Company(name=random.choice(company_name), founding_year=fake.year()) session.add(company) session.commit() - session.append(company) + companies.append(company) return companies @@ -64,27 +64,28 @@ def create_devs(): dev = Dev(name=fake.name()) session.add(dev) session.commit() - session.append(dev) + devs.append(dev) return devs def create_freebies(): freebies = [] for i in range(100): - freebie = Freebie(item_name=random.choice(item), value=random.int(0, 50)) + freebie = Freebie(item_name=random.choice(item), value=random.randint(1, 60)) session.add(freebie) session.commit() - session.append(freebie) + freebies.append(freebie) return freebies def relate_one_to_many(companies, devs, freebies): for freebie in freebies: - freebie.dev = rc(devs) - freebie.company = rc(companies) + freebie.dev = random.choice(devs) + freebie.company = random.choice(companies) - session.add_all(companies) + session.add_all(freebies) session.commit() + return companies, devs, freebies if __name__ == "__main__": From 8fbd1221bcb16aac6ed622c9ce9aa5c908f8ebc8 Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 15:26:06 -0500 Subject: [PATCH 5/6] Changes repr in Freebie --- lib/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models.py b/lib/models.py index 49e7b5e79..aefa82a03 100644 --- a/lib/models.py +++ b/lib/models.py @@ -51,4 +51,4 @@ class Freebie(Base): company_id = Column(Integer(), ForeignKey("companies.id")) def __repr__(self): - return f"Freebie {self.item_name}" + return f"" From 0e9db45f0017d795a72c29359ca95afe7ca3099e Mon Sep 17 00:00:00 2001 From: Jory Roberts Date: Mon, 7 Aug 2023 22:32:30 -0500 Subject: [PATCH 6/6] Completes methods --- lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 3735 bytes lib/debug.py | 14 +++-- lib/freebies.db | Bin 24576 -> 24576 bytes .../versions/595c4ef42041_updates_seed.py | 28 ++++++++++ lib/models.py | 51 +++++++++++++++++- lib/seed.py | 2 +- 6 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 lib/__pycache__/models.cpython-38.pyc create mode 100644 lib/migrations/versions/595c4ef42041_updates_seed.py diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ad215753e958cdff1ec4fec53fabca72126d63c GIT binary patch literal 3735 zcmb7HOLN=E5yk)@06s-M?cMCInb?~wQ zfaE2MI>}f6f-P6cNB@ERj^sMmoN~@>FV5EkQlu2C${E%)duDoo>Bra8_;a&aGth4Q z{h$0z-7x+|gT-cJ@CZHs2M9Mfi;aZ&EHQmEv3x7BeLJc66-H}j>?E%5CZ6x`mBF~8(5F+()DcgFm-Xo)tjzGVKgSUxlS6<*`@ zi219cB35|=^J}6e)_4=#`d0>T@ue3AUlQwQmcM~uVr_oI}g z8o9`GJTVE6gv8k9A|H&`^Jj5Xi2J=>Z%+!*k3_!3`?TDTQm)LsqwyDeN5Q9`6=6RX zK^i8an`1c8N(7(JXK+3trQpG$Bp$SkJy0(gWa)`WNheHt33TPqbwCzcY!wV1q31&o zVfc(2zR8(y30qXo5CzRTUG9MmJGvmq^bkWz#vcGFjXJQC<)~#ID!k^C#9*B zTgr^yFzMmA%A46xSzMe980Kb;cnf_SJtt5U#su;HlHsl94j%9!=J2;;Q zXeN7jz-Q>W17cV=-PzJ&0Sj@>%2AhZ2Y;gxbgCspC2vjWy5TVCNFM(zmp>u4j%|DQzEWl|&VBWy#Swkg`K z+J|uSfL_o688>ir$-Z?d~VoglS z9Is5h0)E1dOu2zFkV~+XrHB1fX>GGT9k7J5k!1rQZ8vbF=gGN!OB} z;%%i7ZiB;w4p`!qdtH8zVjz$rc#x&ycaWUshc+UBx`$vUeHXP`@DK}EJfW&OM}^PB z(N|c_Df$hZ(xG!U>6{nq*N4EnF<*Ir?Hx%dmOmqMkH{P?8YqOIZ_sBr*P$@S__F*Z zZTc0FUlaKa5weg5vHUG@a}>V=z;cyD$Pe=OM6QJ_g(EHI6!=rf0v+KTwNL5K@es>34w|9Y+Z;7M7Tl%4~aZ{ro$`tC2JwgxN0db)FK z=D$ntCNI&&qQiOz%>2ruYi{2-1yX_HyQkK~I&&m!qlBfL za5xmGSnb0sO1l-gMO(D9$AzNIB)`N+_$QE-r$p=-(h&A|JWm2AV!Wg)m;9 zndp-2PPhHuajuVhhfYRT_i>h!AmV+hS|s%R^SN)xUK` zVBs@Fe}(8fSmLwKkW^)rHI7q$kSKSz{2b8^Rp(8kvFtBV*y?*$qqfA$JB)#f lwyYfc;G6dXx_>q=C1#RWoZ=`&Rqo{{s0QF0B9n literal 0 HcmV?d00001 diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..a13e4697c 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 models import Company, Dev +from models import Company, Dev, Freebie -if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() +if __name__ == "__main__": + 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 57c3d0acec8cf110e690a14ae3c3248198b53d1b..7da7c9aa86a5115254117c6339a3e929241b776c 100644 GIT binary patch delta 52 xcmZoTz}Rqrae_4C`H3>ljORBdOp)g?wKPpONlh~`GB7dRr0|6wMPQME0RY&e5ODwi delta 52 xcmZoTz}Rqrae_4Cxrs8)jOR8cOp)hFGEB2DGB8d{H8Zf>r0|6wMPQME0RZ1V5YGSr diff --git a/lib/migrations/versions/595c4ef42041_updates_seed.py b/lib/migrations/versions/595c4ef42041_updates_seed.py new file mode 100644 index 000000000..a7f62fce4 --- /dev/null +++ b/lib/migrations/versions/595c4ef42041_updates_seed.py @@ -0,0 +1,28 @@ +"""updates seed + +Revision ID: 595c4ef42041 +Revises: b1f8203fe609 +Create Date: 2023-08-07 22:30:29.516700 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '595c4ef42041' +down_revision = 'b1f8203fe609' +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 aefa82a03..f3cbda0de 100644 --- a/lib/models.py +++ b/lib/models.py @@ -2,6 +2,13 @@ from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.associationproxy import association_proxy +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from sqlalchemy import desc + +engine = create_engine("sqlite:///freebies.db") +Session = sessionmaker(bind=engine) +session = Session() convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", @@ -18,9 +25,26 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) - freebies = relationship("Freebie", backref="company") + freebies = relationship("Freebie", backref=backref("company")) devs = association_proxy("freebies", "dev", creator=lambda dev: Freebie(dev=dev)) + def give_freebie(self, dev, item_name, value): + new_freebie = Freebie(item_name=item_name, value=value) + new_freebie.company = self + new_freebie.dev = dev + + print( + f"{new_freebie.dev}, {new_freebie.item_name}, {new_freebie.value}, {new_freebie.company}" + ) + + @classmethod + def oldest_company(cls): + oldest_company = ( + session.query(Company).order_by(desc(Company.founding_year)).first() + ) + + return oldest_company + def __repr__(self): return f"" @@ -31,11 +55,25 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name = Column(String()) - freebies = relationship("Freebie", backref="dev") + freebies = relationship("Freebie", backref=backref("dev")) companies = association_proxy( "freebies", "company", creator=lambda comp: Freebie(company=comp) ) + def received_one(self, item_name): + print(f"Checking for {item_name} in freebies:") + for freebie in self.freebies: + print(f"- {freebie.item_name}") + if freebie.item_name == item_name: + return True + return False + + def give_away(self, dev, freebie): + if freebie in self.freebies: + freebie.dev = dev + session.commit() + return freebie.dev + def __repr__(self): return f"" @@ -52,3 +90,12 @@ class Freebie(Base): def __repr__(self): return f"" + + @classmethod + def print_details(cls): + freebies = session.query(Freebie).all() + details = [] + for freebie in freebies: + detail = f"{freebie.dev.name} owns a {freebie.item_name} from {freebie.company.name}" + details.append(detail) + return "\n".join(details) diff --git a/lib/seed.py b/lib/seed.py index 5a544a99e..f3793ddd8 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -71,7 +71,7 @@ def create_devs(): def create_freebies(): freebies = [] for i in range(100): - freebie = Freebie(item_name=random.choice(item), value=random.randint(1, 60)) + freebie = Freebie(item_name=random.choice(item), value=random.randint(0, 60)) session.add(freebie) session.commit() freebies.append(freebie)