
^Q\>                 @   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 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   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),    )unicode_literals)models)	Operation)
ModelState)RECURSIVE_RELATIONSHIP_CONSTANT)normalize_together)six)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameFieldc             C   sP   t    } x@ | D]8 } | | k r; t d | |  f   n  | j |  q Wd  S)Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   L/var/www/dbchiro/venv/build/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                s5   t  t |   j | | d | p4 | j |  j |  S)Nr   )superr   reducer   r   )r   	operation
in_betweenr   )	__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 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 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>;   s    z'CreateModel.__init__.<locals>.<genexpr>basesc             s   sN   |  ]D } t  | d   r$ | j j n! t | t j  rB | j   n | Vq d S)_metaN)hasattrr0   Zlabel_lower
isinstancer   string_typesr   )r,   baser   r   r   r.   =   s   r+   c             s   s   |  ] \ } } | Vq d  S)Nr   )r,   r   r-   r   r   r   r.   A   s    )
r)   r*   r   Modelr/   r+   r    r(   r   r   )r   r   r)   r*   r/   r+   )r$   r   r   r   3   s    		zCreateModel.__init__c             C   s   i |  j  d 6|  j d 6} |  j r3 |  j | d <n  |  j ra |  j t j f k ra |  j | d <n  |  j r |  j d t j   f g k r |  j | d <n  |  j j	 g  | f S)Nr   r)   r*   r/   Zobjectsr+   )
r   r)   r*   r/   r   r5   r+   Managerr$   r%   )r   kwargsr   r   r   deconstructC   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_forwardsT   s    	zCreateModel.state_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  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_forwards^   s    zCreateModel.database_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r>   r?   r   r@   rA   rB   delete_model)r   r   rD   rE   rF   rG   r   r   r   database_backwardsc   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   describeh   s    zCreateModel.describec       
      C   s   | j    } | |  j k r d Sd d   |  j D } x6 |  j D]+ \ } } | j r? | j | j j  q? q? Wx[ | D]S } |  j |  \ } }	 |	 j    | k ru | d  k s | s | | k r d Squ qu Wd S)NTc             S   sC   g  |  ]9 } | t  j k	 r t | t  j j t j f  r |  q Sr   )r   r5   r2   r4   Z	ModelBaser   r3   )r,   r4   r   r   r   
<listcomp>r   s   	 z0CreateModel.references_model.<locals>.<listcomp>F)r   r   r/   r)   remote_fieldappendrG   model_to_key)
r   r   r   r   Zmodels_to_checkfnamefieldrG   model_app_label
model_namer   r   r   r   k   s    	zCreateModel.references_modelc             C   s<   t  | t j  r" | j d d  S| j j | j j f Sd S)z{
        Take either a model class or an "app_label.ModelName" string
        and return (app_label, object_name).
        .r
   N)r2   r   r3   splitr0   r   object_name)r   rG   r   r   r   rR      s    zCreateModel.model_to_keyc          
      sQ  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|  j j   } | j   j  t |  j d |  j	 d | d |  j
 d |  j g St    t  r2|  j   j k r2t    t  r-t   j d  r  j j rx | D] } |  j   j j j  \ } } | j | |  rd St   j j d d   rV|  j   j j j  \ } } | j | |  rd SqVqVWn  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  rt |  j d   f d d
   |  j	 D d |  j d |  j
 d |  j g St    t  r2t |  j d   f d d
   |  j	 D d |  j d |  j
 d |  j g Sn  t t |   j   | d | S)NrK   Fr)   r*   r/   r+   rP   throughc                s:   g  |  ]0 \ } } | |   j  k r-   j n | f  q Sr   )r   rT   )r,   nv)r"   r   r   rO      s   	z&CreateModel.reduce.<locals>.<listcomp>c                s7   g  |  ]- \ } } | j      j k r | | f  q Sr   )r   r   )r,   r[   r\   )r"   r   r   rO      s   		c                s:   g  |  ]0 \ } } |   j  k r*   j n | | f  q Sr   )old_namenew_name)r,   r[   r\   )r"   r   r   rO      s   	r   ) r2   DeleteModelr   r*   rM   RenameModelold_name_lowerr(   r^   r)   r/   r+   AlterModelOptionscopyupdater   r   model_name_lowerr   r1   rT   rP   rR   rG   r   getattrrZ   r   r   r   r    r!   )r   r"   r#   r   new_optionsZbetweenrY   )r$   )r"   r   r!      s|    !				!			!												zCreateModel.reduce)r%   r&   r'   __doc__serialization_expand_argsr   r8   r=   rH   rJ   rN   r   rR   r!   r   r   )r$   r   r(   ,   s   

