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	 ddl
mZmZmZmZmZ ddlmZmZmZ 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%d-S ).    )models)	Operation)
ModelState)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameField)field_referencesget_referencesresolve_relationc             C   s:   t  }x.|D ]&}||kr(td|| f |j| qW d S )Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   d/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/db/migrations/operations/models.py_check_for_duplicates   s    
r   c                   s8   e Zd Zdd Zedd Zdd Z fddZ  ZS )	ModelOperationc             C   s
   || _ d S )N)name)selfr   r   r   r   __init__   s    zModelOperation.__init__c             C   s
   | j j S )N)r   lower)r   r   r   r   
name_lower   s    zModelOperation.name_lowerc             C   s   |j  | jkS )N)r   r   )r   r   	app_labelr   r   r   references_model   s    zModelOperation.references_modelc                s   t  j||p|j| j| S )N)superreducer   r   )r   	operationr   )	__class__r   r   r!   "   s    zModelOperation.reduce)	__name__
__module____qualname__r   r   r   r   r!   __classcell__r   r   )r#   r   r      s   r   c                   st   e Zd ZdZdddg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dd Z fddZ  ZS )CreateModelzCreate a model's table.fieldsoptionsmanagersNc                sz   || _ |pi | _|ptjf| _|p$g | _t j| tddd | j D  tddd | jD  tddd | jD  d S )Nr)   c             s   s   | ]\}}|V  qd S )Nr   ).0r   _r   r   r   	<genexpr>6   s    z'CreateModel.__init__.<locals>.<genexpr>basesc             s   s6   | ].}t |d r|jjnt|tr*|j n|V  qdS )_metaN)hasattrr0   Zlabel_lower
isinstancestrr   )r,   baser   r   r   r.   8   s   r+   c             s   s   | ]\}}|V  qd S )Nr   )r,   r   r-   r   r   r   r.   <   s    )	r)   r*   r   Modelr/   r+   r    r   r   )r   r   r)   r*   r/   r+   )r#   r   r   r   .   s    

zCreateModel.__init__c             C   sn   | j | jd}| jr| j|d< | jr<| jtjfkr<| j|d< | jr`| jdtj fgkr`| j|d< | jj	g |fS )N)r   r)   r*   r/   Zobjectsr+   )
r   r)   r*   r/   r   r5   r+   Managerr#   r&   )r   kwargsr   r   r   deconstruct>   s    



