
v^                 @   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 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$ d- S).    )models)	Operation)
ModelState)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameField)
ModelTuplefield_references_modelc             C   sM   t    } x= | D]5 } | | k r8 t d | |  f   | j |  q Wd  S)Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   H/tmp/pip-build-8lau8j11/django/django/db/migrations/operations/models.py_check_for_duplicates   s    	r   c                   sR   e  Z d  Z d d   Z e d d    Z d d d  Z d   f d d	  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_lowerNc             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 | d | p+ | j |  j |  S)Nr   )superreducer   r   )r   	operationr   )	__class__r   r   r    "   s    zModelOperation.reduce)__name__
__module____qualname__r   r   r   r   r    r   r   )r"   r   r      s   r   c                   s   e  Z d  Z d Z d d d g Z d d d   f d d  Z d d	   Z d
 d   Z d d   Z d d   Z	 d d   Z
 d d d  Z d   f d d  Z   S)CreateModelzCreate a model's table.fieldsoptionsmanagersNc                s   | |  _  | p i  |  _ | p' t j f |  _ | p6 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   sK   |  ]A } t  | d   r$ | j j n t | t  r? | j   n | Vq d S)_metaN)hasattrr.   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   s   d |  j  d |  j i } |  j r. |  j | d <|  j rY |  j t j f k rY |  j | d <|  j r |  j d t j   f g k r |  j | d <|  j j	 g  | f S)Nr   r'   r(   r-   Zobjectsr)   )
r   r'   r(   r-   r   r3   r)   Managerr"   r%   )r   kwargsr   r   r   deconstruct>   s    		'	zCreateModel.deconstructc          	   C   sM   | 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   sA   | 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   sA   | j  j | |  j  } |  j | j j |  r= | j |  d  S)N)r<   r=   r   r>   r?   r@   delete_model)r   r   rB   rC   rD   rE   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    } | |  j k r d St | |  } xT |  j D]I } | t j k	 r8 t | t j j t	 f  r8 t j
 |  | k r8 d Sq8 Wx* |  j D] \ } } t | |  r d Sq Wd S)NTF)r   r   r   r-   r   r3   r0   r2   Z	ModelBaser1   
from_modelr'   r   )r   r   r   r   Zmodel_tupler2   _namefieldr   r   r   r   f   s    *zCreateModel.references_modelc          
      sT  t    t  r; |  j   j k r; |  j j d d  r; g  St    t  r |  j   j k r t   j d |  j	 d |  j d |  j
 d |  j g St    t  r |  j   j k r t |  j d |  j	 d |  j   j  d |  j
 d |  j g St    t  rU|  j   j k rUt |  j d |  j	 d |  j   j   j i  d |  j
 d |  j g St    t  r|  j   j k rt |  j d |  j	 d |  j d   j i  d |  j
 d |  j g St    t  r>|  j   j k r>t    t  r0t |  j d |  j	   j   j f g d |  j d |  j
 d |  j g St    t  rt |  j d   f d d	   |  j	 D d |  j d |  j
 d |  j g St    t  rn|  j j   } x^ d D]V } | j | d   } | rt t t   f d d   | D   } | r| | | <qW| j d  } |   j k r*| d =t |  j d   f d d	   |  j	 D d | d |  j
 d |  j g St    t  r>|  j j   } x@ d D]8 } | j |  } | r  f d d   | D | | <qW| j d  } |   j k r  j | d <t |  j d   f d d	   |  j	 D d | d |  j
 d |  j g St    j!   d | S)NrI   Fr'   r(   r-   r)   order_with_respect_toc                s:   g  |  ]0 \ } } | |   j  k r-   j n | f  q Sr   )r   rO   )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)r9   )r*   r'   )r!   r   r   r,      s    z%CreateModel.reduce.<locals>.<genexpr>c                s7   g  |  ]- \ } } | j      j k r | | f  q Sr   )r   r   )r*   rQ   rR   )r!   r   r   rS      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*   rV   )r!   r   r   r,      s    z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>)r9   )r*   r'   )r!   r   r   	<setcomp>   s   	z%CreateModel.reduce.<locals>.<setcomp>c                s:   g  |  ]0 \ } } |   j  k r*   j n | | f  q Sr   )rW   rX   )r*   rQ   rR   )r!   r   r   rS      s   	r   )unique_togetherindex_together)rZ   r[   )"r0   DeleteModelr   r(   rK   RenameModelold_name_lowerr&   rX   r'   r-   r)   AlterModelOptionsr   AlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTorP   r
   model_name_lowerr   rO   r	   r   copypopr   filterboolr   rW   r   r    )r   r!   r   r(   ra   optionrP   )r"   )r!   r   r    x   s    !				!			!			!			!											zCreateModel.reduce)r#   r$   r%   __doc__serialization_expand_argsr   r6   r;   rF   rH   rL   r   r    r   r   )r"   r   r&   )   s   
