U
    ~fh                     @  sr  d Z ddlmZ ddlmZmZ dddddd	d
ddddddddddddddddddddgZdZd Zd!Z	d"Z
d#Zd$Zdd%lmZ dd&lmZmZmZ dd'lmZmZmZ dd(lmZ dd)lmZmZmZmZmZmZm Z  dd*l!m"Z" dd+l#m$Z$ dd,l%m&Z& dd-l'm(Z( zdd.l)m*Z* W nB e+k
rX Z, z"dd/l-Z.e.j/d0e,e0d1d2 W 5 d/Z,[,X Y nX eZ1d3d4d5d6dZ2d/S )7zPython driver for MongoDB.    )annotations)ContextManagerOptional	ASCENDING
DESCENDINGGEO2D	GEOSPHEREHASHEDTEXTversion_tupleget_version_string__version__versionReturnDocumentMAX_SUPPORTED_WIRE_VERSIONMIN_SUPPORTED_WIRE_VERSION
CursorTypeMongoClientAsyncMongoClient
DeleteMany	DeleteOne
IndexModel	InsertOne
ReplaceOne
UpdateMany	UpdateOneReadPreferenceWriteConcernhas_ctimeout   Z2dZ2dspherehashedtext)_csot)r   r   r   )r   r   r   )r   )r   r   r   r   r   r   r   )r   )r   )r   )r   )r   Nz Failed to import Async PyMongo:    )
stacklevelzOptional[float]zContextManager[None])secondsreturnc                 C  sJ   t | tttdfstd| r0| dk r0td| dk	r@t| } t| S )a  **(Provisional)** Apply the given timeout for a block of operations.

    .. note:: :func:`~pymongo.timeout` is currently provisional. Backwards
       incompatible changes may occur before becoming officially supported.

    Use :func:`~pymongo.timeout` in a with-statement::

      with pymongo.timeout(5):
          client.db.coll.insert_one({})
          client.db.coll2.insert_one({})

    When the with-statement is entered, a deadline is set for the entire
    block. When that deadline is exceeded, any blocking pymongo operation
    will raise a timeout exception. For example::

      try:
          with pymongo.timeout(5):
              client.db.coll.insert_one({})
              time.sleep(5)
              # The deadline has now expired, the next operation will raise
              # a timeout exception.
              client.db.coll2.insert_one({})
      except PyMongoError as exc:
          if exc.timeout:
              print(f"block timed out: {exc!r}")
          else:
              print(f"failed with non-timeout error: {exc!r}")

    When nesting :func:`~pymongo.timeout`, the nested deadline is capped by
    the outer deadline. The deadline can only be shortened, not extended.
    When exiting the block, the previous deadline is restored::

      with pymongo.timeout(5):
          coll.find_one()  # Uses the 5 second deadline.
          with pymongo.timeout(3):
              coll.find_one() # Uses the 3 second deadline.
          coll.find_one()  # Uses the original 5 second deadline.
          with pymongo.timeout(10):
              coll.find_one()  # Still uses the original 5 second deadline.
          coll.find_one()  # Uses the original 5 second deadline.

    :param seconds: A non-negative floating point number expressing seconds, or None.

    :raises: :py:class:`ValueError`: When `seconds` is negative.

    See :ref:`timeout-example` for more examples.

    .. versionadded:: 4.2
    Nz(timeout must be None, an int, or a floatr   ztimeout cannot be negative)
isinstanceintfloattype	TypeError
ValueErrorr$   Z_TimeoutContext)r'    r/   4/tmp/pip-unpacked-wheel-36gvocj8/pymongo/__init__.pyr   w   s    2)3__doc__
__future__r   typingr   r   __all__r   r   r   r   r	   r
   Zpymongor$   Zpymongo._versionr   r   r   Zpymongo.commonr   r   r   Zpymongo.cursorr   Zpymongo.operationsr   r   r   r   r   r   r   Zpymongo.read_preferencesr   Zpymongo.synchronous.collectionr   Z pymongo.synchronous.mongo_clientr   Zpymongo.write_concernr   Z!pymongo.asynchronous.mongo_clientr   	Exceptionewarnings	_warningswarnImportWarningr   r   r/   r/   r/   r0   <module>   sh   $	(