Blame alembic/versions/208b0cd232ab_colored_tags.py

Pierre-Yves Chibon 717597
"""colored tags
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
Revision ID: 208b0cd232ab
Pierre-Yves Chibon 717597
Revises: 588eabcd394c
Pierre-Yves Chibon 717597
Create Date: 2016-12-27 11:52:53.355838
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
"""
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
# revision identifiers, used by Alembic.
Pierre-Yves Chibon 717597
revision = '208b0cd232ab'
Pierre-Yves Chibon 717597
down_revision = '588eabcd394c'
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
import collections
Pierre-Yves Chibon 717597
import datetime
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
from alembic import op
Pierre-Yves Chibon 717597
import sqlalchemy as sa
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
try:
Pierre-Yves Chibon 717597
    from pagure.lib import model
Pierre-Yves Chibon 717597
except ImportError:
Pierre-Yves Chibon 717597
    import sys
Pierre-Yves Chibon 717597
    sys.path.insert(0, '.')
Pierre-Yves Chibon 717597
    from pagure.lib import model
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
def upgrade():
Pierre-Yves Chibon 717597
    """ Alter the DB schema for the changes related to colored tags. """
Pierre-Yves Chibon 717597
    engine = op.get_bind()
Pierre-Yves Chibon 717597
    Session = sa.orm.scoped_session(sa.orm.sessionmaker())
Pierre-Yves Chibon 717597
    Session.configure(bind=engine)
Pierre-Yves Chibon 717597
    session = Session()
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
    projects = collections.defaultdict(list)
Pierre-Yves Chibon 717597
    for issue in session.query(model.Issue).all():
Pierre-Yves Chibon 717597
        for issuetag in issue.old_tags:
Pierre-Yves Chibon 717597
            tag = issuetag.tag
Pierre-Yves Chibon 717597
            # Add the tag to the project if it isn't already there
Pierre-Yves Chibon 717597
            if tag not in projects[issue.project.id]:
Pierre-Yves Chibon 717597
                tagobj = model.TagColored(
Pierre-Yves Chibon 717597
                    tag=tag,
Pierre-Yves Chibon 717597
                    project_id=issue.project.id)
Pierre-Yves Chibon 717597
                session.add(tagobj)
Pierre-Yves Chibon 717597
                session.flush()
Pierre-Yves Chibon 717597
                projects[issue.project.id].append(tag)
Pierre-Yves Chibon 717597
            else:
Pierre-Yves Chibon 717597
                tagobj = session.query(
Pierre-Yves Chibon 717597
                    model.TagColored
Pierre-Yves Chibon 717597
                ).filter(
Pierre-Yves Chibon 717597
                    model.TagColored.tag == tag
Pierre-Yves Chibon 717597
                ).filter(
Pierre-Yves Chibon 717597
                    model.TagColored.project_id == issue.project.id
Pierre-Yves Chibon 717597
                ).first()
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
            # Link the tag to the ticket as it was
Pierre-Yves Chibon 717597
            tagissueobj = model.TagIssueColored(
Pierre-Yves Chibon 717597
                tag_id=tagobj.id,
Pierre-Yves Chibon 717597
                issue_uid=issue.uid,
Pierre-Yves Chibon 717597
                date_created=tagobj.date_created,
Pierre-Yves Chibon 717597
            )
Pierre-Yves Chibon 717597
            session.add(tagissueobj)
Pierre-Yves Chibon 717597
            session.flush()
Pierre-Yves Chibon 717597
    session.commit()
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
Pierre-Yves Chibon 717597
def downgrade():
Pierre-Yves Chibon 717597
    raise ValueError("The colored tags feature can not be un-done")