r&   c               @   sa   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d d  Z 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   r5   r   r   r   r6      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   sA   | j  j | |  j  } |  j | j j |  r= | j |  d  S)N)r<   r=   r   r>   r?   r@   rG   )r   r   rB   rC   rD   rE   r   r   r   rF     s    zDeleteModel.database_forwardsc             C   sA   | j  j | |  j  } |  j | j j |  r= | j |  d  S)N)r<   r=   r   r>   r?   r@   rA   )r   r   rB   rC   rD   rE   r   r   r   rH     s    zDeleteModel.database_backwardsNc             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   rL     s    zDeleteModel.describe)
r#   r$   r%   rj   r6   r;   rF   rH   r   rL   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 d  Z d d   Z d   f d d  Z   S)r]   zRename a model.c                s&   | |  _  | |  _ t   j |  d  S)N)rW   rX   r   r   )r   rW   rX   )r"   r   r   r     s    		zRenameModel.__init__c             C   s   |  j  j   S)N)rW   r   )r   r   r   r   r^     s    zRenameModel.old_name_lowerc             C   s   |  j  j   S)N)rX   r   )r   r   r   r   new_name_lower!  s    zRenameModel.new_name_lowerc             C   s+   d |  j  d |  j i } |  j j g  | f S)NrW   rX   )rW   rX   r"   r%   )r   r5   r   r   r   r6   %  s
    		zRenameModel.deconstructc             C   s  | j  | |  j f j   } |  j | _ | | j  | |  j f <t | |  j  } d | |  j f } g  } x5| j  j   D]$\ \ } } }	 d }
 x t |	 j	  D] \ } \ } } d  } | j
 } | rat j | j | |  } | | k r| j   } | | j
 _ t | d d   } | rat j | | |  } | | k ra| d  k rU| j   } | | j
 _ | r | | f |	 j	 | <d }
 q W|
 ry | j | | f  qy W| j | d d | j | |  j  | j | |  j d d d  S)Nz%s.%sFthroughTdelay)r   r^   clonerX   r   rm   r   items	enumerater'   remote_fieldrM   rE   getattrrn   appendZreload_modelsrl   reload_model)r   r   r:   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadZmodel_app_label
model_namemodel_stateZmodel_changedindexr   rO   Zchanged_fieldrs   Zremote_model_tupleZthrough_modelZthrough_model_tupler   r   r   r;   0  sB    ""	
zRenameModel.state_forwardsc             C   s  | j  j | |  j  } |  j | j j |  r| j  j | |  j  } | j | | j j	 | j j	  x | j j
 D] } | j | k r | } | |  j f }	 n' | j } | j j j | j j j f }	 | j  j |	   j j | j j  }
 | j | | j |
  qt Wt | j j | j j  } x | D] \ } } | j | j k s(| j j j j r\q(| j j } | j j } | j | | j j	 | j j	  | j | | j j | j j  | j j | j j   q(Wd  S)N)r<   r=   rX   r>   r?   r@   rW   alter_db_tabler.   db_tableZrelated_objectsZrelated_modelrm   r   rw   	get_fieldrO   r   Zalter_fieldziplocal_many_to_manyrE   rs   rn   auto_created)r   r   rB   rC   rD   	new_model	old_modelZrelated_objectrE   Zrelated_keyZto_fieldr'   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rF   Y  sF    			%	zRenameModel.database_forwardsc             C   s~   |  j  |  j |  _ |  _  |  j |  j |  _ |  _ |  j | | | |  |  j  |  j |  _ |  _  |  j |  j |  _ |  _ d  S)N)r^   rm   rW   rX   rF   )r   r   rB   rC   rD   r   r   r   rH     s
    zRenameModel.database_backwardsNc             C   s(   | j    |  j k p' | j    |  j k S)N)r   r^   rm   )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)rW   rX   )r   r   r   r   rL     s    zRenameModel.describec                si   t  | t  r7 |  j | j k r7 t |  j | j  g St t |   j | d | ph | j	 |  j |  S)Nr   )
r0   r]   rm   r^   rW   rX   r   r   r    r   )r   r!   r   )r"   r   r   r      s    zRenameModel.reduce)r#   r$   r%   rj   r   r   r^   rm   r6   r;   rF   rH   r   rL   r    r   r   )r"   r   r]     s   )3	r]   c                   s%   e  Z d  Z d   f d d  Z   S)ModelOptionOperationNc                sG   t  | |  j t f  r1 |  j | j k r1 | g St   j | d | S)Nr   )r0   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     s   r   c                   sd   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	   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+   d |  j  d |  j i } |  j j g  | f S)Nr   r   )r   r   r"   r%   )r   r5   r   r   r   r6     s
    		zAlterModelTable.deconstructc             C   s=   |  j  | j | |  j f j d <| j | |  j d d d  S)Nr{   ro   T)r   r   r   r(   rv   )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  xl t	 | j j
 | j j
  D]O \ } } | j j j j r | j | j j | j j j j | j j j j  q Wd  S)N)r<   r=   r   r>   r?   r@   rz   r.   r{   r}   r~   rs   rn   r   )	r   r   rB   rC   rD   r   r   r   r   r   r   r   rF     s    	(	z!AlterModelTable.database_forwardsc             C   s   |  j  | | | |  S)N)rF   )r   r   rB   rC   rD   r   r   r   rH     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   rL     s    zAlterModelTable.describe)
