From 5adecda41e949a22f83384bb2431906c3dca053c Mon Sep 17 00:00:00 2001 From: Martyn Inglis Date: Wed, 24 Aug 2016 13:34:42 +0100 Subject: [PATCH] Adds new job_status table and FK to jobs. This will replace the job_status enum type. --- app/models.py | 19 +++++++++ .../versions/0048_job_scheduled_time.py | 41 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 migrations/versions/0048_job_scheduled_time.py diff --git a/app/models.py b/app/models.py index efe5bb7b7..9c1329576 100644 --- a/app/models.py +++ b/app/models.py @@ -303,6 +303,19 @@ class ProviderDetails(db.Model): JOB_STATUS_TYPES = ['pending', 'in progress', 'finished', 'sending limits exceeded'] +JOB_STATUS_PENDING = 'pending' +JOB_STATUS_IN_PROGRESS = 'in progress' +JOB_STATUS_FINISHED = 'finished' +JOB_STATUS_SENDING_LIMITS_EXCEEDED = 'sending limits exceeded' +JOB_STATUS_SCHEDULED = 'scheduled' + + +class JobStatusTypes(db.Model): + __tablename__ = 'job_status' + + name = db.Column(db.String(255), primary_key=True) + + class Job(db.Model): __tablename__ = 'jobs' @@ -343,6 +356,12 @@ class Job(db.Model): nullable=True) created_by = db.relationship('User') created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), index=True, nullable=False) + scheduled_for = db.Column( + db.DateTime, + index=True, + unique=False, + nullable=True) + job_status = db.Column(db.String(255), db.ForeignKey('job_status.name'), index=True, nullable=True) VERIFY_CODE_TYPES = [EMAIL_TYPE, SMS_TYPE] diff --git a/migrations/versions/0048_job_scheduled_time.py b/migrations/versions/0048_job_scheduled_time.py new file mode 100644 index 000000000..8edbbb62e --- /dev/null +++ b/migrations/versions/0048_job_scheduled_time.py @@ -0,0 +1,41 @@ +"""empty message + +Revision ID: 0048_job_scheduled_time +Revises: 0047_ukvi_spelling +Create Date: 2016-08-24 13:21:51.744526 + +""" + +# revision identifiers, used by Alembic. +revision = '0048_job_scheduled_time' +down_revision = '0047_ukvi_spelling' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.create_table('job_status', + sa.Column('name', sa.String(length=255), nullable=False), + sa.PrimaryKeyConstraint('name') + ) + op.add_column('jobs', sa.Column('job_status', sa.String(length=255), nullable=True)) + op.add_column('jobs', sa.Column('scheduled_for', sa.DateTime(), nullable=True)) + op.create_index(op.f('ix_jobs_job_status'), 'jobs', ['job_status'], unique=False) + op.create_index(op.f('ix_jobs_scheduled_for'), 'jobs', ['scheduled_for'], unique=False) + op.create_foreign_key(None, 'jobs', 'job_status', ['job_status'], ['name']) + + op.execute("insert into job_status values ('pending')") + op.execute("insert into job_status values ('in progress')") + op.execute("insert into job_status values ('finished')") + op.execute("insert into job_status values ('sending limits exceeded')") + op.execute("insert into job_status values ('scheduled')") + + +def downgrade(): + op.drop_constraint('jobs_job_status_fkey', 'jobs', type_='foreignkey') + op.drop_index(op.f('ix_jobs_scheduled_for'), table_name='jobs') + op.drop_index(op.f('ix_jobs_job_status'), table_name='jobs') + op.drop_column('jobs', 'scheduled_for') + op.drop_column('jobs', 'job_status') + op.drop_table('job_status')