Move security notification work into its own method to allow for return values

Fixes #1302
Fixes #1304
This commit is contained in:
Joseph Schorr 2016-03-28 16:41:37 -04:00
parent 685dd1a925
commit d62ec22fc9
3 changed files with 15 additions and 3 deletions

View file

@ -506,7 +506,7 @@ class TestSecurityScanner(unittest.TestCase):
# Test with an unknown notification. # Test with an unknown notification.
with HTTMock(get_notification, unknown_notification): with HTTMock(get_notification, unknown_notification):
worker = SecurityNotificationWorker(None) worker = SecurityNotificationWorker(None)
self.assertFalse(worker.process_queue_item({ self.assertFalse(worker.perform_notification_work({
'Name': 'unknownnotification' 'Name': 'unknownnotification'
})) }))
@ -517,7 +517,7 @@ class TestSecurityScanner(unittest.TestCase):
with HTTMock(get_notification, delete_notification, unknown_notification): with HTTMock(get_notification, delete_notification, unknown_notification):
worker = SecurityNotificationWorker(None) worker = SecurityNotificationWorker(None)
self.assertTrue(worker.process_queue_item(data)) self.assertTrue(worker.perform_notification_work(data))
self.assertEquals(['GET-1', 'GET-2', 'DELETE'], pages_called) self.assertEquals(['GET-1', 'GET-2', 'DELETE'], pages_called)

View file

@ -44,7 +44,11 @@ class QueueWorker(Worker):
self.add_operation(self.run_watchdog, self._watchdog_period_seconds) self.add_operation(self.run_watchdog, self._watchdog_period_seconds)
def process_queue_item(self, job_details): def process_queue_item(self, job_details):
""" Return True if complete, False if it should be retried. """ """ Processes the work for the given job. If the job fails and should be retried,
this method should raise a WorkerUnhealthyException. If the job should be marked
as permanently failed, it should raise a JobException. Otherwise, a successful return
of this method will remove the job from the queue as completed.
"""
raise NotImplementedError('Workers must implement run.') raise NotImplementedError('Workers must implement run.')
def watchdog(self): def watchdog(self):

View file

@ -15,6 +15,14 @@ _LAYER_LIMIT = 100 # The number of layers to request on each page.
class SecurityNotificationWorker(QueueWorker): class SecurityNotificationWorker(QueueWorker):
def process_queue_item(self, data): def process_queue_item(self, data):
self.perform_notification_work(data)
def perform_notification_work(self, data):
""" Performs the work for handling a security notification as referenced by the given data
object. Returns True on successful handling, False on non-retryable failure and raises
a JobException on retryable failure.
"""
notification_name = data['Name'] notification_name = data['Name']
current_page = data.get('page', None) current_page = data.get('page', None)