Skip to content

Commit

Permalink
Add c extension use to client metadata
Browse files Browse the repository at this point in the history
- Move has_c to common
- Check if has_c in pool_options
- Update tests to check for "PyMongo|c"
  • Loading branch information
aclark4life committed Sep 23, 2024
1 parent e03f8f2 commit 7fca7ae
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 19 deletions.
12 changes: 1 addition & 11 deletions pymongo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

from pymongo import _csot
from pymongo._version import __version__, get_version_string, version_tuple
from pymongo.common import MAX_SUPPORTED_WIRE_VERSION, MIN_SUPPORTED_WIRE_VERSION
from pymongo.common import MAX_SUPPORTED_WIRE_VERSION, MIN_SUPPORTED_WIRE_VERSION, has_c
from pymongo.cursor import CursorType
from pymongo.operations import (
DeleteMany,
Expand Down Expand Up @@ -116,16 +116,6 @@
"""Current version of PyMongo."""


def has_c() -> bool:
"""Is the C extension installed?"""
try:
from pymongo import _cmessage # type: ignore[attr-defined] # noqa: F401

return True
except ImportError:
return False


def timeout(seconds: Optional[float]) -> ContextManager[None]:
"""**(Provisional)** Apply the given timeout for a block of operations.
Expand Down
10 changes: 10 additions & 0 deletions pymongo/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -1060,3 +1060,13 @@ def update(self, other: Mapping[str, Any]) -> None: # type: ignore[override]

def cased_key(self, key: str) -> Any:
return self.__casedkeys[key.lower()]


def has_c() -> bool:
"""Is the C extension installed?"""
try:
from pymongo import _cmessage # type: ignore[attr-defined] # noqa: F401

return True
except ImportError:
return False
6 changes: 6 additions & 0 deletions pymongo/pool_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
MAX_POOL_SIZE,
MIN_POOL_SIZE,
WAIT_QUEUE_TIMEOUT,
has_c,
)

if TYPE_CHECKING:
Expand Down Expand Up @@ -363,6 +364,11 @@ def __init__(
# },
# 'platform': 'CPython 3.8.0|MyPlatform'
# }
if has_c():
self.__metadata["driver"]["name"] = "{}|{}".format(
self.__metadata["driver"]["name"],
"c",
)
if not is_sync:
self.__metadata["driver"]["name"] = "{}|{}".format(
self.__metadata["driver"]["name"],
Expand Down
8 changes: 4 additions & 4 deletions test/asynchronous/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ async def test_read_preference(self):

async def test_metadata(self):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo|async"
metadata["driver"]["name"] = "PyMongo|c|async"
metadata["application"] = {"name": "foobar"}
client = self.simple_client("mongodb://foo:27017/?appname=foobar&connect=false")
options = client.options
Expand All @@ -366,7 +366,7 @@ async def test_metadata(self):
with self.assertRaises(TypeError):
self.simple_client(driver=("Foo", "1", "a"))
# Test appending to driver info.
metadata["driver"]["name"] = "PyMongo|async|FooDriver"
metadata["driver"]["name"] = "PyMongo|c|async|FooDriver"
metadata["driver"]["version"] = "{}|1.2.3".format(_METADATA["driver"]["version"])
client = self.simple_client(
"foo",
Expand Down Expand Up @@ -410,7 +410,7 @@ async def test_metadata(self):
@mock.patch.dict("os.environ", {ENV_VAR_K8S: "1"})
def test_container_metadata(self):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo|async"
metadata["driver"]["name"] = "PyMongo|c|async"
metadata["env"] = {}
metadata["env"]["container"] = {"orchestrator": "kubernetes"}
client = self.simple_client("mongodb://foo:27017/?appname=foobar&connect=false")
Expand Down Expand Up @@ -1927,7 +1927,7 @@ def test_sigstop_sigcont(self):
async def _test_handshake(self, env_vars, expected_env):
with patch.dict("os.environ", env_vars):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo|async"
metadata["driver"]["name"] = "PyMongo|c|async"
if expected_env is not None:
metadata["env"] = expected_env

Expand Down
8 changes: 4 additions & 4 deletions test/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ def test_read_preference(self):

def test_metadata(self):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo"
metadata["driver"]["name"] = "PyMongo|c"
metadata["application"] = {"name": "foobar"}
client = self.simple_client("mongodb://foo:27017/?appname=foobar&connect=false")
options = client.options
Expand All @@ -358,7 +358,7 @@ def test_metadata(self):
with self.assertRaises(TypeError):
self.simple_client(driver=("Foo", "1", "a"))
# Test appending to driver info.
metadata["driver"]["name"] = "PyMongo|FooDriver"
metadata["driver"]["name"] = "PyMongo|c|FooDriver"
metadata["driver"]["version"] = "{}|1.2.3".format(_METADATA["driver"]["version"])
client = self.simple_client(
"foo",
Expand Down Expand Up @@ -402,7 +402,7 @@ def test_metadata(self):
@mock.patch.dict("os.environ", {ENV_VAR_K8S: "1"})
def test_container_metadata(self):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo"
metadata["driver"]["name"] = "PyMongo|c"
metadata["env"] = {}
metadata["env"]["container"] = {"orchestrator": "kubernetes"}
client = self.simple_client("mongodb://foo:27017/?appname=foobar&connect=false")
Expand Down Expand Up @@ -1885,7 +1885,7 @@ def test_sigstop_sigcont(self):
def _test_handshake(self, env_vars, expected_env):
with patch.dict("os.environ", env_vars):
metadata = copy.deepcopy(_METADATA)
metadata["driver"]["name"] = "PyMongo"
metadata["driver"]["name"] = "PyMongo|c"
if expected_env is not None:
metadata["env"] = expected_env

Expand Down

0 comments on commit 7fca7ae

Please sign in to comment.