r#   r$   r%   rj   r   r6   r;   rF   rH   rL   r   r   )r"   r   r     s   r   c                   s   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 d  Z d d   Z   S)r`   Nc                s?   | r t  t |   } t |  |  j |  t   j |  d  S)N)r   r   setattrra   r   r   )r   r   rb   )r"   r   r   r     s    z%AlterTogetherOptionOperation.__init__c             C   s   t  |  |  j  S)N)rt   ra   )r   r   r   r   rb     s    z)AlterTogetherOptionOperation.option_valuec             C   s.   d |  j  |  j |  j i } |  j j g  | f S)Nr   )r   ra   rb   r"   r%   )r   r5   r   r   r   r6     s
    		z(AlterTogetherOptionOperation.deconstructc             C   sF   | j  | |  j f } |  j | j |  j <| j | |  j d d d  S)Nro   T)r   r   rb   r(   ra   rv   )r   r   r:   rx   r   r   r   r;      s    z+AlterTogetherOptionOperation.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } t | d |  j  } | | t | j |  j t	    t | j |  j t	     d  S)Nzalter_%s)
r<   r=   r   r>   r?   r@   rt   ra   r.   r   )r   r   rB   rC   rD   r   r   Zalter_togetherr   r   r   rF     s    z.AlterTogetherOptionOperation.database_forwardsc             C   s   |  j  | | | |  S)N)rF   )r   r   rB   rC   rD   r   r   r   rH     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   rb   any)r   rw   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))rJ   )ra   r   lenrb   )r   r   r   r   rL     s    z%AlterTogetherOptionOperation.describe)r#   r$   r%   ra   r   r   rb   r6   r;   rF   rH   r   rL   r   r   )r"   r   r`     s   	r`   c                   s.   e  Z d  Z d Z d Z   f d d   Z   S)AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    rT   c                s   t    j | |  d  S)N)r   r   )r   r   rT   )r"   r   r   r   '  s    zAlterUniqueTogether.__init__)r#   r$   r%   rj   ra   r   r   r   )r"   r   r      s   r   c                   s.   e  Z d  Z d Z d Z   f d d   Z   S)AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    rU   c                s   t    j | |  d  S)N)r   r   )r   r   rU   )r"   r   r   r   2  s    zAlterIndexTogether.__init__)r#   r$   r%   rj   ra   r   r   r   )r"   r   r   +  s   r   c                   sy   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 d  Z
 d d   Z   S)rc   z9Represent a change with the order_with_respect_to option.rP   c                s   | |  _  t   j |  d  S)N)rP   r   r   )r   r   rP   )r"   r   r   r   ;  s    	z AlterOrderWithRespectTo.__init__c             C   s+   d |  j  d |  j i } |  j j g  | f S)Nr   rP   )r   rP   r"   r%   )r   r5   r   r   r   r6   ?  s
    		z#AlterOrderWithRespectTo.deconstructc             C   sC   | j  | |  j f } |  j | j d <| j | |  j d d d  S)NrP   ro   T)r   r   rP   r(   rv   )r   r   r:   rx   r   r   r   r;   J  s    z&AlterOrderWithRespectTo.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j j r | j j r | j | | j j	 d   nP | j j r | j j r | j j	 d  } | j
   s d | _ | j | |  d  S)NZ_orderr   )r<   r=   r   r>   r?   r@   r.   rP   Zremove_fieldr|   Zhas_defaultdefaultZ	add_field)r   r   rB   rC   rD   Zto_modelrM   rO   r   r   r   rF   O  s    	z)AlterOrderWithRespectTo.database_forwardsc             C   s   |  j  | | | |  d  S)N)rF   )r   r   rB   rC   rD   r   r   r   rH   a  s    z*AlterOrderWithRespectTo.database_backwardsNc             C   s.   |  j  | |  o- |  j d  k p- | |  j k S)N)r   rP   )r   rw   r   r   r   r   r   r   d  s    z(AlterOrderWithRespectTo.references_fieldc             C   s   d |  j  |  j f S)Nz%Set order_with_respect_to on %s to %s)r   rP   )r   r   r   r   rL   m  s    z AlterOrderWithRespectTo.describe)r#   r$   r%   rj   ra   r   r6   r;   rF   rH   r   rL   r   r   )r"   r   rc   6  s   	rc   c                   s   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
   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ordering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+   d |  j  d |  j i } |  j j g  | f S)Nr   r(   )r   r(   r"   r%   )r   r5   r   r   r   r6     s
    		zAlterModelOptions.deconstructc             C   s~   | j  | |  j f } | j |  j  | _ x3 |  j D]( } | |  j k r5 | j j | d  q5 W| j | |  j d d d  S)NFro   T)r   r   r(   ALTER_OPTION_KEYSrf   rv   )r   r   r:   rx   keyr   r   r   r;     s    z AlterModelOptions.state_forwardsc             C   s   d  S)Nr   )r   r   rB   rC   rD   r   r   r   rF     s    z#AlterModelOptions.database_forwardsc             C   s   d  S)Nr   )r   r   rB   rC   rD   r   r   r   rH     s    z$AlterModelOptions.database_backwardsc             C   s   d |  j  S)NzChange Meta options on %s)r   )r   r   r   r   rL     s    zAlterModelOptions.describe)r#   r$   r%   rj   r   r   r6   r;   rF   rH   rL   r   r   )r"   r   r_   q  s$   	r_   c                   sm   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
   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   r6     s    	zAlterModelManagers.deconstructc             C   sE   | j  | |  j f } t |  j  | _ | j | |  j d d d  S)Nro   T)r   r   r7   r)   rv   )r   r   r:   rx   r   r   r   r;     s    z!AlterModelManagers.state_forwardsc             C   s   d  S)Nr   )r   r   rB   rC   rD   r   r   r   rF     s    z$AlterModelManagers.database_forwardsc             C   s   d  S)Nr   )r   r   rB   rC   rD   r   r   r   rH     s    z%AlterModelManagers.database_backwardsc             C   s   d |  j  S)NzChange managers on %s)r   )r   r   r   r   rL     s    zAlterModelManagers.describe)r#   r$   r%   rj   rk   r   r6   r;   rF   rH   rL   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)rw   r   )r   r   r   r   rd     s    zIndexOperation.model_name_lowerN)r#   r$   r%   ra   r   rd   r   r   r   r   r     s   r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z 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.)rw   r   r   ry   )r   rw   ry   r   r   r   r     s    		
