o
    h2                     @   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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Z0G d1d2 d2eZ1G d3d4 d4eZ2G d5d6 d6eZ3G d7d8 d8eZ4G d9d: d:eZ5G d;d< d<eZ6G d=d> d>eZ7G d?d@ d@Z8dAdB Z9dS )C    N)SettingsReference)models)	Operation)COMPILED_REGEX_TYPERegexObject)
LazyObjectPromise)utc)get_docs_versionc                   @      e Zd Zdd Zdd ZdS )BaseSerializerc                 C   s
   || _ d S Nvalue)selfr    r   g/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/django/db/migrations/serializer.py__init__   s   
zBaseSerializer.__init__c                 C      t d)NzCSubclasses of BaseSerializer must implement the serialize() method.NotImplementedErrorr   r   r   r   	serialize      zBaseSerializer.serializeN)__name__
__module____qualname__r   r   r   r   r   r   r          r   c                   @   r   )BaseSequenceSerializerc                 C   r   )NzISubclasses of BaseSequenceSerializer must implement the _format() method.r   r   r   r   r   _format    r   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      r   r   c                   @      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   /      zBaseSimpleSerializer.serializeNr   r   r   r   r   r   r   r   r+   .       r+   c                   @   r*   )ChoicesSerializerc                 C   s   t | jj S r   )r"   r   r   r   r   r   r   r   4   r-   zChoicesSerializer.serializeNr.   r   r   r   r   r0   3   r/   r0   c                   @      e Zd ZdZdd ZdS )DateTimeSerializerz)For datetime.*, except datetime.datetime.c                 C      t | jdhfS )Nimport datetimer,   r   r   r   r   r   r   :   r-   zDateTimeSerializer.serializeNr   r   r   __doc__r   r   r   r   r   r2   8       r2   c                   @   r1   )DatetimeDatetimeSerializerzFor datetime.datetime.c                 C   s\   | j jd ur| j jtkr| j t| _ dg}| j jd ur!|d t| j ddt|fS )Nr4   z%from django.utils.timezone import utcz<UTC>r	   )r   tzinfor	   
astimezoner$   r,   replacer!   )r   r'   r   r   r   r   @   s   
z$DatetimeDatetimeSerializer.serializeNr6   r   r   r   r   r9   >   r8   r9   c                   @   r*   )DecimalSerializerc                 C   r3   )Nzfrom decimal import Decimalr5   r   r   r   r   r   J   r-   zDecimalSerializer.serializeNr.   r   r   r   r   r=   I   r/   r=   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 ]\}	}t| \}}|| |d|	|f  q&d|d|f |fS )Nz%s=%sz%s(%s)r    )	r>   _serialize_pathr"   r   r$   r#   sorteditemsr%   )
pathargskwargsnamer'   r(   arg
arg_stringZarg_importskwr   r   r   serialize_deconstructedO   s   

z1DeconstructableSerializer.serialize_deconstructedc                 C   sD   |  dd\}}|dkrdh}d| }||fS d| h}| }||fS )N.   zdjango.db.modelszfrom django.db import modelsz	models.%s	import %s)rsplit)rB   modulerE   r'   r   r   r   r?   ]   s   
z)DeconstructableSerializer._serialize_pathc                 C   s   | j | j  S r   )rI   r   deconstructr   r   r   r   r   h   r-   z#DeconstructableSerializer.serializeN)r   r   r   staticmethodrI   r?   r   r   r   r   r   r>   N   s    


r>   c                   @   r*   )DictionarySerializerc           	      C   s   t  }g }t| j D ]%\}}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>v   s    z1DictionarySerializer.serialize.<locals>.<genexpr>)	r!   r@   r   rA   r"   r   r#   r$   r%   )	r   r'   r(   rT   rU   Zk_stringZ	k_importsZv_stringZ	v_importsr   r   r   r   m   s   

zDictionarySerializer.serializeNr.   r   r   r   r   rQ   l   r/   rQ   c                   @   r*   )EnumSerializerc                 C   s,   | j j}|j}d||j| j jf d| hfS )Nz	%s.%s[%r]rL   )r   	__class__r   r   rE   )r   
enum_classrN   r   r   r   r   z   s
   zEnumSerializer.serializeNr.   r   r   r   r   rW   y   r/   rW   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   rX   r   r   r      s   
zFloatSerializer.serialize)r   r   r   r   __classcell__r   r   r`   r   rZ      s    rZ   c                   @   r*   )FrozensetSerializerc                 C      dS )Nzfrozenset([%s])r   r   r   r   r   r         zFrozensetSerializer._formatNr   r   r   r   r   r   r   r   rb      r/   rb   c                   @   r*   )FunctionTypeSerializerc                 C   s   t | jdd r$t| jjtr$| jj}|j}d||j| jjf d| hfS | jjdkr.td| jjd u r;td| j | jj}d| jjvrTd|| jjf d| jj hfS td	| jj|f )
N__self__z%s.%s.%srL   z<lambda>z!Cannot serialize function: lambdaz'Cannot serialize function %r: No module<%s.%sz"Could not find function %s in %s.
)	getattrr   
isinstancerg   typer   r   
ValueErrorr   )r   klassrN   module_namer   r   r   r      s   z FunctionTypeSerializer.serializeNr.   r   r   r   r   rf      r/   rf   c                   @   r*   )FunctoolsPartialSerializerc                 C   sh   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   rC   keywordsrX   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   rp      r/   rp   c                   @   r*   )IterableSerializerc                 C   s`   t  }g }| jD ]}t| \}}|| || qt|dkr%dnd}|d| |fS )NrK   (%s)(%s,)r    )r!   r   r"   r   r#   r$   lenr%   r&   r   r   r   r      s   

