Ë
    Ü_Ëi¼  ã                  óX   — d Z ddlmZ ddlmZmZmZ  G d„ d«      Z G d„ d«      Zd
d„Z	y	)a
  Support for MongoDB Stable API.

.. _versioned-api-ref:

MongoDB Stable API
=====================

Starting in MongoDB 5.0, applications can specify the server API version
to use when creating a :class:`~pymongo.mongo_client.MongoClient`. Doing so
ensures that the driver behaves in a manner compatible with that server API
version, regardless of the server's actual release version.

Declaring an API Version
````````````````````````

.. attention:: Stable API requires MongoDB >=5.0.

To configure MongoDB Stable API, pass the ``server_api`` keyword option to
:class:`~pymongo.mongo_client.MongoClient`::

    >>> from pymongo.mongo_client import MongoClient
    >>> from pymongo.server_api import ServerApi
    >>>
    >>> # Declare API version "1" for MongoClient "client"
    >>> server_api = ServerApi('1')
    >>> client = MongoClient(server_api=server_api)

The declared API version is applied to all commands run through ``client``,
including those sent through the generic
:meth:`~pymongo.database.Database.command` helper.

.. note:: Declaring an API version on the
   :class:`~pymongo.mongo_client.MongoClient` **and** specifying stable
   API options in :meth:`~pymongo.database.Database.command` command document
   is not supported and will lead to undefined behaviour.

To run any command without declaring a server API version or using a different
API version, create a separate :class:`~pymongo.mongo_client.MongoClient`
instance.

Strict Mode
```````````

Configuring ``strict`` mode will cause the MongoDB server to reject all
commands that are not part of the declared :attr:`ServerApi.version`. This
includes command options and aggregation pipeline stages.

For example::

    >>> server_api = ServerApi('1', strict=True)
    >>> client = MongoClient(server_api=server_api)
    >>> client.test.command('count', 'test')
    Traceback (most recent call last):
    ...
    pymongo.errors.OperationFailure: Provided apiStrict:true, but the command count is not in API Version 1, full error: {'ok': 0.0, 'errmsg': 'Provided apiStrict:true, but the command count is not in API Version 1', 'code': 323, 'codeName': 'APIStrictError'

Detecting API Deprecations
``````````````````````````

The ``deprecationErrors`` option can be used to enable command failures
when using functionality that is deprecated from the configured
:attr:`ServerApi.version`. For example::

    >>> server_api = ServerApi('1', deprecation_errors=True)
    >>> client = MongoClient(server_api=server_api)

Note that at the time of this writing, no deprecated APIs exist.

Classes
=======
é    )Úannotations)ÚAnyÚMutableMappingÚOptionalc                  ó   — e Zd ZdZdZy)ÚServerApiVersionz[An enum that defines values for :attr:`ServerApi.version`.

    .. versionadded:: 3.12
    Ú1N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚV1© ó    úU/var/www/pod-logistic/pod-api/venv/lib/python3.12/site-packages/pymongo/server_api.pyr   r   [   s   „ ñð
 
€BØ!r   r   c                  ó\   — e Zd ZdZ	 d	 	 	 	 	 dd„Zed	d„«       Zed
d„«       Zed
d„«       Zy)Ú	ServerApizMongoDB Stable API.Nc                ó  — |t         j                  k7  rt        d|› �«      ‚|�'t        |t        «      st        dt        |«      › �«      ‚|�'t        |t        «      st        dt        |«      › �«      ‚|| _        || _        || _	        y)a÷  Options to configure MongoDB Stable API.

        :param version: The API version string. Must be one of the values in
            :class:`ServerApiVersion`.
        :param strict: Set to ``True`` to enable API strict mode.
            Defaults to ``None`` which means "use the server's default".
        :param deprecation_errors: Set to ``True`` to enable
            deprecation errors. Defaults to ``None`` which means "use the
            server's default".

        .. versionadded:: 3.12
        zUnknown ServerApi version: NzHWrong type for ServerApi strict, value must be an instance of bool, not zTWrong type for ServerApi deprecation_errors, value must be an instance of bool, not )
r   r   Ú
ValueErrorÚ
isinstanceÚboolÚ	TypeErrorÚtypeÚ_versionÚ_strictÚ_deprecation_errors)ÚselfÚversionÚstrictÚdeprecation_errorss       r   Ú__init__zServerApi.__init__h   s¤   € ð Ô&×)Ñ)Ò)ÜÐ:¸7¸)ÐDÓEÐEØÐ¤j°¼Ô&>Üð Ü $ V£˜~ð/óð ð Ð)´*Ð=OÔQUÔ2VÜð,Ü,0Ð1CÓ,DÐ+EðGóð ð  ˆŒØˆŒØ#5ˆÕ r   c                ó   — | j                   S )zfThe API version setting.

        This value is sent to the server in the "apiVersion" field.
        )r   ©r   s    r   r   zServerApi.version‡   s   € ð �}‰}Ðr   c                ó   — | j                   S )zsThe API strict mode setting.

        When set, this value is sent to the server in the "apiStrict" field.
        )r   r#   s    r   r   zServerApi.strict�   s   € ð �|‰|Ðr   c                ó   — | j                   S )z�The API deprecation errors setting.

        When set, this value is sent to the server in the
        "apiDeprecationErrors" field.
        )r   r#   s    r   r    zServerApi.deprecation_errors—   s   € ð ×'Ñ'Ð'r   )NN)r   Ústrr   úOptional[bool]r    r'   )Úreturnr&   )r(   r'   )	r
   r   r   r   r!   Úpropertyr   r   r    r   r   r   r   r   e   se   „ Ùð aeð6Øð6Ø$2ð6ØO]ó6ð> òó ðð òó ðð ò(ó ñ(r   r   c                ó–   — |sy|j                   | d<   |j                  �|j                  | d<   |j                  �|j                  | d<   yy)z›Internal helper which adds API versioning options to a command.

    :param cmd: The command.
    :param server_api: A :class:`ServerApi` or ``None``.
    NÚ
apiVersionÚ	apiStrictÚapiDeprecationErrors)r   r   r    )ÚcmdÚ
server_apis     r   Ú_add_to_commandr0   ¡   sX   € ñ ØØ"×*Ñ*€CˆÑØ×ÑÐ$Ø%×,Ñ,ˆˆKÑØ×$Ñ$Ð0Ø&0×&CÑ&CˆÐ"Ò#ð 1r   N)r.   zMutableMapping[str, Any]r/   zOptional[ServerApi]r(   ÚNone)
r   Ú
__future__r   Útypingr   r   r   r   r   r0   r   r   r   ú<module>r4      s2   ðñFõN #ç 0Ñ 0÷"ñ "÷9(ñ 9(ôxDr   