zCreateModel.deconstructc          	   C   s6   |j t|| jt| jt| jt| jt| j	 d S )N)
Z	add_modelr   r   listr)   dictr*   tupler/   r+   )r   r   stater   r   r   state_forwardsO   s    zCreateModel.state_forwardsc             C   s.   |j j|| j}| j|jj|r*|j| d S )N)apps	get_modelr   allow_migrate_model
connectionaliascreate_model)r   r   schema_editor
from_stateto_statemodelr   r   r   database_forwardsY   s    zCreateModel.database_forwardsc             C   s.   |j j|| j}| j|jj|r*|j| d S )N)r>   r?   r   r@   rA   rB   delete_model)r   r   rD   rE   rF   rG   r   r   r   database_backwards^   s    zCreateModel.database_backwardsc             C   s    d| j jddrdnd| jf S )NzCreate %smodel %sproxyFzproxy  )r*   getr   )r   r   r   r   describec   s    zCreateModel.describec             C   s   | j S )N)r   )r   r   r   r   migration_name_fragmentf   s    z#CreateModel.migration_name_fragmentc             C   s   |j  }|| jkrdS ||f}x<| jD ]2}|tjk	r&t|tjjtfr&t	|||kr&dS q&W x(| j
D ]\}}t|| jf||rddS qdW dS )NTF)r   r   r/   r   r5   r2   r4   Z	ModelBaser3   r   r)   r   )r   r   r   r   Zreference_model_tupler4   _namefieldr   r   r   r   j   s    
zCreateModel.references_modelc                s  t  tr*| j jkr*| jjdd r*g S t  tr^| j jkr^t j| j	| j| j
| jdgS t  tr| j jkr| j j}x$ jD ]}| jkr|j|d  qW t| j| j	|| j
| jdgS t  to| j jkrt| j| j	| j j ji| j
| jdgS t  trF| j jkrFt| j| j	| jd ji| j
| jdgS t  tr| j jkrt  trt| j| j	 j jfg | j| j
| jdgS t  trt| j fdd| j	D | j| j
| jdgS t  trx| jj }xJdD ]B}|j|d }|rttt fd	d
|D }|r|||< qW |jd}| jkrN|d= t| j fdd| j	D || j
| jdgS t  tr| jj }x4dD ],}|j|}|r fdd|D ||< qW |jd}| j kr j|d< t| j fdd| j	D || j
| jdgS t! j" |S )NrK   F)r)   r*   r/   r+   order_with_respect_toc                s(   g | ] \}}|| j kr jn|fqS r   )r   rQ   )r,   nv)r"   r   r   
<listcomp>   s   z&CreateModel.reduce.<locals>.<listcomp>unique_togetherindex_togetherc             3   s$   | ]}t  fd d|D V  qdS )c             3   s   | ]}| j kr|V  qd S )N)r   )r,   f)r"   r   r   r.      s    z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N)r;   )r,   r)   )r"   r   r   r.      s    z%CreateModel.reduce.<locals>.<genexpr>c                s&   g | ]\}}|j   jkr||fqS r   )r   r   )r,   rS   rT   )r"   r   r   rU      s   c                s"   h | ]}t  fd d|D qS )c             3   s"   | ]}| j kr jn|V  qd S )N)old_namenew_name)r,   rX   )r"   r   r   r.      s    z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>)r;   )r,   r)   )r"   r   r   	<setcomp>   s   z%CreateModel.reduce.<locals>.<setcomp>c                s(   g | ] \}}| j kr jn||fqS r   )rY   rZ   )r,   rS   rT   )r"   r   r   rU      s   )rV   rW   )rV   rW   )#r2   DeleteModelr   r*   rM   RenameModelold_name_lowerr(   rZ   r)   r/   r+   AlterModelOptionsALTER_OPTION_KEYSpopr   AlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTorR   r
   model_name_lowerr   rQ   r	   r   copyr   filterboolr   rY   r    r!   )r   r"   r   r*   keyrc   optionrR   )r#   )r"   r   r!   |   s    













zCreateModel.reduce)NNN)r$   r%   r&   __doc__serialization_expand_argsr   r8   r=   rH   rJ   rN   propertyrO   r   r!   r'   r   r   )r#   r   r(   )   s   

r(   c               @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )r\   zDrop a model's table.c             C   s   d| j i}| jjg |fS )Nr   )r   r#   r&   )r   r7   r   r   r   r8      s    
zDeleteModel.deconstructc             C   s   |j || j d S )N)remove_modelr   )r   r   r<   r   r   r   r=     s    zDeleteModel.state_forwardsc             C   s.   |j j|| j}| j|jj|r*|j| d S )N)r>   r?   r   r@   rA   rB   rI   )r   r   rD   rE   rF   rG   r   r   r   rH   
  s    zDeleteModel.database_forwardsc             C   s.   |j j|| j}| j|jj|r*|j| d S )N)r>   r?   r   r@   rA   rB   rC   )r   r   rD   rE   rF   rG   r   r   r   rJ     s    zDeleteModel.database_backwardsc             C   s   dS )NTr   )r   r   r   r   r   r   r     s    zDeleteModel.references_modelc             C   s
   d| j  S )NzDelete model %s)r   )r   r   r   r   rN     s    zDeleteModel.describec             C   s
   d| j  S )Nz	delete_%s)r   )r   r   r   r   rO     s    z#DeleteModel.migration_name_fragmentN)r$   r%   r&   rl   r8   r=   rH   rJ   r   rN   rn   rO   r   r   r   r   r\      s   
