3
g\<                 @   s   d dl mZ d dlmZ d dlmZ ddlmZ ddlm	Z	m
Z
m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dS )    )FieldDoesNotExist)NOT_PROVIDED)cached_property   )	Operation)field_is_referencedfield_referencesget_referencesc                   s^   e Zd ZdddZedd Zedd Zdd	 Zd
d Zdd Z	dd Z
 fddZ  ZS )FieldOperationNc             C   s   || _ || _|| _d S )N)
model_namenamefield)selfr   r   r    r   d/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/migrations/operations/fields.py__init__
   s    zFieldOperation.__init__c             C   s
   | j j S )N)r   lower)r   r   r   r   model_name_lower   s    zFieldOperation.model_name_lowerc             C   s
   | j j S )N)r   r   )r   r   r   r   
name_lower   s    zFieldOperation.name_lowerc             C   s   | j |j kS )N)r   )r   	operationr   r   r   is_same_model_operation   s    z&FieldOperation.is_same_model_operationc             C   s   | j |o| j|jkS )N)r   r   )r   r   r   r   r   is_same_field_operation   s    z&FieldOperation.is_same_field_operationc             C   s<   |j  }|| jkrdS | jr8tt|| jf| j||fS dS )NTF)r   r   r   boolr   )r   r   	app_labelr   r   r   r   references_model   s    
zFieldOperation.references_modelc             C   sn   |j  }|| jkrB|| jkr dS | jrBt| jdrB|| jjkrBdS | jd krPdS tt|| jf| j||f|S )NTfrom_fieldsF)r   r   r   r   hasattrr   r   r   )r   r   r   r   r   r   r   r   references_field'   s    


zFieldOperation.references_fieldc                s"   t  j||p |j| j| j| S )N)superreducer   r   r   )r   r   r   )	__class__r   r   r   9   s    zFieldOperation.reduce)N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   __classcell__r   r   )r    r   r
   	   s   

r
   c                   sb   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	e
dd Z fddZ  ZS )AddFieldzAdd a field to a model.Tc                s   || _ t j||| d S )N)preserve_defaultr   r   )r   r   r   r   r&   )r    r   r   r   C   s    zAddField.__init__c             C   s4   | j | j| jd}| jdk	r&| j|d< | jjg |fS )N)r   r   r   Tr&   )r   r   r   r&   r    r!   )r   kwargsr   r   r   deconstructG   s    


zAddField.deconstructc             C   sT   | j s| jj }t|_n| j}||j|| jf j| j< |j	 }|j
|| j|d d S )N)delay)r&   r   cloner   defaultmodelsr   fieldsr   is_relationreload_model)r   r   stater   r)   r   r   r   state_forwardsU   s    
zAddField.state_forwardsc             C   sj   |j j|| j}| j|jj|rf|j j|| j}|jj| j}| j	sN| j
j|_|j|| | j	sft|_d S )N)apps	get_modelr   allow_migrate_model
connectionalias_meta	get_fieldr   r&   r   r+   	add_fieldr   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardsa   s    
zAddField.database_forwardsc             C   s:   |j j|| j}| j|jj|r6|j||jj| j	 d S )N)
r2   r3   r   r4   r5   r6   remove_fieldr7   r8   r   )r   r   r:   r;   r<   r>   r   r   r   database_backwardso   s    zAddField.database_backwardsc             C   s   d| j | jf S )NzAdd field %s to %s)r   r   )r   r   r   r   describet   s    zAddField.describec             C   s   d| j | jf S )Nz%s_%s)r   r   )r   r   r   r   migration_name_fragmentw   s    z AddField.migration_name_fragmentc                sp   t |trb| j|rbt |tr4t| j|j|jdgS t |trBg S t |t	rbt| j|j
| jdgS t j||S )N)r   r   r   )
isinstancer
   r   
