Skip to content

Commit b7a8047

Browse files
mesh-2771:ruff fixes
1 parent 734d904 commit b7a8047

4 files changed

Lines changed: 108 additions & 111 deletions

File tree

mesh_client/__init__.py

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from io import BytesIO
1717
from itertools import chain
1818
from types import TracebackType
19-
from typing import Any, NoReturn, Optional, TypeVar, Union, cast
19+
from typing import Any, NoReturn, TypeVar, cast
2020
from urllib.parse import quote as q
2121
from urllib.parse import urlparse
2222

@@ -136,9 +136,9 @@ def optional_header_map() -> dict[str, str]:
136136

137137
# urllib3 'futures' ( not part of 1.26 .. but available in 2.x )
138138
def reraise(
139-
tp: Optional[type[BaseException]],
139+
tp: type[BaseException] | None,
140140
value: BaseException,
141-
tb: Optional[TracebackType] = None,
141+
tb: TracebackType | None = None,
142142
) -> NoReturn:
143143
try:
144144
if value.__traceback__ is not tb:
@@ -149,7 +149,7 @@ def reraise(
149149
tb = None
150150

151151

152-
def try_get_endpoint_from_url(url: str) -> Optional[Endpoint]:
152+
def try_get_endpoint_from_url(url: str) -> Endpoint | None:
153153
url_parsed = urlparse(url)
154154
if not url_parsed.hostname:
155155
return None
@@ -195,7 +195,7 @@ def _looks_like_send_error(status_code: int, response_dict: dict) -> bool:
195195

196196
def _get_send_error_message(
197197
response_dict: dict,
198-
) -> tuple[str, Union[SendMessageErrorResponse_v1, SendMessageErrorResponse_v2, dict]]:
198+
) -> tuple[str, SendMessageErrorResponse_v1 | SendMessageErrorResponse_v2 | dict]:
199199
if "errorDescription" in response_dict:
200200
return response_dict["errorDescription"], cast(SendMessageErrorResponse_v1, response_dict)
201201

@@ -214,12 +214,12 @@ class MeshRetry(Retry):
214214

