U
    8ÄT_>0  ã                   @   sT  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 G d	d
„ d
ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd „ d eƒZ&G d!d"„ d"eƒZ'G d#d$„ d$eƒZ(G d%d&„ d&eƒZ)G d'd(„ d(e"ƒZ*G d)d*„ d*e"ƒZ+G d+d,„ d,eƒZ,G d-d.„ d.eƒZ-G d/d0„ d0eƒZ.G d1d2„ d2eƒZ/G d3d4„ d4eƒZ0G d5d6„ d6eƒZ1G d7d8„ d8eƒZ2G d9d:„ d:eƒZ3G d;d<„ d<ƒZ4d=d>„ Z5d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   úC/tmp/pip-unpacked-wheel-dv63caxw/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   sT   t ƒ }g }| jD ](}t|ƒ ¡ \}}| |¡ | |¡ q|  ¡ }|d |¡ |fS )Nú, )Úsetr   Úserializer_factoryr   ÚupdateÚappendr   Újoin©r   ÚimportsÚstringsÚitemZitem_stringZ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 r   )Ú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ƒ ¡ S r   )r   r   r   r   r   r   r   r   2   s    zChoicesSerializer.serializeNr(   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 )Nú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	r&| j jtkr&| j  t¡| _ dg}| j jd k	rB| d¡ t| j ƒ dd¡t|ƒfS )Nr+   z%from django.utils.timezone import utcz<UTC>r	   )r   Útzinfor	   Ú
astimezoner    r'   Úreplacer   )r   r#   r   r   r   r   >   s    
z$DatetimeDatetimeSerializer.serializeNr-   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 Decimalr,   r   r   r   r   r   H   s    zDecimalSerializer.serializeNr(   r   r   r   r   r3   G   s   r3   c                   @   s,   e Zd Zedd„ ƒZedd„ ƒZdd„ ZdS )ÚDeconstructableSerializerc           
      C   s˜   t  | ¡\}}g }|D ](}t|ƒ ¡ \}}| |¡ | |¡ qt| ¡ ƒD ]4\}	}t|ƒ ¡ \}}| |¡ | d|	|f ¡ qLd|d |¡f |fS )Nz%s=%sz%s(%s)r   )	r4   Ú_serialize_pathr   r   r    r   ÚsortedÚitemsr!   )
ÚpathÚargsÚkwargsÚnamer#   r$   ÚargÚ
arg_stringZarg_importsÚkwr   r   r   Úserialize_deconstructedM   s    

z1DeconstructableSerializer.serialize_deconstructedc                 C   s>   |   dd¡\}}|dkr(dh}d| }nd| h}| }||fS )NÚ.é   zdjango.db.modelszfrom django.db import modelsz	models.%sú	import %s)Úrsplit)r8   Úmoduler;   r#   r   r   r   r5   [   s    

z)DeconstructableSerializer._serialize_pathc                 C   s   | j | j ¡ Ž S r   )r?   r   Údeconstructr   r   r   r   r   f   s    z#DeconstructableSerializer.serializeN)r   r   r   Ústaticmethodr?   r5   r   r   r   r   r   r4   L   s
   


r4   c                   @   s   e Zd Zdd„ ZdS )ÚDictionarySerializerc           	      C   s€   t ƒ }g }t| j ¡ ƒD ]J\}}t|ƒ ¡ \}}t|ƒ ¡ \}}| |¡ | |¡ | ||f¡ qdd dd„ |D ƒ¡ |fS )Nú{%s}r   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   r6   r   r7   r   r   r   r    r!   )	r   r#   r$   rJ   rK   Zk_stringZ	k_importsZv_stringZ	v_importsr   r   r   r   k   s    