AlterFieldr%   r   r   r   RemoveFieldRenameFieldnew_namer   r   )r   r   r   )r    r   r   r   {   s    


zAddField.reduce)T)r!   r"   r#   __doc__r   r(   r1   r?   rA   rB   propertyrC   r   r$   r   r   )r    r   r%   @   s   r%   c                   sT   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
 fddZ  ZS )rF   zRemove a field from a model.c             C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r    r!   )r   r'   r   r   r   r(      s
    
zRemoveField.deconstructc             C   s<   |j || jf }|jj| j}|j }|j|| j|d d S )N)r)   )r,   r   r-   popr   r.   r/   )r   r   r0   model_stateZ	old_fieldr)   r   r   r   r1      s    zRemoveField.state_forwardsc             C   s:   |j j|| j}| j|jj|r6|j||jj| j	 d S )N)
r2   r3   r   r4   r5   r6   r@   r7   r8   r   )r   r   r:   r;   r<   r>   r   r   r   r?      s    zRemoveField.database_forwardsc             C   sJ   |j j|| j}| j|jj|rF|j j|| j}|j||jj| j	 d S )N)
r2   r3   r   r4   r5   r6   r9   r7   r8   r   )r   r   r:   r;   r<   r=   r>   r   r   r   rA      s    zRemoveField.database_backwardsc             C   s   d| j | jf S )NzRemove field %s from %s)r   r   )r   r   r   r   rB      s    zRemoveField.describec             C   s   d| j | jf S )Nzremove_%s_%s)r   r   )r   r   r   r   rC      s    z#RemoveField.migration_name_fragmentc                s6   ddl m} t||r(|j| jkr(|gS t j||S )Nr   )DeleteModel)r,   rM   rD   r   r   r   r   )r   r   r   rM   )r    r   r   r      s    zRemoveField.reduce)r!   r"   r#   rI   r(   r1   r?   rA   rB   rJ   rC   r   r$   r   r   )r    r   rF      s   rF   c                   sb   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	e
dd Z fddZ  ZS )rE   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                s   || _ t j||| d S )N)r&   r   r   )r   r   r   r   r&   )r    r   r   r      s    zAlterField.__init__c             C   s4   | j | j| jd}| jdk	r&| j|d< | jjg |fS )N)r   r   r   Tr&   )r   r   r   r&   r    r!   )r   r'   r   r   r   r(      s    


zAlterField.deconstructc             C   sr   | j s| jj }t|_n| j}|j|| jf }||j| j< |j	 oZt
||| jf| j|f }|j|| j|d d S )N)r)   )r&   r   r*   r   r+   r,   r   r-   r   r.   r   r/   )r   r   r0   r   rL   r)   r   r   r   r1      s    
zAlterField.state_forwardsc       	      C   sz   |j j|| j}| j|jj|rv|j j|| j}|jj| j}|jj| j}| j	s\| j
j|_|j||| | j	svt|_d S )N)r2   r3   r   r4   r5   r6   r7   r8   r   r&   r   r+   alter_fieldr   )	r   r   r:   r;   r<   r=   r>   Z
from_fieldZto_fieldr   r   r   r?      s    
zAlterField.database_forwardsc             C   s   | j |||| d S )N)r?   )r   r   r:   r;   r<   r   r   r   rA      s    zAlterField.database_backwardsc             C   s   d| j | jf S )NzAlter field %s on %s)r   r   )r   r   r   r   rB      s    zAlterField.describec             C   s   d| j | jf S )Nzalter_%s_%s)r   r   )r   r   r   r   rC      s    z"AlterField.migration_name_fragmentc                sT   t |tr| j|r|gS t |trF| j|rF|t| j|j| jdgS t j	||S )N)r   r   r   )
rD   rF   r   rG   rE   r   rH   r   r   r   )r   r   r   )r    r   r   r     s    zAlterField.reduce)T)r!   r"   r#   rI   r   r(   r1   r?   rA   rB   rJ   rC   r   r$   r   r   )r    r   rE      s   rE   c                   s   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd Zdd Z fddZ  ZS )rG   z8Rename a field on the model. Might affect db_column too.c                s   || _ || _t j|| d S )N)old_namerH   r   r   )r   r   rO   rH   )r    r   r   r     s    zRenameField.__init__c             C   s
   | j j S )N)rO   r   )r   r   r   r   old_name_lower  s    zRenameField.old_name_lowerc             C   s
   | j j S )N)rH   r   )r   r   r   r   new_name_lower  s    zRenameField.new_name_lowerc             C   s    | j | j| jd}| jjg |fS )N)r   rO   rH   )r   rO   rH   r    r!   )r   r'   r   r   r   r(   !  s    
