code review feedback

This commit is contained in:
Kenneth Kehl
2023-08-15 14:50:41 -07:00
parent c5008da8df
commit f2f0e5a0f1
10 changed files with 2 additions and 165 deletions
-8
View File
@@ -28,9 +28,6 @@ from app.dao.jobs_dao import (
find_missing_row_for_job, find_missing_row_for_job,
) )
from app.dao.notifications_dao import notifications_not_yet_sent from app.dao.notifications_dao import notifications_not_yet_sent
from app.dao.provider_details_dao import (
dao_adjust_provider_priority_back_to_resting_points,
)
from app.dao.services_dao import ( from app.dao.services_dao import (
dao_find_services_sending_to_tv_numbers, dao_find_services_sending_to_tv_numbers,
dao_find_services_with_high_failure_rates, dao_find_services_with_high_failure_rates,
@@ -85,11 +82,6 @@ def delete_invitations():
raise raise
@notify_celery.task(name='tend-providers-back-to-middle')
def tend_providers_back_to_middle():
dao_adjust_provider_priority_back_to_resting_points()
@notify_celery.task(name='check-job-status') @notify_celery.task(name='check-job-status')
def check_job_status(): def check_job_status():
""" """
-53
View File
@@ -74,59 +74,6 @@ def _get_sms_providers_for_update(time_threshold):
return q return q
@autocommit
def dao_reduce_sms_provider_priority(identifier, *, time_threshold):
"""
Will reduce a chosen sms provider's priority, and increase the other provider's priority by 10 points each.
If either provider has been updated in the last `time_threshold`, then it won't take any action.
"""
# amount_to_reduce_by = 10
providers_list = _get_sms_providers_for_update(time_threshold)
if len(providers_list) < 2:
current_app.logger.info("Not adjusting providers, number of active providers is less than 2.")
return
# TODO right now we only have one provider. Remove this?
# providers = {provider.identifier: provider for provider in providers_list}
# other_identifier = get_alternative_sms_provider(identifier)
#
# reduced_provider = providers[identifier]
# increased_provider = providers[other_identifier]
#
# # always keep values between 0 and 100
# reduced_provider_priority = max(0, reduced_provider.priority - amount_to_reduce_by)
# increased_provider_priority = min(100, increased_provider.priority + amount_to_reduce_by)
#
# _adjust_provider_priority(reduced_provider, reduced_provider_priority)
# _adjust_provider_priority(increased_provider, increased_provider_priority)
@autocommit
def dao_adjust_provider_priority_back_to_resting_points():
"""
Provided that neither SMS provider has been modified in the last hour, move both providers by 10 percentage points
each towards their defined resting points (set in SMS_PROVIDER_RESTING_POINTS in config.py).
"""
# TODO we only have one provider. Remove?
# amount_to_reduce_by = 10
# time_threshold = timedelta(hours=1)
#
# providers = _get_sms_providers_for_update(time_threshold)
#
# for provider in providers:
# target = current_app.config['SMS_PROVIDER_RESTING_POINTS'][provider.identifier]
# current = provider.priority
#
# if current != target:
# if current > target:
# new_priority = max(target, provider.priority - amount_to_reduce_by)
# else:
# new_priority = min(target, provider.priority + amount_to_reduce_by)
#
# _adjust_provider_priority(provider, new_priority)
def get_provider_details_by_notification_type(notification_type, supports_international=False): def get_provider_details_by_notification_type(notification_type, supports_international=False):
filters = [ProviderDetails.notification_type == notification_type] filters = [ProviderDetails.notification_type == notification_type]
+1 -3
View File
@@ -1,5 +1,5 @@
import random import random
from datetime import datetime, timedelta from datetime import datetime
from urllib import parse from urllib import parse
from cachetools import TTLCache, cached from cachetools import TTLCache, cached
@@ -18,7 +18,6 @@ from app.celery.research_mode_tasks import (
from app.dao.email_branding_dao import dao_get_email_branding_by_id from app.dao.email_branding_dao import dao_get_email_branding_by_id
from app.dao.notifications_dao import dao_update_notification from app.dao.notifications_dao import dao_update_notification
from app.dao.provider_details_dao import ( from app.dao.provider_details_dao import (
dao_reduce_sms_provider_priority,
get_provider_details_by_notification_type, get_provider_details_by_notification_type,
) )
from app.exceptions import NotificationTechnicalFailureException from app.exceptions import NotificationTechnicalFailureException
@@ -82,7 +81,6 @@ def send_sms_to_provider(notification):
except Exception as e: except Exception as e:
notification.billable_units = template.fragment_count notification.billable_units = template.fragment_count
dao_update_notification(notification) dao_update_notification(notification)
dao_reduce_sms_provider_priority(provider.name, time_threshold=timedelta(minutes=1))
raise e raise e
else: else:
notification.billable_units = template.fragment_count notification.billable_units = template.fragment_count
-9
View File
@@ -679,10 +679,7 @@ class ServiceInboundApi(db.Model, Versioned):
@property @property
def bearer_token(self): def bearer_token(self):
# Column is non-nullable
# if self._bearer_token:
return encryption.decrypt(self._bearer_token) return encryption.decrypt(self._bearer_token)
# return None
@bearer_token.setter @bearer_token.setter
def bearer_token(self, bearer_token): def bearer_token(self, bearer_token):
@@ -719,10 +716,7 @@ class ServiceCallbackApi(db.Model, Versioned):
@property @property
def bearer_token(self): def bearer_token(self):
# There is a non-null constraint on this column
# if self._bearer_token:
return encryption.decrypt(self._bearer_token) return encryption.decrypt(self._bearer_token)
# return None
@bearer_token.setter @bearer_token.setter
def bearer_token(self, bearer_token): def bearer_token(self, bearer_token):
@@ -777,10 +771,7 @@ class ApiKey(db.Model, Versioned):
@property @property
def secret(self): def secret(self):
# Column is non-nullable
# if self._secret:
return encryption.decrypt(self._secret) return encryption.decrypt(self._secret)
# return None
@secret.setter @secret.setter
def secret(self, secret): def secret(self, secret):
-4
View File
@@ -325,10 +325,6 @@ def test_delete_notifications_task_calls_task_for_services_that_have_sent_notifi
]) ])
def delete_notifications_by_service_and_type(id, param, param1):
pass
def test_cleanup_unfinished_jobs(mocker): def test_cleanup_unfinished_jobs(mocker):
mock_s3 = mocker.patch('app.celery.nightly_tasks.remove_csv_object') mock_s3 = mocker.patch('app.celery.nightly_tasks.remove_csv_object')
mock_dao_archive = mocker.patch('app.celery.nightly_tasks.dao_archive_job') mock_dao_archive = mocker.patch('app.celery.nightly_tasks.dao_archive_job')
-18
View File
@@ -42,24 +42,6 @@ def test_should_add_to_retry_queue_if_notification_not_found_in_deliver_sms_task
app.celery.provider_tasks.deliver_sms.retry.assert_called_with(queue="retry-tasks", countdown=0) app.celery.provider_tasks.deliver_sms.retry.assert_called_with(queue="retry-tasks", countdown=0)
def test_send_sms_should_not_switch_providers_on_non_provider_failure(
sample_notification,
mocker
):
mocker.patch(
'app.delivery.send_to_providers.send_sms_to_provider',
side_effect=Exception("Non Provider Exception")
)
mock_dao_reduce_sms_provider_priority = mocker.patch(
'app.delivery.send_to_providers.dao_reduce_sms_provider_priority'
)
mocker.patch('app.celery.provider_tasks.deliver_sms.retry')
deliver_sms(sample_notification.id)
assert mock_dao_reduce_sms_provider_priority.called is False
def test_should_retry_and_log_warning_if_SmsClientResponseException_for_deliver_sms_task(sample_notification, mocker): def test_should_retry_and_log_warning_if_SmsClientResponseException_for_deliver_sms_task(sample_notification, mocker):
mocker.patch( mocker.patch(
'app.delivery.send_to_providers.send_sms_to_provider', 'app.delivery.send_to_providers.send_sms_to_provider',
@@ -60,10 +60,6 @@ def test_should_raise_for_status(perf_client):
perf_client.send_stats_to_performance_platform({'dataType': 'foo'}) perf_client.send_stats_to_performance_platform({'dataType': 'foo'})
def generate_payload_id(payload, param):
pass
def test_generate_payload_id(): def test_generate_payload_id():
payload = {'_timestamp': '2023-01-01 00:00:00', 'service': 'my_service', 'group_name': 'group_name', payload = {'_timestamp': '2023-01-01 00:00:00', 'service': 'my_service', 'group_name': 'group_name',
'dataType': 'dataType', 'period': 'period'} 'dataType': 'dataType', 'period': 'period'}
-10
View File
@@ -6,16 +6,6 @@ from app.dao.email_branding_dao import (
from app.models import EmailBranding from app.models import EmailBranding
from tests.app.db import create_email_branding from tests.app.db import create_email_branding
# def test_get_email_branding_options_gets_all_email_branding(notify_db_session):
# email_branding_1 = create_email_branding(name='test_email_branding_1')
# email_branding_2 = create_email_branding(name='test_email_branding_2')
#
# email_branding = dao_get_email_branding_options()
#
# assert len(email_branding) == 2
# assert email_branding_1 == email_branding[0]
# assert email_branding_2 == email_branding[1]
def test_get_email_branding_by_id_gets_correct_email_branding(notify_db_session): def test_get_email_branding_by_id_gets_correct_email_branding(notify_db_session):
email_branding = create_email_branding() email_branding = create_email_branding()
@@ -8,9 +8,7 @@ from app import notification_provider_clients
from app.dao.provider_details_dao import ( from app.dao.provider_details_dao import (
_adjust_provider_priority, _adjust_provider_priority,
_get_sms_providers_for_update, _get_sms_providers_for_update,
dao_adjust_provider_priority_back_to_resting_points,
dao_get_provider_stats, dao_get_provider_stats,
dao_reduce_sms_provider_priority,
dao_update_provider_details, dao_update_provider_details,
get_alternative_sms_provider, get_alternative_sms_provider,
get_provider_details_by_identifier, get_provider_details_by_identifier,
@@ -196,57 +194,6 @@ def test_get_sms_providers_for_update_returns_nothing_if_recent_updates(restore_
assert not resp assert not resp
def test_reduce_sms_provider_priority_does_nothing_if_providers_have_recently_changed(
mocker,
restore_provider_details,
):
mock_get_providers = mocker.patch('app.dao.provider_details_dao._get_sms_providers_for_update', return_value=[])
mock_adjust = mocker.patch('app.dao.provider_details_dao._adjust_provider_priority')
dao_reduce_sms_provider_priority('sns', time_threshold=timedelta(minutes=5))
mock_get_providers.assert_called_once_with(timedelta(minutes=5))
assert mock_adjust.called is False
def test_reduce_sms_provider_priority_does_nothing_if_there_is_only_one_active_provider(
mocker,
restore_provider_details,
):
mock_adjust = mocker.patch('app.dao.provider_details_dao._adjust_provider_priority')
dao_reduce_sms_provider_priority('sns', time_threshold=timedelta(minutes=5))
assert mock_adjust.called is False
def test_adjust_provider_priority_back_to_resting_points_does_nothing_if_theyre_already_at_right_values(
restore_provider_details,
mocker,
):
sns = get_provider_details_by_identifier('sns')
sns.priority = 100
mock_adjust = mocker.patch('app.dao.provider_details_dao._adjust_provider_priority')
mocker.patch('app.dao.provider_details_dao._get_sms_providers_for_update', return_value=[sns])
dao_adjust_provider_priority_back_to_resting_points()
assert mock_adjust.called is False
def test_adjust_provider_priority_back_to_resting_points_does_nothing_if_no_providers_to_update(
restore_provider_details,
mocker,
):
mock_adjust = mocker.patch('app.dao.provider_details_dao._adjust_provider_priority')
mocker.patch('app.dao.provider_details_dao._get_sms_providers_for_update', return_value=[])
dao_adjust_provider_priority_back_to_resting_points()
assert mock_adjust.called is False
@freeze_time('2018-06-28 12:00') @freeze_time('2018-06-28 12:00')
def test_dao_get_provider_stats(notify_db_session): def test_dao_get_provider_stats(notify_db_session):
service_1 = create_service(service_name='1') service_1 = create_service(service_name='1')
+1 -3
View File
@@ -1,7 +1,7 @@
import json import json
import uuid import uuid
from collections import namedtuple from collections import namedtuple
from datetime import datetime, timedelta from datetime import datetime
from unittest.mock import ANY from unittest.mock import ANY
import pytest import pytest
@@ -595,7 +595,6 @@ def test_should_set_notification_billable_units_and_reduces_provider_priority_if
mocker, mocker,
): ):
mocker.patch('app.aws_sns_client.send_sms', side_effect=Exception()) mocker.patch('app.aws_sns_client.send_sms', side_effect=Exception())
mock_reduce = mocker.patch('app.delivery.send_to_providers.dao_reduce_sms_provider_priority')
sample_notification.billable_units = 0 sample_notification.billable_units = 0
assert sample_notification.sent_by is None assert sample_notification.sent_by is None
@@ -608,7 +607,6 @@ def test_should_set_notification_billable_units_and_reduces_provider_priority_if
assert 1 == 1 assert 1 == 1
assert sample_notification.billable_units == 1 assert sample_notification.billable_units == 1
mock_reduce.assert_called_once_with('sns', time_threshold=timedelta(minutes=1))
def test_should_send_sms_to_international_providers( def test_should_send_sms_to_international_providers(