
    "i                     `    d Z ddlZddlmZ  G d dej                  Z G d de          ZdS )	zImplementation of the DbDoc.    N   )ProgrammingErrorc                       e Zd ZdZd ZdS )ExprJSONEncoderzgA :class:`json.JSONEncoder` subclass, which enables encoding of
    :class:`mysqlx.ExprParser` objects.c                     t          |d          rd                    |          S t          j                            | |          S )Nexprz{0})hasattrformatjsonJSONEncoderdefault)selfos     D/srv/django_bis/venv311/lib/python3.11/site-packages/mysqlx/dbdoc.pyr   zExprJSONEncoder.default'   s=    1f 	#<<??"''a000    N)__name__
__module____qualname____doc__r    r   r   r   r   $   s-        + +1 1 1 1 1r   r   c                   J    e Zd ZdZd Zd Zd Zd Zd Zd Z	dd	Z
d
 Zd ZdS )DbDoczRepresents a generic document in JSON format.

    Args:
        value (object): The value can be a JSON string or a dict.

    Raises:
        ValueError: If ``value`` type is not a basestring or dict.
    c                     t          |t                    r	|| _        d S t          |t                    rt	          j        |          | _        d S t          d                    t          |                              )NzUnable to handle type: {0})	
isinstancedict__dict__strr   loads
ValueErrorr
   type)r   values     r   __init__zDbDoc.__init__7   sk    eT"" 	O!DMMMs## 	O Ju--DMMM9@@eMMNNNr   c                 *    |                                  S N)as_strr   s    r   __str__zDbDoc.__str__?   s    {{}}r   c                 *    t          | j                  S r$   )reprr   r&   s    r   __repr__zDbDoc.__repr__B   s    DM"""r   c                 D    |dk    rt          d          || j        |<   d S )N_idzCannot modify _id)r   r   )r   indexr!   s      r   __setitem__zDbDoc.__setitem__E   s,    E>>"#6777$er   c                     | j         |         S r$   r   )r   r-   s     r   __getitem__zDbDoc.__getitem__J   s    }U##r   c                     || j         v S r$   r0   )r   items     r   __contains__zDbDoc.__contains__M   s    t}$$r   Nc                 p    | j                                         }|r||d<   nd|v r|d= t          |          S )ae  Returns a new copy of a :class:`mysqlx.DbDoc` object containing the
        `doc_id` provided. If `doc_id` is not provided, it will be removed from
        new :class:`mysqlx.DbDoc` object.

        Args:
            doc_id (Optional[str]): Document ID

        Returns:
            mysqlx.DbDoc: A new instance of DbDoc containing the _id provided
        r,   )r   copyr   )r   doc_idnew_dicts      r   r6   z
DbDoc.copyP   sH     =%%'' 	 $HUOOhXr   c                 4    | j                                         S )zJReturns the keys.

        Returns:
            `list`: The keys.
        )r   keysr&   s    r   r:   z
DbDoc.keysb   s     }!!###r   c                 B    t          j        | j        t                    S )zSerialize :class:`mysqlx.DbDoc` to a JSON formatted ``str``.

        Returns:
            str: A JSON formatted ``str`` representation of the document.

        .. versionadded:: 8.0.16
        )cls)r   dumpsr   r   r&   s    r   r%   zDbDoc.as_strj   s     z$-_====r   r$   )r   r   r   r   r"   r'   r*   r.   r1   r4   r6   r:   r%   r   r   r   r   r   .   s         O O O  # # #% % %
$ $ $% % %   $$ $ $> > > > >r   r   )r   r   errorsr   r   r   objectr   r   r   r   <module>r@      s   : # "  $ $ $ $ $ $1 1 1 1 1d& 1 1 1D> D> D> D> D>F D> D> D> D> D>r   