1515"""Represent a deployment of MongoDB servers."""
1616
1717from 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
2031from bson .min_key import MinKey
2132from 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
517532def _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