diff --git a/pymongo/client_session.py b/pymongo/client_session.py index a0c269cb8d..7d70eb8f19 100644 --- a/pymongo/client_session.py +++ b/pymongo/client_session.py @@ -140,7 +140,6 @@ Any, Callable, ContextManager, - Generic, Mapping, NoReturn, Optional, @@ -164,7 +163,6 @@ from pymongo.read_concern import ReadConcern from pymongo.read_preferences import ReadPreference, _ServerMode from pymongo.server_type import SERVER_TYPE -from pymongo.typings import _DocumentType from pymongo.write_concern import WriteConcern @@ -461,7 +459,7 @@ def _within_time_limit(start_time): from pymongo.mongo_client import MongoClient -class ClientSession(Generic[_DocumentType]): +class ClientSession: """A session for ordering sequential operations. :class:`ClientSession` instances are **not thread-safe or fork-safe**. @@ -476,13 +474,13 @@ class ClientSession(Generic[_DocumentType]): def __init__( self, - client: "MongoClient[_DocumentType]", + client: "MongoClient", server_session: Any, options: SessionOptions, implicit: bool, ) -> None: # A MongoClient, a _ServerSession, a SessionOptions, and a set. - self._client: MongoClient[_DocumentType] = client + self._client: MongoClient = client self._server_session = server_session self._options = options self._cluster_time = None @@ -515,14 +513,14 @@ def _check_ended(self): if self._server_session is None: raise InvalidOperation("Cannot use ended session") - def __enter__(self) -> "ClientSession[_DocumentType]": + def __enter__(self) -> "ClientSession": return self def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: self._end_session(lock=True) @property - def client(self) -> "MongoClient[_DocumentType]": + def client(self) -> "MongoClient": """The :class:`~pymongo.mongo_client.MongoClient` this session was created from. """ diff --git a/pymongo/mongo_client.py b/pymongo/mongo_client.py index 6601c18aca..e1aa80e2f9 100644 --- a/pymongo/mongo_client.py +++ b/pymongo/mongo_client.py @@ -1630,7 +1630,7 @@ def start_session( causal_consistency: Optional[bool] = None, default_transaction_options: Optional[client_session.TransactionOptions] = None, snapshot: Optional[bool] = False, - ) -> client_session.ClientSession[_DocumentType]: + ) -> client_session.ClientSession: """Start a logical session. This method takes the same parameters as @@ -1681,7 +1681,7 @@ def _ensure_session(self, session=None): @contextlib.contextmanager def _tmp_session( self, session: Optional[client_session.ClientSession], close: bool = True - ) -> "Generator[Optional[client_session.ClientSession[Any]], None, None]": + ) -> "Generator[Optional[client_session.ClientSession], None, None]": """If provided session is None, lend a temporary session.""" if session is not None: if not isinstance(session, client_session.ClientSession): diff --git a/test/test_mypy.py b/test/test_mypy.py index 07af61ed36..dfdcefbdb3 100644 --- a/test/test_mypy.py +++ b/test/test_mypy.py @@ -43,6 +43,7 @@ class Movie(TypedDict): # type: ignore[misc] from bson import CodecOptions, decode, decode_all, decode_file_iter, decode_iter, encode from bson.raw_bson import RawBSONDocument from bson.son import SON +from pymongo import ASCENDING from pymongo.collection import Collection from pymongo.mongo_client import MongoClient from pymongo.operations import InsertOne @@ -313,6 +314,14 @@ def test_son_document_type(self) -> None: def test_son_document_type_runtime(self) -> None: client = MongoClient(document_class=SON[str, Any], connect=False) + @only_type_check + def test_create_index(self) -> None: + client: MongoClient[Dict[str, str]] = MongoClient("test") + db = client.test + with client.start_session() as session: + index = db.test.create_index([("user_id", ASCENDING)], unique=True, session=session) + assert isinstance(index, str) + class TestCommandDocumentType(unittest.TestCase): @only_type_check