Skip to content

Commit 5484075

Browse files
authored
PYTHON-3866 add types to topology_description.py (#1339)
1 parent 359e924 commit 5484075

File tree

1 file changed

+41
-14
lines changed

1 file changed

+41
-14
lines changed

pymongo/topology_description.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,18 @@
1515
"""Represent a deployment of MongoDB servers."""
1616

1717
from random import sample
18-
from typing import Any, Callable, Dict, List, NamedTuple, Optional, Tuple
18+
from typing import (
19+
Any,
20+
Callable,
21+
Dict,
22+
List,
23+
Mapping,
24+
MutableMapping,
25+
NamedTuple,
26+
Optional,
27+
Tuple,
28+
cast,
29+
)
1930

2031
from bson.min_key import MinKey
2132
from bson.objectid import ObjectId
@@ -99,7 +110,7 @@ def __init__(
99110
s.logical_session_timeout_minutes for s in readable_servers
100111
)
101112

102-
def _init_incompatible_err(self):
113+
def _init_incompatible_err(self) -> None:
103114
"""Internal compatibility check for non-load balanced topologies."""
104115
for s in self._server_descriptions.values():
105116
if not s.is_server_type_known:
@@ -253,14 +264,16 @@ def heartbeat_frequency(self) -> int:
253264
def srv_max_hosts(self) -> int:
254265
return self._topology_settings._srv_max_hosts
255266

256-
def _apply_local_threshold(self, selection):
267+
def _apply_local_threshold(self, selection: Optional[Selection]) -> List[ServerDescription]:
257268
if not selection:
258269
return []
259270
# Round trip time in seconds.
260-
fastest = min(s.round_trip_time for s in selection.server_descriptions)
271+
fastest = min(cast(float, s.round_trip_time) for s in selection.server_descriptions)
261272
threshold = self._topology_settings.local_threshold_ms / 1000.0
262273
return [
263-
s for s in selection.server_descriptions if (s.round_trip_time - fastest) <= threshold
274+
s
275+
for s in selection.server_descriptions
276+
if (cast(float, s.round_trip_time) - fastest) <= threshold
264277
]
265278

266279
def apply_selector(
@@ -344,7 +357,7 @@ def has_writable_server(self) -> bool:
344357
"""
345358
return self.has_readable_server(ReadPreference.PRIMARY)
346359

347-
def __repr__(self):
360+
def __repr__(self) -> str:
348361
# Sort the servers by address.
349362
servers = sorted(self._server_descriptions.values(), key=lambda sd: sd.address)
350363
return "<{} id: {}, topology_type: {}, servers: {!r}>".format(
@@ -472,7 +485,9 @@ def updated_topology_description(
472485
)
473486

474487

475-
def _updated_topology_description_srv_polling(topology_description, seedlist):
488+
def _updated_topology_description_srv_polling(
489+
topology_description: TopologyDescription, seedlist: List[Tuple[str, Any]]
490+
) -> TopologyDescription:
476491
"""Return an updated copy of a TopologyDescription.
477492
478493
:Parameters:
@@ -515,8 +530,12 @@ def _updated_topology_description_srv_polling(topology_description, seedlist):
515530

516531

517532
def _update_rs_from_primary(
518-
sds, replica_set_name, server_description, max_set_version, max_election_id
519-
):
533+
sds: MutableMapping[_Address, ServerDescription],
534+
replica_set_name: Optional[str],
535+
server_description: ServerDescription,
536+
max_set_version: Optional[int],
537+
max_election_id: Optional[ObjectId],
538+
) -> Tuple[int, Optional[str], Optional[int], Optional[ObjectId]]:
520539
"""Update topology description from a primary's hello response.
521540
522541
Pass in a dict of ServerDescriptions, current replica set name, the
@@ -536,8 +555,8 @@ def _update_rs_from_primary(
536555
return _check_has_primary(sds), replica_set_name, max_set_version, max_election_id
537556

538557
if server_description.max_wire_version is None or server_description.max_wire_version < 17:
539-
new_election_tuple = server_description.set_version, server_description.election_id
540-
max_election_tuple = max_set_version, max_election_id
558+
new_election_tuple: Tuple = (server_description.set_version, server_description.election_id)
559+
max_election_tuple: Tuple = (max_set_version, max_election_id)
541560
if None not in new_election_tuple:
542561
if None not in max_election_tuple and new_election_tuple < max_election_tuple:
543562
# Stale primary, set to type Unknown.
@@ -589,7 +608,11 @@ def _update_rs_from_primary(
589608
return (_check_has_primary(sds), replica_set_name, max_set_version, max_election_id)
590609

591610

592-
def _update_rs_with_primary_from_member(sds, replica_set_name, server_description):
611+
def _update_rs_with_primary_from_member(
612+
sds: MutableMapping[_Address, ServerDescription],
613+
replica_set_name: Optional[str],
614+
server_description: ServerDescription,
615+
) -> int:
593616
"""RS with known primary. Process a response from a non-primary.
594617
595618
Pass in a dict of ServerDescriptions, current replica set name, and the
@@ -608,7 +631,11 @@ def _update_rs_with_primary_from_member(sds, replica_set_name, server_descriptio
608631
return _check_has_primary(sds)
609632

610633

611-
def _update_rs_no_primary_from_member(sds, replica_set_name, server_description):
634+
def _update_rs_no_primary_from_member(
635+
sds: MutableMapping[_Address, ServerDescription],
636+
replica_set_name: Optional[str],
637+
server_description: ServerDescription,
638+
) -> Tuple[int, Optional[str]]:
612639
"""RS without known primary. Update from a non-primary's response.
613640
614641
Pass in a dict of ServerDescriptions, current replica set name, and the
@@ -636,7 +663,7 @@ def _update_rs_no_primary_from_member(sds, replica_set_name, server_description)
636663
return topology_type, replica_set_name
637664

638665

639-
def _check_has_primary(sds):
666+
def _check_has_primary(sds: Mapping[_Address, ServerDescription]) -> int:
640667
"""Current topology type is ReplicaSetWithPrimary. Is primary still known?
641668
642669
Pass in a dict of ServerDescriptions.

0 commit comments

Comments
 (0)