- retain relevant task order data when migrating request bodies - set revision relationship for status events - make relationship between status events and revisions not nullable
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
"""remove revisions body column
|
|
|
|
Revision ID: 090e1bd0d7ce
|
|
Revises: a903ebe91ad5
|
|
Create Date: 2018-08-31 12:08:52.376027
|
|
|
|
"""
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
from sqlalchemy.orm import sessionmaker
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
from atst.models.request import Request
|
|
from atst.utils import deep_merge
|
|
from atst.domain.requests import create_revision_from_request_body
|
|
from atst.domain.task_orders import TaskOrders
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '090e1bd0d7ce'
|
|
down_revision = 'a903ebe91ad5'
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def delete_two_deep(body, key1, key2):
|
|
result = body.get(key1, {}).get(key2)
|
|
if result:
|
|
del(body[key1][key2])
|
|
|
|
return body
|
|
|
|
|
|
TASK_ORDER_DATA = TaskOrders.TASK_ORDER_DATA + ["task_order_id", "csrf_token"]
|
|
|
|
def create_revision(body):
|
|
financials = body.get("financial_verification")
|
|
if financials:
|
|
for column in TASK_ORDER_DATA:
|
|
if column in financials:
|
|
del(financials[column])
|
|
|
|
return create_revision_from_request_body(body)
|
|
|
|
|
|
def massaged_revision(body):
|
|
try:
|
|
return create_revision(body)
|
|
except ValueError:
|
|
# some of the data on staging has out-of-range dates like "02/29/2019";
|
|
# we don't know how to coerce them to valid dates, so we remove those
|
|
# fields.
|
|
body = delete_two_deep(body, "details_of_use", "start_date")
|
|
body = delete_two_deep(body, "information_about_you", "date_latest_training")
|
|
|
|
return create_revision(body)
|
|
|
|
from uuid import UUID
|
|
|
|
def upgrade():
|
|
Session = sessionmaker(bind=op.get_bind())
|
|
session = Session()
|
|
for request in session.query(Request).all():
|
|
(body,) = session.execute("SELECT body from requests WHERE id='{}'".format(request.id)).fetchone()
|
|
|
|
revision = massaged_revision(body)
|
|
request.revisions.append(revision)
|
|
|
|
session.add(revision)
|
|
session.add(request)
|
|
|
|
session.commit()
|
|
|
|
op.drop_column('requests', 'body')
|
|
|
|
|
|
def downgrade():
|
|
op.add_column('requests', sa.Column('body', postgresql.JSONB(astext_type=sa.Text()), autoincrement=False, nullable=True))
|
|
|