o
    b                     @   s>   d Z ddlZddlmZ G dd dejZG dd deZdS )	zImplementation of the DbDoc.    N   )ProgrammingErrorc                   @   s   e Zd ZdZdd ZdS )ExprJSONEncoderzgA :class:`json.JSONEncoder` subclass, which enables encoding of
    :class:`mysqlx.ExprParser` objects.c                 C   s"   t |dr
d|S tj| |S )Nexprz{0})hasattrformatjsonJSONEncoderdefault)selfo r   K/var/www/secure340b-portal/env/lib/python3.10/site-packages/mysqlx/dbdoc.pyr
   '   s   

zExprJSONEncoder.defaultN)__name__
__module____qualname____doc__r
   r   r   r   r   r   $   s    r   c                   @   sR   e Zd Z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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                 C   s@   t |tr
|| _d S t |trt|| _d S tdt|)NzUnable to handle type: {0})	
isinstancedict__dict__strr   loads
ValueErrorr   type)r   valuer   r   r   __init__7   s
   


zDbDoc.__init__c                 C   s   |   S N)as_strr   r   r   r   __str__?   s   zDbDoc.__str__c                 C   s
   t | jS r   )reprr   r   r   r   r   __repr__B      
zDbDoc.__repr__c                 C   s   |dkrt d|| j|< d S )N_idzCannot modify _id)r   r   )r   indexr   r   r   r   __setitem__E   s   zDbDoc.__setitem__c                 C   s
   | j | S r   )r   )r   r%   r   r   r   __getitem__J   r#   zDbDoc.__getitem__Nc                 C   s4   | 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
        r$   )r   copyr   )r   Zdoc_idZnew_dictr   r   r   r(   M   s   
z
DbDoc.copyc                 C   s
   | j  S )zJReturns the keys.

        Returns:
            `list`: The keys.
        )r   keysr   r   r   r   r)   _   s   
z
DbDoc.keysc                 C   s   t j| jtd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   r   r   r   r   g   s   zDbDoc.as_strr   )r   r   r   r   r   r    r"   r&   r'   r(   r)   r   r   r   r   r   r   .   s    
r   )r   r   errorsr   r	   r   objectr   r   r   r   r   <module>   s
   