zDictionarySerializer.serializeNr(   r   r   r   r   rG   j   s   rG   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]rB   )r   Ú	__class__r   r   r;   )r   Ú
enum_classrD   r   r   r   r   x   s
    þzEnumSerializer.serializeNr(   r   r   r   r   rM   w   s   rM   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚFloatSerializerc                    s4   t  | j¡st  | j¡r*d | j¡tƒ fS tƒ  ¡ S )Nzfloat("{}"))ÚmathÚisnanr   ÚisinfÚformatr   Úsuperr   r   ©rN   r   r   r   ‚   s    zFloatSerializer.serialize)r   r   r   r   Ú__classcell__r   r   rV   r   rP   �   s   rP   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   rX   ˆ   s   rX   c                   @   s   e Zd Zdd„ ZdS )ÚFunctionTypeSerializerc                 C   sÀ   t | jdd ƒrHt| jjtƒrH| jj}|j}d||j| jjf d| hfS | jjdkr\tdƒ‚| jjd krvtd| j ƒ‚| jj}d| jjkr¨d|| jjf d| jj hfS td	| jj|f ƒ‚d S )
NÚ__self__z%s.%s.%srB   z<lambda>z!Cannot serialize function: lambdaz'Cannot serialize function %r: No moduleú<ú%s.%sz"Could not find function %s in %s.
)	Úgetattrr   Ú
isinstancer[   Útyper   r   Ú
ValueErrorr   )r   ÚklassrD   Úmodule_namer   r   r   r   Ž   s    ÿz FunctionTypeSerializer.serializeNr(   r   r   r   r   rZ   �   s   rZ   c                   @   s   e Zd Zdd„ ZdS )ÚFunctoolsPartialSerializerc                 C   sd   t | jjƒ ¡ \}}t | jjƒ ¡ \}}t | jjƒ ¡ \}}dh|||™}d| jjj|||f |fS )Nzimport functoolszfunctools.%s(%s, *%s, **%s))r   r   Úfuncr   r9   ÚkeywordsrN   r   )r   Zfunc_stringZfunc_importsÚargs_stringZargs_importsZkeywords_stringZkeywords_importsr#   r   r   r   r   ¤   s    üùz$FunctoolsPartialSerializer.serializeNr(   r   r   r   r   rd   £   s   rd   c                   @   s   e Zd Zdd„ ZdS )ÚIterableSerializerc                 C   s`   t ƒ }g }| jD ](}t|ƒ ¡ \}}| |¡ | |¡ qt|ƒdkrJdnd}|d |¡ |fS )NrA   ú(%s)ú(%s,)r   )r   r   r   r   r   r    Úlenr!   r"   r   r   r   r   ·   s    

zIterableSerializer.serializeNr(   r   r   r   r   rh   ¶   s   rh   c                   @   s   e Zd Zdd„ ZdS )ÚModelFieldSerializerc                 C   s    | j  ¡ \}}}}|  |||¡S r   )r   rE   r?   )r   Ú	attr_namer8   r9   r:   r   r   r   r   Å   s    zModelFieldSerializer.serializeNr(   r   r   r   r   rl   Ä   s   rl   c                   @   s   e Zd Zdd„ ZdS )ÚModelManagerSerializerc                 C   sD   | j  ¡ \}}}}}|r2|  |¡\}}d| |fS |  |||¡S d S )Nz%s.as_manager())r   rE   r5   r?   )r   Z
as_managerZmanager_pathZqs_pathr9   r:   r;   r#   r   r   r   r   Ë   s
    z ModelManagerSerializer.serializeNr(   r   r   r   r   rn   Ê   s   rn   c                   @   s   e Zd Zdd„ ZdS )ÚOperationSerializerc                 C   s0   ddl m} || jdd� ¡ \}}| d¡|fS )Nr   )ÚOperationWriter)Úindentationú,)Zdjango.db.migrations.writerrp   r   r   Úrstrip)r   rp   Ústringr#   r   r   r   r   Õ   s    zOperationSerializer.serializeNr(   r   r   r   r   ro   Ô   s   ro   c                   @   s   e Zd Zdd„ ZdS )ÚRegexSerializerc                 C   sj   t | jjƒ ¡ \}}| jjt d¡jA }t |ƒ ¡ \}}dh||™}|g}|rX| |¡ dd |¡ |fS )NÚ z	import rezre.compile(%s)r   )	r   r   Úpatternr   ÚflagsÚreÚcompiler    r!   )r   Zregex_patternZpattern_importsrx   Zregex_flagsZflag_importsr#   r9   r   r   r   r   Ý   s    
