From 228802ab5adcf10ffe6f6759f12d21c11ca6b455 Mon Sep 17 00:00:00 2001 From: Tom Byers Date: Tue, 16 Oct 2018 12:41:33 +0100 Subject: [PATCH 1/8] Bump utils to 3.5.5 --- requirements-app.txt | 2 +- requirements.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements-app.txt b/requirements-app.txt index f55b54765..9fa096547 100644 --- a/requirements-app.txt +++ b/requirements-app.txt @@ -27,6 +27,6 @@ awscli==1.15.82 awscli-cwlogs>=1.4,<1.5 botocore<1.11.0 -git+https://github.com/alphagov/notifications-utils.git@30.5.4#egg=notifications-utils==30.5.4 +git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3 diff --git a/requirements.txt b/requirements.txt index e848c5cf2..21c8f35bb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,7 +29,7 @@ awscli==1.15.82 awscli-cwlogs>=1.4,<1.5 botocore<1.11.0 -git+https://github.com/alphagov/notifications-utils.git@30.5.4#egg=notifications-utils==30.5.4 +git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3 @@ -41,7 +41,7 @@ bcrypt==3.1.4 billiard==3.3.0.23 bleach==2.1.3 boto3==1.6.16 -certifi==2018.8.24 +certifi==2018.10.15 chardet==3.0.4 Click==7.0 colorama==0.3.9 From e7f0a414cee0f4da52bb6852697f7ee0db1abffe Mon Sep 17 00:00:00 2001 From: Katie Smith Date: Tue, 16 Oct 2018 14:50:10 +0100 Subject: [PATCH 2/8] Update service schema to add letter_logo_filename Added the filename of a service's letter logo to the service schema. We want this in the schema so that it is possible to call `current_service.letter_logo_filename` from notifications-admin and to pass this value through to template-preview. --- app/schemas.py | 4 ++++ tests/app/service/test_rest.py | 1 + 2 files changed, 5 insertions(+) diff --git a/app/schemas.py b/app/schemas.py index 5692b78f8..f4730afa5 100644 --- a/app/schemas.py +++ b/app/schemas.py @@ -205,12 +205,16 @@ class ServiceSchema(BaseSchema): created_by = field_for(models.Service, 'created_by', required=True) organisation_type = field_for(models.Service, 'organisation_type') dvla_organisation = field_for(models.Service, 'dvla_organisation') + letter_logo_filename = fields.Method(method_name='get_letter_logo_filename') permissions = fields.Method("service_permissions") email_branding = field_for(models.Service, 'email_branding') organisation = field_for(models.Service, 'organisation') override_flag = False letter_contact_block = fields.Method(method_name="get_letter_contact") + def get_letter_logo_filename(self, service): + return service.dvla_organisation.filename + def service_permissions(self, service): return [p.permission for p in service.permissions] diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index ed2b273d0..7dfaad89a 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -139,6 +139,7 @@ def test_get_service_by_id(admin_request, sample_service): assert json_resp['data']['dvla_organisation'] == '001' assert json_resp['data']['prefix_sms'] is True assert json_resp['data']['postage'] == 'second' + assert json_resp['data']['letter_logo_filename'] == 'hm-government' @pytest.mark.parametrize('detailed', [True, False]) From 38c29d41a4e390de1b84e2344de13e6419fd22a3 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Thu, 18 Oct 2018 16:43:14 +0100 Subject: [PATCH 3/8] Reduce the error logging for sanitse method, since we ignore cysp. Also fixed the spelling error, why not. --- app/celery/letters_pdf_tasks.py | 17 +++++++++-------- tests/app/celery/test_letters_pdf_tasks.py | 14 +++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/app/celery/letters_pdf_tasks.py b/app/celery/letters_pdf_tasks.py index 0cc6bc8f0..d673c0fbb 100644 --- a/app/celery/letters_pdf_tasks.py +++ b/app/celery/letters_pdf_tasks.py @@ -185,7 +185,7 @@ def process_virus_scan_passed(self, filename): scan_pdf_object = s3.get_s3_object(current_app.config['LETTERS_SCAN_BUCKET_NAME'], filename) old_pdf = scan_pdf_object.get()['Body'].read() - new_pdf = _sanitise_precomiled_pdf(self, notification, old_pdf) + new_pdf = _sanitise_precompiled_pdf(self, notification, old_pdf) # TODO: Remove this once CYSP update their template to not cross over the margins if notification.service_id == UUID('fe44178f-3b45-4625-9f85-2264a36dd9ec'): # CYSP @@ -233,7 +233,7 @@ def _upload_pdf_to_test_or_live_pdf_bucket(pdf_data, filename, is_test_letter): ) -def _sanitise_precomiled_pdf(self, notification, precompiled_pdf): +def _sanitise_precompiled_pdf(self, notification, precompiled_pdf): try: resp = requests_post( '{}/precompiled/sanitise'.format( @@ -246,19 +246,20 @@ def _sanitise_precomiled_pdf(self, notification, precompiled_pdf): return resp.content except RequestException as ex: if ex.response is not None and ex.response.status_code == 400: - current_app.logger.exception( - "sanitise_precomiled_pdf validation error for notification: {}".format(notification.id) - ) - return None + if notification.service_id != UUID('fe44178f-3b45-4625-9f85-2264a36dd9ec'): + current_app.logger.exception( + "sanitise_precompiled_pdf validation error for notification: {}".format(notification.id) + ) + return None try: current_app.logger.exception( - "sanitise_precomiled_pdf failed for notification: {}".format(notification.id) + "sanitise_precompiled_pdf failed for notification: {}".format(notification.id) ) self.retry(queue=QueueNames.RETRY) except MaxRetriesExceededError: current_app.logger.exception( - "RETRY FAILED: sanitise_precomiled_pdf failed for notification {}".format(notification.id), + "RETRY FAILED: sanitise_precompiled_pdf failed for notification {}".format(notification.id), ) notification.status = NOTIFICATION_TECHNICAL_FAILURE diff --git a/tests/app/celery/test_letters_pdf_tasks.py b/tests/app/celery/test_letters_pdf_tasks.py index 690c7bb17..e788d732e 100644 --- a/tests/app/celery/test_letters_pdf_tasks.py +++ b/tests/app/celery/test_letters_pdf_tasks.py @@ -22,7 +22,7 @@ from app.celery.letters_pdf_tasks import ( process_virus_scan_failed, process_virus_scan_error, replay_letters_in_error, - _sanitise_precomiled_pdf + _sanitise_precompiled_pdf ) from app.letters.utils import get_letter_pdf_filename, ScanErrorType from app.models import ( @@ -357,7 +357,7 @@ def test_process_letter_task_check_virus_scan_passed( sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK sample_letter_notification.key_type = key_type mock_s3upload = mocker.patch('app.celery.letters_pdf_tasks.s3upload') - mock_sanitise = mocker.patch('app.celery.letters_pdf_tasks._sanitise_precomiled_pdf', return_value="success") + mock_sanitise = mocker.patch('app.celery.letters_pdf_tasks._sanitise_precompiled_pdf', return_value="success") process_virus_scan_passed(filename) @@ -397,7 +397,7 @@ def test_process_letter_task_check_virus_scan_passed_when_sanitise_fails( sample_letter_notification.status = NOTIFICATION_PENDING_VIRUS_CHECK sample_letter_notification.key_type = key_type mock_move_s3 = mocker.patch('app.letters.utils._move_s3_object') - mock_sanitise = mocker.patch('app.celery.letters_pdf_tasks._sanitise_precomiled_pdf', return_value=None) + mock_sanitise = mocker.patch('app.celery.letters_pdf_tasks._sanitise_precompiled_pdf', return_value=None) process_virus_scan_passed(filename) @@ -464,7 +464,7 @@ def test_sanitise_precompiled_pdf_returns_data_from_template_preview(rmock, samp rmock.post('http://localhost:9999/precompiled/sanitise', content=b'new_pdf', status_code=200) mock_celery = Mock(**{'retry.side_effect': Retry}) - res = _sanitise_precomiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') + res = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert res == b'new_pdf' assert rmock.last_request.text == 'old_pdf' @@ -475,7 +475,7 @@ def test_sanitise_precompiled_pdf_returns_none_on_validation_error(rmock, sample rmock.post('http://localhost:9999/precompiled/sanitise', content=b'new_pdf', status_code=400) mock_celery = Mock(**{'retry.side_effect': Retry}) - res = _sanitise_precomiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') + res = _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert res is None @@ -486,7 +486,7 @@ def test_sanitise_precompiled_pdf_retries_on_http_error(rmock, sample_letter_not mock_celery = Mock(**{'retry.side_effect': Retry}) with pytest.raises(Retry): - _sanitise_precomiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') + _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') def test_sanitise_precompiled_pdf_sets_notification_to_technical_failure_after_too_many_errors( @@ -498,6 +498,6 @@ def test_sanitise_precompiled_pdf_sets_notification_to_technical_failure_after_t mock_celery = Mock(**{'retry.side_effect': MaxRetriesExceededError}) with pytest.raises(MaxRetriesExceededError): - _sanitise_precomiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') + _sanitise_precompiled_pdf(mock_celery, sample_letter_notification, b'old_pdf') assert sample_letter_notification.status == NOTIFICATION_TECHNICAL_FAILURE From 02154f5fc071e0b6c1d64cf28b1c77f1311f8974 Mon Sep 17 00:00:00 2001 From: Rebecca Law Date: Thu, 18 Oct 2018 16:46:04 +0100 Subject: [PATCH 4/8] Actually I decided we don't need an exception log here. --- app/celery/letters_pdf_tasks.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/celery/letters_pdf_tasks.py b/app/celery/letters_pdf_tasks.py index d673c0fbb..fcdf6458a 100644 --- a/app/celery/letters_pdf_tasks.py +++ b/app/celery/letters_pdf_tasks.py @@ -246,11 +246,10 @@ def _sanitise_precompiled_pdf(self, notification, precompiled_pdf): return resp.content except RequestException as ex: if ex.response is not None and ex.response.status_code == 400: - if notification.service_id != UUID('fe44178f-3b45-4625-9f85-2264a36dd9ec'): - current_app.logger.exception( - "sanitise_precompiled_pdf validation error for notification: {}".format(notification.id) - ) - return None + current_app.logger.info( + "sanitise_precompiled_pdf validation error for notification: {}".format(notification.id) + ) + return None try: current_app.logger.exception( From 4dab4fa8ce286aa832c3f4b02667b61a5aafd9f8 Mon Sep 17 00:00:00 2001 From: Katie Smith Date: Wed, 17 Oct 2018 16:31:27 +0100 Subject: [PATCH 5/8] Pass letter logo filename to template preview We now pass `filename`, the filename of the letter logo to use, through to Template Preview in addition to the `dvla_org_id`. Once Template Preview has been updated to only use the `filename` we will stop sending the `dvla_org_id`. --- app/celery/letters_pdf_tasks.py | 4 +++- app/template/rest.py | 1 + tests/app/celery/test_letters_pdf_tasks.py | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/celery/letters_pdf_tasks.py b/app/celery/letters_pdf_tasks.py index 0cc6bc8f0..f83d71ca6 100644 --- a/app/celery/letters_pdf_tasks.py +++ b/app/celery/letters_pdf_tasks.py @@ -54,6 +54,7 @@ def create_letters_pdf(self, notification_id): notification.template, contact_block=notification.reply_to_text, org_id=notification.service.dvla_organisation.id, + filename=notification.service.dvla_organisation.filename, values=notification.personalisation ) @@ -79,7 +80,7 @@ def create_letters_pdf(self, notification_id): update_notification_status_by_id(notification_id, 'technical-failure') -def get_letters_pdf(template, contact_block, org_id, values): +def get_letters_pdf(template, contact_block, org_id, filename, values): template_for_letter_print = { "subject": template.subject, "content": template.content @@ -89,6 +90,7 @@ def get_letters_pdf(template, contact_block, org_id, values): 'letter_contact_block': contact_block, 'template': template_for_letter_print, 'values': values, + 'filename': filename, 'dvla_org_id': org_id, } resp = requests_post( diff --git a/app/template/rest.py b/app/template/rest.py index c2e3763b6..749d30ccb 100644 --- a/app/template/rest.py +++ b/app/template/rest.py @@ -247,6 +247,7 @@ def preview_letter_template_by_notification_id(service_id, notification_id, file 'template': template_for_letter_print, 'values': notification.personalisation, 'date': notification.created_at.isoformat(), + 'filename': service.dvla_organisation.filename, 'dvla_org_id': service.dvla_organisation_id, } diff --git a/tests/app/celery/test_letters_pdf_tasks.py b/tests/app/celery/test_letters_pdf_tasks.py index 690c7bb17..6a4c7f26a 100644 --- a/tests/app/celery/test_letters_pdf_tasks.py +++ b/tests/app/celery/test_letters_pdf_tasks.py @@ -50,6 +50,7 @@ def test_get_letters_pdf_calls_notifications_template_preview_service_correctly( notify_api, mocker, client, sample_letter_template, personalisation): contact_block = 'Mr Foo,\n1 Test Street,\nLondon\nN1' dvla_org_id = '002' + filename = 'opg' with set_config_values(notify_api, { 'TEMPLATE_PREVIEW_API_HOST': 'http://localhost/notifications-template-preview', @@ -60,12 +61,17 @@ def test_get_letters_pdf_calls_notifications_template_preview_service_correctly( 'http://localhost/notifications-template-preview/print.pdf', content=b'\x00\x01', status_code=200) get_letters_pdf( - sample_letter_template, contact_block=contact_block, org_id=dvla_org_id, values=personalisation) + sample_letter_template, + contact_block=contact_block, + org_id=dvla_org_id, + filename=filename, + values=personalisation) assert mock_post.last_request.json() == { 'values': personalisation, 'letter_contact_block': contact_block, 'dvla_org_id': dvla_org_id, + 'filename': filename, 'template': { 'subject': sample_letter_template.subject, 'content': sample_letter_template.content @@ -82,6 +88,7 @@ def test_get_letters_pdf_calculates_billing_units( notify_api, mocker, client, sample_letter_template, page_count, expected_billable_units): contact_block = 'Mr Foo,\n1 Test Street,\nLondon\nN1' dvla_org_id = '002' + filename = 'opg' with set_config_values(notify_api, { 'TEMPLATE_PREVIEW_API_HOST': 'http://localhost/notifications-template-preview', @@ -96,7 +103,7 @@ def test_get_letters_pdf_calculates_billing_units( ) _, billable_units = get_letters_pdf( - sample_letter_template, contact_block=contact_block, org_id=dvla_org_id, values=None) + sample_letter_template, contact_block=contact_block, org_id=dvla_org_id, filename=filename, values=None) assert billable_units == expected_billable_units From bc3fab09d0c380d0aa8fd75619270e5b5d447599 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Mon, 22 Oct 2018 11:11:07 +0100 Subject: [PATCH 6/8] don't log exception info for retries it includes task args, which might contain PII. And we don't need to know where the retry exception came from - it came from the line above --- app/celery/letters_pdf_tasks.py | 4 ++-- app/celery/service_callback_tasks.py | 8 +++++--- app/celery/tasks.py | 8 ++++++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/celery/letters_pdf_tasks.py b/app/celery/letters_pdf_tasks.py index 52308636d..fd70d2e2b 100644 --- a/app/celery/letters_pdf_tasks.py +++ b/app/celery/letters_pdf_tasks.py @@ -74,7 +74,7 @@ def create_letters_pdf(self, notification_id): ) self.retry(queue=QueueNames.RETRY) except MaxRetriesExceededError: - current_app.logger.exception( + current_app.logger.error( "RETRY FAILED: task create_letters_pdf failed for notification {}".format(notification_id), ) update_notification_status_by_id(notification_id, 'technical-failure') @@ -259,7 +259,7 @@ def _sanitise_precompiled_pdf(self, notification, precompiled_pdf): ) self.retry(queue=QueueNames.RETRY) except MaxRetriesExceededError: - current_app.logger.exception( + current_app.logger.error( "RETRY FAILED: sanitise_precompiled_pdf failed for notification {}".format(notification.id), ) diff --git a/app/celery/service_callback_tasks.py b/app/celery/service_callback_tasks.py index 258ba9f9b..640630733 100644 --- a/app/celery/service_callback_tasks.py +++ b/app/celery/service_callback_tasks.py @@ -96,9 +96,11 @@ def _send_data_to_service_callback_api(self, data, service_callback_url, token, try: self.retry(queue=QueueNames.RETRY) except self.MaxRetriesExceededError: - current_app.logger.exception( - """Retry: {} has retried the max num of times - for notification: {}""".format(function_name, notification_id) + current_app.logger.error( + "Retry: {} has retried the max num of times for notification: {}".format( + function_name, + notification_id + ) ) diff --git a/app/celery/tasks.py b/app/celery/tasks.py index fe220d9f5..32932b320 100644 --- a/app/celery/tasks.py +++ b/app/celery/tasks.py @@ -386,7 +386,7 @@ def handle_exception(task, notification, notification_id, exc): try: task.retry(queue=QueueNames.RETRY, exc=exc) except task.MaxRetriesExceededError: - current_app.logger.exception('Retry' + retry_msg) + current_app.logger.error('Max retry failed' + retry_msg) def get_template_class(template_type): @@ -546,7 +546,11 @@ def send_inbound_sms_to_service(self, inbound_sms_id, service_id): try: self.retry(queue=QueueNames.RETRY) except self.MaxRetriesExceededError: - current_app.logger.exception('Retry: send_inbound_sms_to_service has retried the max number of times') + current_app.logger.error( + 'Retry: send_inbound_sms_to_service has retried the max number of times for inbound_sms {}'.format( + inbound_sms_id + ) + ) @notify_celery.task(name='process-incomplete-jobs') From 29ea2e51d6c312824eec260a6ad36781a7d78ad9 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Mon, 22 Oct 2018 14:43:08 +0100 Subject: [PATCH 7/8] bump requirements also pyup ignore awscli and botocore because that complex mesh of dependency hell doesn't play will with pyup opening a new PR every time that botocore/awscli update (every few days) --- requirements-app.txt | 8 ++++---- requirements.txt | 16 ++++++++-------- requirements_for_test.txt | 10 +++++----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/requirements-app.txt b/requirements-app.txt index 9fa096547..c56c0a8ad 100644 --- a/requirements-app.txt +++ b/requirements-app.txt @@ -6,7 +6,7 @@ celery==3.1.26.post2 # pyup: <4 docopt==0.6.2 Flask-Bcrypt==0.7.1 flask-marshmallow==0.9.0 -Flask-Migrate==2.2.1 +Flask-Migrate==2.3.0 Flask-SQLAlchemy==2.3.2 Flask==1.0.2 click-datetime==0.2 @@ -15,7 +15,7 @@ gunicorn==19.7.1 iso8601==0.1.12 jsonschema==2.6.0 marshmallow-sqlalchemy==0.14.1 -marshmallow==2.15.6 +marshmallow==2.16.0 psycopg2-binary==2.7.5 PyJWT==1.6.4 SQLAlchemy==1.2.12 @@ -23,9 +23,9 @@ SQLAlchemy==1.2.12 notifications-python-client==5.2.0 # PaaS -awscli==1.15.82 +awscli==1.15.82 # pyup: ignore awscli-cwlogs>=1.4,<1.5 -botocore<1.11.0 +botocore<1.11.0 # pyup: ignore git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 diff --git a/requirements.txt b/requirements.txt index 21c8f35bb..43b261a41 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ celery==3.1.26.post2 # pyup: <4 docopt==0.6.2 Flask-Bcrypt==0.7.1 flask-marshmallow==0.9.0 -Flask-Migrate==2.2.1 +Flask-Migrate==2.3.0 Flask-SQLAlchemy==2.3.2 Flask==1.0.2 click-datetime==0.2 @@ -17,7 +17,7 @@ gunicorn==19.7.1 iso8601==0.1.12 jsonschema==2.6.0 marshmallow-sqlalchemy==0.14.1 -marshmallow==2.15.6 +marshmallow==2.16.0 psycopg2-binary==2.7.5 PyJWT==1.6.4 SQLAlchemy==1.2.12 @@ -25,16 +25,16 @@ SQLAlchemy==1.2.12 notifications-python-client==5.2.0 # PaaS -awscli==1.15.82 +awscli==1.15.82 # pyup: ignore awscli-cwlogs>=1.4,<1.5 -botocore<1.11.0 +botocore<1.11.0 # pyup: ignore git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3 ## The following requirements were added by pip freeze: -alembic==1.0.0 +alembic==1.0.1 amqp==1.4.9 anyjson==0.3.3 bcrypt==3.1.4 @@ -51,7 +51,7 @@ future==0.16.0 greenlet==0.4.15 html5lib==1.0.1 idna==2.7 -itsdangerous==0.24 +ItsDangerous==1.0.0 Jinja2==2.10 jmespath==0.9.3 kombu==3.0.37 @@ -70,12 +70,12 @@ python-json-logger==0.1.8 pytz==2018.5 PyYAML==3.13 redis==2.10.6 -requests==2.19.1 +requests==2.20.0 rsa==3.4.2 s3transfer==0.1.13 six==1.11.0 smartypants==2.0.1 statsd==3.2.2 -urllib3==1.23 +urllib3==1.24 webencodings==0.5.1 Werkzeug==0.14.1 diff --git a/requirements_for_test.txt b/requirements_for_test.txt index dba78dbbb..312241053 100644 --- a/requirements_for_test.txt +++ b/requirements_for_test.txt @@ -1,13 +1,13 @@ -r requirements.txt flake8==3.5.0 -pytest==3.8.0 -moto==1.3.5 +pytest==3.9.1 +moto==1.3.6 pytest-env==0.6.2 pytest-mock==1.10.0 pytest-cov==2.6.0 -pytest-xdist==1.23.0 -coveralls==1.5.0 -freezegun==0.3.10 +pytest-xdist==1.23.2 +coveralls==1.5.1 +freezegun==0.3.11 requests-mock==1.5.2 # optional requirements for jsonschema strict-rfc3339==0.7 From 58cd3491949b4913e2b2c8f5cf4fac4d7023d506 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Mon, 22 Oct 2018 16:57:12 +0100 Subject: [PATCH 8/8] pin itsdangerous to v0.24 itsdangerous v1 uses sha512 instead of sha1 to sign and unsign its strings. Pin to 0.24 until we figure a migration plan, since it's used in a few places (In the DB, in email tokens, and sending blobs to celery at least). --- requirements-app.txt | 4 ++++ requirements.txt | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/requirements-app.txt b/requirements-app.txt index c56c0a8ad..2445849d6 100644 --- a/requirements-app.txt +++ b/requirements-app.txt @@ -27,6 +27,10 @@ awscli==1.15.82 # pyup: ignore awscli-cwlogs>=1.4,<1.5 botocore<1.11.0 # pyup: ignore + +# Putting upgrade on hold due to v1.0.0 using sha512 instead of sha1 by default +itsdangerous==0.24 # pyup: <1.0.0 + git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3 diff --git a/requirements.txt b/requirements.txt index 43b261a41..20bc18f34 100644 --- a/requirements.txt +++ b/requirements.txt @@ -29,6 +29,10 @@ awscli==1.15.82 # pyup: ignore awscli-cwlogs>=1.4,<1.5 botocore<1.11.0 # pyup: ignore + +# Putting upgrade on hold due to v1.0.0 using sha512 instead of sha1 by default +itsdangerous==0.24 # pyup: <1.0.0 + git+https://github.com/alphagov/notifications-utils.git@30.5.5#egg=notifications-utils==30.5.5 git+https://github.com/alphagov/boto.git@2.43.0-patch3#egg=boto==2.43.0-patch3 @@ -51,7 +55,6 @@ future==0.16.0 greenlet==0.4.15 html5lib==1.0.1 idna==2.7 -ItsDangerous==1.0.0 Jinja2==2.10 jmespath==0.9.3 kombu==3.0.37