608ffd9663
Adds basic labels support to the registry code (V2), and the API. Note that this does not yet add any UI related support.
89 lines
4.1 KiB
Python
89 lines
4.1 KiB
Python
"""Add labels to the schema
|
|
|
|
Revision ID: c9b91bee7554
|
|
Revises: 983247d75af3
|
|
Create Date: 2016-08-22 15:40:25.226541
|
|
|
|
"""
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = 'c9b91bee7554'
|
|
down_revision = '983247d75af3'
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from util.migrate import UTF8LongText, UTF8CharField
|
|
|
|
def upgrade(tables):
|
|
### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table('labelsourcetype',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=255), nullable=False),
|
|
sa.Column('mutable', sa.Boolean(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_labelsourcetype'))
|
|
)
|
|
op.create_index('labelsourcetype_name', 'labelsourcetype', ['name'], unique=True)
|
|
op.create_table('mediatype',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('name', sa.String(length=255), nullable=False),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_mediatype'))
|
|
)
|
|
op.create_index('mediatype_name', 'mediatype', ['name'], unique=True)
|
|
op.create_table('label',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('uuid', sa.String(length=255), nullable=False),
|
|
sa.Column('key', UTF8CharField(length=255), nullable=False),
|
|
sa.Column('value', UTF8LongText(), nullable=False),
|
|
sa.Column('media_type_id', sa.Integer(), nullable=False),
|
|
sa.Column('source_type_id', sa.Integer(), nullable=False),
|
|
sa.ForeignKeyConstraint(['media_type_id'], ['mediatype.id'], name=op.f('fk_label_media_type_id_mediatype')),
|
|
sa.ForeignKeyConstraint(['source_type_id'], ['labelsourcetype.id'], name=op.f('fk_label_source_type_id_labelsourcetype')),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_label'))
|
|
)
|
|
op.create_index('label_key', 'label', ['key'], unique=False)
|
|
op.create_index('label_media_type_id', 'label', ['media_type_id'], unique=False)
|
|
op.create_index('label_source_type_id', 'label', ['source_type_id'], unique=False)
|
|
op.create_index('label_uuid', 'label', ['uuid'], unique=True)
|
|
op.create_table('tagmanifestlabel',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('repository_id', sa.Integer(), nullable=False),
|
|
sa.Column('annotated_id', sa.Integer(), nullable=False),
|
|
sa.Column('label_id', sa.Integer(), nullable=False),
|
|
sa.ForeignKeyConstraint(['annotated_id'], ['tagmanifest.id'], name=op.f('fk_tagmanifestlabel_annotated_id_tagmanifest')),
|
|
sa.ForeignKeyConstraint(['label_id'], ['label.id'], name=op.f('fk_tagmanifestlabel_label_id_label')),
|
|
sa.ForeignKeyConstraint(['repository_id'], ['repository.id'], name=op.f('fk_tagmanifestlabel_repository_id_repository')),
|
|
sa.PrimaryKeyConstraint('id', name=op.f('pk_tagmanifestlabel'))
|
|
)
|
|
op.create_index('tagmanifestlabel_annotated_id', 'tagmanifestlabel', ['annotated_id'], unique=False)
|
|
op.create_index('tagmanifestlabel_annotated_id_label_id', 'tagmanifestlabel', ['annotated_id', 'label_id'], unique=True)
|
|
op.create_index('tagmanifestlabel_label_id', 'tagmanifestlabel', ['label_id'], unique=False)
|
|
op.create_index('tagmanifestlabel_repository_id', 'tagmanifestlabel', ['repository_id'], unique=False)
|
|
### end Alembic commands ###
|
|
|
|
op.bulk_insert(tables.logentrykind, [
|
|
{'name':'manifest_label_add'},
|
|
{'name':'manifest_label_delete'},
|
|
])
|
|
|
|
op.bulk_insert(tables.mediatype, [
|
|
{'name':'text/plain'},
|
|
{'name':'application/json'},
|
|
])
|
|
|
|
op.bulk_insert(tables.labelsourcetype, [
|
|
{'name':'manifest', 'mutable': False},
|
|
{'name':'api', 'mutable': True},
|
|
{'name':'internal', 'mutable': False},
|
|
])
|
|
|
|
|
|
def downgrade(tables):
|
|
op.execute(tables.logentrykind.delete().where(tables.logentrykind.c.name == op.inline_literal('manifest_label_add')))
|
|
op.execute(tables.logentrykind.delete().where(tables.logentrykind.c.name == op.inline_literal('manifest_label_delete')))
|
|
|
|
### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_table('tagmanifestlabel')
|
|
op.drop_table('label')
|
|
op.drop_table('mediatype')
|
|
op.drop_table('labelsourcetype')
|
|
### end Alembic commands ###
|