r\   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dd Zedd Z fddZ  ZS )r]   zRename a model.c                s   || _ || _t j| d S )N)rY   rZ   r    r   )r   rY   rZ   )r#   r   r   r   $  s    zRenameModel.__init__c             C   s
   | j j S )N)rY   r   )r   r   r   r   r^   )  s    zRenameModel.old_name_lowerc             C   s
   | j j S )N)rZ   r   )r   r   r   r   new_name_lower-  s    zRenameModel.new_name_lowerc             C   s   | j | jd}| jjg |fS )N)rY   rZ   )rY   rZ   r#   r&   )r   r7   r   r   r   r8   1  s
    
zRenameModel.deconstructc             C   s   |j || jf j }| j|_||j || jf< || jf}d|| jf }t }xrt||D ]d\}}}	}
d }|
jr||	j }||j	_
|
jr|d kr|	j }||j	_|rV||j|< |j|j|jf qVW |j|dd |j|| j |j|| jdd d S )Nz%s.%sT)delay)r   r^   clonerZ   r   rp   r   r   Ztoremote_fieldrG   throughr)   r   r   r   Zreload_modelsro   reload_model)r   r   r<   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadmodel_stater   rQ   	referenceZchanged_fieldr   r   r   r=   <  s*    

zRenameModel.state_forwardsc             C   sF  |j j|| j}| j|jj|rB|j j|| j}|j||jj	|jj	 xl|jj
D ]`}|j|krp|}|| jf}	n|j}|jjj|jjjf}	|j j|	 jj|jj}
|j||j|
 qRW t|jj|jj}xx|D ]p\}}|j|jks|jjjj rq|jj}|jj}|j||jj	|jj	 |j||jj|jj|jj|jj qW d S )N)r>   r?   rZ   r@   rA   rB   rY   alter_db_tabler0   db_tableZrelated_objectsZrelated_modelrp   r   
model_name	get_fieldrQ   r   Zalter_fieldziplocal_many_to_manyrG   rs   rt   auto_created)r   r   rD   rE   rF   	new_model	old_modelZrelated_objectrG   Zrelated_keyZto_fieldr)   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rH   W  sF    




zRenameModel.database_forwardsc             C   s\   | j | j | _| _ | j| j | _| _| j|||| | j | j | _| _ | j| j | _| _d S )N)r^   rp   rY   rZ   rH   )r   r   rD   rE   rF   r   r   r   rJ     s
    zRenameModel.database_backwardsc             C   s   |j  | jkp|j  | jkS )N)r   r^   rp   )r   r   r   r   r   r   r     s    zRenameModel.references_modelc             C   s   d| j | jf S )NzRename model %s to %s)rY   rZ   )r   r   r   r   rN     s    zRenameModel.describec             C   s   d| j | jf S )Nzrename_%s_%s)r^   rp   )r   r   r   r   rO     s    z#RenameModel.migration_name_fragmentc                sH   t |tr&| j|jkr&t| j|jgS tt| j||pF|j	| j| S )N)
r2   r]   rp   r^   rY   rZ   r    r   r!   r   )r   r"   r   )r#   r   r   r!     s    

zRenameModel.reduce)r$   r%   r&   rl   r   r   r^   rp   r8   r=   rH   rJ   r   rN   rn   rO   r!   r'   r   r   )r#   r   r]   !  s   3	r]   c                   s   e Zd Z fddZ  ZS )ModelOptionOperationc                s0   t || jtfr"| j|jkr"|gS t j||S )N)r2   r#   r\   r   r    r!   )r   r"   r   )r#   r   r   r!     s    zModelOptionOperation.reduce)r$   r%   r&   r!   r'   r   r   )r#   r   r     s   r   c                   sT   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	e
dd Z  ZS )AlterModelTablezRename a model's table.c                s   || _ t j| d S )N)tabler    r   )r   r   r   )r#   r   r   r     s    zAlterModelTable.__init__c             C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r#   r&   )r   r7   r   r   r   r8     s
    
zAlterModelTable.deconstructc             C   s.   | j |j|| jf jd< |j|| jdd d S )Nry   T)rq   )r   r   r   r*   ru   )r   r   r<   r   r   r   r=     s    zAlterModelTable.state_forwardsc       	      C   s   |j j|| j}| j|jj|r|j j|| j}|j||jj|jj xLt	|jj
|jj
D ]6\}}|jjjjrZ|j|jj|jjjj|jjjj qZW d S )N)r>   r?   r   r@   rA   rB   rx   r0   ry   r|   r}   rs   rt   r~   )	r   r   rD   rE   rF   r   r   r   r   r   r   r   rH     s    

z!AlterModelTable.database_forwardsc             C   s   | j ||||S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z"AlterModelTable.database_backwardsc             C   s   d| j | jd k	r| jndf S )NzRename table for %s to %sz	(default))r   r   )r   r   r   r   rN     s    zAlterModelTable.describec             C   s
   d| j  S )Nzalter_%s_table)r   )r   r   r   r   rO     s    z'AlterModelTable.migration_name_fragment)r$   r%   r&   rl   r   r8   r=   rH   rJ   rN   rn   rO   r'   r   r   )r#   r   r     s   r   c                   sh   e Zd ZdZ fddZedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd Z  ZS )rb   Nc                s.   |rt t|}t| | j| t j| d S )N)r   r   setattrrc   r    r   )r   r   rd   )r#   r   r   r     s    z%AlterTogetherOptionOperation.__init__c             C   s   t | | jS )N)getattrrc   )r   r   r   r   rd     s    z)AlterTogetherOptionOperation.option_valuec             C   s    d| j | j| ji}| jjg |fS )Nr   )r   rc   rd   r#   r&   )r   r7   r   r   r   r8     s
    z(AlterTogetherOptionOperation.deconstructc             C   s4   |j || jf }| j|j| j< |j|| jdd d S )NT)rq   )r   r   rd   r*   rc   ru   )r   r   r<   rv   r   r   r   r=     s    z+AlterTogetherOptionOperation.state_forwardsc             C   sl   |j j|| j}| j|jj|rh|j j|| j}t|d| j }||t|j| jt	 t|j| jt	  d S )Nzalter_%s)
r>   r?   r   r@   rA   rB   r   rc   r0   r   )r   r   rD   rE   rF   r   r   Zalter_togetherr   r   r   rH     s    z.AlterTogetherOptionOperation.database_forwardsc             C   s   | j ||||S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z/AlterTogetherOptionOperation.database_backwardsc                s,   | j ||o*| j p*t fdd| jD S )Nc             3   s   | ]} |kV  qd S )Nr   )r,   r)   )r   r   r   r.     s    z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r   rd   any)r   rz   r   r   r   )r   r   references_field  s    z-AlterTogetherOptionOperation.references_fieldc             C   s   d| j | jt| jpdf S )Nz"Alter %s for %s (%s constraint(s))rL   )rc   r   lenrd   )r   r   r   r   rN   "  s    z%AlterTogetherOptionOperation.describec             C   s   d| j | jf S )Nzalter_%s_%s)r   rc   )r   r   r   r   rO   %  s    z4AlterTogetherOptionOperation.migration_name_fragment)r$   r%   r&   rc   r   r   rd   r8   r=   rH   rJ   r   rN   rn   rO   r'   r   r   )r#   r   rb     s   	rb   c                   s$   e Zd ZdZdZ fddZ  ZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    rV   c                s   t  j|| d S )N)r    r   )r   r   rV   )r#   r   r   r   1  s    zAlterUniqueTogether.__init__)r$   r%   r&   rl   rc   r   r'   r   r   )r#   r   r   *  s   r   c                   s$   e Zd ZdZdZ fddZ  ZS )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    rW   c                s   t  j|| d S )N)r    r   )r   r   rW   )r#   r   r   r   <  s    zAlterIndexTogether.__init__)r$   r%   r&   rl   rc   r   r'   r   r   )r#   r   r   5  s   r   c                   s`   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zedd Z  ZS )re   z9Represent a change with the order_with_respect_to option.rR   c                s   || _ t j| d S )N)rR   r    r   )r   r   rR   )r#   r   r   r   E  s    z AlterOrderWithRespectTo.__init__c             C   s   | j | jd}| jjg |fS )N)r   rR   )r   rR   r#   r&   )r   r7   r   r   r   r8   I  s
    