zRenameField.deconstructc                s`  |j | jf }|j}y|j j}W n* tk
rP   td| j jf Y nX || j< x8|j	 D ],}t
|dd }|rft fdd|D |_qfW |j}x.dD ]&}	|	|kr fdd||	 D ||	< qW d}
t|| jf j|f}x`|D ]X^ }}}d	}
|jr|j\}}t
|d
d  jkr* j|_|rt fdd|D |_qW |j| j|
d d S )Nz%s.%s has no field named '%s'r   c                s    g | ]}| j kr jn|qS r   )rO   rH   ).0Zfrom_field_name)r   r   r   
<listcomp>=  s   z.RenameField.state_forwards.<locals>.<listcomp>index_togetherunique_togetherc                s   g | ]} fd d|D qS )c                s    g | ]}| j kr jn|qS r   )rO   rH   )rR   n)r   r   r   rS   E  s    z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )rR   Ztogether)r   r   r   rS   E  s   TF
field_namec                s    g | ]}| j kr jn|qS r   )rO   rH   )rR   Zto_field_name)r   r   r   rS   U  s   )r)   )rT   rU   )r,   r   r-   rK   rO   KeyErrorr   r   rH   valuesgetattrtupler   optionsr	   ZtorW   	to_fieldsr/   )r   r   r0   rL   r-   foundr   r   r\   optionr)   Z
references_	referenceZremote_fieldr]   r   )r   r   r1   -  sB    





zRenameField.state_forwardsc             C   sV   |j j|| j}| j|jj|rR|j j|| j}|j||jj| j	|jj| j
 d S )N)r2   r3   r   r4   r5   r6   rN   r7   r8   rO   rH   )r   r   r:   r;   r<   r=   r>   r   r   r   r?   Z  s    zRenameField.database_forwardsc             C   sV   |j j|| j}| j|jj|rR|j j|| j}|j||jj| j	|jj| j
 d S )N)r2   r3   r   r4   r5   r6   rN   r7   r8   rH   rO   )r   r   r:   r;   r<   r=   r>   r   r   r   rA   d  s    zRenameField.database_backwardsc             C   s   d| j | j| jf S )NzRename field %s on %s to %s)rO   r   rH   )r   r   r   r   rB   n  s    zRenameField.describec             C   s   d| j | j| jf S )Nzrename_%s_%s_%s)rP   r   rQ   )r   r   r   r   rC   q  s    z#RenameField.migration_name_fragmentc             C   s(   | j ||o&|j | jkp&|j | jkS )N)r   r   rP   rQ   )r   r   r   r   r   r   r   r   y  s    zRenameField.references_fieldc                sZ   t |tr4| j|r4| j|jkr4t| j| j|jgS tt	| j
||pX|j| j| j| S )N)rD   rG   r   rQ   rP   r   rO   rH   r   r
   r   r   )r   r   r   )r    r   r   r     s    


zRenameField.reduce)r!   r"   r#   rI   r   r   rP   rQ   r(   r1   r?   rA   rB   rJ   rC   r   r   r$   r   r   )r    r   rG     s   -

rG   N)Zdjango.core.exceptionsr   Zdjango.db.modelsr   Zdjango.utils.functionalr   baser   utilsr   r   r	   r
   r%   rF   rE   rG   r   r   r   r   <module>   s   7R.Q