zRegexSerializer.serializeNr(   r   r   r   r   ru   Ü   s   ru   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._formatNrY   r   r   r   r   r{   ê   s   r{   c                   @   s   e Zd Zdd„ ZdS )ÚSetSerializerc                 C   s   | j r
dS dS )NrH   zset(%s)r   r   r   r   r   r   ð   s    zSetSerializer._formatNrY   r   r   r   r   r|   ï   s   r|   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_namer   r   r   r   r   ÷   s    z%SettingsReferenceSerializer.serializeNr(   r   r   r   r   r}   ö   s   r}   c                   @   s   e Zd Zdd„ ZdS )ÚTupleSerializerc                 C   s   t | jƒdkrdS dS )NrA   ri   rj   )rk   r   r   r   r   r   r   ü   s    zTupleSerializer._formatNrY   r   r   r   r   r~   û   s   r~   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}|D ]$\}}}|| jkr|t|ƒf  S qt| jdƒrŠ| jj}|tjkrp| jjtƒ fS d|| jj	f d| hfS d S )Nzmodels.Modelz
type(None)r   r]   rB   )
r   ZModelr`   r   r   Úhasattrr   Úbuiltinsr   r   )r   Zspecial_casesZcasert   r#   rD   r   r   r   r     s    
þ

zTypeSerializer.serializeNr(   r   r   r   r   r     s   r   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 uuidr,   r   r   r   r   r     s    zUUIDSerializer.serializeNr(   r   r   r   r   r‚     s   r‚   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/e0j1j2e3e4e5fe6e7j8e9iZ:e;dd„ ƒZ<e;dd„ ƒZ=dS )Ú
SerializerNc                 C   s&   t |tƒstd|j ƒ‚|| j|< d S )Nz('%s' must inherit from 'BaseSerializer'.)Ú
issubclassr   ra   r   Ú	_registry)ÚclsÚtype_Ú
serializerr   r   r   Úregister/  s    
zSerializer.registerc                 C   s   | j  |¡ d S r   )r…   Úpop)r†   r‡   r   r   r   Ú
unregister5  s    zSerializer.unregister)>r   r   r   Ú	frozensetrX   Úlistr{   r   r|   Útupler~   ÚdictrG   r   ZChoicesr)   ÚenumÚEnumrM   Údatetimer/   ÚdateÚ	timedeltaÚtimer*   r   r}   ÚfloatrP   ÚboolÚintr`   ÚbytesÚstrÚranger&   ÚdecimalÚDecimalr3   Ú	functoolsÚpartialÚpartialmethodrd   ÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚ
MethodTyperZ   ÚcollectionsÚabcÚIterablerh   r   r   ru   ÚuuidÚUUIDr‚   r…   Úclassmethodr‰   r‹   r   r   r   r   rƒ     sR                
     í
rƒ   c                 C   sÎ   t | tƒrt| ƒ} nt | tƒr.|  ¡ d d } t | tjƒrBt| ƒS t | tjj	ƒrXt
| ƒS t | tƒrjt| ƒS t | tƒr|t| ƒS t| dƒrŽt| ƒS tj ¡ D ]\}}t | |ƒr˜|| ƒ  S q˜td| tƒ f ƒ‚d S )NrA   r   rE   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)r_   r   rš   r   Ú
__reduce__r   ZFieldrl   ÚmanagerZBaseManagerrn   r   ro   r`   r   r€   r4   rƒ   r…   r7   ra   r
   )r   r‡   Zserializer_clsr   r   r   r   :  s,    






þÿr   )6r�   Úcollections.abcr¥   r’   rœ   r�   rž   rQ   ry   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/   r3   r4   rG   rM   rP   rX   rZ   rd   rh   rl   rn   ro   ru   r{   r|   r}   r~   r   r‚   rƒ   r   r   r   r   r   Ú<module>   sV   

"