z#AlterOrderWithRespectTo.deconstructc             C   s2   |j || jf }| j|jd< |j|| jdd d S )NrR   T)rq   )r   r   rR   r*   ru   )r   r   r<   rv   r   r   r   r=   T  s    z&AlterOrderWithRespectTo.state_forwardsc             C   s   |j j|| j}| j|jj|r|j j|| j}|jjrX|jj rX|j||jj	d n8|jjr|jj r|jj	d}|j
 sd|_|j|| d S )NZ_orderr   )r>   r?   r   r@   rA   rB   r0   rR   Zremove_fieldr{   Zhas_defaultdefaultZ	add_field)r   r   rD   rE   rF   Zto_modelZ
from_modelrQ   r   r   r   rH   Y  s    z)AlterOrderWithRespectTo.database_forwardsc             C   s   | j |||| d S )N)rH   )r   r   rD   rE   rF   r   r   r   rJ   k  s    z*AlterOrderWithRespectTo.database_backwardsc             C   s    | j ||o| jd kp|| jkS )N)r   rR   )r   rz   r   r   r   r   r   r   n  s    
z(AlterOrderWithRespectTo.references_fieldc             C   s   d| j | jf S )Nz%Set order_with_respect_to on %s to %s)r   rR   )r   r   r   r   rN   w  s    z AlterOrderWithRespectTo.describec             C   s
   d| j  S )Nzalter_%s_order_with_respect_to)r   )r   r   r   r   rO   z  s    z/AlterOrderWithRespectTo.migration_name_fragment)r$   r%   r&   rl   rc   r   r8   r=   rH   rJ   r   rN   rn   rO   r'   r   r   )r#   r   re   @  s   	re   c                   sn   e Zd ZdZdddddddd	d
