Skip to content

Commit 4ed2806

Browse files
mesh-2433 remove duplicate code
1 parent 4ced041 commit 4ed2806

3 files changed

Lines changed: 58 additions & 83 deletions

File tree

src/mesh_sandbox/common/constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ class Headers:
4545
Mex_AddressType = "mex-AddressType"
4646

4747

48+
MESSAGE_IN_INBOX_EXPIRY_IN_DAYS = 5
49+
4850
# Error codes
4951
ERROR_INVALID_FROM_ADDRESS: Final = "Invalid From Address"
5052
ERROR_MISSING_TO_ADDRESS: Final = "TO_DTS missing"
Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
from typing import Any, Optional, Union
2-
from uuid import uuid4
32

4-
from mesh_sandbox.models.mailbox import Mailbox
53
from mesh_sandbox.views.admin import CreateReportRequest
64

7-
from ..models.message import Message, MessageEvent, MessageMetadata, MessageParty, MessageStatus, MessageType
5+
from ..models.message import MessageEvent, MessageMetadata, MessageStatus
86
from . import constants
97

108

@@ -52,7 +50,7 @@ def try_parse_error(detail: Union[str, dict, None] = None, message_id: Optional[
5250

5351

5452
def get_ndr_error() -> dict:
55-
expiry_period = 5
53+
expiry_period = constants.MESSAGE_IN_INBOX_EXPIRY_IN_DAYS
5654
error_description = parse_error(
5755
detail=constants.ERROR_UNDELIVERED_MESSAGE,
5856
format_params=(expiry_period,),
@@ -61,55 +59,26 @@ def get_ndr_error() -> dict:
6159
return error_description
6260

6361

64-
def create_ndr(request: CreateReportRequest, recipient: Mailbox) -> Message:
62+
def create_ndr_event(request: CreateReportRequest) -> MessageEvent:
6563
error_description = get_ndr_error()
66-
report = create_error_report(request, error_description, recipient)
67-
return report
68-
69-
70-
def create_error_report(request: CreateReportRequest, error_description: dict, recipient: Mailbox) -> Message:
7164

7265
error_code = error_description.get("errorCode")
7366
error_event = error_description.get("errorEvent")
7467
error_message = error_description.get("errorDescription")
7568

69+
return MessageEvent(
70+
status=MessageStatus.ERROR,
71+
code=error_code,
72+
event=error_event,
73+
description=error_message,
74+
linked_message_id=request.linked_message_id,
75+
)
76+
77+
78+
def create_ndr_metadata(request: CreateReportRequest) -> MessageMetadata:
7679
subject = "NDR" if not request.subject else f"NDR: {request.subject}"
7780

78-
metadata = MessageMetadata(
81+
return MessageMetadata(
7982
subject=subject,
8083
local_id=request.local_id,
8184
)
82-
83-
return Message(
84-
events=[
85-
MessageEvent(status=MessageStatus.ACCEPTED),
86-
MessageEvent(
87-
status=MessageStatus.ERROR,
88-
code=error_code,
89-
event=error_event,
90-
description=error_message,
91-
linked_message_id=request.linked_message_id,
92-
),
93-
],
94-
message_id=uuid4().hex.upper(),
95-
sender=MessageParty(
96-
mailbox_id="",
97-
mailbox_name="Central System Mailbox",
98-
ods_code="X26",
99-
org_code="X26",
100-
org_name="NHS England",
101-
billing_entity="England",
102-
),
103-
recipient=MessageParty(
104-
mailbox_id=recipient.mailbox_id,
105-
mailbox_name=recipient.mailbox_name,
106-
ods_code=recipient.ods_code,
107-
org_code=recipient.org_code,
108-
org_name=recipient.org_name,
109-
billing_entity=recipient.billing_entity,
110-
),
111-
total_chunks=0,
112-
message_type=MessageType.REPORT,
113-
workflow_id=request.workflow_id,
114-
metadata=metadata,
115-
)

src/mesh_sandbox/handlers/admin.py

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from fastapi import BackgroundTasks, Depends, HTTPException, status
55

6-
from mesh_sandbox.common.exceptions import create_ndr
6+
from mesh_sandbox.common.exceptions import create_ndr_event, create_ndr_metadata
77

88
from ..common.messaging import Messaging
99
from ..dependencies import get_messaging
@@ -53,45 +53,49 @@ async def create_report(self, request: CreateReportRequest, background_tasks: Ba
5353
assert request.status in (MessageStatus.UNDELIVERABLE, MessageStatus.ERROR)
5454

5555
if request.status == MessageStatus.UNDELIVERABLE:
56-
message = create_ndr(request, recipient)
56+
message_event = create_ndr_event(request)
57+
message_metadata = create_ndr_metadata(request)
5758
else:
58-
message = Message(
59-
events=[
60-
MessageEvent(status=MessageStatus.ACCEPTED),
61-
MessageEvent(
62-
status=request.status,
63-
event="TRANSFER",
64-
code=request.code,
65-
description=request.description,
66-
linked_message_id=request.linked_message_id,
67-
),
68-
],
69-
message_id=uuid4().hex.upper(),
70-
sender=MessageParty(
71-
mailbox_id="",
72-
mailbox_name="Central System Mailbox",
73-
ods_code="X26",
74-
org_code="X26",
75-
org_name="NHS England",
76-
billing_entity="England",
77-
),
78-
recipient=MessageParty(
79-
mailbox_id=recipient.mailbox_id,
80-
mailbox_name=recipient.mailbox_name,
81-
ods_code=recipient.ods_code,
82-
org_code=recipient.org_code,
83-
org_name=recipient.org_name,
84-
billing_entity=recipient.billing_entity,
85-
),
86-
total_chunks=0,
87-
message_type=MessageType.REPORT,
88-
workflow_id=request.workflow_id,
89-
metadata=MessageMetadata(
90-
subject=request.subject,
91-
local_id=request.local_id,
92-
file_name=request.file_name,
93-
),
59+
message_event = MessageEvent(
60+
status=request.status,
61+
event="TRANSFER",
62+
code=request.code,
63+
description=request.description,
64+
linked_message_id=request.linked_message_id,
9465
)
66+
message_metadata = MessageMetadata(
67+
subject=request.subject,
68+
local_id=request.local_id,
69+
file_name=request.file_name,
70+
)
71+
72+
message = Message(
73+
events=[
74+
MessageEvent(status=MessageStatus.ACCEPTED),
75+
message_event,
76+
],
77+
message_id=uuid4().hex.upper(),
78+
sender=MessageParty(
79+
mailbox_id="",
80+
mailbox_name="Central System Mailbox",
81+
ods_code="X26",
82+
org_code="X26",
83+
org_name="NHS England",
84+
billing_entity="England",
85+
),
86+
recipient=MessageParty(
87+
mailbox_id=recipient.mailbox_id,
88+
mailbox_name=recipient.mailbox_name,
89+
ods_code=recipient.ods_code,
90+
org_code=recipient.org_code,
91+
org_name=recipient.org_name,
92+
billing_entity=recipient.billing_entity,
93+
),
94+
total_chunks=0,
95+
message_type=MessageType.REPORT,
96+
workflow_id=request.workflow_id,
97+
metadata=message_metadata,
98+
)
9599

96100
await self.messaging.send_message(message=message, body=b"", background_tasks=background_tasks)
97101

0 commit comments

Comments
 (0)