r(   c               @   sR   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d S)r_   z 
    Drops a model's table.
    c             C   s#   i |  j  d 6} |  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   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  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   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  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 |  j  f S)NzDelete model %s)r   )r   r   r   r   rN     s    zDeleteModel.describeN)	r%   r&   r'   rh   r8   r=   rH   rJ   rN   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 d  Z d d   Z d   f d d  Z   S)r`   z
    Renames a model.
    c                s,   | |  _  | |  _ t t |   j |  d  S)N)r]   r^   r    r`   r   )r   r]   r^   )r$   r   r   r     s    		zRenameModel.__init__c             C   s   |  j  j   S)N)r]   r   )r   r   r   r   ra     s    zRenameModel.old_name_lowerc             C   s   |  j  j   S)N)r^   r   )r   r   r   r   new_name_lower  s    zRenameModel.new_name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr]   r^   )r]   r^   r$   r%   )r   r7   r   r   r   r8     s    
	zRenameModel.deconstructc             C   sU   | t  k r | | j   f Sd | k rA t | j   j d   S| | j   f Sd  S)NrW   )r   r   r;   rX   )r   Zremote_modelr   rV   r   r   r   _get_model_tuple%  s
    zRenameModel._get_model_tuplec             C   s  | j  | |  j f j   } |  j | _ | | j  | |  j f <| |  j f } d | |  j f } g  } xJ| j  j   D]9\ \ } } }	 d }
 xt |	 j  D] \ } \ } } d  } | j	 } | rm|  j
 | j | |  } | | k r| j   } | | j	 _ n  t | d d   } | rm|  j
 | | |  } | | k rj| d  k rX| j   } n  | | j	 _ qjqmn  | r | | f |	 j | <d }
 q q W|
 rv | j | | f  qv qv W| j | d d | j | |  j  | j | |  j d d d  S)Nz%s.%sFrZ   Tdelay)r   ra   cloner^   r   rk   items	enumerater)   rP   rl   rG   rf   rZ   rQ   Zreload_modelsrj   reload_model)r   r   r<   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadrU   rV   model_stateZmodel_changedindexr   rT   Zchanged_fieldrP   Zremote_model_tupleZthrough_modelZthrough_model_tupler   r   r   r=   -  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(n  | j j } | j j } | j | | j j	 | j j	  | j | | j j | j j  | j j | j j   q(Wn  d  S)N)r>   r?   r^   r@   rA   rB   r]   alter_db_tabler0   db_tableZrelated_objectsZrelated_modelrk   r   rV   	get_fieldrT   r   Zalter_fieldziplocal_many_to_manyrG   rP   rZ   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   V  sF    			%	zRenameModel.database_forwardsc             C   s~   |  j  |  j |  _ |  _  |  j |  j |  _ |  _ |  j | | | |  |  j  |  j |  _ |  _  |  j |  j |  _ |  _ d  S)N)ra   rk   r]   r^   rH   )r   r   rD   rE   rF   r   r   r   rJ     s
    zRenameModel.database_backwardsNc             C   s(   | j    |  j k p' | j    |  j k S)N)r   ra   rk   )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)r]   r^   )r   r   r   r   rN     s    zRenameModel.describec                sl   t  | t  r7 |  j | j k r7 t |  j | j  g St t |   j | | d | pk | j	 |  j |  S)Nr   )
r2   r`   rk   ra   r]   r^   r    r   r!   r   )r   r"   r#   r   )r$   r   r   r!     s    !zRenameModel.reduce)r%   r&   r'   rh   r   r	   ra   rk   r8   rl   r=   rH   rJ   r   rN   r!   r   r   )r$   r   r`     s   )3	r`   c                   sy   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	 d   f d d  Z
   S)AlterModelTablez!
    Renames a model's table
    c                s#   | |  _  t t |   j |  d  S)N)tabler    r~   r   )r   r   r   )r$   r   r   r     s    	zAlterModelTable.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   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)Nru   rm   T)r   r   r   r*   rq   )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  xr t	 | j j
 | j j
  D]R \ } } | j j j j r | j | j j | j j j j | j j j j  q q Wn  d  S)N)r>   r?   r   r@   rA   rB   rt   r0   ru   rw   rx   rP   rZ   ry   )	r   r   rD   rE   rF   rz   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.describeNc                sM   t  | t t f  r. |  j | j k r. | g St t |   j | | d | S)Nr   )r2   r~   r_   r   r    r!   )r   r"   r#   r   )r$   r   r   r!     s    'zAlterModelTable.reduce)r%   r&   r'   rh   r   r8   r=   rH   rJ   rN   r!   r   r   )r$   r   r~     s   r~   c                   s%   e  Z d  Z d   f d d  Z   S)ModelOptionOperationNc                sP   t  | |  j t f  r1 |  j | j k r1 | g St t |   j | | d | S)Nr   )r2   r$   r_   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                   s%   e  Z d  Z d   f d d  Z   S)FieldRelatedOptionOperationNc                sc   t  | t  rD |  j | j k rD |  j | j | j  rD | |  g St t |   j	 | | d | S)Nr   )