215215
def increment(
216216
self,
217-
method: Optional[str] = None,
218-
url: Optional[str] = None,
217+
method: str | None = None,
218+
url: str | None = None,
219219
response=None,
220-
error: Optional[Exception] = None,
221-
_pool: Optional[ConnectionPool] = None,
222-
_stacktrace: Optional[TracebackType] = None,
220+
error: Exception | None = None,
221+
_pool: ConnectionPool | None = None,
222+
_stacktrace: TracebackType | None = None,
223223
) -> "MeshRetry":
224224
if method != "POST" or not url or not url.endswith("/outbox"):
225225
return cast(MeshRetry, super().increment(method, url, response, error, _pool, _stacktrace))
@@ -243,11 +243,11 @@ def increment(
243243
class SSLContextAdapter(HTTPAdapter):
244244
def __init__(
245245
self,
246-
cert: Optional[Union[tuple[str], tuple[str, str], tuple[str, str, str]]] = None,
247-
verify: Optional[Union[str, bool]] = None,
248-
check_hostname: Optional[bool] = None,
249-
hostname_checks_common_name: Optional[bool] = None,
250-
max_retries: Union[int, Retry] = 0,
246+
cert: tuple[str] | tuple[str, str] | tuple[str, str, str] | None = None,
247+
verify: str | bool | None = None,
248+
check_hostname: bool | None = None,
249+
hostname_checks_common_name: bool | None = None,
250+
max_retries: int | Retry = 0,
251251
):
252252
self.cert = cert
253253
self.verify = verify
@@ -306,23 +306,23 @@ class MeshClient:
306306

307307
def __init__( # NOSONAR(S3776) # noqa: C901
308308
self, # NOSONAR(S107)
309-
url: Union[str, Endpoint],
309+
url: str | Endpoint,
310310
mailbox: str,
311311
password: str,
312-
shared_key: Optional[bytes] = None,
313-
cert: Optional[Union[tuple[str], tuple[str, str], tuple[str, str, str]]] = None,
314-
verify: Optional[Union[str, bool]] = None,
315-
check_hostname: Optional[bool] = None,
316-
hostname_checks_common_name: Optional[bool] = None,
312+
shared_key: bytes | None = None,
313+
cert: tuple[str] | tuple[str, str] | tuple[str, str, str] | None = None,
314+
verify: str | bool | None = None,
315+
check_hostname: bool | None = None,
316+
hostname_checks_common_name: bool | None = None,
317317
max_chunk_size=75 * 1024 * 1024,
318-
proxies: Optional[dict[str, str]] = None,
318+
proxies: dict[str, str] | None = None,
319319
transparent_compress: bool = False,
320-
max_retries: Union[int, Retry] = 3,
321-
retry_backoff_factor: Union[int, float] = 0.5,
320+
max_retries: int | Retry = 3,
321+
retry_backoff_factor: int | float = 0.5,
322322
retry_status_force_list: tuple[int, ...] = (425, 429, 502, 503, 504),
323323
retry_methods: tuple[str, ...] = ("HEAD", "GET", "PUT", "POST", "DELETE", "OPTIONS", "TRACE"),
324-
timeout: Union[int, float] = 10 * 60,
325-
application_name: Optional[str] = None,
324+
timeout: int | float = 10 * 60,
325+
application_name: str | None = None,
326326
):
327327
"""
328328
Create a new MeshClient.
@@ -388,7 +388,7 @@ def __init__( # NOSONAR(S3776) # noqa: C901
388388

389389
url_lower = self._url.lower()
390390

391-
self._retries: Union[int, Retry] = 0
391+
self._retries: int | Retry = 0
392392
if isinstance(max_retries, Retry):
393393
self._retries = max_retries
394394
elif max_retries:
@@ -498,16 +498,14 @@ def lookup_endpoint(self, ods_code: str, workflow_id: str) -> EndpointLookupResp
498498
response.raise_for_status()
499499
return cast(EndpointLookupResponse_v2, response.json())
500500

501-
def _inbox_v2_page(
502-
self, url: Optional[str] = None, params: Optional[dict[str, Any]] = None
503-
) -> ListMessageResponse_v2:
501+
def _inbox_v2_page(self, url: str | None = None, params: dict[str, Any] | None = None) -> ListMessageResponse_v2:
504502
url = url or f"{self.mailbox_url}/inbox"
505503
response = self._session.get(url, timeout=self._timeout, params=params)
506504
response.raise_for_status()
507505

508506
return cast(ListMessageResponse_v2, response.json())
509507

510-
def list_messages(self, max_results: Optional[int] = None, workflow_filter: Optional[str] = None) -> list[str]:
508+
def list_messages(self, max_results: int | None = None, workflow_filter: str | None = None) -> list[str]:
511509
"""
512510
lists messages ids in the inbox; note if workflow_filter is set it's possible to receive an empty page
513511
when more results exist outside the first max_results
@@ -521,7 +519,7 @@ def list_messages(self, max_results: Optional[int] = None, workflow_filter: Opti
521519
list[str]: message ids
522520
"""
523521

524-
params: dict[str, Union[str, int]] = {}
522+
params: dict[str, str | int] = {}
525523
if max_results:
526524
if max_results < 10:
527525
raise ValueError("if set max_results should be >= 10")
@@ -617,8 +615,8 @@ def send_chunk(
617615
chunk,
618616
chunk_num: int,
619617
total_chunks: int,
620-
compress: Optional[bool] = None,
621-
message_id: Optional[str] = None,
618+
compress: bool | None = None,
619+
message_id: str | None = None,
622620
**kwargs,
623621
) -> Response:
624622
"""
@@ -690,8 +688,8 @@ def send_message(
690688
self,
691689
recipient: str,
692690
data,
693-
max_chunk_size: Optional[int] = None,
694-
compress: Optional[bool] = None,
691+
max_chunk_size: int | None = None,
692+
compress: bool | None = None,
695693
**kwargs,
696694
) -> str:
697695
"""
@@ -779,7 +777,7 @@ def acknowledge_message(self, message_id: str):
779777
response.raise_for_status()
780778

781779
def iterate_message_ids(
782-
self, workflow_filter: Optional[str] = None, batch_size: Optional[int] = None
780+
self, workflow_filter: str | None = None, batch_size: int | None = None
783781
) -> Generator[str, None, None]:
784782
"""
785783
generator lists messages ids in the inbox;
@@ -793,7 +791,7 @@ def iterate_message_ids(
793791
Generator[str]: message ids
794792
"""
795793

796-
params: dict[str, Union[int, str]] = {}
794+
params: dict[str, int | str] = {}
797795
if batch_size:
798796
if batch_size < 10:
799797
raise ValueError("if set batch_size should be >= 10")
@@ -802,7 +800,7 @@ def iterate_message_ids(
802800
if workflow_filter:
803801
params["workflow_filter"] = workflow_filter
804802

805-
def _next_messages(page_result: ListMessageResponse_v2) -> tuple[Optional[str], list[str]]:
803+
def _next_messages(page_result: ListMessageResponse_v2) -> tuple[str | None, list[str]]:
806804
return cast(dict[str, str], page_result.get("links", {})).get("next"), cast(
807805
list[str], page_result.get("messages", [])
808806
)
@@ -815,7 +813,7 @@ def _next_messages(page_result: ListMessageResponse_v2) -> tuple[Optional[str],
815813
next_page, messages = _next_messages(result)
816814
yield from messages
817815

818-
def iterate_messages(self, workflow_filter: Optional[str] = None, batch_size: Optional[int] = None):
816+
def iterate_messages(self, workflow_filter: str | None = None, batch_size: int | None = None):
819817
"""
820818
generator lists messages ids in the inbox;
821819
Iterate over a list of Message objects for all messages in the user's
@@ -886,17 +884,17 @@ class _MessageAttrs:
886884
message_type: str
887885
recipient: str
888886
content_type: str
889-
sender: Optional[str] = None
887+
sender: str | None = None
890888

891-
workflow_id: Optional[str] = None
892-
filename: Optional[str] = None
893-
local_id: Optional[str] = None
894-
partner_id: Optional[str] = None
895-
chunk_range: Optional[str] = None
889+
workflow_id: str | None = None
890+
filename: str | None = None
891+
local_id: str | None = None
892+
partner_id: str | None = None
893+
chunk_range: str | None = None
896894

897-
subject: Optional[str] = None
898-
encrypted: Optional[Union[str, bool]] = None
899-
compressed: Optional[Union[str, bool]] = None
895+
subject: str | None = None
896+
encrypted: str | bool | None = None
897+
compressed: str | bool | None = None
900898

901899

902900
TDefault = TypeVar("TDefault")
@@ -1014,7 +1012,7 @@ def acknowledge(self):
10141012
"""
10151013
self._client.acknowledge_message(self._msg_id)
10161014

1017-
def mex_header(self, key: str, default: Optional[TDefault] = None) -> Union[str, Optional[TDefault]]:
1015+
def mex_header(self, key: str, default: TDefault | None = None) -> str | TDefault | None:
10181016
"""get a mex header if present
10191017
10201018
Args:

mesh_client/types.py

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
from typing import Literal, Optional, TypedDict
1+
from typing import Literal, TypedDict
22

33
# https://digital.nhs.uk/developer/api-catalogue/message-exchange-for-social-care-and-health-api#get-/messageexchange/endpointlookup/-ods_code-/-workflow_id-
44

55

66
class EndpointLookupItem_v1(TypedDict):
77
address: str
8-
description: Optional[str]
8+
description: str | None
99
endpoint_type: Literal["MESH"]
1010

1111

@@ -16,7 +16,7 @@ class EndpointLookupResponse_v1(TypedDict):
1616

1717
class EndpointLookupItem_v2(TypedDict):
1818
mailbox_id: str
19-
mailbox_name: Optional[str]
19+
mailbox_name: str | None
2020

2121

2222
class EndpointLookupResponse_v2(TypedDict):
@@ -50,69 +50,69 @@ class AcknowledgeMessageResponse_v1(TypedDict):
5050

5151
# https://digital.nhs.uk/developer/api-catalogue/message-exchange-for-social-care-and-health-api#get-/messageexchange/-mailbox_id-/outbox/tracking/-local_id-
5252
class TrackingResponse_v1(TypedDict):
53-
addressType: Optional[str]
54-
checksum: Optional[str]
55-
chunkCount: Optional[int]
56-
compressFlag: Optional[str]
57-
contentEncoding: Optional[str]
58-
downloadTimestamp: Optional[str]
53+
addressType: str | None
54+
checksum: str | None
55+
chunkCount: int | None
56+
compressFlag: str | None
57+
contentEncoding: str | None
58+
downloadTimestamp: str | None
5959
dtsId: str
60-
encryptedFlag: Optional[str]
61-
expiryTime: Optional[str]
62-
failureDate: Optional[str]
63-
failureDiagnostic: Optional[str]
64-
fileName: Optional[str]
60+
encryptedFlag: str | None
61+
expiryTime: str | None
62+
failureDate: str | None
63+
failureDiagnostic: str | None
64+
fileName: str | None
6565
fileSize: int
6666

67-
isCompressed: Optional[str]
68-
linkedMsgId: Optional[str]
69-
localId: Optional[str]
70-
meshRecipientOdsCode: Optional[str]
67+
isCompressed: str | None
68+
linkedMsgId: str | None
69+
localId: str | None
70+
meshRecipientOdsCode: str | None
7171
messageId: str
72-
messageType: Optional[str]
73-
partnerId: Optional[str]
72+
messageType: str | None
73+
partnerId: str | None
7474

75-
recipient: Optional[str]
76-
recipientName: Optional[str]
77-
recipientOrgCode: Optional[str]
78-
recipientOrgName: Optional[str]
79-
recipientSmtp: Optional[str]
75+
recipient: str | None
76+
recipientName: str | None
77+
recipientOrgCode: str | None
78+
recipientOrgName: str | None
79+
recipientSmtp: str | None
8080

81-
sender: Optional[str]
82-
senderName: Optional[str]
83-
senderOdsCode: Optional[str]
84-
senderOrgCode: Optional[str]
85-
senderOrgName: Optional[str]
86-
senderSmtp: Optional[str]
81+
sender: str | None
82+
senderName: str | None
83+
senderOdsCode: str | None
84+
senderOrgCode: str | None
85+
senderOrgName: str | None
86+
senderSmtp: str | None
8787

88-
status: Optional[str]
88+
status: str | None
8989

90-
statusCode: Optional[str]
91-
statusDescription: Optional[str]
90+
statusCode: str | None
91+
statusDescription: str | None
9292

9393

9494
# https://digital.nhs.uk/developer/api-catalogue/message-exchange-for-social-care-and-health-api#get-/messageexchange/-mailbox_id-/outbox/tracking
9595
class TrackingResponse_v2(TypedDict):
9696
message_id: str
97-
local_id: Optional[str]
98-
workflow_id: Optional[str]
99-
filename: Optional[str]
97+
local_id: str | None
98+
workflow_id: str | None
99+
filename: str | None
100100

101-
expiry_time: Optional[str]
102-
upload_timestamp: Optional[str]
101+
expiry_time: str | None
102+
upload_timestamp: str | None
103103

104-
recipient: Optional[str]
105-
recipient_name: Optional[str]
106-
recipient_ods_code: Optional[str]
107-
recipient_org_code: Optional[str]
108-
recipient_org_name: Optional[str]
104+
recipient: str | None
105+
recipient_name: str | None
106+
recipient_ods_code: str | None
107+
recipient_org_code: str | None
108+
recipient_org_name: str | None
109109

110-
status_success: Optional[bool]
111-
status: Optional[str]
112-
status_event: Optional[str]
113-
status_timestamp: Optional[str]
114-
status_description: Optional[str]
115-
status_code: Optional[str]
110+
status_success: bool | None
111+
status: str | None
112+
status_event: str | None
113+
status_timestamp: str | None
114+
status_description: str | None
115+
status_code: str | None
116116

117117

118118
# https://digital.nhs.uk/developer/api-catalogue/message-exchange-for-social-care-and-health-api#post-/messageexchange/-mailbox_id-/outbox
@@ -125,13 +125,13 @@ class SendMessageResponse_v2(TypedDict):
125125

126126

127127
class SendMessageErrorResponse_v1(TypedDict):
128-
messageID: Optional[str]
129-
errorEvent: Optional[str]
130-
errorCode: Optional[str]
131-
errorDescription: Optional[str]
128+
messageID: str | None
129+
errorEvent: str | None
130+
errorCode: str | None
131+
errorDescription: str | None
132132

133133

134134
class SendMessageErrorResponse_v2(TypedDict):
135-
message_id: Optional[str]
136-
internal_id: Optional[str]
135+
message_id: str | None
136+
internal_id: str | None
137137
detail: list[dict]

0 commit comments

Comments
 (0)