Squashed migrations and created seed_roles.py

This commit is contained in:
richard-dds 2018-09-18 21:36:43 -04:00
parent dc46608ede
commit 4fc1f9f2d4
41 changed files with 433 additions and 1527 deletions

View File

@ -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 ###

View File

@ -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')

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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))

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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")

View File

@ -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 ###

View File

@ -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()

View File

@ -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

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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"')

View File

@ -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 ###

View File

@ -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

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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')

View File

@ -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()

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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()

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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 ###

View File

@ -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"')

View File

@ -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)

View File

@ -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")

View File

@ -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)

@ -1 +1 @@
Subproject commit c55d1eb5db0255784e46aec1006e4419465ef945
Subproject commit b44abd6d01aa7dbb4611d8ab0b3b0a358b031900

View File

@ -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']

165
script/seed_roles.py Normal file
View File

@ -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()