r2   r   r   re   references_fieldrV   r   r    r   r!   )r   r"   r#   r   )r$   r   r   r!     s
    
z"FieldRelatedOptionOperation.reduce)r%   r&   r'   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)AlterUniqueTogetherz}
    Changes the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    unique_togetherc                sB   t  |  } t d d   | D  |  _ t t |   j |  d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r;   )r,   consr   r   r   r.     s    z/AlterUniqueTogether.__init__.<locals>.<genexpr>)r   r   r   r    r   r   )r   r   r   )r$   r   r   r     s    zAlterUniqueTogether.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r$   r%   )r   r7   r   r   r   r8     s    
	zAlterUniqueTogether.deconstructc             C   sF   | j  | |  j f } |  j | j |  j <| j | |  j d d d  S)Nrm   T)r   r   r   r*   option_namerq   )r   r   r<   rr   r   r   r   r=     s    z"AlterUniqueTogether.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j | t | j |  j	 t
    t | j |  j	 t
     n  d  S)N)r>   r?   r   r@   rA   rB   Zalter_unique_togetherrf   r0   r   r   )r   r   rD   rE   rF   rz   r{   r   r   r   rH     s    z%AlterUniqueTogether.database_forwardsc             C   s   |  j  | | | |  S)N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z&AlterUniqueTogether.database_backwardsNc                s<   |  j  | |  o; |  j p; t   f d d   |  j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )r,   together)r   r   r   r.   #  s    z7AlterUniqueTogether.references_field.<locals>.<genexpr>)r   r   any)r   rV   r   r   r   )r   r   r     s    
