diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 000000000..66e4f19a5 Binary files /dev/null and b/lib/__pycache__/models.cpython-38.pyc differ diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..bacb17545 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -6,4 +6,4 @@ if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() + import ipdb; ipdb.set_trace() \ No newline at end of file diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c96..6511d293e 100644 Binary files a/lib/freebies.db and b/lib/freebies.db differ diff --git a/lib/migrations/__pycache__/env.cpython-38.pyc b/lib/migrations/__pycache__/env.cpython-38.pyc new file mode 100644 index 000000000..fe15e8401 Binary files /dev/null and b/lib/migrations/__pycache__/env.cpython-38.pyc differ diff --git a/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py b/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py new file mode 100644 index 000000000..cf71a0a67 --- /dev/null +++ b/lib/migrations/versions/8df67b75fdf7_added_freebie_table.py @@ -0,0 +1,33 @@ +"""Added Freebie Table + +Revision ID: 8df67b75fdf7 +Revises: 5f72c58bf48c +Create Date: 2025-05-23 14:24:44.151085 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '8df67b75fdf7' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebie', + 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('freebie') + # ### end Alembic commands ### 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 000000000..8d0b39622 Binary files /dev/null and b/lib/migrations/versions/__pycache__/5f72c58bf48c_create_companies_devs.cpython-38.pyc differ 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 000000000..ba755800c Binary files /dev/null and b/lib/migrations/versions/__pycache__/7a71dbf71c64_create_db.cpython-38.pyc differ diff --git a/lib/migrations/versions/__pycache__/8df67b75fdf7_added_freebie_table.cpython-38.pyc b/lib/migrations/versions/__pycache__/8df67b75fdf7_added_freebie_table.cpython-38.pyc new file mode 100644 index 000000000..7e0014c38 Binary files /dev/null and b/lib/migrations/versions/__pycache__/8df67b75fdf7_added_freebie_table.cpython-38.pyc differ diff --git a/lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc b/lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc new file mode 100644 index 000000000..b9be6523f Binary files /dev/null and b/lib/migrations/versions/__pycache__/a252e31288a4_fixed_relationships.cpython-38.pyc differ diff --git a/lib/migrations/versions/__pycache__/df49495cf2aa_aggregate_methods_compiled.cpython-38.pyc b/lib/migrations/versions/__pycache__/df49495cf2aa_aggregate_methods_compiled.cpython-38.pyc new file mode 100644 index 000000000..2d4771eea Binary files /dev/null and b/lib/migrations/versions/__pycache__/df49495cf2aa_aggregate_methods_compiled.cpython-38.pyc differ diff --git a/lib/migrations/versions/a252e31288a4_fixed_relationships.py b/lib/migrations/versions/a252e31288a4_fixed_relationships.py new file mode 100644 index 000000000..ec7ae21ad --- /dev/null +++ b/lib/migrations/versions/a252e31288a4_fixed_relationships.py @@ -0,0 +1,38 @@ +"""fixed relationships + +Revision ID: a252e31288a4 +Revises: 8df67b75fdf7 +Create Date: 2025-05-23 14:41:24.162046 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a252e31288a4' +down_revision = '8df67b75fdf7' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('freebie', 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_freebie_dev_id_devs'), 'devs', ['dev_id'], ['id']) + batch_op.create_foreign_key(batch_op.f('fk_freebie_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('freebie', schema=None) as batch_op: + batch_op.drop_constraint(batch_op.f('fk_freebie_company_id_companies'), type_='foreignkey') + batch_op.drop_constraint(batch_op.f('fk_freebie_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/df49495cf2aa_aggregate_methods_compiled.py b/lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py new file mode 100644 index 000000000..5d723f078 --- /dev/null +++ b/lib/migrations/versions/df49495cf2aa_aggregate_methods_compiled.py @@ -0,0 +1,47 @@ +"""aggregate methods compiled + +Revision ID: df49495cf2aa +Revises: a252e31288a4 +Create Date: 2025-05-23 15:02:45.029533 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'df49495cf2aa' +down_revision = 'a252e31288a4' +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('name', sa.String(), 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') + ) + op.drop_table('freebie') + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebie', + sa.Column('id', sa.INTEGER(), nullable=False), + sa.Column('item_name', sa.VARCHAR(), 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='fk_freebie_company_id_companies'), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name='fk_freebie_dev_id_devs'), + sa.PrimaryKeyConstraint('id') + ) + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..fc27dda69 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,9 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company') + devs = association_proxy('freebies', 'dev', creator= lambda dv: Freebie(dev=dv)) + def __repr__(self): return f'' @@ -25,5 +29,31 @@ 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 cm: Freebie(company=cm)) + def __repr__(self): return f'' + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + name = Column(String()) + 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 __init__(self, company=None, dev=None, name=None): + if company is not None: + self.company = company + if dev is not None: + self.dev = dev + if name is not None: + self.name = name + + def __repr__(self): + return f"" + \ No newline at end of file