U
    mf                     @   s   d Z ddlZddlZddlm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 zddlmZ dd	lmZ W n$ ek
r   dd
lmZmZ Y nX G dd deZeejej eejej eeej G dd deZdd Z	dS )z^
YAML serializer.

Requires PyYaml (https://pyyaml.org/), but that's checked for in __init__.
    N)StringIO)DeserializationError)Deserializer)
Serializer)models)CSafeDumper)CSafeLoader)
SafeDumper
SafeLoaderc                   @   s   e Zd Zdd Zdd ZdS )DjangoSafeDumperc                 C   s   |  dt|S )Nztag:yaml.org,2002:str)Zrepresent_scalarstrselfdata r   B/tmp/pip-unpacked-wheel-siwebuq3/django/core/serializers/pyyaml.pyrepresent_decimal   s    z"DjangoSafeDumper.represent_decimalc                 C   s   |  d| S )Nztag:yaml.org,2002:map)Zrepresent_mappingitemsr   r   r   r   represent_ordered_dict   s    z'DjangoSafeDumper.represent_ordered_dictN)__name__
__module____qualname__r   r   r   r   r   r   r      s   r   c                       s8   e Zd ZdZdZ fddZdd Z fddZ  ZS )	r   zConvert a queryset to YAML.Fc                    sH   t |tjr6t||jd k	r6tt||j| j|j< nt || d S N)	
isinstancer   Z	TimeFieldgetattrnamer   _currentsuperhandle_field)r   objfield	__class__r   r   r   0   s    zSerializer.handle_fieldc                 C   s0   | j dd tj| j| jfdti| j  d S )NZallow_unicodeTZDumper)options
setdefaultyamldumpZobjectsstreamr   r   r   r   r   end_serialization<   s    zSerializer.end_serializationc                    s   t t|  S r   )r   PythonSerializergetvaluer(   r!   r   r   r+   @   s    zSerializer.getvalue)	r   r   r   __doc__Zinternal_use_onlyr   r)   r+   __classcell__r   r   r!   r   r   +   s
   r   c              
   k   s   t | tr|  } t | tr&t| }n| }z ttj|tdf|E dH  W nB t	t
fk
rd    Y n* tk
r } zt
 |W 5 d}~X Y nX dS )z,Deserialize a stream or string of YAML data.)LoaderN)r   bytesdecoder   r   PythonDeserializerr%   loadr
   GeneratorExitr   	Exception)Zstream_or_stringr#   r'   excr   r   r   r   E   s    


 r   )r,   collectionsdecimalior   r%   Zdjango.core.serializers.baser   Zdjango.core.serializers.pythonr   r1   r   r*   Z	django.dbr   r   r	   r   r
   ImportErrorr   Zadd_representerDecimalr   OrderedDictr   dictr   r   r   r   <module>   s,    