z$AlterUniqueTogether.references_fieldc             C   s&   d |  j  |  j t |  j p d  f S)Nz"Alter %s for %s (%s constraint(s))rL   )r   r   lenr   )r   r   r   r   rN   '  s    zAlterUniqueTogether.describe)r%   r&   r'   rh   r   r   r8   r=   rH   rJ   r   rN   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)AlterIndexTogetherz{
    Changes the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    index_togetherc                sB   t  |  } t d d   | D  |  _ t t |   j |  d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r;   )r,   r   r   r   r   r.   4  s    z.AlterIndexTogether.__init__.<locals>.<genexpr>)r   r   r   r    r   r   )r   r   r   )r$   r   r   r   2  s    zAlterIndexTogether.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r$   r%   )r   r7   r   r   r   r8   7  s    
	zAlterIndexTogether.deconstructc             C   sF   | j  | |  j f } |  j | j |  j <| j | |  j d d d  S)Nrm   T)r   r   r   r*   r   rq   )r   r   r<   rr   r   r   r   r=   B  s    z!AlterIndexTogether.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r | j  j | |  j  } | j | t | j |  j	 t
    t | j |  j	 t
     n  d  S)N)r>   r?   r   r@   rA   rB   Zalter_index_togetherrf   r0   r   r   )r   r   rD   rE   rF   rz   r{   r   r   r   rH   G  s    z$AlterIndexTogether.database_forwardsc             C   s   |  j  | | | |  S)N)rH   )r   r   rD   rE   rF   r   r   r   rJ   Q  s    z%AlterIndexTogether.database_backwardsNc                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.   Y  s    z6AlterIndexTogether.references_field.<locals>.<genexpr>)r   r   r   )r   rV   r   r   r   )r   r   r   T  s    
z#AlterIndexTogether.references_fieldc             C   s&   d |  j  |  j t |  j p d  f S)Nz"Alter %s for %s (%s constraint(s))rL   )r   r   r   r   )r   r   r   r   rN   ]  s    zAlterIndexTogether.describe)r%   r&   r'   rh   r   r   r8   r=   rH   rJ   r   rN   r   r   )r$   r   r   +  s   
	r   c                   ss   e  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)AlterOrderWithRespectTozD
    Represents a change with the order_with_respect_to option.
    c                s#   | |  _  t t |   j |  d  S)N)order_with_respect_tor    r   r   )r   r   r   )r$   r   r   r   f  s    	z AlterOrderWithRespectTo.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r$   r%   )r   r7   r   r   r   r8   j  s    
	z#AlterOrderWithRespectTo.deconstructc             C   sC   | j  | |  j f } |  j | j d <| j | |  j d d d  S)Nr   rm   T)r   r   r   r*   rq   )r   r   r<   rr   r   r   r   r=   u  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   q | j j r | j j r | j j	 d  } | j
   s d | _ n  | j | |  q n  d  S)NZ_orderr   )r>   r?   r   r@   rA   rB   r0   r   Zremove_fieldrv   Zhas_defaultdefaultZ	add_field)r   r   rD   rE   rF   Zto_modelZ
