B
    d?
                 @   s   d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZ dZG dd	 d	ejZejZejZed
ddZe	ejedZe	ejedZdeee dddZdS )zg
Abstract :mod:`json` with Pegasus specific defaults.

.. moduleauthor:: Rajiv Mayani <mayani@isi.edu>
    N)Enum)partial)Path)IteratorListOptional)loadloadsload_alldumpdumpsdump_allc               @   s   e Zd Zdd ZdS )_CustomJSONEncoderc                s   t  tjrt S t  tr$ jS t  tr6t S t drH  S t drZ 	 S t dr~ fdd j
j D S ttdt   tj|  S )N__html____json__	__table__c                s   i | ]}t  ||qS  )getattr).0k)or   Y/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/Pegasus/json.py
<dictcomp>)   s    z._CustomJSONEncoder.default.<locals>.<dictcomp>z Don't know how to handle type %s)
isinstanceuuidUUIDstrr   namer   hasattrr   r   r   columnskeyslogging	getLogger__name__warningtype_jsonJSONEncoderdefault)selfr   r   )r   r   r(      s    





z_CustomJSONEncoder.defaultN)r#   
__module____qualname__r(   r   r   r   r   r      s   r   )returnc             o   sZ   t | trt| }nt| dr&| }ntdx&| D ]}t| f||V  q8W dS )z
    Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray`` instance containing a JSON document) to a Python dictionary.

    [extended_summary]

    :param obj: [description]
    :type obj: Dict
    :return: [description]
    :rtype: Iterator
    readz.s must either be a string or an open text fileN)	r   r   ioStringIOr   	TypeError	readlinesr	   strip)sargskwargsfpdr   r   r   r
   8   s    

r
   )cls)objsr,   c             O   sz   |dkrt  }nt|dr"|}ntd|ddd x&| D ]}|t|f||d  q@W t|t jrv| S dS )z
    Serialize ``obj`` to a JSON formatted ``str``.

    [extended_summary]

    :param objs: [description]
    :type objs: List
    :return: [description]
    :rtype: str
    Nwritez*s must either be None or an open text file)indent
separators
)	r.   r/   r   r0   updater:   r   r   getvalue)r9   r6   r4   r5   r7   r   r   r   r   T   s    


r   )N)__doc__r.   jsonr&   r!   r   enumr   	functoolsr   pathlibr   typingr   r   r   __all__r'   r   r   r	   r
   r   r   r   r   r   r   r   r   <module>   s    	