zAddIndex.__init__c             C   s_   | j  | |  j f } | j |  j |  j j   f  | j |  j <| j | |  j d d d  S)Nro   T)r   rd   r(   ra   ry   rp   rv   )r   r   r:   rx   r   r   r   r;     s    ,zAddIndex.state_forwardsc             C   sG   | j  j | |  j  } |  j | j j |  rC | j | |  j  d  S)N)r<   r=   rw   r>   r?   r@   	add_indexry   )r   r   rB   rC   rD   rE   r   r   r   rF     s    zAddIndex.database_forwardsc             C   sG   | j  j | |  j  } |  j | j j |  rC | j | |  j  d  S)N)r<   r=   rw   r>   r?   r@   remove_indexry   )r   r   rB   rC   rD   rE   r   r   r   rH     s    zAddIndex.database_backwardsc             C   s+   d |  j  d |  j i } |  j j g  | f S)Nrw   ry   )rw   ry   r"   r%   )r   r5   r   r   r   r6     s
    		zAddIndex.deconstructc             C   s)   d |  j  j d j |  j  j  |  j f S)Nz*Create index %s on field(s) %s of model %sz, )ry   r   joinr'   rw   )r   r   r   r   rL     s    	zAddIndex.describeN)
r#   r$   r%   rj   r   r;   rF   rH   r6   rL   r   r   r   r   r     s   	r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)RemoveIndexzRemove an index from a model.c             C   s   | |  _  | |  _ d  S)N)rw   r   )r   rw   r   r   r   r   r      s    	zRemoveIndex.__init__c                sf   | 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 Sr   )r   )r*   idx)r   r   r   rS     s   	 z.RemoveIndex.state_forwards.<locals>.<listcomp>ro   T)r   rd   r(   ra   rv   )r   r   r:   rx   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=   rw   r>   r?   r@   r   rd   get_index_by_namer   r   )r   r   rB   rC   rD   rE   from_model_statery   r   r   r   rF   
  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=   rw   r>   r?   r@   r   rd   r   r   r   )r   r   rB   rC   rD   rE   to_model_statery   r   r   r   rH     s
    zRemoveIndex.database_backwardsc             C   s+   d |  j  d |  j i } |  j j g  | f S)Nrw   r   )rw   r   r"   r%   )r   r5   r   r   r   r6     s
    		zRemoveIndex.deconstructc             C   s   d |  j  |  j f S)NzRemove index %s from %s)r   rw   )r   r   r   r   rL   #  s    zRemoveIndex.describeN)
