Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions lambdas/handlers/bulk_upload_metadata_processor_handler.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import urllib.parse

from enums.lloyd_george_pre_process_format import LloydGeorgePreProcessFormat
from services.bulk_upload.metadata_general_preprocessor import (
MetadataGeneralPreprocessor,
Expand All @@ -13,6 +15,7 @@
from utils.decorators.handle_lambda_exceptions import handle_lambda_exceptions
from utils.decorators.override_error_check import override_error_check
from utils.decorators.set_audit_arg import set_request_context_for_logging
from utils.exceptions import BulkUploadMetadataException

logger = LoggingService(__name__)

Expand All @@ -24,6 +27,11 @@
)
@handle_lambda_exceptions
def lambda_handler(event, _context):
if "source" in event and event.get("source") == "aws.s3":
logger.info("Handling EventBridge event from S3")
handle_expedite_event(event)
return

practice_directory = event.get("practiceDirectory", "")
raw_pre_format_type = event.get(
"preFormatType", LloydGeorgePreProcessFormat.GENERAL
Expand Down Expand Up @@ -63,3 +71,20 @@ def get_formatter_service(raw_pre_format_type):
f"Invalid preFormatType: '{raw_pre_format_type}', defaulting to {LloydGeorgePreProcessFormat.GENERAL}."
)
return MetadataGeneralPreprocessor


def handle_expedite_event(event):
try:
key_string = event["detail"]["object"]["key"]
key = urllib.parse.unquote_plus(key_string, encoding="utf-8")
if key.startswith("expedite/"):
logger.info("Processing file from expedite folder")
return # To be added upon by ticket PRMP-540
else:
failure_msg = f"Unexpected directory or file location received from EventBridge: {key_string}"
logger.error(failure_msg)
raise BulkUploadMetadataException(failure_msg)
except KeyError as e:
failure_msg = f"Failed due to missing key: {str(e)}"
logger.error(failure_msg)
raise BulkUploadMetadataException(failure_msg)
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@ def mock_metadata_service(mocker):
return mocked_instance


def eventbridge_event_with_s3_key(key: str):
return {
"source": "aws.s3",
"detail": {
"object":{
"key": key,
},
}
}


def test_metadata_processor_lambda_handler_valid_event(
set_env, context, mock_metadata_service
):
Expand All @@ -28,3 +39,37 @@ def test_metadata_processor_lambda_handler_empty_event(
lambda_handler({}, context)

mock_metadata_service.process_metadata.assert_not_called()


def test_s3_event_with_expedite_key_processes(
set_env, context, mock_metadata_service, caplog
):
event = eventbridge_event_with_s3_key(
"expedite%2F1of1_Lloyd_George_Record_[John Michael SMITH]_[1234567890]_[15-05-1990].pdf"
)
lambda_handler(event, context)

assert any(
f"Handling EventBridge event from S3"
in r.message
for r in caplog.records
)
assert any(
"Processing file from expedite folder" in r.message for r in caplog.records
)


def test_s3_event_with_non_expedite_key_is_rejected(
set_env, context, mock_metadata_service, caplog
):
key_string = "uploads/1of1_Lloyd_George_Record_[John Michael SMITH]_[1234567890]_[15-05-1990].pdf"
event = eventbridge_event_with_s3_key(key_string)

lambda_handler(event, context)

assert any(
f"Unexpected directory or file location received from EventBridge: {key_string}"
in r.message
for r in caplog.records
)
mock_metadata_service.process_metadata.assert_not_called()
Loading