
vÅÏ^>0  ã               @   s:  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l 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 d  d l m Z m Z d  d l m Z d  d l m Z Gd	 d
 „  d
 ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z  Gd d „  d e ƒ Z! Gd d „  d e ƒ Z" Gd d „  d e ƒ Z# Gd d „  d e ƒ Z$ Gd d „  d e ƒ Z% Gd d  „  d  e ƒ Z& Gd! d" „  d" e ƒ Z' Gd# d$ „  d$ e ƒ Z( Gd% d& „  d& e ƒ Z) Gd' d( „  d( e" ƒ Z* Gd) d* „  d* e" ƒ Z+ Gd+ d, „  d, e ƒ Z, Gd- d. „  d. e ƒ Z- Gd/ d0 „  d0 e ƒ Z. Gd1 d2 „  d2 e ƒ Z/ Gd3 d4 „  d4 e ƒ Z0 Gd5 d6 „  d6 e ƒ Z1 Gd7 d8 „  d8 e ƒ Z2 Gd9 d: „  d: e ƒ Z3 Gd; d< „  d< ƒ Z4 d= d> „  Z5 d S)?é    N)ÚSettingsReference)Úmodels)Ú	Operation)ÚCOMPILED_REGEX_TYPEÚRegexObject)Ú
LazyObjectÚPromise)Úutc)Úget_docs_versionc               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚBaseSerializerc             C   s   | |  _  d  S)N)Úvalue)Úselfr   © r   úA/tmp/pip-build-8lau8j11/django/django/db/migrations/serializer.pyÚ__init__   s    zBaseSerializer.__init__c             C   s   t  d ƒ ‚ d  S)NzCSubclasses of BaseSerializer must implement the serialize() method.)ÚNotImplementedError)r   r   r   r   Ú	serialize   s    zBaseSerializer.serializeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚBaseSequenceSerializerc             C   s   t  d ƒ ‚ d  S)NzISubclasses of BaseSequenceSerializer must implement the _format() method.)r   )r   r   r   r   Ú_format   s    zBaseSequenceSerializer._formatc             C   sx   t  ƒ  } g  } xC |  j D]8 } t | ƒ j ƒ  \ } } | j | ƒ | j | ƒ q W|  j ƒ  } | d j | ƒ | f S)Nz, )Úsetr   Úserializer_factoryr   ÚupdateÚappendr   Újoin)r   ÚimportsÚstringsÚitemÚitem_stringÚitem_importsr   r   r   r   r   !   s    	z BaseSequenceSerializer.serializeN)r   r   r   r   r   r   r   r   r   r      s   r   c               @   s   e  Z d  Z d d „  Z d S)ÚBaseSimpleSerializerc             C   s   t  |  j ƒ t ƒ  f S)N)Úreprr   r   )r   r   r   r   r   -   s    zBaseSimpleSerializer.serializeN)r   r   r   r   r   r   r   r   r"   ,   s   r"   c               @   s   e  Z d  Z d d „  Z d S)ÚChoicesSerializerc             C   s   t  |  j j ƒ j ƒ  S)N)r   r   r   )r   r   r   r   r   2   s    zChoicesSerializer.serializeN)r   r   r   r   r   r   r   r   r$   1   s   r$   c               @   s"   e  Z d  Z d Z d d „  Z d S)ÚDateTimeSerializerz)For datetime.*, except datetime.datetime.c             C   s   t  |  j ƒ d h f S)Nzimport datetime)r#   r   )r   r   r   r   r   8   s    zDateTimeSerializer.serializeN)r   r   r   Ú__doc__r   r   r   r   r   r%   6   s   r%   c               @   s"   e  Z d  Z d Z d d „  Z d S)ÚDatetimeDatetimeSerializerzFor datetime.datetime.c             C   s†   |  j  j d  k	 r9 |  j  j t k r9 |  j  j t ƒ |  _  d g } |  j  j d  k	 ra | j d ƒ t |  j  ƒ j d d ƒ t | ƒ f S)Nzimport datetimez%from django.utils.timezone import utcz<UTC>r	   )r   Útzinfor	   Ú
astimezoner   r#   Úreplacer   )r   r   r   r   r   r   >   s    $	z$DatetimeDatetimeSerializer.serializeN)r   r   r   r&   r   r   r   r   r   r'   <   s   r'   c               @   s   e  Z d  Z d d „  Z d S)ÚDecimalSerializerc             C   s   t  |  j ƒ d h f S)Nzfrom decimal import Decimal)r#   r   )r   r   r   r   r   H   s    zDecimalSerializer.serializeN)r   r   r   r   r   r   r   r   r+   G   s   r+   c               @   s@   e  Z d  Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d S)ÚDeconstructableSerializerc       
      C   sÚ   t  j |  ƒ \ } } g  } x@ | D]8 } t | ƒ j ƒ  \ } } | j | ƒ | j | ƒ q" Wx\ t | j ƒ  ƒ D]H \ }	 } t | ƒ j ƒ  \ } } | j | ƒ | j d |	 | f ƒ qq Wd | d j | ƒ f | f S)Nz%s=%sz%s(%s)z, )	r,   Ú_serialize_pathr   r   r   r   ÚsortedÚitemsr   )
