
    BR<i                        d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZ  G d dej                        Z G d	 d
      Zy)zImplementation of the DbDoc.    )annotationsN)AnyDictKeysViewOptionalUnion   )ProgrammingErrorc                      e Zd ZdZddZy)ExprJSONEncoderzgA :class:`json.JSONEncoder` subclass, which enables encoding of
    :class:`mysqlx.ExprParser` objects.c                `    t        |d      r| S t        j                  j                  | |      S )Nexpr)hasattrjsonJSONEncoderdefault)selfos     M/var/www/html/delta-backend/venv/lib/python3.12/site-packages/mysqlx/dbdoc.pyr   zExprJSONEncoder.default,   s,    1fSM''a00    N)r   objectreturnstr)__name__
__module____qualname____doc__r    r   r   r   r   (   s    +1r   r   c                  Z    e Zd ZdZddZddZddZddZddZddZ	ddd	Z
dd
ZddZy)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|| _        y t        |t              rt	        j
                  |      | _        y t        dt        |             )NzUnable to handle type: )
isinstancedict__dict__r   r   loads
ValueErrortype)r   values     r   __init__zDbDoc.__init__=   sD    eT"!DMs# JJu-DM6tE{mDEEr   c                "    | j                         S N)as_strr   s    r   __str__zDbDoc.__str__E   s    {{}r   c                ,    t        | j                        S r+   )reprr$   r-   s    r   __repr__zDbDoc.__repr__H   s    DMM""r   c                B    |dk(  rt        d      || j                  |<   y )N_idzCannot modify _id)r
   r$   )r   indexr(   s      r   __setitem__zDbDoc.__setitem__K   s#    E>"#677$er   c                     | j                   |   S r+   r$   )r   r4   s     r   __getitem__zDbDoc.__getitem__P   s    }}U##r   c                    || j                   v S r+   r7   )r   items     r   __contains__zDbDoc.__contains__S   s    t}}$$r   Nc                ~    | j                   j                         }|r||d<   t        |      S 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
        r3   )r$   copyr    )r   doc_idnew_dicts      r   r=   z
DbDoc.copyV   sI     ==%%'$HUO X hXr   c                6    | j                   j                         S )zJReturns the keys.

        Returns:
            `list`: The keys.
        )r$   keysr-   s    r   rA   z
DbDoc.keysh   s     }}!!##r   c                L    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_strp   s     zz$--_==r   )r(   zUnion[str, Dict[str, Any]]r   None)r   r   )r4   r   r(   r   r   rE   )r4   r   r   r   )r:   r   r   boolr+   )r>   zOptional[str]r   r    )r   zKeysView[str])r   r   r   r   r)   r.   r1   r5   r8   r;   r=   rA   r,   r   r   r   r    r    3   s5    F#%
$%$$>r   r    )r   
__future__r   r   typingr   r   r   r   r   errorsr
   r   r   r    r   r   r   <module>rJ      s7   : # "  7 7 $1d&& 1E> E>r   