From 4fc1f9f2d4b942082cfa7270c31624ad47a9a1b2 Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 18 Sep 2018 21:36:43 -0400 Subject: [PATCH] Squashed migrations and created seed_roles.py --- .../04fe150da553_add_request_revision.py | 79 ------ .../05d6272bdb43_rename_request_creator_.py | 43 --- ...make_status_event_relation_to_revision_.py | 32 --- ...401_add_request_task_order_relationship.py | 30 -- ...0e1bd0d7ce_remove_revisions_body_column.py | 79 ------ ...800904bc_add_task_order_association_to_.py | 30 -- .../1f57f784ed5b_update_user_from_authnid.py | 38 --- ...2be7fb7fc_add_request_internal_comments.py | 36 --- .../versions/2c2a2af465d3_add_pe_numbers.py | 44 --- .../4be312655ceb_add_workspaces_table.py | 37 --- ...f17bfe8_add_edit_workspace_information_.py | 43 --- .../4ea5917e7781_add_default_atat_role.py | 37 --- .../versions/4ede1e3e50d1_add_authz_models.py | 62 ----- ...7b440_add_expiration_date_to_task_order.py | 28 -- ...34b_request_reviews_comment_column_name.py | 30 -- .../versions/55ba973d08b9_add_fundz_models.py | 38 --- alembic/versions/74ac90c019bf_initial.py | 261 ++++++++++++++++++ ...7ded5c57a0_bigint_for_request_review_id.py | 36 --- .../77b065750596_new_request_statuses.py | 49 ---- .../7bdb2055d7c7_add_request_review_table.py | 46 --- ...8a05fc_add_additional_task_order_fields.py | 44 --- .../96a9f3537996_add_roles_and_permissions.py | 172 ------------ .../a2b499a1dd62_workspace_timestamps.py | 30 -- ...96111da617_add_name_to_request_revision.py | 28 -- ...e91ad5_add_sequence_to_request_revision.py | 28 -- ...b_add_view_workspace_members_permission.py | 53 ---- alembic/versions/b5b17d465166_requests.py | 47 ---- ...74288e99_create_environment_roles_table.py | 38 --- .../d7db8fd35b41_add_attachment_table.py | 36 --- ...63_remove_view_project_and_environment_.py | 49 ---- ..._add_relationship_between_revision_and_.py | 42 --- .../f064247f2988_projects_and_environments.py | 47 ---- ...22b9_add_workspace_role_workspace_id_fk.py | 28 -- ...emove_workspaces_task_order_association.py | 30 -- .../ff1c9c02fa61_enable_uuid_extension.py | 26 -- atst/models/request_internal_comment.py | 6 +- atst/models/request_status_event.py | 2 +- atst/models/task_order.py | 4 +- script/include | 2 +- script/ingest_pe_numbers.py | 5 - script/seed_roles.py | 165 +++++++++++ 41 files changed, 433 insertions(+), 1527 deletions(-) delete mode 100644 alembic/versions/04fe150da553_add_request_revision.py delete mode 100644 alembic/versions/05d6272bdb43_rename_request_creator_.py delete mode 100644 alembic/versions/06aa23166ca9_make_status_event_relation_to_revision_.py delete mode 100644 alembic/versions/0845b2f0f401_add_request_task_order_relationship.py delete mode 100644 alembic/versions/090e1bd0d7ce_remove_revisions_body_column.py delete mode 100644 alembic/versions/14cd800904bc_add_task_order_association_to_.py delete mode 100644 alembic/versions/1f57f784ed5b_update_user_from_authnid.py delete mode 100644 alembic/versions/2572be7fb7fc_add_request_internal_comments.py delete mode 100644 alembic/versions/2c2a2af465d3_add_pe_numbers.py delete mode 100644 alembic/versions/4be312655ceb_add_workspaces_table.py delete mode 100644 alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py delete mode 100644 alembic/versions/4ea5917e7781_add_default_atat_role.py delete mode 100644 alembic/versions/4ede1e3e50d1_add_authz_models.py delete mode 100644 alembic/versions/4f4defb7b440_add_expiration_date_to_task_order.py delete mode 100644 alembic/versions/53ab3edd334b_request_reviews_comment_column_name.py delete mode 100644 alembic/versions/55ba973d08b9_add_fundz_models.py create mode 100644 alembic/versions/74ac90c019bf_initial.py delete mode 100644 alembic/versions/777ded5c57a0_bigint_for_request_review_id.py delete mode 100644 alembic/versions/77b065750596_new_request_statuses.py delete mode 100644 alembic/versions/7bdb2055d7c7_add_request_review_table.py delete mode 100644 alembic/versions/875e4b8a05fc_add_additional_task_order_fields.py delete mode 100644 alembic/versions/96a9f3537996_add_roles_and_permissions.py delete mode 100644 alembic/versions/a2b499a1dd62_workspace_timestamps.py delete mode 100644 alembic/versions/a496111da617_add_name_to_request_revision.py delete mode 100644 alembic/versions/a903ebe91ad5_add_sequence_to_request_revision.py delete mode 100644 alembic/versions/ad30159ef19b_add_view_workspace_members_permission.py delete mode 100644 alembic/versions/b5b17d465166_requests.py delete mode 100644 alembic/versions/c1d074288e99_create_environment_roles_table.py delete mode 100644 alembic/versions/d7db8fd35b41_add_attachment_table.py delete mode 100644 alembic/versions/dea6b8e09d63_remove_view_project_and_environment_.py delete mode 100644 alembic/versions/e66a49285f23_add_relationship_between_revision_and_.py delete mode 100644 alembic/versions/f064247f2988_projects_and_environments.py delete mode 100644 alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py delete mode 100644 alembic/versions/f549c7cee17c_remove_workspaces_task_order_association.py delete mode 100644 alembic/versions/ff1c9c02fa61_enable_uuid_extension.py create mode 100644 script/seed_roles.py diff --git a/alembic/versions/04fe150da553_add_request_revision.py b/alembic/versions/04fe150da553_add_request_revision.py deleted file mode 100644 index f6069b68..00000000 --- a/alembic/versions/04fe150da553_add_request_revision.py +++ /dev/null @@ -1,79 +0,0 @@ -"""add request revision - -Revision ID: 04fe150da553 -Revises: 2c2a2af465d3 -Create Date: 2018-08-30 13:28:16.928946 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects.postgresql import ARRAY as Array -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '04fe150da553' -down_revision = '2c2a2af465d3' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('request_revisions', - sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.Column('am_poc', sa.Boolean(), nullable=True), - sa.Column('dodid_poc', sa.String(), nullable=True), - sa.Column('email_poc', sa.String(), nullable=True), - sa.Column('fname_poc', sa.String(), nullable=True), - sa.Column('lname_poc', sa.String(), nullable=True), - sa.Column('jedi_usage', sa.String(), nullable=True), - sa.Column('start_date', sa.Date(), nullable=True), - sa.Column('cloud_native', sa.String(), nullable=True), - sa.Column('dollar_value', sa.Integer(), nullable=True), - sa.Column('dod_component', sa.String(), nullable=True), - sa.Column('data_transfers', sa.String(), nullable=True), - sa.Column('expected_completion_date', sa.String(), nullable=True), - sa.Column('jedi_migration', sa.String(), nullable=True), - sa.Column('num_software_systems', sa.Integer(), nullable=True), - sa.Column('number_user_sessions', sa.Integer(), nullable=True), - sa.Column('average_daily_traffic', sa.Integer(), nullable=True), - sa.Column('engineering_assessment', sa.String(), nullable=True), - sa.Column('technical_support_team', sa.String(), nullable=True), - sa.Column('estimated_monthly_spend', sa.Integer(), nullable=True), - sa.Column('average_daily_traffic_gb', sa.Integer(), nullable=True), - sa.Column('rationalization_software_systems', sa.String(), nullable=True), - sa.Column('organization_providing_assistance', sa.String(), nullable=True), - sa.Column('citizenship', sa.String(), nullable=True), - sa.Column('designation', sa.String(), nullable=True), - sa.Column('phone_number', sa.String(), nullable=True), - sa.Column('email_request', sa.String(), nullable=True), - sa.Column('fname_request', sa.String(), nullable=True), - sa.Column('lname_request', sa.String(), nullable=True), - sa.Column('service_branch', sa.String(), nullable=True), - sa.Column('date_latest_training', sa.Date(), nullable=True), - sa.Column('pe_id', sa.String(), nullable=True), - sa.Column('task_order_number', sa.String(), nullable=True), - sa.Column('fname_co', sa.String(), nullable=True), - sa.Column('lname_co', sa.String(), nullable=True), - sa.Column('email_co', sa.String(), nullable=True), - sa.Column('office_co', sa.String(), nullable=True), - sa.Column('fname_cor', sa.String(), nullable=True), - sa.Column('lname_cor', sa.String(), nullable=True), - sa.Column('email_cor', sa.String(), nullable=True), - sa.Column('office_cor', sa.String(), nullable=True), - sa.Column('uii_ids', Array(sa.String()), nullable=True), - sa.Column('treasury_code', sa.String(), nullable=True), - sa.Column('ba_code', sa.String(), nullable=True), - sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('request_revisions') - # ### end Alembic commands ### diff --git a/alembic/versions/05d6272bdb43_rename_request_creator_.py b/alembic/versions/05d6272bdb43_rename_request_creator_.py deleted file mode 100644 index c8a3966e..00000000 --- a/alembic/versions/05d6272bdb43_rename_request_creator_.py +++ /dev/null @@ -1,43 +0,0 @@ -"""rename request creator - -Revision ID: 05d6272bdb43 -Revises: 77b065750596 -Create Date: 2018-08-07 20:21:22.559283 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '05d6272bdb43' -down_revision = '77b065750596' -branch_labels = None -depends_on = None - - -def upgrade(): - db = op.get_bind() - - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('requests', sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True)) - op.create_foreign_key('requests_user_id_fk', 'requests', 'users', ['user_id'], ['id']) - # ### end Alembic commands ### - - db.execute("UPDATE requests SET user_id = creator") - - op.alter_column('requests', 'user_id', nullable=False) - op.drop_column('requests', 'creator') - - - -def downgrade(): - db = op.get_bind() - - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('requests', sa.Column('creator', postgresql.UUID(), autoincrement=False, nullable=True)) - op.drop_constraint('requests_user_id_fk', 'requests', type_='foreignkey') - # ### end Alembic commands ### - - db.execute("UPDATE requests SET creator = user_id") - op.drop_column('requests', 'user_id') diff --git a/alembic/versions/06aa23166ca9_make_status_event_relation_to_revision_.py b/alembic/versions/06aa23166ca9_make_status_event_relation_to_revision_.py deleted file mode 100644 index d92d8ca8..00000000 --- a/alembic/versions/06aa23166ca9_make_status_event_relation_to_revision_.py +++ /dev/null @@ -1,32 +0,0 @@ -"""make status event relation to revision non-nullable - -Revision ID: 06aa23166ca9 -Revises: e66a49285f23 -Create Date: 2018-09-04 15:03:20.299607 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '06aa23166ca9' -down_revision = 'e66a49285f23' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('request_status_events', 'request_revision_id', - existing_type=postgresql.UUID(), - nullable=False) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('request_status_events', 'request_revision_id', - existing_type=postgresql.UUID(), - nullable=True) - # ### end Alembic commands ### diff --git a/alembic/versions/0845b2f0f401_add_request_task_order_relationship.py b/alembic/versions/0845b2f0f401_add_request_task_order_relationship.py deleted file mode 100644 index 4b00c41f..00000000 --- a/alembic/versions/0845b2f0f401_add_request_task_order_relationship.py +++ /dev/null @@ -1,30 +0,0 @@ -"""add request -> task order relationship - -Revision ID: 0845b2f0f401 -Revises: 875e4b8a05fc -Create Date: 2018-08-22 09:58:43.770718 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '0845b2f0f401' -down_revision = '875e4b8a05fc' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('requests', sa.Column('task_order_id', sa.Integer(), nullable=True)) - op.create_foreign_key(None, 'requests', 'task_order', ['task_order_id'], ['id']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'requests', type_='foreignkey') - op.drop_column('requests', 'task_order_id') - # ### end Alembic commands ### diff --git a/alembic/versions/090e1bd0d7ce_remove_revisions_body_column.py b/alembic/versions/090e1bd0d7ce_remove_revisions_body_column.py deleted file mode 100644 index a1d9873a..00000000 --- a/alembic/versions/090e1bd0d7ce_remove_revisions_body_column.py +++ /dev/null @@ -1,79 +0,0 @@ -"""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)) - diff --git a/alembic/versions/14cd800904bc_add_task_order_association_to_.py b/alembic/versions/14cd800904bc_add_task_order_association_to_.py deleted file mode 100644 index 4097c7e5..00000000 --- a/alembic/versions/14cd800904bc_add_task_order_association_to_.py +++ /dev/null @@ -1,30 +0,0 @@ -"""add task order association to attachments - -Revision ID: 14cd800904bc -Revises: d7db8fd35b41 -Create Date: 2018-08-24 11:28:30.894412 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '14cd800904bc' -down_revision = 'd7db8fd35b41' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('task_order', sa.Column('attachment_id', sa.Integer(), nullable=True)) - op.create_foreign_key(None, 'task_order', 'attachments', ['attachment_id'], ['id']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'task_order', type_='foreignkey') - op.drop_column('task_order', 'attachment_id') - # ### end Alembic commands ### diff --git a/alembic/versions/1f57f784ed5b_update_user_from_authnid.py b/alembic/versions/1f57f784ed5b_update_user_from_authnid.py deleted file mode 100644 index 56928d6a..00000000 --- a/alembic/versions/1f57f784ed5b_update_user_from_authnid.py +++ /dev/null @@ -1,38 +0,0 @@ -"""update_user_from_authnid - -Revision ID: 1f57f784ed5b -Revises: 55ba973d08b9 -Create Date: 2018-07-30 16:53:05.945005 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '1f57f784ed5b' -down_revision = '55ba973d08b9' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('users', sa.Column('dod_id', sa.String(), nullable=True)) - op.add_column('users', sa.Column('email', sa.String(), nullable=True)) - op.add_column('users', sa.Column('first_name', sa.String(), nullable=True)) - op.add_column('users', sa.Column('last_name', sa.String(), nullable=True)) - op.create_unique_constraint('users_dod_id_unique', 'users', ['dod_id']) - op.create_unique_constraint('users_email_unqiue', 'users', ['email']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint('users_dod_id_unique', 'users', type_='unique') - op.drop_constraint('users_email_unqiue', 'users', type_='unique') - op.drop_column('users', 'last_name') - op.drop_column('users', 'first_name') - op.drop_column('users', 'email') - op.drop_column('users', 'dod_id') - # ### end Alembic commands ### diff --git a/alembic/versions/2572be7fb7fc_add_request_internal_comments.py b/alembic/versions/2572be7fb7fc_add_request_internal_comments.py deleted file mode 100644 index f17ee18e..00000000 --- a/alembic/versions/2572be7fb7fc_add_request_internal_comments.py +++ /dev/null @@ -1,36 +0,0 @@ -"""add request.internal_comments - -Revision ID: 2572be7fb7fc -Revises: dea6b8e09d63 -Create Date: 2018-09-11 15:28:27.252248 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '2572be7fb7fc' -down_revision = 'dea6b8e09d63' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('request_internal_comments', - sa.Column('id', sa.BigInteger(), nullable=False), - sa.Column('text', sa.String(), nullable=True), - sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('request_internal_comments') - # ### end Alembic commands ### diff --git a/alembic/versions/2c2a2af465d3_add_pe_numbers.py b/alembic/versions/2c2a2af465d3_add_pe_numbers.py deleted file mode 100644 index 9d6191b9..00000000 --- a/alembic/versions/2c2a2af465d3_add_pe_numbers.py +++ /dev/null @@ -1,44 +0,0 @@ -"""add PE numbers - -Revision ID: 2c2a2af465d3 -Revises: 14cd800904bc -Create Date: 2018-08-27 16:26:51.707146 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects.postgresql import insert -from urllib.request import urlopen -import csv - -from atst.app import make_config -from atst.models.pe_number import PENumber - - -# revision identifiers, used by Alembic. -revision = '2c2a2af465d3' -down_revision = '14cd800904bc' -branch_labels = None -depends_on = None - - -def get_pe_numbers(url): - response = urlopen(url) - t = response.read().decode("utf-8") - return list(csv.reader(t.split("\r\n"))) - - -def upgrade(): - config = make_config() - pe_numbers = get_pe_numbers(config["PE_NUMBER_CSV_URL"]) - db = op.get_bind() - stmt = insert(PENumber).values(pe_numbers) - do_update = stmt.on_conflict_do_update( - index_elements=["number"], set_=dict(description=stmt.excluded.description) - ) - db.execute(do_update) - - -def downgrade(): - db = op.get_bind() - db.execute("TRUNCATE TABLE pe_number") diff --git a/alembic/versions/4be312655ceb_add_workspaces_table.py b/alembic/versions/4be312655ceb_add_workspaces_table.py deleted file mode 100644 index 6d0ba7d9..00000000 --- a/alembic/versions/4be312655ceb_add_workspaces_table.py +++ /dev/null @@ -1,37 +0,0 @@ -"""add workspaces table - -Revision ID: 4be312655ceb -Revises: 05d6272bdb43 -Create Date: 2018-08-16 09:25:19.888549 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '4be312655ceb' -down_revision = '05d6272bdb43' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('workspaces', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.Column('task_order_id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(), nullable=True), - sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ), - sa.ForeignKeyConstraint(['task_order_id'], ['task_order.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('workspaces') - # ### end Alembic commands ### diff --git a/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py b/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py deleted file mode 100644 index bd5e3136..00000000 --- a/alembic/versions/4c425f17bfe8_add_edit_workspace_information_.py +++ /dev/null @@ -1,43 +0,0 @@ -"""add edit workspace information permission - -Revision ID: 4c425f17bfe8 -Revises: 2572be7fb7fc -Create Date: 2018-09-17 13:14:38.781744 - -""" -from alembic import op -from sqlalchemy.orm.session import Session - -from atst.models.role import Role -from atst.models.permissions import Permissions - - -# revision identifiers, used by Alembic. -revision = '4c425f17bfe8' -down_revision = '2572be7fb7fc' -branch_labels = None -depends_on = None - - -def upgrade(): - session = Session(bind=op.get_bind()) - - owner_and_admin = session.query(Role).filter(Role.name.in_(["owner", "admin"])).all() - for role in owner_and_admin: - role.add_permission(Permissions.EDIT_WORKSPACE_INFORMATION) - session.add(role) - - session.flush() - session.commit() - - -def downgrade(): - session = Session(bind=op.get_bind()) - - owner_and_admin = session.query(Role).filter(Role.name.in_(["owner", "admin"])).all() - for role in owner_and_admin: - role.remove_permission(Permissions.EDIT_WORKSPACE_INFORMATION) - session.add(role) - - session.flush() - session.commit() diff --git a/alembic/versions/4ea5917e7781_add_default_atat_role.py b/alembic/versions/4ea5917e7781_add_default_atat_role.py deleted file mode 100644 index 21b03166..00000000 --- a/alembic/versions/4ea5917e7781_add_default_atat_role.py +++ /dev/null @@ -1,37 +0,0 @@ -"""add_default_atat_role - -Revision ID: 4ea5917e7781 -Revises: 96a9f3537996 -Create Date: 2018-07-30 13:51:29.576931 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.orm.session import Session - - -# revision identifiers, used by Alembic. -revision = '4ea5917e7781' -down_revision = '96a9f3537996' -branch_labels = None -depends_on = None - -from atst.models.role import Role -from atst.models.permissions import Permissions - - -def upgrade(): - session = Session(bind=op.get_bind()) - mission_owner_role = Role( - name='default', - description='', - permissions=[ - Permissions.REQUEST_JEDI_WORKSPACE, - ] - ) - session.add(mission_owner_role) - session.commit() - - -def downgrade(): - pass diff --git a/alembic/versions/4ede1e3e50d1_add_authz_models.py b/alembic/versions/4ede1e3e50d1_add_authz_models.py deleted file mode 100644 index d782b676..00000000 --- a/alembic/versions/4ede1e3e50d1_add_authz_models.py +++ /dev/null @@ -1,62 +0,0 @@ -"""add_authz_models - -Revision ID: 4ede1e3e50d1 -Revises: b5b17d465166 -Create Date: 2018-07-30 11:34:12.016857 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = '4ede1e3e50d1' -down_revision = 'b5b17d465166' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('roles', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('name', sa.String(), nullable=True), - sa.Column('description', sa.String(), nullable=True), - sa.Column('permissions', postgresql.ARRAY(sa.String()), server_default='{}', nullable=True), - sa.PrimaryKeyConstraint('id') - ) - op.create_index(op.f('ix_roles_name'), 'roles', ['name'], unique=True) - op.create_index(op.f('ix_roles_permissions'), 'roles', ['permissions'], unique=False) - op.create_table('users', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('username', sa.String(), nullable=True), - sa.Column('atat_role_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.ForeignKeyConstraint(['atat_role_id'], ['roles.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('workspace_role', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.Column('role_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.ForeignKeyConstraint(['role_id'], ['roles.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_index(op.f('ix_workspace_role_user_id'), 'workspace_role', ['user_id'], unique=False) - op.create_index(op.f('ix_workspace_role_workspace_id'), 'workspace_role', ['workspace_id'], unique=False) - op.create_index('workspace_role_user_workspace', 'workspace_role', ['user_id', 'workspace_id'], unique=True) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_index('workspace_role_user_workspace', table_name='workspace_role') - op.drop_index(op.f('ix_workspace_role_workspace_id'), table_name='workspace_role') - op.drop_index(op.f('ix_workspace_role_user_id'), table_name='workspace_role') - op.drop_table('workspace_role') - op.drop_table('users') - op.drop_index(op.f('ix_roles_permissions'), table_name='roles') - op.drop_index(op.f('ix_roles_name'), table_name='roles') - op.drop_table('roles') - # ### end Alembic commands ### diff --git a/alembic/versions/4f4defb7b440_add_expiration_date_to_task_order.py b/alembic/versions/4f4defb7b440_add_expiration_date_to_task_order.py deleted file mode 100644 index 09468d5c..00000000 --- a/alembic/versions/4f4defb7b440_add_expiration_date_to_task_order.py +++ /dev/null @@ -1,28 +0,0 @@ -"""add expiration date to task order - -Revision ID: 4f4defb7b440 -Revises: 4c425f17bfe8 -Create Date: 2018-09-17 15:22:33.240310 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '4f4defb7b440' -down_revision = '4c425f17bfe8' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('task_order', sa.Column('expiration_date', sa.Date(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('task_order', 'expiration_date') - # ### end Alembic commands ### diff --git a/alembic/versions/53ab3edd334b_request_reviews_comment_column_name.py b/alembic/versions/53ab3edd334b_request_reviews_comment_column_name.py deleted file mode 100644 index 35b52d1d..00000000 --- a/alembic/versions/53ab3edd334b_request_reviews_comment_column_name.py +++ /dev/null @@ -1,30 +0,0 @@ -"""request_reviews comment column name - -Revision ID: 53ab3edd334b -Revises: 777ded5c57a0 -Create Date: 2018-09-10 13:29:02.648359 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '53ab3edd334b' -down_revision = '777ded5c57a0' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('request_reviews', sa.Column('comment', sa.String(), nullable=True)) - op.drop_column('request_reviews', 'comments') - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('request_reviews', sa.Column('comments', sa.VARCHAR(), autoincrement=False, nullable=True)) - op.drop_column('request_reviews', 'comment') - # ### end Alembic commands ### diff --git a/alembic/versions/55ba973d08b9_add_fundz_models.py b/alembic/versions/55ba973d08b9_add_fundz_models.py deleted file mode 100644 index 097532f4..00000000 --- a/alembic/versions/55ba973d08b9_add_fundz_models.py +++ /dev/null @@ -1,38 +0,0 @@ -"""add_fundz_models - -Revision ID: 55ba973d08b9 -Revises: 4ea5917e7781 -Create Date: 2018-07-30 14:43:34.099799 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '55ba973d08b9' -down_revision = '4ea5917e7781' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('pe_number', - sa.Column('number', sa.String(), nullable=False), - sa.Column('description', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('number') - ) - op.create_table('task_order', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('number', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('task_order') - op.drop_table('pe_number') - # ### end Alembic commands ### diff --git a/alembic/versions/74ac90c019bf_initial.py b/alembic/versions/74ac90c019bf_initial.py new file mode 100644 index 00000000..e0b43d55 --- /dev/null +++ b/alembic/versions/74ac90c019bf_initial.py @@ -0,0 +1,261 @@ +"""initial + +Revision ID: 74ac90c019bf +Revises: +Create Date: 2018-09-18 21:00:05.497858 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import postgresql + +# revision identifiers, used by Alembic. +revision = '74ac90c019bf' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + connection = op.get_bind() + connection.execute('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"') + + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('attachments', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('filename', sa.String(), nullable=True), + sa.Column('object_name', sa.String(), nullable=True), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('object_name') + ) + op.create_table('pe_number', + sa.Column('number', sa.String(), nullable=False), + sa.Column('description', sa.String(), nullable=True), + sa.PrimaryKeyConstraint('number') + ) + op.create_table('roles', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('name', sa.String(), nullable=True), + sa.Column('description', sa.String(), nullable=True), + sa.Column('permissions', postgresql.ARRAY(sa.String()), server_default='{}', nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_roles_name'), 'roles', ['name'], unique=True) + op.create_index(op.f('ix_roles_permissions'), 'roles', ['permissions'], unique=False) + op.create_table('task_order', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('number', sa.String(), nullable=True), + sa.Column('source', sa.Enum('MANUAL', 'EDA', name='source', native_enum=False), nullable=True), + sa.Column('funding_type', sa.Enum('RDTE', 'OM', 'PROC', 'OTHER', name='fundingtype', native_enum=False), nullable=True), + sa.Column('funding_type_other', sa.String(), nullable=True), + sa.Column('clin_0001', sa.Integer(), nullable=True), + sa.Column('clin_0003', sa.Integer(), nullable=True), + sa.Column('clin_1001', sa.Integer(), nullable=True), + sa.Column('clin_1003', sa.Integer(), nullable=True), + sa.Column('clin_2001', sa.Integer(), nullable=True), + sa.Column('clin_2003', sa.Integer(), nullable=True), + sa.Column('expiration_date', sa.Date(), nullable=True), + sa.Column('attachment_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['attachment_id'], ['attachments.id'], ), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('number') + ) + op.create_table('users', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('username', sa.String(), nullable=True), + sa.Column('atat_role_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('email', sa.String(), nullable=True), + sa.Column('dod_id', sa.String(), nullable=True), + sa.Column('first_name', sa.String(), nullable=True), + sa.Column('last_name', sa.String(), nullable=True), + sa.ForeignKeyConstraint(['atat_role_id'], ['roles.id'], ), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('dod_id'), + sa.UniqueConstraint('email') + ) + op.create_table('request_reviews', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('comment', sa.String(), nullable=True), + sa.Column('fname_mao', sa.String(), nullable=True), + sa.Column('lname_mao', sa.String(), nullable=True), + sa.Column('email_mao', sa.String(), nullable=True), + sa.Column('phone_mao', sa.String(), nullable=True), + sa.Column('fname_ccpo', sa.String(), nullable=True), + sa.Column('lname_ccpo', sa.String(), nullable=True), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('requests', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('time_created', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), + sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('task_order_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['task_order_id'], ['task_order.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('request_internal_comments', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('text', sa.String(), nullable=True), + sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('request_revisions', + sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('name', sa.String(), nullable=True), + sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('sequence', sa.BigInteger(), nullable=False), + sa.Column('am_poc', sa.Boolean(), nullable=True), + sa.Column('dodid_poc', sa.String(), nullable=True), + sa.Column('email_poc', sa.String(), nullable=True), + sa.Column('fname_poc', sa.String(), nullable=True), + sa.Column('lname_poc', sa.String(), nullable=True), + sa.Column('jedi_usage', sa.String(), nullable=True), + sa.Column('start_date', sa.Date(), nullable=True), + sa.Column('cloud_native', sa.String(), nullable=True), + sa.Column('dollar_value', sa.Integer(), nullable=True), + sa.Column('dod_component', sa.String(), nullable=True), + sa.Column('data_transfers', sa.String(), nullable=True), + sa.Column('expected_completion_date', sa.String(), nullable=True), + sa.Column('jedi_migration', sa.String(), nullable=True), + sa.Column('num_software_systems', sa.Integer(), nullable=True), + sa.Column('number_user_sessions', sa.Integer(), nullable=True), + sa.Column('average_daily_traffic', sa.Integer(), nullable=True), + sa.Column('engineering_assessment', sa.String(), nullable=True), + sa.Column('technical_support_team', sa.String(), nullable=True), + sa.Column('estimated_monthly_spend', sa.Integer(), nullable=True), + sa.Column('average_daily_traffic_gb', sa.Integer(), nullable=True), + sa.Column('rationalization_software_systems', sa.String(), nullable=True), + sa.Column('organization_providing_assistance', sa.String(), nullable=True), + sa.Column('citizenship', sa.String(), nullable=True), + sa.Column('designation', sa.String(), nullable=True), + sa.Column('phone_number', sa.String(), nullable=True), + sa.Column('email_request', sa.String(), nullable=True), + sa.Column('fname_request', sa.String(), nullable=True), + sa.Column('lname_request', sa.String(), nullable=True), + sa.Column('service_branch', sa.String(), nullable=True), + sa.Column('date_latest_training', sa.Date(), nullable=True), + sa.Column('pe_id', sa.String(), nullable=True), + sa.Column('task_order_number', sa.String(), nullable=True), + sa.Column('fname_co', sa.String(), nullable=True), + sa.Column('lname_co', sa.String(), nullable=True), + sa.Column('email_co', sa.String(), nullable=True), + sa.Column('office_co', sa.String(), nullable=True), + sa.Column('fname_cor', sa.String(), nullable=True), + sa.Column('lname_cor', sa.String(), nullable=True), + sa.Column('email_cor', sa.String(), nullable=True), + sa.Column('office_cor', sa.String(), nullable=True), + sa.Column('uii_ids', postgresql.ARRAY(sa.String()), nullable=True), + sa.Column('treasury_code', sa.String(), nullable=True), + sa.Column('ba_code', sa.String(), nullable=True), + sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('workspaces', + sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('name', sa.String(), nullable=True), + sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('name') + ) + op.create_table('projects', + sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('description', sa.String(), nullable=False), + sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('request_status_events', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('new_status', sa.Enum('STARTED', 'SUBMITTED', 'PENDING_FINANCIAL_VERIFICATION', 'PENDING_CCPO_ACCEPTANCE', 'PENDING_CCPO_APPROVAL', 'CHANGES_REQUESTED', 'CHANGES_REQUESTED_TO_FINVER', 'APPROVED', 'EXPIRED', 'DELETED', name='requeststatus', native_enum=False), nullable=True), + sa.Column('time_created', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), + sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('sequence', sa.BigInteger(), nullable=False), + sa.Column('request_revision_id', postgresql.UUID(as_uuid=True), nullable=False), + sa.Column('request_review_id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=True), + sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'), + sa.ForeignKeyConstraint(['request_review_id'], ['request_reviews.id'], ), + sa.ForeignKeyConstraint(['request_revision_id'], ['request_revisions.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('workspace_role', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('role_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.ForeignKeyConstraint(['role_id'], ['roles.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index(op.f('ix_workspace_role_user_id'), 'workspace_role', ['user_id'], unique=False) + op.create_index(op.f('ix_workspace_role_workspace_id'), 'workspace_role', ['workspace_id'], unique=False) + op.create_index('workspace_role_user_workspace', 'workspace_role', ['user_id', 'workspace_id'], unique=True) + op.create_table('environments', + sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('name', sa.String(), nullable=False), + sa.Column('project_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('environment_roles', + sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), + sa.Column('environment_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.Column('role', sa.String(), nullable=True), + sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True), + sa.ForeignKeyConstraint(['environment_id'], ['environments.id'], ), + sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), + sa.PrimaryKeyConstraint('id') + ) + op.create_index('environments_role_user_environment', 'environment_roles', ['user_id', 'environment_id'], unique=True) + # ### end Alembic commands ### + + connection.execute( + "CREATE SEQUENCE request_status_events_sequence_seq OWNED BY request_status_events.sequence;" + ) + connection.execute( + "CREATE SEQUENCE request_revisions_sequence_seq OWNED BY request_revisions.sequence;" + ) + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index('environments_role_user_environment', table_name='environment_roles') + op.drop_table('environment_roles') + op.drop_table('environments') + op.drop_index('workspace_role_user_workspace', table_name='workspace_role') + op.drop_index(op.f('ix_workspace_role_workspace_id'), table_name='workspace_role') + op.drop_index(op.f('ix_workspace_role_user_id'), table_name='workspace_role') + op.drop_table('workspace_role') + op.drop_table('request_status_events') + op.drop_table('projects') + op.drop_table('workspaces') + op.drop_table('request_revisions') + op.drop_table('request_internal_comments') + op.drop_table('requests') + op.drop_table('request_reviews') + op.drop_table('users') + op.drop_table('task_order') + op.drop_index(op.f('ix_roles_permissions'), table_name='roles') + op.drop_index(op.f('ix_roles_name'), table_name='roles') + op.drop_table('roles') + op.drop_table('pe_number') + op.drop_table('attachments') + # ### end Alembic commands ### + + connection = op.get_bind() + connection.execute('DROP EXTENSION IF EXISTS "uuid-ossp"') diff --git a/alembic/versions/777ded5c57a0_bigint_for_request_review_id.py b/alembic/versions/777ded5c57a0_bigint_for_request_review_id.py deleted file mode 100644 index c76ca8e4..00000000 --- a/alembic/versions/777ded5c57a0_bigint_for_request_review_id.py +++ /dev/null @@ -1,36 +0,0 @@ -"""bigint for request review id - -Revision ID: 777ded5c57a0 -Revises: 7bdb2055d7c7 -Create Date: 2018-09-10 13:24:36.328610 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '777ded5c57a0' -down_revision = '7bdb2055d7c7' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('request_reviews', 'id', - existing_type=sa.Integer(), - type_=sa.BigInteger(), - nullable=False) - pass - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.alter_column('request_reviews', 'id', - existing_type=sa.BigInteger(), - type_=sa.Integer(), - nullable=False) - pass - # ### end Alembic commands ### diff --git a/alembic/versions/77b065750596_new_request_statuses.py b/alembic/versions/77b065750596_new_request_statuses.py deleted file mode 100644 index 23b22c29..00000000 --- a/alembic/versions/77b065750596_new_request_statuses.py +++ /dev/null @@ -1,49 +0,0 @@ -"""new request statuses - -Revision ID: 77b065750596 -Revises: 1f57f784ed5b -Create Date: 2018-08-07 16:42:11.502361 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.orm.session import sessionmaker - -from atst.models.request_status_event import RequestStatus - - -# revision identifiers, used by Alembic. -revision = '77b065750596' -down_revision = '1f57f784ed5b' -branch_labels = None -depends_on = None - - -def upgrade(): - """ - Update all existing request statuses so that the state of the - table reflects the statuses listed in RequestStatus. - - This involves fixing the casing on existing statuses, and - deleting statuses that have no match. - """ - - db = op.get_bind() - - status_events = db.execute("SELECT * FROM request_status_events").fetchall() - for status_event in status_events: - try: - status = RequestStatus[status_event["new_status"].upper()] - query = sa.text(""" - UPDATE request_status_events - SET new_status = :status - WHERE id = :id""" - ) - db.execute(query, id=status_event["id"], status=status.name) - except KeyError: - query = sa.text("DELETE FROM request_status_events WHERE id = :id") - db.execute(query, id=status_event["id"]) - - -def downgrade(): - pass diff --git a/alembic/versions/7bdb2055d7c7_add_request_review_table.py b/alembic/versions/7bdb2055d7c7_add_request_review_table.py deleted file mode 100644 index ba669921..00000000 --- a/alembic/versions/7bdb2055d7c7_add_request_review_table.py +++ /dev/null @@ -1,46 +0,0 @@ -"""add request review table - -Revision ID: 7bdb2055d7c7 -Revises: ad30159ef19b -Create Date: 2018-09-06 15:15:40.666840 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - - -# revision identifiers, used by Alembic. -revision = '7bdb2055d7c7' -down_revision = 'ad30159ef19b' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('request_reviews', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('comments', sa.String(), nullable=True), - sa.Column('fname_mao', sa.String(), nullable=True), - sa.Column('lname_mao', sa.String(), nullable=True), - sa.Column('email_mao', sa.String(), nullable=True), - sa.Column('phone_mao', sa.String(), nullable=True), - sa.Column('fname_ccpo', sa.String(), nullable=True), - sa.Column('lname_ccpo', sa.String(), nullable=True), - sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.PrimaryKeyConstraint('id') - ) - op.add_column('request_status_events', sa.Column('request_review_id', sa.Integer(), nullable=True)) - op.create_foreign_key(None, 'request_status_events', 'request_reviews', ['request_review_id'], ['id']) - op.create_foreign_key(None, 'request_reviews', 'users', ['user_id'], ['id']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'request_status_events', type_='foreignkey') - op.drop_constraint(None, 'request_reviews', type_='foreignkey') - op.drop_column('request_status_events', 'request_review_id') - op.drop_table('request_reviews') - # ### end Alembic commands ### diff --git a/alembic/versions/875e4b8a05fc_add_additional_task_order_fields.py b/alembic/versions/875e4b8a05fc_add_additional_task_order_fields.py deleted file mode 100644 index c9ee8ee0..00000000 --- a/alembic/versions/875e4b8a05fc_add_additional_task_order_fields.py +++ /dev/null @@ -1,44 +0,0 @@ -"""add additional task order fields - -Revision ID: 875e4b8a05fc -Revises: f36f130622b9 -Create Date: 2018-08-21 15:52:46.636928 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '875e4b8a05fc' -down_revision = 'f36f130622b9' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('task_order', sa.Column('clin_0001', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('clin_0003', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('clin_1001', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('clin_1003', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('clin_2001', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('clin_2003', sa.Integer(), nullable=True)) - op.add_column('task_order', sa.Column('funding_type', sa.String(), nullable=True)) - op.add_column('task_order', sa.Column('funding_type_other', sa.String(), nullable=True)) - op.add_column('task_order', sa.Column('source', sa.String(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('task_order', 'source') - op.drop_column('task_order', 'funding_type_other') - op.drop_column('task_order', 'funding_type') - op.drop_column('task_order', 'clin_2003') - op.drop_column('task_order', 'clin_2001') - op.drop_column('task_order', 'clin_1003') - op.drop_column('task_order', 'clin_1001') - op.drop_column('task_order', 'clin_0003') - op.drop_column('task_order', 'clin_0001') - # ### end Alembic commands ### diff --git a/alembic/versions/96a9f3537996_add_roles_and_permissions.py b/alembic/versions/96a9f3537996_add_roles_and_permissions.py deleted file mode 100644 index 0729127e..00000000 --- a/alembic/versions/96a9f3537996_add_roles_and_permissions.py +++ /dev/null @@ -1,172 +0,0 @@ -"""add_roles_and_permissions - -Revision ID: 96a9f3537996 -Revises: 4ede1e3e50d1 -Create Date: 2018-07-30 13:48:31.325234 - -""" -import os -import sys -from alembic import op -import sqlalchemy as sa - -from sqlalchemy.orm.session import Session - -from atst.models.role import Role -from atst.models.permissions import Permissions - -# revision identifiers, used by Alembic. -revision = '96a9f3537996' -down_revision = '4ede1e3e50d1' -branch_labels = None -depends_on = None - - -def upgrade(): - session = Session(bind=op.get_bind()) - roles = [ - Role( - name='ccpo', - description='', - permissions=[ - Permissions.VIEW_ORIGINAL_JEDI_REQEUST, - Permissions.REVIEW_AND_APPROVE_JEDI_WORKSPACE_REQUEST, - Permissions.MODIFY_ATAT_ROLE_PERMISSIONS, - Permissions.CREATE_CSP_ROLE, - Permissions.DELETE_CSP_ROLE, - Permissions.DEACTIVE_CSP_ROLE, - Permissions.MODIFY_CSP_ROLE_PERMISSIONS, - - Permissions.VIEW_USAGE_REPORT, - Permissions.VIEW_USAGE_DOLLARS, - Permissions.ADD_AND_ASSIGN_CSP_ROLES, - Permissions.REMOVE_CSP_ROLES, - Permissions.REQUEST_NEW_CSP_ROLE, - Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, - - Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, - Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, - - Permissions.DEACTIVATE_WORKSPACE, - Permissions.VIEW_ATAT_PERMISSIONS, - Permissions.TRANSFER_OWNERSHIP_OF_WORKSPACE, - - Permissions.ADD_APPLICATION_IN_WORKSPACE, - Permissions.DELETE_APPLICATION_IN_WORKSPACE, - Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - Permissions.RENAME_APPLICATION_IN_WORKSPACE, - - Permissions.ADD_ENVIRONMENT_IN_APPLICATION, - Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, - Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, - Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, - - Permissions.ADD_TAG_TO_WORKSPACE, - Permissions.REMOVE_TAG_FROM_WORKSPACE - ] - ), - Role( - name='owner', - description='', - permissions=[ - Permissions.REQUEST_JEDI_WORKSPACE, - Permissions.VIEW_ORIGINAL_JEDI_REQEUST, - - Permissions.VIEW_USAGE_REPORT, - Permissions.VIEW_USAGE_DOLLARS, - Permissions.ADD_AND_ASSIGN_CSP_ROLES, - Permissions.REMOVE_CSP_ROLES, - Permissions.REQUEST_NEW_CSP_ROLE, - Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, - - Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, - Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, - - Permissions.DEACTIVATE_WORKSPACE, - Permissions.VIEW_ATAT_PERMISSIONS, - - Permissions.ADD_APPLICATION_IN_WORKSPACE, - Permissions.DELETE_APPLICATION_IN_WORKSPACE, - Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - Permissions.RENAME_APPLICATION_IN_WORKSPACE, - - Permissions.ADD_ENVIRONMENT_IN_APPLICATION, - Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, - Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, - Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, - ] - ), - Role( - name='admin', - description='', - permissions=[ - Permissions.VIEW_USAGE_REPORT, - Permissions.ADD_AND_ASSIGN_CSP_ROLES, - Permissions.REMOVE_CSP_ROLES, - Permissions.REQUEST_NEW_CSP_ROLE, - Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, - - Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, - Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, - - Permissions.ADD_APPLICATION_IN_WORKSPACE, - Permissions.DELETE_APPLICATION_IN_WORKSPACE, - Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - Permissions.RENAME_APPLICATION_IN_WORKSPACE, - - Permissions.ADD_ENVIRONMENT_IN_APPLICATION, - Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, - Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, - Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, - ] - ), - Role( - name='developer', - description='', - permissions=[ - Permissions.VIEW_USAGE_REPORT, - Permissions.VIEW_USAGE_DOLLARS, - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION - ] - ), - Role( - name='billing_auditor', - description='', - permissions=[ - Permissions.VIEW_USAGE_REPORT, - Permissions.VIEW_USAGE_DOLLARS, - - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, - ] - ), - Role( - name='security_auditor', - description='', - permissions=[ - Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, - Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, - - Permissions.VIEW_ATAT_PERMISSIONS, - - Permissions.VIEW_APPLICATION_IN_WORKSPACE, - - Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, - ] - ), - ] - - session.add_all(roles) - session.commit() - - -def downgrade(): - pass diff --git a/alembic/versions/a2b499a1dd62_workspace_timestamps.py b/alembic/versions/a2b499a1dd62_workspace_timestamps.py deleted file mode 100644 index f7c3e05a..00000000 --- a/alembic/versions/a2b499a1dd62_workspace_timestamps.py +++ /dev/null @@ -1,30 +0,0 @@ -"""workspace timestamps - -Revision ID: a2b499a1dd62 -Revises: f549c7cee17c -Create Date: 2018-08-17 10:43:13.165829 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'a2b499a1dd62' -down_revision = 'f549c7cee17c' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('workspaces', sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False)) - op.add_column('workspaces', sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False)) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('workspaces', 'time_updated') - op.drop_column('workspaces', 'time_created') - # ### end Alembic commands ### diff --git a/alembic/versions/a496111da617_add_name_to_request_revision.py b/alembic/versions/a496111da617_add_name_to_request_revision.py deleted file mode 100644 index cdfdaf34..00000000 --- a/alembic/versions/a496111da617_add_name_to_request_revision.py +++ /dev/null @@ -1,28 +0,0 @@ -"""add name to request revision - -Revision ID: a496111da617 -Revises: 4f4defb7b440 -Create Date: 2018-09-18 16:45:59.297289 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'a496111da617' -down_revision = '4f4defb7b440' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('request_revisions', sa.Column('name', sa.String(), nullable=True)) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_column('request_revisions', 'name') - # ### end Alembic commands ### diff --git a/alembic/versions/a903ebe91ad5_add_sequence_to_request_revision.py b/alembic/versions/a903ebe91ad5_add_sequence_to_request_revision.py deleted file mode 100644 index 14348c64..00000000 --- a/alembic/versions/a903ebe91ad5_add_sequence_to_request_revision.py +++ /dev/null @@ -1,28 +0,0 @@ -"""add sequence to request revision - -Revision ID: a903ebe91ad5 -Revises: 04fe150da553 -Create Date: 2018-08-30 13:45:35.561657 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'a903ebe91ad5' -down_revision = '04fe150da553' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - db = op.get_bind() - op.add_column('request_revisions', sa.Column('sequence', sa.BigInteger(), nullable=False)) - db.execute("CREATE SEQUENCE request_revisions_sequence_seq OWNED BY request_revisions.sequence;") - # ### end Alembic commands ### - - -def downgrade(): - op.drop_column('request_revisions', 'sequence') diff --git a/alembic/versions/ad30159ef19b_add_view_workspace_members_permission.py b/alembic/versions/ad30159ef19b_add_view_workspace_members_permission.py deleted file mode 100644 index 8a3ff320..00000000 --- a/alembic/versions/ad30159ef19b_add_view_workspace_members_permission.py +++ /dev/null @@ -1,53 +0,0 @@ -"""add view_workspace_members_permission - -Revision ID: ad30159ef19b -Revises: 2c2a2af465d3 -Create Date: 2018-09-05 11:17:17.204089 - -""" -from alembic import op -from sqlalchemy.orm.session import Session - -from atst.models.role import Role -from atst.models.permissions import Permissions - - -# revision identifiers, used by Alembic. -revision = 'ad30159ef19b' -down_revision = 'c1d074288e99' -branch_labels = None -depends_on = None - -def upgrade(): - - session = Session(bind=op.get_bind()) - - all_roles_but_default = session.query(Role).filter(Role.name != "default").all() - for role in all_roles_but_default: - role.add_permission(Permissions.VIEW_WORKSPACE) - session.add(role) - - owner_and_ccpo = session.query(Role).filter(Role.name.in_(["owner", "ccpo", "admin"])).all() - for role in owner_and_ccpo: - role.add_permission(Permissions.VIEW_WORKSPACE_MEMBERS) - session.add(role) - - session.flush() - session.commit() - - -def downgrade(): - session = Session(bind=op.get_bind()) - - all_roles_but_default = session.query(Role).filter(Role.name != "default").all() - for role in all_roles_but_default: - role.remove_permission(Permissions.VIEW_WORKSPACE) - session.add(role) - - owner_and_ccpo = session.query(Role).filter(Role.name.in_(["owner", "ccpo"])).all() - for role in owner_and_ccpo: - role.remove_permission(Permissions.VIEW_WORKSPACE_MEMBERS) - session.add(role) - - session.flush() - session.commit() diff --git a/alembic/versions/b5b17d465166_requests.py b/alembic/versions/b5b17d465166_requests.py deleted file mode 100644 index b8d47c06..00000000 --- a/alembic/versions/b5b17d465166_requests.py +++ /dev/null @@ -1,47 +0,0 @@ -"""requests - -Revision ID: b5b17d465166 -Revises: ff1c9c02fa61 -Create Date: 2018-07-23 14:58:05.044456 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'b5b17d465166' -down_revision = 'ff1c9c02fa61' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('requests', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('creator', postgresql.UUID(as_uuid=True), nullable=True), - sa.Column('time_created', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('body', postgresql.JSONB(astext_type=sa.Text()), nullable=True), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('request_status_events', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('new_status', sa.String(), nullable=True), - sa.Column('time_created', sa.DateTime(timezone=True), server_default=sa.text('now()'), nullable=True), - sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.Column('sequence', sa.BigInteger(), nullable=False), - sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - db = op.get_bind() - db.execute("CREATE SEQUENCE request_status_events_sequence_seq OWNED BY request_status_events.sequence;") - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('request_status_events') - op.drop_table('requests') - # ### end Alembic commands ### diff --git a/alembic/versions/c1d074288e99_create_environment_roles_table.py b/alembic/versions/c1d074288e99_create_environment_roles_table.py deleted file mode 100644 index ac1ea1ea..00000000 --- a/alembic/versions/c1d074288e99_create_environment_roles_table.py +++ /dev/null @@ -1,38 +0,0 @@ -"""create environment_roles table - -Revision ID: c1d074288e99 -Revises: 06aa23166ca9 -Create Date: 2018-09-06 13:40:12.332241 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'c1d074288e99' -down_revision = '06aa23166ca9' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('environment_roles', - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('environment_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.Column('role', sa.String(), nullable=True), - sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.ForeignKeyConstraint(['environment_id'], ['environments.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_index('environments_role_user_environment', 'environment_roles', ['user_id', 'environment_id'], unique=True) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_index('environments_role_user_environment', table_name='environment_roles') - op.drop_table('environment_roles') - # ### end Alembic commands ### diff --git a/alembic/versions/d7db8fd35b41_add_attachment_table.py b/alembic/versions/d7db8fd35b41_add_attachment_table.py deleted file mode 100644 index c3d80a48..00000000 --- a/alembic/versions/d7db8fd35b41_add_attachment_table.py +++ /dev/null @@ -1,36 +0,0 @@ -"""add attachment table - -Revision ID: d7db8fd35b41 -Revises: 0845b2f0f401 -Create Date: 2018-08-24 11:27:15.317181 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'd7db8fd35b41' -down_revision = '0845b2f0f401' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('attachments', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('filename', sa.String(), nullable=True), - sa.Column('object_name', sa.String(), nullable=True), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('object_name') - ) - op.create_unique_constraint(None, 'task_order', ['number']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'task_order', type_='unique') - op.drop_table('attachments') - # ### end Alembic commands ### diff --git a/alembic/versions/dea6b8e09d63_remove_view_project_and_environment_.py b/alembic/versions/dea6b8e09d63_remove_view_project_and_environment_.py deleted file mode 100644 index 7915f773..00000000 --- a/alembic/versions/dea6b8e09d63_remove_view_project_and_environment_.py +++ /dev/null @@ -1,49 +0,0 @@ -"""remove view project and environment permissions - -Revision ID: dea6b8e09d63 -Revises: ad30159ef19b -Create Date: 2018-09-10 11:06:00.017222 - -""" -from alembic import op -from sqlalchemy.orm.session import Session - -from atst.models.role import Role -from atst.models.permissions import Permissions - - -# revision identifiers, used by Alembic. -revision = "dea6b8e09d63" -down_revision = "53ab3edd334b" -branch_labels = None -depends_on = None - - -def upgrade(): - session = Session(bind=op.get_bind()) - - priveleged_role_names = ("owner", "admin", "ccpo") - non_priveleged_roles = ( - session.query(Role).filter(Role.name.notin_(priveleged_role_names)).all() - ) - for role in non_priveleged_roles: - role.remove_permission(Permissions.VIEW_APPLICATION_IN_WORKSPACE) - role.remove_permission(Permissions.VIEW_ENVIRONMENT_IN_APPLICATION) - session.add(role) - - session.commit() - - -def downgrade(): - session = Session(bind=op.get_bind()) - - priveleged_role_names = ("owner", "admin", "ccpo") - non_priveleged_roles = ( - session.query(Role).filter(not Role.name.in_(priveleged_role_names)).all() - ) - for role in non_priveleged_roles: - role.add_permission(Permissions.VIEW_APPLICATION_IN_WORKSPACE) - role.add_permission(Permissions.VIEW_ENVIRONMENT_IN_APPLICATION) - session.add(role) - - session.commit() diff --git a/alembic/versions/e66a49285f23_add_relationship_between_revision_and_.py b/alembic/versions/e66a49285f23_add_relationship_between_revision_and_.py deleted file mode 100644 index 131eb963..00000000 --- a/alembic/versions/e66a49285f23_add_relationship_between_revision_and_.py +++ /dev/null @@ -1,42 +0,0 @@ -"""add relationship between revision and status event - -Revision ID: e66a49285f23 -Revises: 090e1bd0d7ce -Create Date: 2018-09-04 14:01:31.548665 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.orm import sessionmaker -from sqlalchemy.dialects import postgresql - -from atst.models.request import Request - -# revision identifiers, used by Alembic. -revision = 'e66a49285f23' -down_revision = '090e1bd0d7ce' -branch_labels = None -depends_on = None - -from uuid import UUID - - -def upgrade(): - op.add_column('request_status_events', sa.Column('request_revision_id', postgresql.UUID(as_uuid=True))) - op.create_foreign_key(None, 'request_status_events', 'request_revisions', ['request_revision_id'], ['id']) - - Session = sessionmaker(bind=op.get_bind()) - session = Session() - for request in session.query(Request).all(): - for status in request.status_events: - status.revision = request.latest_revision - session.add(status) - - session.commit() - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'request_status_events', type_='foreignkey') - op.drop_column('request_status_events', 'request_revision_id') - # ### end Alembic commands ### diff --git a/alembic/versions/f064247f2988_projects_and_environments.py b/alembic/versions/f064247f2988_projects_and_environments.py deleted file mode 100644 index 5efa590b..00000000 --- a/alembic/versions/f064247f2988_projects_and_environments.py +++ /dev/null @@ -1,47 +0,0 @@ -"""projects and environments - -Revision ID: f064247f2988 -Revises: a2b499a1dd62 -Create Date: 2018-08-17 11:30:53.684954 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import postgresql - -# revision identifiers, used by Alembic. -revision = 'f064247f2988' -down_revision = 'a2b499a1dd62' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_table('projects', - sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('name', sa.String(), nullable=False), - sa.Column('description', sa.String(), nullable=False), - sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=False), - sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('environments', - sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), - sa.Column('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False), - sa.Column('name', sa.String(), nullable=False), - sa.Column('project_id', postgresql.UUID(as_uuid=True), nullable=True), - sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ), - sa.PrimaryKeyConstraint('id') - ) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('environments') - op.drop_table('projects') - # ### end Alembic commands ### diff --git a/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py b/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py deleted file mode 100644 index aef41c19..00000000 --- a/alembic/versions/f36f130622b9_add_workspace_role_workspace_id_fk.py +++ /dev/null @@ -1,28 +0,0 @@ -"""add workspace_role workspace_id fk - -Revision ID: f36f130622b9 -Revises: f064247f2988 -Create Date: 2018-08-20 10:36:23.920881 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'f36f130622b9' -down_revision = 'f064247f2988' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.create_foreign_key('workspace_role_workspace_id_fk', 'workspace_role', 'workspaces', ['workspace_id'], ['id']) - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint('workspace_role_workspace_id_fk', 'workspace_role', type_='foreignkey') - # ### end Alembic commands ### diff --git a/alembic/versions/f549c7cee17c_remove_workspaces_task_order_association.py b/alembic/versions/f549c7cee17c_remove_workspaces_task_order_association.py deleted file mode 100644 index 7bf2069e..00000000 --- a/alembic/versions/f549c7cee17c_remove_workspaces_task_order_association.py +++ /dev/null @@ -1,30 +0,0 @@ -"""remove workspaces task order association - -Revision ID: f549c7cee17c -Revises: 4be312655ceb -Create Date: 2018-08-16 16:42:48.581510 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'f549c7cee17c' -down_revision = '4be312655ceb' -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint('workspaces_task_order_id_fkey', 'workspaces', type_='foreignkey') - op.drop_column('workspaces', 'task_order_id') - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.add_column('workspaces', sa.Column('task_order_id', sa.INTEGER(), autoincrement=False)) - op.create_foreign_key('workspaces_task_order_id_fkey', 'workspaces', 'task_order', ['task_order_id'], ['id']) - # ### end Alembic commands ### diff --git a/alembic/versions/ff1c9c02fa61_enable_uuid_extension.py b/alembic/versions/ff1c9c02fa61_enable_uuid_extension.py deleted file mode 100644 index a6f6206a..00000000 --- a/alembic/versions/ff1c9c02fa61_enable_uuid_extension.py +++ /dev/null @@ -1,26 +0,0 @@ -"""enable uuid extension - -Revision ID: ff1c9c02fa61 -Revises: -Create Date: 2018-07-23 14:54:05.422286 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = 'ff1c9c02fa61' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - connection = op.get_bind() - connection.execute('CREATE EXTENSION IF NOT EXISTS "uuid-ossp"') - - -def downgrade(): - connection = op.get_bind() - connection.execute('DROP EXTENSION IF EXISTS "uuid-ossp"') diff --git a/atst/models/request_internal_comment.py b/atst/models/request_internal_comment.py index f3633910..e42e56cd 100644 --- a/atst/models/request_internal_comment.py +++ b/atst/models/request_internal_comment.py @@ -1,13 +1,13 @@ -from sqlalchemy import Column, BigInteger, String, ForeignKey +from sqlalchemy import Column, String, ForeignKey from sqlalchemy.orm import relationship -from atst.models import Base +from atst.models import Base, types class RequestInternalComment(Base): __tablename__ = "request_internal_comments" - id = Column(BigInteger, primary_key=True) + id = types.Id() text = Column(String()) user_id = Column(ForeignKey("users.id"), nullable=False) diff --git a/atst/models/request_status_event.py b/atst/models/request_status_event.py index 4680d162..d4e906ff 100644 --- a/atst/models/request_status_event.py +++ b/atst/models/request_status_event.py @@ -26,7 +26,7 @@ class RequestStatusEvent(Base): __tablename__ = "request_status_events" id = Id() - new_status = Column(SQLAEnum(RequestStatus)) + new_status = Column(SQLAEnum(RequestStatus, native_enum=False)) time_created = Column(DateTime(timezone=True), server_default=func.now()) request_id = Column( UUID(as_uuid=True), ForeignKey("requests.id", ondelete="CASCADE") diff --git a/atst/models/task_order.py b/atst/models/task_order.py index 863a189f..caf15a20 100644 --- a/atst/models/task_order.py +++ b/atst/models/task_order.py @@ -23,8 +23,8 @@ class TaskOrder(Base): id = Column(Integer, primary_key=True) number = Column(String, unique=True) - source = Column(SQLAEnum(Source)) - funding_type = Column(SQLAEnum(FundingType)) + source = Column(SQLAEnum(Source, native_enum=False)) + funding_type = Column(SQLAEnum(FundingType, native_enum=False)) funding_type_other = Column(String) clin_0001 = Column(Integer) clin_0003 = Column(Integer) diff --git a/script/include b/script/include index c55d1eb5..b44abd6d 160000 --- a/script/include +++ b/script/include @@ -1 +1 @@ -Subproject commit c55d1eb5db0255784e46aec1006e4419465ef945 +Subproject commit b44abd6d01aa7dbb4611d8ab0b3b0a358b031900 diff --git a/script/ingest_pe_numbers.py b/script/ingest_pe_numbers.py index d8b22059..b709be83 100644 --- a/script/ingest_pe_numbers.py +++ b/script/ingest_pe_numbers.py @@ -16,11 +16,6 @@ def get_pe_numbers(url): t = response.read().decode("utf-8") return list(csv.reader(t.split("\r\n"))) -def make_pe_number_repo(config): - deps = make_deps(config) - db = deps["db_session"] - return PENumbers(db) - if __name__ == "__main__": config = make_config() url = config['PE_NUMBER_CSV_URL'] diff --git a/script/seed_roles.py b/script/seed_roles.py new file mode 100644 index 00000000..6794e9ad --- /dev/null +++ b/script/seed_roles.py @@ -0,0 +1,165 @@ +# Add root project dir to the python path +import os +import sys + +parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +sys.path.append(parent_dir) + +from sqlalchemy.orm.exc import NoResultFound +from atst.app import make_config, make_app +from atst.database import db +from atst.models import Role, Permissions + +roles = [ + Role( + name="ccpo", + description="", + permissions=[ + Permissions.VIEW_ORIGINAL_JEDI_REQEUST, + Permissions.REVIEW_AND_APPROVE_JEDI_WORKSPACE_REQUEST, + Permissions.MODIFY_ATAT_ROLE_PERMISSIONS, + Permissions.CREATE_CSP_ROLE, + Permissions.DELETE_CSP_ROLE, + Permissions.DEACTIVE_CSP_ROLE, + Permissions.MODIFY_CSP_ROLE_PERMISSIONS, + Permissions.VIEW_USAGE_REPORT, + Permissions.VIEW_USAGE_DOLLARS, + Permissions.ADD_AND_ASSIGN_CSP_ROLES, + Permissions.REMOVE_CSP_ROLES, + Permissions.REQUEST_NEW_CSP_ROLE, + Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, + Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, + Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, + Permissions.DEACTIVATE_WORKSPACE, + Permissions.VIEW_ATAT_PERMISSIONS, + Permissions.TRANSFER_OWNERSHIP_OF_WORKSPACE, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_WORKSPACE_MEMBERS, + Permissions.ADD_APPLICATION_IN_WORKSPACE, + Permissions.DELETE_APPLICATION_IN_WORKSPACE, + Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE, + Permissions.RENAME_APPLICATION_IN_WORKSPACE, + Permissions.ADD_ENVIRONMENT_IN_APPLICATION, + Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, + Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, + Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, + Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, + Permissions.ADD_TAG_TO_WORKSPACE, + Permissions.REMOVE_TAG_FROM_WORKSPACE, + ], + ), + Role( + name="owner", + description="", + permissions=[ + Permissions.REQUEST_JEDI_WORKSPACE, + Permissions.VIEW_ORIGINAL_JEDI_REQEUST, + Permissions.VIEW_USAGE_REPORT, + Permissions.VIEW_USAGE_DOLLARS, + Permissions.ADD_AND_ASSIGN_CSP_ROLES, + Permissions.REMOVE_CSP_ROLES, + Permissions.REQUEST_NEW_CSP_ROLE, + Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, + Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, + Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, + Permissions.DEACTIVATE_WORKSPACE, + Permissions.VIEW_ATAT_PERMISSIONS, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_WORKSPACE_MEMBERS, + Permissions.EDIT_WORKSPACE_INFORMATION, + Permissions.ADD_APPLICATION_IN_WORKSPACE, + Permissions.DELETE_APPLICATION_IN_WORKSPACE, + Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE, + Permissions.RENAME_APPLICATION_IN_WORKSPACE, + Permissions.ADD_ENVIRONMENT_IN_APPLICATION, + Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, + Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, + Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, + Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, + ], + ), + Role( + name="admin", + description="", + permissions=[ + Permissions.VIEW_USAGE_REPORT, + Permissions.ADD_AND_ASSIGN_CSP_ROLES, + Permissions.REMOVE_CSP_ROLES, + Permissions.REQUEST_NEW_CSP_ROLE, + Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE, + Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, + Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_WORKSPACE_MEMBERS, + Permissions.EDIT_WORKSPACE_INFORMATION, + Permissions.ADD_APPLICATION_IN_WORKSPACE, + Permissions.DELETE_APPLICATION_IN_WORKSPACE, + Permissions.DEACTIVATE_APPLICATION_IN_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE, + Permissions.RENAME_APPLICATION_IN_WORKSPACE, + Permissions.ADD_ENVIRONMENT_IN_APPLICATION, + Permissions.DELETE_ENVIRONMENT_IN_APPLICATION, + Permissions.DEACTIVATE_ENVIRONMENT_IN_APPLICATION, + Permissions.VIEW_ENVIRONMENT_IN_APPLICATION, + Permissions.RENAME_ENVIRONMENT_IN_APPLICATION, + ], + ), + Role( + name="developer", + description="", + permissions=[ + Permissions.VIEW_USAGE_REPORT, + Permissions.VIEW_USAGE_DOLLARS, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE + ], + ), + Role( + name="billing_auditor", + description="", + permissions=[ + Permissions.VIEW_USAGE_REPORT, + Permissions.VIEW_USAGE_DOLLARS, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE, + ], + ), + Role( + name="security_auditor", + description="", + permissions=[ + Permissions.VIEW_ASSIGNED_ATAT_ROLE_CONFIGURATIONS, + Permissions.VIEW_ASSIGNED_CSP_ROLE_CONFIGURATIONS, + Permissions.VIEW_ATAT_PERMISSIONS, + Permissions.VIEW_WORKSPACE, + Permissions.VIEW_APPLICATION_IN_WORKSPACE, + ], + ), + Role( + name="default", description="", permissions=[Permissions.REQUEST_JEDI_WORKSPACE] + ), +] + + +def seed_roles(): + for role in roles: + try: + existing_role = db.session.query(Role).filter_by(name=role.name).one() + existing_role.description = role.description + existing_role.permissions = role.permissions + db.session.add(existing_role) + print("Updated existing role {}".format(existing_role.name)) + except NoResultFound: + db.session.add(role) + print("Added new role {}".format(role.name)) + + db.session.commit() + + +if __name__ == "__main__": + config = make_config() + app = make_app(config) + with app.app_context(): + seed_roles()