Starting to implement scheduling

This commit is contained in:
Martyn Inglis
2016-08-24 14:04:52 +01:00
parent 5adecda41e
commit 805da23d6b
3 changed files with 66 additions and 54 deletions

View File

@@ -361,7 +361,8 @@ class Job(db.Model):
index=True, index=True,
unique=False, unique=False,
nullable=True) nullable=True)
job_status = db.Column(db.String(255), db.ForeignKey('job_status.name'), index=True, nullable=True) job_status = db.Column(
db.String(255), db.ForeignKey('job_status.name'), index=True, nullable=True, default="pending")
VERIFY_CODE_TYPES = [EMAIL_TYPE, SMS_TYPE] VERIFY_CODE_TYPES = [EMAIL_TYPE, SMS_TYPE]

View File

@@ -20,59 +20,68 @@ from app.models import Job, Template, NotificationHistory
def upgrade(): def upgrade():
session = Session(bind=op.get_bind()) #
# REMOVED
go_live = datetime.datetime.strptime('2016-05-18', '%Y-%m-%d') # This script has been applied and doesn't need to be re-applied
notifications_history_start_date = datetime.datetime.strptime('2016-06-26 23:21:55', '%Y-%m-%d %H:%M:%S') # note that by referencing the model objects in migration files, any subsequent alteration of the model and thus
jobs = session.query(Job).join(Template).filter(Job.service_id == '95316ff0-e555-462d-a6e7-95d26fbfd091', # the database causes all previous migration scripts to fail as the model and DB will be inconsistent in this
Job.created_at >= go_live, # past state.
Job.created_at < notifications_history_start_date).all() #
# session = Session(bind=op.get_bind())
for job in jobs: #
for i in range(0, job.notifications_delivered): # go_live = datetime.datetime.strptime('2016-05-18', '%Y-%m-%d')
notification = NotificationHistory(id=uuid.uuid4(), # notifications_history_start_date = datetime.datetime.strptime('2016-06-26 23:21:55', '%Y-%m-%d %H:%M:%S')
job_id=job.id, # jobs = session.query(Job).join(Template).filter(Job.service_id == '95316ff0-e555-462d-a6e7-95d26fbfd091',
service_id=job.service_id, # Job.created_at >= go_live,
template_id=job.template.id, # Job.created_at < notifications_history_start_date).all()
template_version=job.template_version, #
key_type='normal', # for job in jobs:
content_char_count=len(job.template.content), # for i in range(0, job.notifications_delivered):
notification_type=job.template.template_type, # notification = NotificationHistory(id=uuid.uuid4(),
created_at=job.created_at, # job_id=job.id,
sent_at=job.processing_finished, # service_id=job.service_id,
sent_by='ses' if job.template.template_type == 'email' else 'mmg', # template_id=job.template.id,
status='delivered') # template_version=job.template_version,
# key_type='normal',
session.add(notification) # content_char_count=len(job.template.content),
# notification_type=job.template.template_type,
for i in range(0, job.notifications_failed): # created_at=job.created_at,
notification = NotificationHistory(id=uuid.uuid4(), # sent_at=job.processing_finished,
job_id=job.id, # sent_by='ses' if job.template.template_type == 'email' else 'mmg',
service_id=job.service_id, # status='delivered')
template_id=job.template.id, #
template_version=job.template_version, # session.add(notification)
key_type='normal', #
content_char_count=len(job.template.content), # for i in range(0, job.notifications_failed):
notification_type=job.template.template_type, # notification = NotificationHistory(id=uuid.uuid4(),
created_at=job.created_at, # job_id=job.id,
sent_at=job.processing_finished, # service_id=job.service_id,
sent_by='ses' if job.template.template_type == 'email' else 'mmg', # template_id=job.template.id,
status='permanent-failure') # template_version=job.template_version,
session.add(notification) # key_type='normal',
session.commit() # content_char_count=len(job.template.content),
# notification_type=job.template.template_type,
# created_at=job.created_at,
# sent_at=job.processing_finished,
# sent_by='ses' if job.template.template_type == 'email' else 'mmg',
# status='permanent-failure')
# session.add(notification)
# session.commit()
pass
def downgrade(): def downgrade():
### commands auto generated by Alembic - please adjust! ### # ### commands auto generated by Alembic - please adjust! ###
session = Session(bind=op.get_bind()) # session = Session(bind=op.get_bind())
#
go_live = datetime.datetime.strptime('2016-05-18', '%Y-%m-%d') # go_live = datetime.datetime.strptime('2016-05-18', '%Y-%m-%d')
notifications_history_start_date = datetime.datetime.strptime('2016-06-26 23:21:55', '%Y-%m-%d %H:%M:%S') # notifications_history_start_date = datetime.datetime.strptime('2016-06-26 23:21:55', '%Y-%m-%d %H:%M:%S')
#
session.query(NotificationHistory).filter( # session.query(NotificationHistory).filter(
NotificationHistory.created_at >= go_live, # NotificationHistory.created_at >= go_live,
NotificationHistory.service_id == '95316ff0-e555-462d-a6e7-95d26fbfd091', # NotificationHistory.service_id == '95316ff0-e555-462d-a6e7-95d26fbfd091',
NotificationHistory.created_at < notifications_history_start_date).delete() # NotificationHistory.created_at < notifications_history_start_date).delete()
#
session.commit() # session.commit()
### end Alembic commands ### # ### end Alembic commands ###
pass

View File

@@ -123,10 +123,12 @@ def test_create_job(notify_api, sample_template, mocker, fake_uuid):
path = '/service/{}/job'.format(sample_template.service.id) path = '/service/{}/job'.format(sample_template.service.id)
auth_header = create_authorization_header(service_id=sample_template.service.id) auth_header = create_authorization_header(service_id=sample_template.service.id)
headers = [('Content-Type', 'application/json'), auth_header] headers = [('Content-Type', 'application/json'), auth_header]
response = client.post( response = client.post(
path, path,
data=json.dumps(data), data=json.dumps(data),
headers=headers) headers=headers)
print(json.loads(response.get_data(as_text=True)))
assert response.status_code == 201 assert response.status_code == 201
app.celery.tasks.process_job.apply_async.assert_called_once_with( app.celery.tasks.process_job.apply_async.assert_called_once_with(