Timestamps and uuids everywhere

This commit is contained in:
richard-dds 2018-09-20 10:18:52 -04:00
parent 4fc1f9f2d4
commit 5f54468082
13 changed files with 74 additions and 61 deletions

View File

@ -1,8 +1,8 @@
"""initial """initial
Revision ID: 74ac90c019bf Revision ID: 359caaf8c5f1
Revises: Revises:
Create Date: 2018-09-18 21:00:05.497858 Create Date: 2018-09-20 10:25:44.438679
""" """
from alembic import op from alembic import op
@ -10,7 +10,7 @@ import sqlalchemy as sa
from sqlalchemy.dialects import postgresql from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '74ac90c019bf' revision = '359caaf8c5f1'
down_revision = None down_revision = None
branch_labels = None branch_labels = None
depends_on = None depends_on = None
@ -22,18 +22,22 @@ def upgrade():
# ### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
op.create_table('attachments', op.create_table('attachments',
sa.Column('id', sa.Integer(), nullable=False), 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('filename', sa.String(), nullable=True), sa.Column('filename', sa.String(), nullable=True),
sa.Column('object_name', sa.String(), nullable=True), sa.Column('object_name', sa.String(), nullable=True),
sa.PrimaryKeyConstraint('id'), sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('object_name') sa.UniqueConstraint('object_name')
) )
op.create_table('pe_number', op.create_table('pe_numbers',
sa.Column('number', sa.String(), nullable=False), sa.Column('number', sa.String(), nullable=False),
sa.Column('description', sa.String(), nullable=True), sa.Column('description', sa.String(), nullable=True),
sa.PrimaryKeyConstraint('number') sa.PrimaryKeyConstraint('number')
) )
op.create_table('roles', op.create_table('roles',
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('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False),
sa.Column('name', sa.String(), nullable=True), sa.Column('name', sa.String(), nullable=True),
sa.Column('description', sa.String(), nullable=True), sa.Column('description', sa.String(), nullable=True),
@ -42,8 +46,10 @@ def upgrade():
) )
op.create_index(op.f('ix_roles_name'), 'roles', ['name'], unique=True) 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_index(op.f('ix_roles_permissions'), 'roles', ['permissions'], unique=False)
op.create_table('task_order', op.create_table('task_orders',
sa.Column('id', sa.Integer(), nullable=False), 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('number', sa.String(), nullable=True), sa.Column('number', sa.String(), nullable=True),
sa.Column('source', sa.Enum('MANUAL', 'EDA', name='source', native_enum=False), 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', sa.Enum('RDTE', 'OM', 'PROC', 'OTHER', name='fundingtype', native_enum=False), nullable=True),
@ -55,12 +61,14 @@ def upgrade():
sa.Column('clin_2001', sa.Integer(), nullable=True), sa.Column('clin_2001', sa.Integer(), nullable=True),
sa.Column('clin_2003', sa.Integer(), nullable=True), sa.Column('clin_2003', sa.Integer(), nullable=True),
sa.Column('expiration_date', sa.Date(), nullable=True), sa.Column('expiration_date', sa.Date(), nullable=True),
sa.Column('attachment_id', sa.Integer(), nullable=True), sa.Column('attachment_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.ForeignKeyConstraint(['attachment_id'], ['attachments.id'], ), sa.ForeignKeyConstraint(['attachment_id'], ['attachments.id'], ),
sa.PrimaryKeyConstraint('id'), sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('number') sa.UniqueConstraint('number')
) )
op.create_table('users', op.create_table('users',
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('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False),
sa.Column('username', sa.String(), nullable=True), sa.Column('username', sa.String(), nullable=True),
sa.Column('atat_role_id', postgresql.UUID(as_uuid=True), nullable=True), sa.Column('atat_role_id', postgresql.UUID(as_uuid=True), nullable=True),
@ -74,6 +82,8 @@ def upgrade():
sa.UniqueConstraint('email') sa.UniqueConstraint('email')
) )
op.create_table('request_reviews', op.create_table('request_reviews',
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('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('user_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('comment', sa.String(), nullable=True), sa.Column('comment', sa.String(), nullable=True),
@ -87,15 +97,18 @@ def upgrade():
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('requests', op.create_table('requests',
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('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('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('user_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('task_order_id', sa.Integer(), nullable=True), sa.Column('task_order_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.ForeignKeyConstraint(['task_order_id'], ['task_order.id'], ), sa.ForeignKeyConstraint(['task_order_id'], ['task_orders.id'], ),
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('request_internal_comments', op.create_table('request_internal_comments',
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('id', postgresql.UUID(as_uuid=True), server_default=sa.text('uuid_generate_v4()'), nullable=False),
sa.Column('text', sa.String(), nullable=True), sa.Column('text', sa.String(), nullable=True),
sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('user_id', postgresql.UUID(as_uuid=True), nullable=False),
@ -108,7 +121,6 @@ def upgrade():
sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), 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('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('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('request_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('sequence', sa.BigInteger(), nullable=False), sa.Column('sequence', sa.BigInteger(), nullable=False),
sa.Column('am_poc', sa.Boolean(), nullable=True), sa.Column('am_poc', sa.Boolean(), nullable=True),
@ -133,6 +145,7 @@ def upgrade():
sa.Column('average_daily_traffic_gb', 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('rationalization_software_systems', sa.String(), nullable=True),
sa.Column('organization_providing_assistance', sa.String(), nullable=True), sa.Column('organization_providing_assistance', sa.String(), nullable=True),
sa.Column('name', sa.String(), nullable=True),
sa.Column('citizenship', sa.String(), nullable=True), sa.Column('citizenship', sa.String(), nullable=True),
sa.Column('designation', sa.String(), nullable=True), sa.Column('designation', sa.String(), nullable=True),
sa.Column('phone_number', sa.String(), nullable=True), sa.Column('phone_number', sa.String(), nullable=True),
@ -178,19 +191,22 @@ def upgrade():
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('request_status_events', op.create_table('request_status_events',
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('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('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('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('request_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.Column('sequence', sa.BigInteger(), nullable=False), sa.Column('sequence', sa.BigInteger(), nullable=False),
sa.Column('request_revision_id', postgresql.UUID(as_uuid=True), 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.Column('request_review_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'), sa.ForeignKeyConstraint(['request_id'], ['requests.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['request_review_id'], ['request_reviews.id'], ), sa.ForeignKeyConstraint(['request_review_id'], ['request_reviews.id'], ),
sa.ForeignKeyConstraint(['request_revision_id'], ['request_revisions.id'], ), sa.ForeignKeyConstraint(['request_revision_id'], ['request_revisions.id'], ),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('workspace_role', op.create_table('workspace_roles',
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('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('workspace_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.Column('role_id', postgresql.UUID(as_uuid=True), nullable=True), sa.Column('role_id', postgresql.UUID(as_uuid=True), nullable=True),
@ -200,9 +216,9 @@ def upgrade():
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ), sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id'], ),
sa.PrimaryKeyConstraint('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_roles_user_id'), 'workspace_roles', ['user_id'], unique=False)
op.create_index(op.f('ix_workspace_role_workspace_id'), 'workspace_role', ['workspace_id'], unique=False) op.create_index(op.f('ix_workspace_roles_workspace_id'), 'workspace_roles', ['workspace_id'], unique=False)
op.create_index('workspace_role_user_workspace', 'workspace_role', ['user_id', 'workspace_id'], unique=True) op.create_index('workspace_role_user_workspace', 'workspace_roles', ['user_id', 'workspace_id'], unique=True)
op.create_table('environments', op.create_table('environments',
sa.Column('time_created', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False), 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('time_updated', sa.TIMESTAMP(timezone=True), server_default=sa.text('now()'), nullable=False),
@ -213,6 +229,8 @@ def upgrade():
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')
) )
op.create_table('environment_roles', op.create_table('environment_roles',
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('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('environment_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.Column('role', sa.String(), nullable=True), sa.Column('role', sa.String(), nullable=True),
@ -237,10 +255,10 @@ def downgrade():
op.drop_index('environments_role_user_environment', table_name='environment_roles') op.drop_index('environments_role_user_environment', table_name='environment_roles')
op.drop_table('environment_roles') op.drop_table('environment_roles')
op.drop_table('environments') op.drop_table('environments')
op.drop_index('workspace_role_user_workspace', table_name='workspace_role') op.drop_index('workspace_role_user_workspace', table_name='workspace_roles')
op.drop_index(op.f('ix_workspace_role_workspace_id'), table_name='workspace_role') op.drop_index(op.f('ix_workspace_roles_workspace_id'), table_name='workspace_roles')
op.drop_index(op.f('ix_workspace_role_user_id'), table_name='workspace_role') op.drop_index(op.f('ix_workspace_roles_user_id'), table_name='workspace_roles')
op.drop_table('workspace_role') op.drop_table('workspace_roles')
op.drop_table('request_status_events') op.drop_table('request_status_events')
op.drop_table('projects') op.drop_table('projects')
op.drop_table('workspaces') op.drop_table('workspaces')
@ -249,11 +267,11 @@ def downgrade():
op.drop_table('requests') op.drop_table('requests')
op.drop_table('request_reviews') op.drop_table('request_reviews')
op.drop_table('users') op.drop_table('users')
op.drop_table('task_order') op.drop_table('task_orders')
op.drop_index(op.f('ix_roles_permissions'), table_name='roles') op.drop_index(op.f('ix_roles_permissions'), table_name='roles')
op.drop_index(op.f('ix_roles_name'), table_name='roles') op.drop_index(op.f('ix_roles_name'), table_name='roles')
op.drop_table('roles') op.drop_table('roles')
op.drop_table('pe_number') op.drop_table('pe_numbers')
op.drop_table('attachments') op.drop_table('attachments')
# ### end Alembic commands ### # ### end Alembic commands ###

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String from sqlalchemy import Column, Integer, String
from flask import current_app as app from flask import current_app as app
from atst.models import Base from atst.models import Base, types, mixins
from atst.database import db from atst.database import db
from atst.uploader import UploadError from atst.uploader import UploadError
@ -10,10 +10,10 @@ class AttachmentError(Exception):
pass pass
class Attachment(Base): class Attachment(Base, mixins.TimestampsMixin):
__tablename__ = "attachments" __tablename__ = "attachments"
id = Column(Integer, primary_key=True) id = types.Id()
filename = Column(String) filename = Column(String)
object_name = Column(String, unique=True) object_name = Column(String, unique=True)

View File

@ -3,18 +3,17 @@ from sqlalchemy import Index, ForeignKey, Column, String
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base, types, mixins
from .types import Id
class CSPRole(Enum): class CSPRole(Enum):
NONSENSE_ROLE = "nonesense_role" NONSENSE_ROLE = "nonesense_role"
class EnvironmentRole(Base): class EnvironmentRole(Base, mixins.TimestampsMixin):
__tablename__ = "environment_roles" __tablename__ = "environment_roles"
id = Id() id = types.Id()
environment_id = Column(UUID(as_uuid=True), ForeignKey("environments.id")) environment_id = Column(UUID(as_uuid=True), ForeignKey("environments.id"))
environment = relationship("Environment", backref="roles") environment = relationship("Environment", backref="roles")

View File

@ -4,7 +4,7 @@ from atst.models import Base
class PENumber(Base): class PENumber(Base):
__tablename__ = "pe_number" __tablename__ = "pe_numbers"
number = Column(String, primary_key=True) number = Column(String, primary_key=True)
description = Column(String) description = Column(String)

View File

@ -2,8 +2,7 @@ from sqlalchemy import Column, func, ForeignKey
from sqlalchemy.types import DateTime from sqlalchemy.types import DateTime
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base, types, mixins
from atst.models.types import Id
from atst.models.request_status_event import RequestStatus from atst.models.request_status_event import RequestStatus
from atst.utils import first_or_none from atst.utils import first_or_none
from atst.models.request_revision import RequestRevision from atst.models.request_revision import RequestRevision
@ -25,10 +24,10 @@ def update_dict_with_properties(instance, body, top_level_key, properties):
return body return body
class Request(Base): class Request(Base, mixins.TimestampsMixin):
__tablename__ = "requests" __tablename__ = "requests"
id = Id() id = types.Id()
time_created = Column(DateTime(timezone=True), server_default=func.now()) time_created = Column(DateTime(timezone=True), server_default=func.now())
status_events = relationship( status_events = relationship(
"RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence" "RequestStatusEvent", backref="request", order_by="RequestStatusEvent.sequence"
@ -39,7 +38,7 @@ class Request(Base):
user_id = Column(ForeignKey("users.id"), nullable=False) user_id = Column(ForeignKey("users.id"), nullable=False)
creator = relationship("User", backref="owned_requests") creator = relationship("User", backref="owned_requests")
task_order_id = Column(ForeignKey("task_order.id")) task_order_id = Column(ForeignKey("task_orders.id"))
task_order = relationship("TaskOrder") task_order = relationship("TaskOrder")
revisions = relationship( revisions = relationship(

View File

@ -1,10 +1,10 @@
from sqlalchemy import Column, String, ForeignKey from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base, types from atst.models import Base, types, mixins
class RequestInternalComment(Base): class RequestInternalComment(Base, mixins.TimestampsMixin):
__tablename__ = "request_internal_comments" __tablename__ = "request_internal_comments"
id = types.Id() id = types.Id()

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 sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base, mixins, types
class RequestReview(Base): class RequestReview(Base, mixins.TimestampsMixin):
__tablename__ = "request_reviews" __tablename__ = "request_reviews"
id = Column(BigInteger, primary_key=True) id = types.Id()
status = relationship("RequestStatusEvent", uselist=False, back_populates="review") status = relationship("RequestStatusEvent", uselist=False, back_populates="review")
user_id = Column(ForeignKey("users.id"), nullable=False) user_id = Column(ForeignKey("users.id"), nullable=False)

View File

@ -5,7 +5,7 @@ from sqlalchemy.types import DateTime, BigInteger
from sqlalchemy.schema import Sequence from sqlalchemy.schema import Sequence
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from atst.models import Base from atst.models import Base, mixins
from atst.models.types import Id from atst.models.types import Id
@ -22,7 +22,7 @@ class RequestStatus(Enum):
DELETED = "Deleted" DELETED = "Deleted"
class RequestStatusEvent(Base): class RequestStatusEvent(Base, mixins.TimestampsMixin):
__tablename__ = "request_status_events" __tablename__ = "request_status_events"
id = Id() id = Id()

View File

@ -2,14 +2,13 @@ from sqlalchemy import String, Column
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.orm.attributes import flag_modified from sqlalchemy.orm.attributes import flag_modified
from atst.models import Base from atst.models import Base, types, mixins
from .types import Id
class Role(Base): class Role(Base, mixins.TimestampsMixin):
__tablename__ = "roles" __tablename__ = "roles"
id = Id() id = types.Id()
name = Column(String, index=True, unique=True) name = Column(String, index=True, unique=True)
description = Column(String) description = Column(String)
permissions = Column(ARRAY(String), index=True, server_default="{}") permissions = Column(ARRAY(String), index=True, server_default="{}")

View File

@ -3,7 +3,7 @@ from enum import Enum
from sqlalchemy import Column, Integer, String, ForeignKey, Enum as SQLAEnum, Date from sqlalchemy import Column, Integer, String, ForeignKey, Enum as SQLAEnum, Date
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base, types, mixins
class Source(Enum): class Source(Enum):
@ -18,10 +18,10 @@ class FundingType(Enum):
OTHER = "OTHER" OTHER = "OTHER"
class TaskOrder(Base): class TaskOrder(Base, mixins.TimestampsMixin):
__tablename__ = "task_order" __tablename__ = "task_orders"
id = Column(Integer, primary_key=True) id = types.Id()
number = Column(String, unique=True) number = Column(String, unique=True)
source = Column(SQLAEnum(Source, native_enum=False)) source = Column(SQLAEnum(Source, native_enum=False))
funding_type = Column(SQLAEnum(FundingType, native_enum=False)) funding_type = Column(SQLAEnum(FundingType, native_enum=False))

View File

@ -2,15 +2,14 @@ from sqlalchemy import String, ForeignKey, Column
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from atst.models import Base from atst.models import Base, types, mixins
from .types import Id
from atst.models.permissions import Permissions from atst.models.permissions import Permissions
class User(Base): class User(Base, mixins.TimestampsMixin):
__tablename__ = "users" __tablename__ = "users"
id = Id() id = types.Id()
username = Column(String) username = Column(String)
atat_role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id")) atat_role_id = Column(UUID(as_uuid=True), ForeignKey("roles.id"))

View File

@ -2,12 +2,12 @@ from sqlalchemy import Index, ForeignKey, Column
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from atst.models import Base from atst.models import Base, mixins
from .types import Id from .types import Id
class WorkspaceRole(Base): class WorkspaceRole(Base, mixins.TimestampsMixin):
__tablename__ = "workspace_role" __tablename__ = "workspace_roles"
id = Id() id = Id()
workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True) workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True)

View File

@ -1,12 +1,11 @@
from atst.models.task_order import TaskOrder
from tests.factories import TaskOrderFactory from tests.factories import TaskOrderFactory
from tests.assert_util import dict_contains
def test_as_dictionary(): def test_as_dictionary():
data = TaskOrderFactory.dictionary() data = TaskOrderFactory.dictionary()
real_task_order = TaskOrderFactory.create(**data) real_task_order = TaskOrderFactory.create(**data)
assert real_task_order.to_dictionary() == data assert dict_contains(real_task_order.to_dictionary(), data)
def test_budget(): def test_budget():