zIterableSerializer.serializeNr.   r   r   r   r   rt      r/   rt   c                   @   r*   )ModelFieldSerializerc                 C   s    | j  \}}}}| |||S r   )r   rO   rI   )r   Z	attr_namerB   rC   rD   r   r   r   r      s   zModelFieldSerializer.serializeNr.   r   r   r   r   rx      r/   rx   c                   @   r*   )ModelManagerSerializerc                 C   s@   | j  \}}}}}|r| |\}}d| |fS | |||S )Nz%s.as_manager())r   rO   r?   rI   )r   Z
as_managerZmanager_pathZqs_pathrC   rD   rE   r'   r   r   r   r      s
   z ModelManagerSerializer.serializeNr.   r   r   r   r   ry      r/   ry   c                   @   r*   )OperationSerializerc                 C   s0   ddl m} || jdd \}}|d|fS )Nr   )OperationWriter)indentation,)Zdjango.db.migrations.writerr{   r   r   rstrip)r   r{   stringr'   r   r   r   r      s   zOperationSerializer.serializeNr.   r   r   r   r   rz      r/   rz   c                   @   r*   )PathLikeSerializerc                 C   s   t t| ji fS r   )r,   osfspathr   r   r   r   r   r         zPathLikeSerializer.serializeNr.   r   r   r   r   r      r/   r   c                   @   r*   )PathSerializerc                 C   s*   t | jtjr	dnd}d|| jf dhfS )NZPure zpathlib.%s%rzimport pathlib)rk   r   pathlibPath)r   prefixr   r   r   r      s   zPathSerializer.serializeNr.   r   r   r   r   r      r/   r   c                   @   r*   )RegexSerializerc                 C   sl   t | jj \}}| jjtdjA }t | \}}dh||}|g}|r-|| dd| |fS )Nr   z	import rezre.compile(%s)r    )	r"   r   patternr   flagsrecompiler$   r%   )r   Zregex_patternZpattern_importsr   Zregex_flagsZflag_importsr'   rC   r   r   r   r      s   
zRegexSerializer.serializeNr.   r   r   r   r   r      r/   r   c                   @   r*   )SequenceSerializerc                 C   rc   )Nz[%s]r   r   r   r   r   r      rd   zSequenceSerializer._formatNre   r   r   r   r   r      r/   r   c                   @   r*   )SetSerializerc                 C   s   | j rdS dS )NrR   zset(%s)r   r   r   r   r   r      s   zSetSerializer._formatNre   r   r   r   r   r      r/   r   c                   @   r*   )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     r/   r   c                   @   r*   )TupleSerializerc                 C   s   t | jdkr	dS dS )NrK   ru   rv   )rw   r   r   r   r   r   r     s   zTupleSerializer._formatNre   r   r   r   r   r   
  r/   r   c                   @   r*   )TypeSerializerc                 C   s   t jdg ftd dg fg}|D ]\}}}|| ju r!|t|f  S qt| jdrE| jj}|tjkr8| jjt fS d|| jj	f d| hfS d S )Nzmodels.Modelz
type(None)r   ri   rL   )
r   ZModelrl   r   r!   hasattrr   builtinsr   r   )r   Zspecial_casescaser   r'   rN   r   r   r   r     s   


zTypeSerializer.serializeNr.   r   r   r   r   r     r/   r   c                   @   r*   )UUIDSerializerc                 C   s   dt | j dhfS )Nzuuid.%szimport uuidr5   r   r   r   r   r   #  r   zUUIDSerializer.serializeNr.   r   r   r   r   r   "  r/   r   c                   @   s   e Zd Zi 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/e0j1j2e3e4e5fe6e7j8e9e:j;e<e=j>e?iZ@eAdd ZBeAdd ZCdS )
SerializerNc                 C   s&   t |tstd|j || j|< d S )Nz('%s' must inherit from 'BaseSerializer'.)
issubclassr   rm   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   
unregisterF  s   zSerializer.unregister)Dr   r   r   	frozensetrb   listr   r!   r   tupler   dictrQ   r   ZChoicesr0   enumEnumrW   datetimer9   date	timedeltatimer2   r   r   floatrZ   boolintrl   bytesstrranger+   decimalDecimalr=   	functoolspartialpartialmethodrp   typesFunctionTypeBuiltinFunctionType
MethodTyperf   collectionsabcIterablert   r   r   r   uuidUUIDr   r   PurePathr   r   PathLiker   r   classmethodr   r   r   r   r   r   r   '  sX    	

r   c                 C   s   t | tr
t| } nt | tr|  d d } t | tjr!t| S t | tjj	r,t
| S t | tr5t| S t | tr>t| S t| drGt| S tj D ]\}}t | |r[||   S qLtd| t f )NrK   r   rO   zCannot 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)rk   r   r   r   
__reduce__r   Fieldrx   managerZBaseManagerry   r   rz   rl   r   r   r>   r   r   rA   rm   r
   )r   r   Zserializer_clsr   r   r   r"   K  s.   






r"   ):r   collections.abcr   r   r   r   r   r[   r   r   r   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+   r0   r2   r9   r=   r>   rQ   rW   rZ   rb   rf   rp   rt   rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   <module>   s`    

$