r#   r$   r%   rj   r   r;   rF   rH   r6   rL   r   r   r   r   r     s   r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)AddConstraintconstraintsc             C   s   | |  _  | |  _ d  S)N)rw   
constraint)r   rw   r   r   r   r   r   *  s    	zAddConstraint.__init__c             C   sY   | j  | |  j f } | j |  j |  j f  | j |  j <| j | |  j d d d  S)Nro   T)r   rd   r(   ra   r   rv   )r   r   r:   rx   r   r   r   r;   .  s    &zAddConstraint.state_forwardsc             C   sG   | j  j | |  j  } |  j | j j |  rC | j | |  j  d  S)N)r<   r=   rw   r>   r?   r@   add_constraintr   )r   r   rB   rC   rD   rE   r   r   r   rF   3  s    zAddConstraint.database_forwardsc             C   sG   | j  j | |  j  } |  j | j j |  rC | j | |  j  d  S)N)r<   r=   rw   r>   r?   r@   remove_constraintr   )r   r   rB   rC   rD   rE   r   r   r   rH   8  s    z AddConstraint.database_backwardsc             C   s%   |  j  j g  d |  j d |  j i f S)Nrw   r   )r"   r#   rw   r   )r   r   r   r   r6   =  s    	zAddConstraint.deconstructc             C   s   d |  j  j |  j f S)Nz Create constraint %s on model %s)r   r   rw   )r   r   r   r   rL   C  s    zAddConstraint.describeN)
r#   r$   r%   ra   r   r;   rF   rH   r6   rL   r   r   r   r   r   '  s   r   c               @   s^   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)RemoveConstraintr   c             C   s   | |  _  | |  _ d  S)N)rw   r   )r   rw   r   r   r   r   r   J  s    	zRemoveConstraint.__init__c                sf   | 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 Sr   )r   )r*   c)r   r   r   rS   Q  s   	 z3RemoveConstraint.state_forwards.<locals>.<listcomp>ro   T)r   rd   r(   ra   rv   )r   r   r:   rx   r   r   )r   r   r;   N  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=   rw   r>   r?   r@   r   rd   get_constraint_by_namer   r   )r   r   rB   rC   rD   rE   r   r   r   r   r   rF   T  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=   rw   r>   r?   r@   r   rd   r   r   r   )r   r   rB   rC   rD   rE   r   r   r   r   r   rH   [  s
    z#RemoveConstraint.database_backwardsc             C   s%   |  j  j g  d |  j d |  j i f S)Nrw   r   )r"   r#   rw   r   )r   r   r   r   r6   b  s    	zRemoveConstraint.deconstructc             C   s   d |  j  |  j f S)Nz"Remove constraint %s from model %s)r   rw   )r   r   r   r   rL   h  s    zRemoveConstraint.describeN)
r#   r$   r%   ra   r   r;   rF   rH   r6   rL   r   r   r   r   r   G  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`   r   r   rc   r_   r   r   r   r   r   r   r   r   r   r   <module>   s0   (
#28;7.* 