From 18fe5b0f3bf45ebc914528a34db8099d283068de Mon Sep 17 00:00:00 2001 From: Shanley Caswell Date: Thu, 20 Jul 2023 17:52:59 -0400 Subject: [PATCH] dliverables met --- lib/__pycache__/freebietracker.cpython-38.pyc | Bin 0 -> 452 bytes lib/__pycache__/models.cpython-38.pyc | Bin 0 -> 3312 bytes lib/debug.py | 18 +++++- lib/freebies.db | Bin 20480 -> 24576 bytes lib/freebietracker.py | 9 +++ lib/migrations/__pycache__/env.cpython-38.pyc | Bin 0 -> 1691 bytes ...bf48c_create_companies_devs.cpython-38.pyc | Bin 0 -> 1063 bytes .../7a71dbf71c64_create_db.cpython-38.pyc | Bin 0 -> 698 bytes .../e3aedc2cf5c8_freebie_table.cpython-38.pyc | Bin 0 -> 1182 bytes .../versions/e3aedc2cf5c8_freebie_table.py | 37 ++++++++++++ lib/models.py | 53 ++++++++++++++++++ lib/seed.py | 25 ++++++++- 12 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 lib/__pycache__/freebietracker.cpython-38.pyc create mode 100644 lib/__pycache__/models.cpython-38.pyc create mode 100644 lib/freebietracker.py 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__/e3aedc2cf5c8_freebie_table.cpython-38.pyc create mode 100644 lib/migrations/versions/e3aedc2cf5c8_freebie_table.py diff --git a/lib/__pycache__/freebietracker.cpython-38.pyc b/lib/__pycache__/freebietracker.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6c0d00a9c24c437167eda12dc889a8d82bb9c76 GIT binary patch literal 452 zcmYjOy-ve05VrGMq6V?B@CF?c58V(#2q8u!RCUQf<-`YxYA3-Cg|K$!LHY>1idQCH zfr(37M9=c4yHDTw?vv+n91)EB<)?@!Azwpr7%mo9c+D+>Ac9JwXh!LfJJL~Z=5BLW zddkmyN`MM)O|t-e2!#JZvk<~H$wuHJ9*JN^CgC@}MJCk7g$CZi0_vx#1|&`d6q0M+ zRV!HJ+zi~`?>c6_`}yDD(2F7I%}#MyTMjC_(kw!8!Kq zpGe`YOAlt~!Ja)n5Hwn8ZyTni-b%3 QA!5b|V~WQa(TE1lFZ_yv>i_@% 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..fa15a476ef2478354b749da4e628ecd28859b429 GIT binary patch literal 3312 zcmb7HOOG4J5uTn0IUGKgE6cKCD={6%587T*h?2mD7lL643W6XD7?O1uz!=O z2h}~h5{dO`1tb^U1K0+nV3!jD;+-LpyUqCv!tL^FohNpPe?cX4uU9&^K)- zZDm0i7~M_VStslm-AlXoEZ*SFDGPhT6Fu%fW#N_x#1?Ns>;Ku}0dGICcw6+(oNycM z4)3DfHSJ4i_xKjtTc-U6@87kC+y8}y*3i?zokEJ~LH<`U*Nt06dYt9D`Io#D2SVz` z-BM2T1MUA!l=1DjjEA=FNRh_nw8+)rbf%m8adITZWXN=%izJOD`c6c&A1i@x+p$tb zGBx9)nJga9@sWL^?a9&N%gIsn!N+C1pNc4tGci?3ge$x=TnBfa+F=8&=9zWILcjVB zt;JpLJ+Z<-wCNh)emm@lE^qPR%np0J%{%CYb9tBdp3vNFz6BTeb@Nt{&EkBnTZvJo zLft!OVS6U0SuE$#k(eiJ%}CN6)LW>k2f^8?^}zZ8*8SvQMQ3l(+O5|dykIxanRdx@ z^s7WVIk)5$%zANu{H+pFjn!eCr`RJ_k3^b|Z;KO=7PAcA8Ycx89okC)}9LI0Mo+Rc%`}J;0J6xP3bVJMHL1~~GPkaKUv`*Qn4R5eh=K!0H21khbb*)by`igH(^6yxMA|!v(_^87>JH}7l!roVtR*+h~;5Gl1YZdq#(M@QZ_f&raE0>zwVuzV|Ukdk>F=oQHlP zxscKRTz4nMan6Yza}mqXn@puDL0%_GmF^WO7peqv3_4#rf&3IJ{uWi43$d@T#g(Pm zn-lkjmk1Jsz$nr|6agv6AakTUQS|UQPV1g-RB^XzN;;mTwI%H$>8j-$B!(oel4z2+ zMuOt4c5z)wen@H?Ax0^%{IKB0(lzS|m69$&5_h&x)ny2uxpoiU4{YD**pQyh%!mY? z8-2v6KaB?5YT8)u?LXn`BF2pM*2eb*-lKd}B`9ohH6+lMwy zlpmqzn|mu9xPgNx__rivnyV2u#R>o2p9lT=tKquVISCdP0*{tp;rZdUHbA9oK$B| zyfOSi@hDe=c(7;;CbGx|Lr;5nv*e{oe^szHDUm4ss`#V3W_ZN$8k?r-8w^`o{pQl@ zjS)yCuZ_uzWK0B;0}}6%Fj>RU$Jk|HyGtDxz%-gcCnf%`Q8!Zr>$ASyVIAPqKwxip zISkapG)_UiY%a}?7eq0+i@Y56E(VPXnN_y<)bsXQk9b^;)?UdH{~@gK-IoTeJ(vdsLYY8!DY*Fuxq7<$DR{d^Y9JJ7Dg?Q@xdyrVIlBfc zK!ibxH8N8)@mK(KhB43`@jx2YV2Jxr3Wae}lUD+2=q2*UvLL>*&MRtCLzSzi7h3@m(74E((OJNfGQq&5o*EaTlQ s#dk}P$285{DB08^Db2(pd6U8yej#K5UXW1&n*{?N@lTu}!G_8O0G6s6ivR!s diff --git a/lib/freebietracker.py b/lib/freebietracker.py new file mode 100644 index 000000000..465d7198a --- /dev/null +++ b/lib/freebietracker.py @@ -0,0 +1,9 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind = engine) +session = Session() + +Base = declarative_base() \ No newline at end of file diff --git a/lib/migrations/__pycache__/env.cpython-38.pyc b/lib/migrations/__pycache__/env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e841c43f52a0ed2ad032b1dad1fe465631118aa0 GIT binary patch literal 1691 zcmZvc&2J+$6u|A7$xJdy(+}9yiUasoBCUdi1Sf=+7LXR9YALNi5z@#RJBd?|C)l2T ztlHCZfJ3zsXAbF+KY>4l%Un6}FCY*+dy;JnOf=53pZz}kes7L9Hc|x7ugAZzlQu%X zxyjupgvk?l&5tlJ#IQsK9%1a{Kn6uP3cVbH9E~C`N3vDKqZlI|&y!KYlX;u9PCEKC zj-C9XIUUPRk&aT>mCn1P9&54WC(PQc^IbIBSj|$_g;}4+%gr04zvmk-5JoEIefQ5= zU!pj#6-fp;HX^8^NqmYCrie1&W<4=<68SinLS3Cvp8kh~3+tsC^R@1^(#g8T}- zhrU3E=xfAc2sfdhg3-fDkwQ#0wW3sp2t{_w$wWfHyQC-?AEqgR=V&GjX@ajbH^k1k zo4Ux!nXof5uZ$&>93Ot}_fy4)Dq%&DPkj21;Ye9cXSXW^EYdvZ3rok6`%^QnIiZG} zaVdv{>|GFZA{Gmwrru#=iR7C5X#J5hPFSgSE#aqJ5yd%!C_di%=-E?ZOELy?r&LJi zVU@`~l@j7F*WnNOInOK0-yRU}o)^M;Z&Tqc8mqng(ye)qCf8zNNmvl zlIJ!n7uFmMk~(hgz25Yvs8CJ=)zU4%pzge?itf7k_Lu{1nblMon!9~8}RRR z!WxF|9T)~d9WOMWi1WJRT0WOx>}U|y>8+uraGRPd#&t$bHl{Y89SnLpgnQF{80xMo zzG)oSJ59|qp~QMkM{Za9ppx<#xbfc=7pI3rZ#g>-554UMS3?M_y9&W|hkoP~4v1!W z9i;lfzd7*t`97%38!(_Gz$riw{T0U^2o#{;?>GV+-U97lYt)zJ6lk0dn}D^0qE2tG zr%BLKIg4fn(lL&xgHwD?vo^qj-8$Mx`Ud`9D&|%y(!EZ*~}fdla^1= k=hprJRF&i(x-Y9wrx)}vypc;Fje9t5_aF5iwsAZ72QaJ9egFUf literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc b/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7dd214072ebffe308d109a692144ff82141d65c GIT binary patch literal 1063 zcma)5OK;Oa5cVs!<0hz-hd4&!6p7T$t0@seNU0DNQiUkJ_+mNUNn=>A-CZYDI3mQ2 zf54$R@)P(WT=vR|zkon6eyEKE2iDs0%^GwZ+WmeFsD4h zDW0Jril-2jXjF|gPg8SWr@Chl!>f^+XA<4BaN0yC<|ma{#C~sh^(v|p2P22*CrW$k z?Rm%{$e4)#Df-rrEr{=u#7~Mu-4JxxHX)Odg1V3IvX5>Otaq+UT9>&LQwMWECo@)QqmvjwHWl!7!^5W_3koFxlJB6jAlAmGx- zd2U-=!yaU#l)=x60!;+coFsG+Gie>M49kR zn}}1GA0OOP0bICZ9xw{4Fc23&se1@Zph+47%iJ&_;HL9HK&S7ft8AXIPTKFxIKVW5 z4uXbnfV(uBx^Z;IgA8wiaF>W$IGd{Z)zPmA@bkuY)0MOqDV7qrl}mLOjiQoCY+UL%iY*+$n8d{UNfM1NztD ylm{%F`zSt8AsqrKFe3bf6`dB}`RBpxM{z9qv literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc b/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..203dd78838846e14bb90e570ea09ffbd2c70b9f5 GIT binary patch literal 698 zcmah`y^hmB5MKWzcFYAKQP8?g;d6Y!iDV&!bSa>@f>R{q##(#ku*Ld^T_>kp&13Ka z_Xs=)jaw>Sfr_znDDD_*KF#Nyo&CPu-F)sail4h5u+td()st};MBY)V_XNOV1{&x> zEA?2{`q~giY=Rk2z=)@m7NrdaOulO{1?!s`&z_hKGhz-Hw`}1&e99#97F|dk=OZ2p zRn(RHVH>#{z6l_`+XUJA^=SoF=UWUPXy$T%X zH|b;xt<&q~CcYR?qn}fW?Os+{-!l$!&aNqyNdWAYJ!&_POiqZM;m?D=Qz(_Ma$X5M zW?bE)5dIbqDC(xfs`axP&~I|C&|CSQswpjWGpO&YVe~7a|3=$X zFP?Q)l0cm$NoR3^Wm;siKe}_&SHVS=V|na!#XDO*yIH#mU1+vxYQtwdH~#``Nu|92 literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/__pycache__/e3aedc2cf5c8_freebie_table.cpython-38.pyc b/lib/migrations/versions/__pycache__/e3aedc2cf5c8_freebie_table.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6eb6c7e1a65d8135999a82ee18f3b7e15c1d92ec GIT binary patch literal 1182 zcmZuw&2HO95ayB;Nzt-hBu<>(gxqwH=}1*#2tg6RhS8vaQ8dYg7lPu9BsR+>yGzNC z4?XpoH|W7S<`MELd&niHyg`sthol@UKTGUz=G*z-*;l)}zCr8#{2k0}!}w4M+sh*1 z8Ey3&5imjn7?_-8W@xgCx40GBV23Seg$`JuOWOkroc|cO;Qecd?Tyq1pCliw7e;UA zYJM&eCn ziQO|Ic=?{*(kA~yp;dt=)=<#rLG8*{)N6OpiF>U6>McCQ)tUKEtNyU*^ zE~H2*i|w^f!YOTaO{6rg8L-m)%L21BukE!#_1SN%8fg*IBE{)ylS*= zrzK{Qh%` z+1DnA+a`_Es5U`rtg5n9juS zxH`>+DrKCCQnRT(_(P^yELUG0yfx%K3Q&{J{{*iTN)@PiEI6)`SY0CL!5J=*=S7C1 z43Zo$DCV)k{xB$3wu|8D52hgT2X9x=_(t=Z;^%?sHgv}ZQG^g-rD z6ZE$BhPzK{x()fIsPlM8qN@6DnDS?$y&dgF5#&h}X*cGWP10oJQ~k|jp3E^@$tnZw z$;}JZyOq1>R-DLKB=d;o3%SxhV1WWul#9BsI?fN%@}6cnEI9tk$iMoDi0yWmXWOj) ItiApJ0XLOIJpcdz literal 0 HcmV?d00001 diff --git a/lib/migrations/versions/e3aedc2cf5c8_freebie_table.py b/lib/migrations/versions/e3aedc2cf5c8_freebie_table.py new file mode 100644 index 000000000..2a33b909b --- /dev/null +++ b/lib/migrations/versions/e3aedc2cf5c8_freebie_table.py @@ -0,0 +1,37 @@ +"""Freebie Table + +Revision ID: e3aedc2cf5c8 +Revises: 5f72c58bf48c +Create Date: 2023-07-20 13:03:26.635852 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'e3aedc2cf5c8' +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('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/models.py b/lib/models.py index 2681bee5a..ce84bec17 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,6 +1,9 @@ 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 +from freebietracker import * + convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", @@ -18,7 +21,21 @@ class Company(Base): def __repr__(self): return f'' + + freebies = relationship('Freebie', cascade = 'all, delete-orphan') + + devs = association_proxy('freebies', 'dev') + + def give_freebie(self, item_name, value, dev): + new_freebie = Freebie(item_name=item_name, value = value, company_id=self.id, dev_id = dev.id) + session.add(new_freebie) + session.commit() + @classmethod + def oldest_company(cls): + oldest_company = session.query(cls).order_by(cls.founding_year).first() + return oldest_company + class Dev(Base): __tablename__ = 'devs' @@ -27,3 +44,39 @@ class Dev(Base): def __repr__(self): return f'' + + freebies = relationship('Freebie', cascade = 'all, delete-orphan') + + companies = association_proxy('freebies', 'company') + + + def received_one(self, item_name): + if any(freebie.item_name == item_name for freebie in self.freebies): + return True + else: + return False + + def give_away(self, dev, check_freebie): + if check_freebie in self.freebies: + check_freebie.dev = 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')) + + dev = relationship('Dev', back_populates = 'freebies') + company = relationship('Company', back_populates = 'freebies') + + def __repr__(self): + return f'<{self.item_name}>' + + def print_details(self): + print(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..1b51e3314 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,26 @@ #!/usr/bin/env python3 +from models import * +from freebietracker import * + +convention = { + 'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s' +} +session.query(Company).delete() +session.query(Freebie).delete() +session.query(Dev).delete() + +c1 = Company(name = "Facebook", founding_year = 2004) +c2 = Company(name = "Google", founding_year= 1998) +c3 = Company(name = 'Tesla', founding_year=2003) +session.add_all([c1, c2, c3]) +session.commit() + +d1 = Dev(name = "Bob") +d2 = Dev(name="Kevin") +session.add_all([d1, d2]) +session.commit() + +f1 = Freebie(item_name ="Hat", value=20, company_id = c1.id, dev_id = d1.id) +session.add(f1) +session.commit() -# Script goes here!