ddgZ fddZdd Zdd Zdd Zdd Z	dd Z
edd Z  ZS )r_   z
    Set new model options that don't directly affect the database schema
    (like verbose_name, permissions, ordering). Python code in migrations
    may still need them.
    Zbase_manager_nameZdefault_manager_nameZdefault_related_nameZget_latest_byZmanagedZorderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                s   || _ t j| d S )N)r*   r    r   )r   r   r*   )r#   r   r   r     s    zAlterModelOptions.__init__c             C   s   | j | jd}| jjg |fS )N)r   r*   )r   r*   r#   r&   )r   r7   r   r   r   r8     s
    
zAlterModelOptions.deconstructc             C   s\   |j || jf }|j| j|_x&| jD ]}|| jkr&|jj|d q&W |j|| jdd d S )NFT)rq   )r   r   r*   r`   ra   ru   )r   r   r<   rv   rj   r   r   r   r=     s    
z AlterModelOptions.state_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rH     s    z#AlterModelOptions.database_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rJ     s    z$AlterModelOptions.database_backwardsc             C   s
   d| j  S )NzChange Meta options on %s)r   )r   r   r   r   rN     s    zAlterModelOptions.describec             C   s
   d| j  S )Nzalter_%s_options)r   )r   r   r   r   rO     s    z)AlterModelOptions.migration_name_fragment)r$   r%   r&   rl   r`   r   r8   r=   rH   rJ   rN   rn   rO   r'   r   r   )r#   r   r_     s&   r_   c                   sZ   e Zd ZdZdgZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
