Skip to content
This repository has been archived by the owner on Aug 25, 2023. It is now read-only.

Commit

Permalink
Merge 1428b8b into 12c00be
Browse files Browse the repository at this point in the history
  • Loading branch information
przemyslaw-jasinski committed Apr 24, 2019
2 parents 12c00be + 1428b8b commit 6198e33
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 18 deletions.
28 changes: 20 additions & 8 deletions src/backup/after_backup_action_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ class DatastoreTableGetRetriableException(Exception):
pass


class CopyJobError(Exception):
pass


class BackupNotExistsError(Exception):
pass


class AfterBackupActionHandler(JsonHandler):
def __init__(self, request=None, response=None):
super(AfterBackupActionHandler, self).__init__(request, response)
Expand All @@ -30,8 +38,14 @@ def __init__(self, request=None, response=None):
def post(self, **_):
request_body_json = JsonRequestHelper.parse_request_body(self.request.body)
self.__validate(request_body_json)
self.__process(request_body_json)
self._finish_with_success()

try:
self.__process(request_body_json)
self._finish_with_success()
except CopyJobError, e:
self._finish_with_error(500, e.message)
except BackupNotExistsError, e:
self._finish_with_error(404, e.message)

def __process(self, request_body_json):
copy_job_results = CopyJobResult(request_body_json.get('jobJson'))
Expand All @@ -43,8 +57,7 @@ def __process(self, request_body_json):
"has not been done. " \
.format(copy_job_results.error_message,
data["sourceBqTable"], data["targetBqTable"])
ErrorReporting().report(error_message)
return
raise CopyJobError(error_message)

backup_table_metadata = BigQueryTableMetadata.get_table_by_big_query_table(
copy_job_results.target_bq_table
Expand All @@ -57,10 +70,9 @@ def __process(self, request_body_json):
self.__disable_partition_expiration(
TableReference.from_bq_table(copy_job_results.target_bq_table))
else:
pass
ErrorReporting().report(
"Backup table {0} not exist. Backup entity is not created".format(
copy_job_results.target_bq_table))
error_message = "Backup table {0} not exist. Backup entity is not" \
" created".format(copy_job_results.target_bq_table)
raise BackupNotExistsError(error_message)

def __disable_partition_expiration(self, backup_table_reference):
self.BQ.disable_partition_expiration(
Expand Down
16 changes: 6 additions & 10 deletions tests/backup/test_after_backup_action_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,9 @@ def test_should_create_datastore_backup_entity(self, _create_http, _):
self.assertEqual(backup.last_modified, copy_job_result.start_time)

@patch.object(BigQuery, '_create_credentials', return_value=None)
@patch('src.backup.after_backup_action_handler.ErrorReporting')
@patch.object(BigQuery, '_create_http')
def test_should_not_create_backups_entity_if_copy_job_failed(
self, _create_http, error_reporting, _):
self, _create_http, _):
# given
_create_http.return_value = HttpMockSequence([
({'status': '200'},
Expand Down Expand Up @@ -121,19 +120,17 @@ def test_should_not_create_backups_entity_if_copy_job_failed(
# when
response = self.under_test.post(
'/callback/backup-created/project/dataset/table',
params=payload)
params=payload, expect_errors=True)
backup = table_entity.last_backup

# then
self.assertEqual(response.status_int, 200)
self.assertEqual(response.status_int, 500)
self.assertIsNone(backup)
error_reporting.assert_called_once()

@patch.object(BigQuery, '_create_credentials', return_value=None)
@patch('src.backup.after_backup_action_handler.ErrorReporting')
@patch.object(BigQuery, '_create_http')
def test_should_not_create_backups_entity_if_backup_table_doesnt_exist(
self, _create_http, error_reporting, _):
self, _create_http, _):
# given
_create_http.return_value = HttpMockSequence([
({'status': '200'},
Expand Down Expand Up @@ -166,13 +163,12 @@ def test_should_not_create_backups_entity_if_backup_table_doesnt_exist(
# when
response = self.under_test.post(
'/callback/backup-created/project/dataset/table',
params=payload)
params=payload, expect_errors=True)
backup = table_entity.last_backup

# then
self.assertEqual(response.status_int, 200)
self.assertEqual(response.status_int, 404)
self.assertIsNone(backup)
error_reporting.assert_called_once()

@patch('src.commons.big_query.big_query.BigQuery.__init__', Mock(return_value=None))
@patch.object(BigQueryTableMetadata, 'get_table_by_big_query_table', return_value=BigQueryTableMetadata(None))
Expand Down

0 comments on commit 6198e33

Please sign in to comment.