from_modelrT   r   r   r   rH   z  s    z)AlterOrderWithRespectTo.database_forwardsc             C   s   |  j  | | | |  d  S)N)rH   )r   r   rD   rE   rF   r   r   r   rJ     s    z*AlterOrderWithRespectTo.database_backwardsNc             C   s.   |  j  | |  o- |  j d  k p- | |  j k S)N)r   r   )r   rV   r   r   r   r   r   r     s    z(AlterOrderWithRespectTo.references_fieldc             C   s   d |  j  |  j f S)Nz%Set order_with_respect_to on %s to %s)r   r   )r   r   r   r   rN     s    z AlterOrderWithRespectTo.describe)r%   r&   r'   rh   r   r8   r=   rH   rJ   r   rN   r   r   )r$   r   r   a  s   	r   c            
       s   e  Z d  Z d Z 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)rb   z
    Sets 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get_latest_byZmanagedZorderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                s#   | |  _  t t |   j |  d  S)N)r*   r    rb   r   )r   r   r*   )r$   r   r   r     s    	zAlterModelOptions.__init__c             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r*   )r   r*   r$   r%   )r   r7   r   r   r   r8     s    
	zAlterModelOptions.deconstructc             C   s   | j  | |  j f } t | j  | _ | j j |  j  x< |  j D]1 } | |  j k rE | | j k rE | j | =qE qE W| j | |  j d d d  S)Nrm   T)r   r   r:   r*   rd   ALTER_OPTION_KEYSrq   )r   r   r<   rr   keyr   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  f S)NzChange Meta options on %s)r   )r   r   r   r   rN     s    zAlterModelOptions.describe)r%   r&   r'   rh   r   r   r8   r=   rH   rJ   rN   r   r   )r$   r   rb     s"   		rb   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%
    Alters the model's managers
    r+   c                s#   | |  _  t t |   j |  d  S)N)r+   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   sE   | j  | |  j f } t |  j  | _ | j | |  j d d d  S)Nrm   T)r   r   r9   r+   rq   )r   r   r<   rr   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  f S)NzChange managers on %s)r   )r   r   r   r   rN     s    zAlterModelManagers.describe)r%   r&   r'   rh   ri   r   r8   r=   rH   rJ   rN   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)rV   r   )r   r   r   r   re     s    zIndexOperation.model_name_lowerN)r%   r&   r'   r   r	   re   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   s2   | |  _  | j s% t d |   n  | |  _ d  S)NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)rV   r   r   rs   )r   rV   rs   r   r   r   r     s    		zAddIndex.__init__c             C   so   | j  | |  j f } t | j |  j  } | j |  j j    | | j |  j <| j | |  j d d d  S)Nrm   T)	r   re   r9   r*   r   rQ   rs   rn   rq   )r   r   r<   rr   r   r   r   r   r=   
  s
    zAddIndex.state_forwardsc             C   sJ   | j  j | |  j  } |  j | j j |  rF | j | |  j  n  d  S)N)r>   r?   rV   r@   rA   rB   	add_indexrs   )r   r   rD   rE   rF   rG   r   r   r   rH     s    zAddIndex.database_forwardsc             C   sJ   | j  j | |  j  } |  j | j j |  rF | j | |  j  n  d  S)N)r>   r?   rV   r@   rA   rB   remove_indexrs   )r   r   rD   rE   rF   rG   r   r   r   rJ     s    zAddIndex.database_backwardsc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)NrV   rs   )rV   rs   r$   r%   )r   r7   r   r   r   r8     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, )rs   r   joinr)   rV   )r   r   r   r   rN   &  s    	zAddIndex.describeN)
r%   r&   r'   rh   r   r=   rH   rJ   r8   rN   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)rV   r   )r   rV   r   r   r   r   r   3  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   rO   :  s   	 z.RemoveIndex.state_forwards.<locals>.<listcomp>rm   T)r   re   r*   r   rq   )r   r   r<   rr   r   r   )r   r   r=   7  s    #zRemoveIndex.state_forwardsc             C   so   | j  j | |  j  } |  j | j j |  rk | j | |  j f } | j |  j	  } | j
 | |  n  d  S)N)r>   r?   rV   r@   rA   rB   r   re   get_index_by_namer   r   )r   r   rD   rE   rF   rG   Zfrom_model_staters   r   r   r   rH   =  s
    zRemoveIndex.database_forwardsc             C   so   | j  j | |  j  } |  j | j j |  rk | j | |  j f } | j |  j	  } | j
 | |  n  d  S)N)r>   r?   rV   r@   rA   rB   r   re   r   r   r   )r   r   rD   rE   rF   rG   Zto_model_staters   r   r   r   rJ   D  s
    zRemoveIndex.database_backwardsc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)NrV   r   )rV   r   r$   r%   )r   r7   r   r   r   r8   K  s    
	zRemoveIndex.deconstructc             C   s   d |  j  |  j f S)NzRemove index %s from %s)r   rV   )r   r   r   r   rN   V  s    zRemoveIndex.describeN)
r%   r&   r'   rh   r   r=   rH   rJ   r8   rN   r   r   r   r   r   .  s   r   N)&
__future__r   Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.fields.relatedr   Zdjango.db.models.optionsr   Zdjango.utilsr   Zdjango.utils.functionalr	   r)   r   r   r   r   r   r   r   r(   r_   r`   r~   r   r   r   r   r   rb   r   r   r   r   r   r   r   r   <module>   s0   (
 9	66;7!2