ÚpathÚargsÚkwargsÚnamer   r   ÚargZ
arg_stringZarg_importsÚkwr   r   r   Úserialize_deconstructedM   s    z1DeconstructableSerializer.serialize_deconstructedc             C   sW   |  j  d d ƒ \ } } | d k r: d h } d | } n d | h } |  } | | f S)NÚ.é   zdjango.db.modelszfrom django.db import modelsz	models.%sz	import %s)Úrsplit)r0   Úmoduler3   r   r   r   r   r-   [   s    	z)DeconstructableSerializer._serialize_pathc             C   s   |  j  |  j j ƒ  Œ  S)N)r6   r   Údeconstruct)r   r   r   r   r   f   s    z#DeconstructableSerializer.serializeN)r   r   r   Ústaticmethodr6   r-   r   r   r   r   r   r,   L   s   r,   c               @   s   e  Z d  Z d d „  Z d S)ÚDictionarySerializerc       	      C   s¶   t  ƒ  } g  } x€ t |  j j ƒ  ƒ D]i \ } } t | ƒ j ƒ  \ } } t | ƒ j ƒ  \ } } | j | ƒ | j | ƒ | j | | f ƒ q% Wd d j d d „  | Dƒ ƒ | f S)Nz{%s}z, c             s   s%   |  ] \ } } d  | | f Vq d S)z%s: %sNr   )Ú.0ÚkÚvr   r   r   ú	<genexpr>t   s    z1DictionarySerializer.serialize.<locals>.<genexpr>)	r   r.   r   r/   r   r   r   r   r   )	r   r   r   r?   r@   Zk_stringZ	k_importsZv_stringZ	v_importsr   r   r   r   k   s    	"zDictionarySerializer.serializeN)r   r   r   r   r   r   r   r   r=   j   s   r=   c               @   s   e  Z d  Z d d „  Z d S)ÚEnumSerializerc             C   s<   |  j  j } | j } d | | j |  j  j f d | h f S)Nz	%s.%s[%r]z	import %s)r   Ú	__class__r   r   r3   )r   Ú
enum_classr:   r   r   r   r   x   s    	zEnumSerializer.serializeN)r   r   r   r   r   r   r   r   rB   w   s   rB   c                   s"   e  Z d  Z ‡  f d d †  Z ‡  S)ÚFloatSerializerc                sJ   t  j |  j ƒ s$ t  j |  j ƒ r= d j |  j ƒ t ƒ  f St ƒ  j ƒ  S)Nzfloat("{}"))ÚmathÚisnanr   ÚisinfÚformatr   Úsuperr   )r   )rC   r   r   r   ‚   s    $zFloatSerializer.serialize)r   r   r   r   r   r   )rC   r   rE      s   rE   c               @   s   e  Z d  Z d d „  Z d S)ÚFrozensetSerializerc             C   s   d S)Nzfrozenset([%s])r   )r   r   r   r   r   ‰   s    zFrozensetSerializer._formatN)r   r   r   r   r   r   r   r   rK   ˆ   s   rK   c               @   s   e  Z d  Z d d „  Z d S)ÚFunctionTypeSerializerc             C   s  t  |  j d d  ƒ rf t |  j j t ƒ rf |  j j } | j } d | | j |  j j f d | h f S|  j j d k r„ t d ƒ ‚ |  j j d  k r© t d |  j ƒ ‚ |  j j } d |  j j k rî d | |  j j f d |  j j h f St d	 |  j j | f ƒ ‚ d  S)
NÚ__self__z%s.%s.%sz	import %sz<lambda>z!Cannot serialize function: lambdaz'Cannot serialize function %r: No moduleú<z%s.%sz"Could not find function %s in %s.
)	Úgetattrr   Ú
isinstancerM   Útyper   r   Ú
ValueErrorr   )r   Úklassr:   Úmodule_namer   r   r   r   Ž   s    *	''z FunctionTypeSerializer.serializeN)r   r   r   r   r   r   r   r   rL      s   rL   c               @   s   e  Z d  Z d d „  Z d S)ÚFunctoolsPartialSerializerc             C   s’   t  |  j j ƒ j ƒ  \ } } t  |  j j ƒ j ƒ  \ } } t  |  j j ƒ j ƒ  \ } } d h | | | ™ } d |  j j j | | | f | f S)Nzimport functoolszfunctools.%s(%s, *%s, **%s))r   r   Úfuncr   r1   ÚkeywordsrC   r   )r   Zfunc_stringZfunc_importsZargs_stringZargs_importsZkeywords_stringZkeywords_importsr   r   r   r   r   ¤   s    z$FunctoolsPartialSerializer.serializeN)r   r   r   r   r   r   r   r   rU   £   s   rU   c               @   s   e  Z d  Z d d „  Z d S)ÚIterableSerializerc             C   sŠ   t  ƒ  } g  } xC |  j D]8 } t | ƒ j ƒ  \ } } | j | ƒ | j | ƒ q Wt | ƒ d k rm d n d } | d j | ƒ | f S)Nr8   z(%s)z(%s,)z, )r   r   r   r   r   r   Úlenr   )r   r   r   r   r    r!   r   r   r   r   r   ·   s    	zIterableSerializer.serializeN)r   r   r   r   r   r   r   r   rX   ¶   s   rX   c               @   s   e  Z d  Z d d „  Z d S)ÚModelFieldSerializerc             C   s.   |  j  j ƒ  \ } } } } |  j | | | ƒ S)N)r   r;   r6   )r   Ú	attr_namer0   r1   r2   r   r   r   r   Å   s    zModelFieldSerializer.serializeN)r   r   r   r   r   r   r   r   rZ   Ä   s   rZ   c               @   s   e  Z d  Z d d „  Z d S)ÚModelManagerSerializerc             C   s^   |  j  j ƒ  \ } } } } } | rG |  j | ƒ \ } } d | | f S|  j | | | ƒ Sd  S)Nz%s.as_manager())r   r;   r-   r6   )r   Z
as_managerZmanager_pathZqs_pathr1   r2   r3   r   r   r   r   r   Ë   s
    z ModelManagerSerializer.serializeN)r   r   r   r   r   r   r   r   r\   Ê   s   r\   c               @   s   e  Z d  Z d d „  Z d S)ÚOperationSerializerc             C   sD   d d l  m } | |  j d d ƒj ƒ  \ } } | j d ƒ | f S)Nr   )ÚOperationWriterÚindentationú,)Zdjango.db.migrations.writerr^   r   r   Úrstrip)r   r^   Ústringr   r   r   r   r   Õ   s    !zOperationSerializer.serializeN)r   r   r   r   r   r   r   r   r]   Ô   s   r]   c               @   s   e  Z d  Z d d „  Z d S)ÚRegexSerializerc             C   s—   t  |  j j ƒ j ƒ  \ } } |  j j t j d ƒ j A} t  | ƒ j ƒ  \ } } d h | | ™ } | g } | r€ | j | ƒ d d j | ƒ | f S)NÚ z	import rezre.compile(%s)z, )	r   r   Úpatternr   ÚflagsÚreÚcompiler   r   )r   Zregex_patternZpattern_importsrf   Zregex_flagsZflag_importsr   r1   r   r   r   r   Ý   s    	zRegexSerializer.serializeN)r   r   r   r   r   r   r   r   rc   Ü   s   rc   c               @   s   e  Z d  Z d d „  Z d S)ÚSequenceSerializerc             C   s   d S)Nz[%s]r   )r   r   r   r   r   ë   s    zSequenceSerializer._formatN)r   r   r   r   r   r   r   r   ri   ê   s   ri   c               @   s   e  Z d  Z d d „  Z d S)ÚSetSerializerc             C   s   |  j  r d Sd S)Nz{%s}zset(%s))r   )r   r   r   r   r   ð   s    zSetSerializer._formatN)r   r   r   r   r   r   r   r   rj   ï   s   rj   c               @   s   e  Z d  Z d d „  Z d S)ÚSettingsReferenceSerializerc             C   s   d |  j  j d h f S)Nzsettings.%sz from django.conf import settings)r   Zsetting_name)r   r   r   r   r   ÷   s    z%SettingsReferenceSerializer.serializeN)r   r   r   r   r   r   r   r   rk   ö   s   rk   c               @   s   e  Z d  Z d d „  Z d S)ÚTupleSerializerc             C   s   t  |  j ƒ d k r d Sd S)Nr8   z(%s)z(%s,))rY   r   )r   r   r   r   r   ü   s    zTupleSerializer._formatN)r   r   r   r   r   r   r   r   rl   û   s   rl   c               @   s   e  Z d  Z d d „  Z d S)ÚTypeSerializerc             C   sÅ   t  j d g  f t d  ƒ d g  f g } x6 | D]. \ } } } | |  j k r. | t | ƒ f Sq. Wt |  j d ƒ rÁ |  j j } | t j k r  |  j j t ƒ  f Sd | |  j j	 f d | h f Sd  S)Nzmodels.Modelz
