3
S^                 @   sJ   d Z ddlZddlm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   )STRING_TYPES)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j|S tjj| |S )Nexprz{0})hasattrformatjsonJSONEncoderdefault)selfo r   >/tmp/pip-build-8app2_gc/mysql-connector-python/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|| _n*t |tr*tj|| _ntdjt|d S )NzUnable to handle type: {0})	
isinstancedict__dict__r   r	   loads
ValueErrorr   type)r   valuer   r   r   __init__8   s
    

zDbDoc.__init__c             C   s   | j  S )N)as_str)r   r   r   r   __str__@   s    zDbDoc.__str__c             C   s
   t | jS )N)reprr   )r   r   r   r   __repr__C   s    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__F   s    zDbDoc.__setitem__c             C   s
   | j | S )N)r   )r   r"   r   r   r   __getitem__K   s    zDbDoc.__getitem__Nc             C   s.   | j j }|r||d< nd|k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%   N   s    

z
DbDoc.copyc             C   s
   | j j S )zJReturns the keys.

        Returns:
            `list`: The keys.
        )r   keys)r   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   h   s    zDbDoc.as_str)N)r   r   r   r   r   r   r    r#   r$   r%   r&   r   r   r   r   r   r   /   s   
r   )
r   r	   compatr   errorsr   r
   r   objectr   r   r   r   r   <module>   s
   