edd Z  ZS )AlterModelManagerszAlter the model's managers.r+   c                s   || _ t j| d S )N)r+   r    r   )r   r   r+   )r#   r   r   r     s    zAlterModelManagers.__init__c             C   s   | j j| j| jgi fS )N)r#   r&   r   r+   )r   r   r   r   r8     s    
zAlterModelManagers.deconstructc             C   s2   |j || jf }t| j|_|j|| jdd d S )NT)rq   )r   r   r9   r+   ru   )r   r   r<   rv   r   r   r   r=     s    z!AlterModelManagers.state_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rH     s    z$AlterModelManagers.database_forwardsc             C   s   d S )Nr   )r   r   rD   rE   rF   r   r   r   rJ     s    z%AlterModelManagers.database_backwardsc             C   s
   d| j  S )NzChange managers on %s)r   )r   r   r   r   rN     s    zAlterModelManagers.describec             C   s
   d| j  S )Nzalter_%s_managers)r   )r   r   r   r   rO     s    z*AlterModelManagers.migration_name_fragment)r$   r%   r&   rl   rm   r   r8   r=   rH   rJ   rN   rn   rO   r'   r   r   )r#   r   r     s   r   c               @   s   e Zd ZdZedd ZdS )IndexOperationindexesc             C   s
   | j j S )N)rz   r   )r   r   r   r   rf     s    zIndexOperation.model_name_lowerN)r$   r%   r&   rc   r   rf   r   r   r   r   r     s   r   c               @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )AddIndexzAdd an index on a model.c             C   s"   || _ |jstd| || _d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)rz   r   r   index)r   rz   r   r   r   r   r     s    zAddIndex.__init__c             C   sF   |j || jf }|j| j | jj f|j| j< |j|| jdd d S )NT)rq   )r   rf   r*   rc   r   rr   ru   )r   r   r<   rv   r   r   r   r=     s     zAddIndex.state_forwardsc             C   s2   |j j|| j}| j|jj|r.|j|| j d S )N)r>   r?   rz   r@   rA   rB   	add_indexr   )r   r   rD   rE   rF   rG   r   r   r   rH     s    zAddIndex.database_forwardsc             C   s2   |j j|| j}| j|jj|r.|j|| j d S )N)r>   r?   rz   r@   rA   rB   remove_indexr   )r   r   rD   rE   rF   rG   r   r   r   rJ     s    zAddIndex.database_backwardsc             C   s   | j | jd}| jjg |fS )N)rz   r   )rz   r   r#   r&   )r   r7   r   r   r   r8      s
    
zAddIndex.deconstructc             C   sN   | j jr0d| j jdjdd | j jD | jf S d| j jdj| j j| jf S )Nz!Create index %s on %s on model %sz, c             S   s   g | ]}t |qS r   )r3   )r,   Z
expressionr   r   r   rU     s    z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)r   Zexpressionsr   joinrz   r)   )r   r   r   r   rN     s    
zAddIndex.describec             C   s   d| j | jjj f S )Nz%s_%s)rf   r   r   r   )r   r   r   r   rO     s    z AddIndex.migration_name_fragmentN)r$   r%   r&   rl   r   r=   rH   rJ   r8   rN   rn   rO   r   r   r   r   r     s   	r   c               @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )RemoveIndexzRemove an index from a model.c             C   s   || _ || _d S )N)rz   r   )r   rz   r   r   r   r   r      s    zRemoveIndex.__init__c                sL   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                s   g | ]}|j  j kr|qS r   )r   )r,   idx)r   r   r   rU   '  s    z.RemoveIndex.state_forwards.<locals>.<listcomp>T)rq   )r   rf   r*   rc   ru   )r   r   r<   rv   r   r   )r   r   r=   $  s    zRemoveIndex.state_forwardsc             C   sL   |j j|| j}| j|jj|rH|j|| jf }|j| j	}|j
|| d S )N)r>   r?   rz   r@   rA   rB   r   rf   get_index_by_namer   r   )r   r   rD   rE   rF   rG   from_model_stater   r   r   r   rH   *  s
    zRemoveIndex.database_forwardsc             C   sL   |j j|| j}| j|jj|rH|j|| jf }|j| j	}|j
|| d S )N)r>   r?   rz   r@   rA   rB   r   rf   r   r   r   )r   r   rD   rE   rF   rG   to_model_stater   r   r   r   rJ   1  s
    zRemoveIndex.database_backwardsc             C   s   | j | jd}| jjg |fS )N)rz   r   )rz   r   r#   r&   )r   r7   r   r   r   r8   8  s
    
