
v^-                 @   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
 m Z d d l m Z y$ d d l m Z d d l m Z Wn( e k
 r d d	 l m Z m Z Yn XGd
 d   d e  Z e j e j e j  e j e j e j  e j e e j  Gd 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)CSafeLoader)CSafeDumper)
SafeLoader
SafeDumperc               @   s(   e  Z d  Z d d   Z d d   Z d S)DjangoSafeDumperc             C   s   |  j  d t |   S)Nztag:yaml.org,2002:str)Zrepresent_scalarstr)selfdata r   @/tmp/pip-build-8lau8j11/django/django/core/serializers/pyyaml.pyrepresent_decimal   s    z"DjangoSafeDumper.represent_decimalc             C   s   |  j  d | j    S)Nztag:yaml.org,2002:map)Zrepresent_mappingitems)r   r   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                   sL   e  Z d  Z d Z d Z   f d d   Z d d   Z   f d d   Z   S)	r   zConvert a queryset to YAML.Fc                sf   t  | t j  rO t | | j  d  k	 rO t t | | j   |  j | j <n t   j | |  d  S)N)	
isinstancer   Z	TimeFieldgetattrnamer   _currentsuperhandle_field)r   objfield)	__class__r   r   r   /   s    *%zSerializer.handle_fieldc             C   s&   t  j |  j |  j d t |  j d  S)NZDumper)yamldumpZobjectsstreamr   options)r   r   r   r   end_serialization;   s    zSerializer.end_serializationc                s   t  t |   j   S)N)r   PythonSerializergetvalue)r   )r   r   r   r&   >   s    zSerializer.getvalue)r   r   r   __doc__Zinternal_use_onlyr   r$   r&   r   r   )r   r   r   *   s
   r   c             k   s   t  |  t  r |  j   }  t  |  t  r9 t |   } n |  } y% t t j | d t |  Ed HWnK t	 t
 f k
 r   Yn1 t k
 r } z t
   |  WYd d } ~ Xn Xd 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   C   s    %r   )r'   collectionsdecimalior   r    Zdjango.core.serializers.baser   Zdjango.core.serializers.pythonr   r+   r   r%   Z	django.dbr   r   r	   r   r
   ImportErrorr   Zadd_representerZDecimalr   OrderedDictr   dictr   r   r   r   <module>   s$   