1212# implied. See the License for the specific language governing
1313# permissions and limitations under the License.
1414
15- """Criteria to select some ServerDescriptions out of a list ."""
15+ """Criteria to select some ServerDescriptions from a TopologyDescription ."""
1616
1717from pymongo .server_type import SERVER_TYPE
1818
1919
20- def any_server_selector (server_descriptions ):
21- return server_descriptions
20+ def any_server_selector (td ):
21+ return td . known_servers
2222
2323
24- def readable_server_selector (server_descriptions ):
25- return [s for s in server_descriptions if s .is_readable ]
24+ def readable_server_selector (td ):
25+ return [s for s in td . known_servers if s .is_readable ]
2626
2727
28- def writable_server_selector (server_descriptions ):
29- return [s for s in server_descriptions if s .is_writable ]
28+ def writable_server_selector (td ):
29+ return [s for s in td . known_servers if s .is_writable ]
3030
3131
32- def secondary_server_selector (server_descriptions ):
33- return [s for s in server_descriptions
32+ def secondary_server_selector (td ):
33+ return [s for s in td . known_servers
3434 if s .server_type == SERVER_TYPE .RSSecondary ]
3535
3636
37- def arbiter_server_selector (server_descriptions ):
38- return [s for s in server_descriptions
37+ def arbiter_server_selector (td ):
38+ return [s for s in td . known_servers
3939 if s .server_type == SERVER_TYPE .RSArbiter ]
4040
4141
42- def writable_preferred_server_selector (server_descriptions ):
42+ def writable_preferred_server_selector (td ):
4343 """Like PrimaryPreferred but doesn't use tags or latency."""
44- return (
45- writable_server_selector (server_descriptions ) or
46- secondary_server_selector (server_descriptions ))
44+ return writable_server_selector (td ) or secondary_server_selector (td )
4745
4846
49- def single_tag_set_server_selector (tag_set , server_descriptions ):
47+ def apply_single_tag_set (tag_set , server_descriptions ):
5048 """All servers matching one tag set.
5149
5250 A tag set is a dict. A server matches if its tags are a superset:
@@ -69,7 +67,7 @@ def tags_match(server_tags):
6967 return [s for s in server_descriptions if tags_match (s .tags )]
7068
7169
72- def tag_sets_server_selector (tag_sets , server_descriptions ):
70+ def apply_tag_sets (tag_sets , server_descriptions ):
7371 """All servers match a list of tag sets.
7472
7573 tag_sets is a list of dicts. The empty tag set {} matches any server,
@@ -84,7 +82,7 @@ def tag_sets_server_selector(tag_sets, server_descriptions):
8482 first.
8583 """
8684 for tag_set in tag_sets :
87- selected = single_tag_set_server_selector (tag_set , server_descriptions )
85+ selected = apply_single_tag_set (tag_set , server_descriptions )
8886 if selected :
8987 return selected
9088
@@ -115,13 +113,11 @@ def apply_local_threshold(latency_ms, server_descriptions):
115113 if (s .round_trip_time - fastest ) <= latency_ms / 1000. ]
116114
117115
118- def secondary_with_tags_server_selector (tag_sets , server_descriptions ):
116+ def secondary_with_tags_server_selector (tag_sets , td ):
119117 """All near-enough secondaries matching the tag sets."""
120- return tag_sets_server_selector (
121- tag_sets , secondary_server_selector (server_descriptions ))
118+ return apply_tag_sets (tag_sets , secondary_server_selector (td ))
122119
123120
124- def member_with_tags_server_selector (tag_sets , server_descriptions ):
121+ def member_with_tags_server_selector (tag_sets , td ):
125122 """All near-enough members matching the tag sets."""
126- return tag_sets_server_selector (
127- tag_sets , readable_server_selector (server_descriptions ))
123+ return apply_tag_sets (tag_sets , readable_server_selector (td ))
0 commit comments