zRemoveIndex.deconstructc             C   s   d| j | jf S )NzRemove index %s from %s)r   rz   )r   r   r   r   rN   C  s    zRemoveIndex.describec             C   s   d| j | jj f S )Nzremove_%s_%s)rf   r   r   )r   r   r   r   rO   F  s    z#RemoveIndex.migration_name_fragmentN)r$   r%   r&   rl   r   r=   rH   rJ   r8   rN   rn   rO   r   r   r   r   r     s   r   c               @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )AddConstraintconstraintsc             C   s   || _ || _d S )N)rz   
constraint)r   rz   r   r   r   r   r   N  s    zAddConstraint.__init__c             C   sB   |j || jf }|j| j | jf|j| j< |j|| jdd d S )NT)rq   )r   rf   r*   rc   r   ru   )r   r   r<   rv   r   r   r   r=   R  s    zAddConstraint.state_forwardsc             C   s2   |j j|| j}| j|jj|r.|j|| j d S )N)r>   r?   rz   r@   rA   rB   add_constraintr   )r   r   rD   rE   rF   rG   r   r   r   rH   W  s    zAddConstraint.database_forwardsc             C   s2   |j j|| j}| j|jj|r.|j|| j d S )N)r>   r?   rz   r@   rA   rB   remove_constraintr   )r   r   rD   rE   rF   rG   r   r   r   rJ   \  s    z AddConstraint.database_backwardsc             C   s   | j jg | j| jdfS )N)rz   r   )r#   r$   rz   r   )r   r   r   r   r8   a  s    zAddConstraint.deconstructc             C   s   d| j j| jf S )Nz Create constraint %s on model %s)r   r   rz   )r   r   r   r   rN   g  s    zAddConstraint.describec             C   s   d| j | jjj f S )Nz%s_%s)rf   r   r   r   )r   r   r   r   rO   j  s    z%AddConstraint.migration_name_fragmentN)r$   r%   r&   rc   r   r=   rH   rJ   r8   rN   rn   rO   r   r   r   r   r   K  s   r   c               @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )RemoveConstraintr   c             C   s   || _ || _d S )N)rz   r   )r   rz   r   r   r   r   r   r  s    zRemoveConstraint.__init__c                sL   |j | jf }|j j } fdd|D |j j< |j| jdd d S )Nc                s   g | ]}|j  j kr|qS r   )r   )r,   c)r   r   r   rU   y  s    z3RemoveConstraint.state_forwards.<locals>.<listcomp>T)rq   )r   rf   r*   rc   ru   )r   r   r<   rv   r   r   )r   r   r=   v  s    zRemoveConstraint.state_forwardsc             C   sL   |j j|| j}| j|jj|rH|j|| jf }|j| j	}|j
|| d S )N)r>   r?   rz   r@   rA   rB   r   rf   get_constraint_by_namer   r   )r   r   rD   rE   rF   rG   r   r   r   r   r   rH   |  s
    z"RemoveConstraint.database_forwardsc             C   sL   |j j|| j}| j|jj|rH|j|| jf }|j| j	}|j
|| d S )N)r>   r?   rz   r@   rA   rB   r   rf   r   r   r   )r   r   rD   rE   rF   rG   r   r   r   r   r   rJ     s
    z#RemoveConstraint.database_backwardsc             C   s   | j jg | j| jdfS )N)rz   r   )r#   r$   rz   r   )r   r   r   r   r8     s    zRemoveConstraint.deconstructc             C   s   d| j | jf S )Nz"Remove constraint %s from model %s)r   rz   )r   r   r   r   rN     s    zRemoveConstraint.describec             C   s   d| j | jj f S )Nzremove_%s_%s)rf   r   r   )r   r   r   r   rO     s    z(RemoveConstraint.migration_name_fragmentN)r$   r%   r&   rc   r   r=   rH   rJ   r8   rN   rn   rO   r   r   r   r   r   o  s   r   N)&Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r)   r   r	   r
   r   r   utilsr   r   r   r   r   r(   r\   r]   r   r   rb   r   r   re   r_   r   r   r   r   r   r   r   r   r   r   <module>   s4   
 R' 6<?;#8.$