type(None)r   z%s.%sz	import %s)
r   ZModelrQ   r   r   Úhasattrr   Úbuiltinsr   r   )r   Zspecial_casesZcaserb   r   r:   r   r   r   r     s    zTypeSerializer.serializeN)r   r   r   r   r   r   r   r   rm     s   rm   c               @   s   e  Z d  Z d d „  Z d S)ÚUUIDSerializerc             C   s   d t  |  j ƒ d h f S)Nzuuid.%szimport uuid)r#   r   )r   r   r   r   r     s    zUUIDSerializer.serializeN)r   r   r   r   r   r   r   r   rp     s   rp   c            $   @   s	  e  Z d  Z e e e e e e e	 e
 e e e j e e j e e j e e j e j e j f e e e e e e e e d ƒ e  e! e" f e# e$ j% e& e' j( e' j) f e* e+ j, e+ j- e+ j. f e/ e0 j1 j2 e3 e4 e5 f e6 e7 j8 e9 i Z: e; d d „  ƒ Z< e; d d „  ƒ Z= d S)Ú
SerializerNc             C   s3   t  | t ƒ s" t d | j ƒ ‚ | |  j | <d  S)Nz('%s' must inherit from 'BaseSerializer'.)Ú
issubclassr   rR   r   Ú	_registry)ÚclsÚtype_Ú
serializerr   r   r   Úregister/  s    zSerializer.registerc             C   s   |  j  j | ƒ d  S)N)rs   Úpop)rt   ru   r   r   r   Ú
unregister5  s    zSerializer.unregister)>r   r   r   Ú	frozensetrK   Úlistri   r   rj   Útuplerl   Údictr=   r   ZChoicesr$   ÚenumÚEnumrB   Údatetimer'   ÚdateÚ	timedeltaÚtimer%   r   rk   ÚfloatrE   ÚboolÚintrQ   ÚbytesÚstrÚranger"   ÚdecimalZDecimalr+   Ú	functoolsÚpartialÚpartialmethodrU   ÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚ
MethodTyperL   ÚcollectionsÚabcÚIterablerX   r   r   rc   ÚuuidÚUUIDrp   rs   Úclassmethodrw   ry   r   r   r   r   rq     s(   				rq   c             C   s  t  |  t ƒ r t |  ƒ }  n# t  |  t ƒ rA |  j ƒ  d d }  t  |  t j ƒ r] t |  ƒ St  |  t j j	 ƒ r| t
 |  ƒ St  |  t ƒ r• t |  ƒ St  |  t ƒ r® t |  ƒ St |  d ƒ rÇ t |  ƒ Sx6 t j j ƒ  D]% \ } } t  |  | ƒ r× | |  ƒ Sq× Wt d |  t ƒ  f ƒ ‚ d  S)Nr8   r   r;   z´Cannot serialize: %r
There are some values Django cannot serialize into migration files.
For more, see https://docs.djangoproject.com/en/%s/topics/migrations/#migration-serializing)rP   r   rˆ   r   Ú
__reduce__r   ZFieldrZ   ÚmanagerZBaseManagerr\   r   r]   rQ   rm   rn   r,   rq   rs   r/   rR   r
   )r   ru   Zserializer_clsr   r   r   r   :  s(    




r   )6ro   Úcollections.abcr’   r€   rŠ   r~   r‹   rF   rg   rŽ   r•   Zdjango.confr   Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.utilsr   r   Zdjango.utils.functionalr   r   Zdjango.utils.timezoner	   Zdjango.utils.versionr
   r   r   r"   r$   r%   r'   r+   r,   r=   rB   rE   rK   rL   rU   rX   rZ   r\   r]   rc   ri   rj   rk   rl   rm   rp   rq   r   r   r   r   r   Ú<module>   sV   

"