

_VU                 @   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 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)normalize_together)six)cached_propertyc               @   s   e  Z d  Z d Z d d d g Z d d d 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 S)CreateModelz!
    Create a model's table.
    fieldsoptionsmanagersNc             C   sI   | |  _  | |  _ | p i  |  _ | p0 t j f |  _ | p? g  |  _ d  S)N)namer
   r   r   Modelbasesr   )selfr   r
   r   r   r    r   H/tmp/pip-build-ghmbqnp_/Django/django/db/migrations/operations/models.py__init__   s
    		zCreateModel.__init__c             C   s   |  j  j   S)N)r   lower)r   r   r   r   
name_lower   s    zCreateModel.name_lowerc             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   r   r   Manager	__class____name__)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   	app_labelstater   r   r   state_forwards.   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_forwards8   s    zCreateModel.database_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r!   r"   r   r#   r$   r%   delete_model)r   r   r'   r(   r)   r*   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   describeB   s    zCreateModel.describec             C   s   |  j  g } x@ |  j D]5 } t | t j  r | j | j d  d  q q Wx^ |  j D]S \ } } | j rY t | j j	 t j  r | j | j j	 j d  d  q qY qY Wx* | D]" } | j
   | j
   k r d Sq Wd S)N.   TFr4   )r   r   
isinstancer   string_typesappendsplitr
   remote_fieldr*   r   )r   r   r   Zstrings_to_checkbasefnamefieldstringr   r   r   references_modelE   s    !	*zCreateModel.references_model)r   
__module____qualname____doc__serialization_expand_argsr   r   r   r   r    r+   r-   r1   r>   r   r   r   r   r	      s   
r	   c               @   s   e  Z d  Z d Z 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 S)DeleteModelz 
    Drops a model's table.
    c             C   s   | |  _  d  S)N)r   )r   r   r   r   r   r   \   s    zDeleteModel.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r   _   s    zDeleteModel.name_lowerc             C   s#   i |  j  d 6} |  j j g  | f S)Nr   )r   r   r   )r   r   r   r   r   r   c   s
    	zDeleteModel.deconstructc             C   s   | j  | |  j  d  S)N)remove_modelr   )r   r   r   r   r   r   r    m   s    zDeleteModel.state_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r!   r"   r   r#   r$   r%   r,   )r   r   r'   r(   r)   r*   r   r   r   r+   p   s    zDeleteModel.database_forwardsc             C   sD   | j  j | |  j  } |  j | j j |  r@ | j |  n  d  S)N)r!   r"   r   r#   r$   r%   r&   )r   r   r'   r(   r)   r*   r   r   r   r-   u   s    zDeleteModel.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>   z   s    zDeleteModel.references_modelc             C   s   d |  j  f S)NzDelete model %s)r   )r   r   r   r   r1   }   s    zDeleteModel.describe)r   r?   r@   rA   r   r   r   r   r    r+   r-   r>   r1   r   r   r   r   rC   W   s   
rC   c               @   s   e  Z d  Z d Z 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 S)RenameModelz
    Renames a model.
    c             C   s   | |  _  | |  _ d  S)N)old_namenew_name)r   rF   rG   r   r   r   r      s    	zRenameModel.__init__c             C   s   |  j  j   S)N)rF   r   )r   r   r   r   old_name_lower   s    zRenameModel.old_name_lowerc             C   s   |  j  j   S)N)rG   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)NrF   rG   )rF   rG   r   r   )r   r   r   r   r   r      s    
	zRenameModel.deconstructc             C   s  | j  } | j | |  j  } | | j _  d d   | j j d d  D } | j | |  j f | j | |  j f <|  j | j | |  j f _	 | j
 | |  j  x | D] } | j | k	 r q n  | j | k r | |  j f } n | j j j | j j j f } g  } xk | j | j D]Y \ }	 }
 |	 | j j	 k r_|
 j   }
 d | |  j f |
 j _ n  | j |	 |
 f  qW| | j | _ | j |   q W| j | |  j  d  S)Nc             s   s;   |  ]1 } | j  r | j r | j s/ | j r | Vq d  S)N)auto_createdZconcretehiddenZmany_to_many).0fr   r   r   	<genexpr>   s    z-RenameModel.state_forwards.<locals>.<genexpr>Zinclude_hiddenTz%s.%s)r!   r"   rF   _metaZ
get_fieldsr   rH   rI   rG   r   rD   r*   related_modelr   
model_namer
   r<   cloner9   r7   reload_model)r   r   r   r!   r*   Zall_related_objectsrelated_objectrelated_key
new_fieldsr   r<   r   r   r   r       s.    	"&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"   rG   r#   r$   r%   rF   alter_db_tablerO   db_tableZrelated_objectsrP   rI   r   rQ   	get_fieldr<   r   Zalter_fieldziplocal_many_to_manyr*   r9   throughrJ   )r   r   r'   r(   r)   	new_model	old_modelrT   r*   rU   Zto_fieldr
   	old_field	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   r+      sF    			%	zRenameModel.database_forwardsc             C   s~   |  j  |  j |  _ |  _  |  j |  j |  _ |  _ |  j | | | |  |  j  |  j |  _ |  _  |  j |  j |  _ |  _ d  S)N)rH   rI   rF   rG   r+   )r   r   r'   r(   r)   r   r   r   r-      s
    zRenameModel.database_backwardsNc             C   s(   | j    |  j k p' | j    |  j k S)N)r   rH   rI   )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)rF   rG   )r   r   r   r   r1     s    zRenameModel.describe)r   r?   r@   rA   r   r   rH   rI   r   r    r+   r-   r>   r1   r   r   r   r   rE      s   %3	rE   c               @   s   e  Z d  Z d Z 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 S)AlterModelTablez!
    Renames a model's table
    c             C   s   | |  _  | |  _ d  S)N)r   table)r   r   rb   r   r   r   r     s    	zAlterModelTable.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r     s    zAlterModelTable.name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   rb   )r   rb   r   r   )r   r   r   r   r   r     s    
	zAlterModelTable.deconstructc             C   s7   |  j  | j | |  j f j d <| j | |  j  d  S)NrX   )rb   r   r   r   rS   )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#   r$   r%   rW   rO   rX   rZ   r[   r9   r\   rJ   )	r   r   r'   r(   r)   r]   r^   r_   r`   r   r   r   r+   $  s    	(	z!AlterModelTable.database_forwardsc             C   s   |  j  | | | |  S)N)r+   )r   r   r'   r(   r)   r   r   r   r-   6  s    z"AlterModelTable.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>   9  s    z AlterModelTable.references_modelc             C   s   d |  j  |  j f S)NzRename table for %s to %s)r   rb   )r   r   r   r   r1   <  s    zAlterModelTable.describe)r   r?   r@   rA   r   r   r   r   r    r+   r-   r>   r1   r   r   r   r   ra     s   ra   c               @   s   e  Z d  Z d Z d Z 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 d  Z d d   Z d 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             C   s5   | |  _  t |  } t d d   | D  |  _ d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r   )rL   consr   r   r   rN   J  s    z/AlterUniqueTogether.__init__.<locals>.<genexpr>)r   r   setrd   )r   r   rd   r   r   r   r   G  s    	zAlterUniqueTogether.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r   L  s    zAlterUniqueTogether.name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   rd   )r   rd   r   r   )r   r   r   r   r   r   P  s    
	zAlterUniqueTogether.deconstructc             C   s@   | j  | |  j f } |  j | j |  j <| j | |  j  d  S)N)r   r   rd   r   option_namerS   )r   r   r   model_stater   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#   r$   r%   Zalter_unique_togethergetattrrO   rg   rf   )r   r   r'   r(   r)   r]   r^   r   r   r   r+   `  s    z%AlterUniqueTogether.database_forwardsc             C   s   |  j  | | | |  S)N)r+   )r   r   r'   r(   r)   r   r   r   r-   j  s    z&AlterUniqueTogether.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>   m  s    z$AlterUniqueTogether.references_modelc                s<   |  j  | |  o; |  j p; t   f d d   |  j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )rL   together)r   r   r   rN   u  s    z7AlterUniqueTogether.references_field.<locals>.<genexpr>)r>   rd   any)r   rQ   r   r   r   )r   r   references_fieldp  s    
z$AlterUniqueTogether.references_fieldc             C   s&   d |  j  |  j t |  j p d  f S)Nz"Alter %s for %s (%s constraint(s))r/   )rg   r   lenrd   )r   r   r   r   r1   y  s    zAlterUniqueTogether.describe)r   r?   r@   rA   rg   r   r   r   r   r    r+   r-   r>   rl   r1   r   r   r   r   rc   @  s   
	rc   c               @   s   e  Z d  Z d Z d Z 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 d  Z d d   Z d 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             C   s5   | |  _  t |  } t d d   | D  |  _ d  S)Nc             s   s   |  ] } t  |  Vq d  S)N)r   )rL   re   r   r   r   rN     s    z.AlterIndexTogether.__init__.<locals>.<genexpr>)r   r   rf   ro   )r   r   ro   r   r   r   r     s    	zAlterIndexTogether.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r     s    zAlterIndexTogether.name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   ro   )r   ro   r   r   )r   r   r   r   r   r     s    
	zAlterIndexTogether.deconstructc             C   s@   | j  | |  j f } |  j | j |  j <| j | |  j  d  S)N)r   r   ro   r   rg   rS   )r   r   r   rh   r   r   r   r      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#   r$   r%   Zalter_index_togetherri   rO   rg   rf   )r   r   r'   r(   r)   r]   r^   r   r   r   r+     s    z$AlterIndexTogether.database_forwardsc             C   s   |  j  | | | |  S)N)r+   )r   r   r'   r(   r)   r   r   r   r-     s    z%AlterIndexTogether.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>     s    z#AlterIndexTogether.references_modelc                s<   |  j  | |  o; |  j p; t   f d d   |  j D  S)Nc             3   s   |  ] }   | k Vq d  S)Nr   )rL   rj   )r   r   r   rN     s    z6AlterIndexTogether.references_field.<locals>.<genexpr>)r>   ro   rk   )r   rQ   r   r   r   )r   r   rl     s    
z#AlterIndexTogether.references_fieldc             C   s&   d |  j  |  j t |  j p d  f S)Nz"Alter %s for %s (%s constraint(s))r/   )rg   r   rm   ro   )r   r   r   r   r1     s    zAlterIndexTogether.describe)r   r?   r@   rA   rg   r   r   r   r   r    r+   r-   r>   rl   r1   r   r   r   r   rn   }  s   
	rn   c               @   s   e  Z d  Z d Z 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 d  Z d d   Z d S)AlterOrderWithRespectTozD
    Represents a change with the order_with_respect_to option.
    c             C   s   | |  _  | |  _ d  S)N)r   order_with_respect_to)r   r   rq   r   r   r   r     s    	z AlterOrderWithRespectTo.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r     s    z"AlterOrderWithRespectTo.name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   rq   )r   rq   r   r   )r   r   r   r   r   r     s    
	z#AlterOrderWithRespectTo.deconstructc             C   s=   | j  | |  j f } |  j | j d <| j | |  j  d  S)Nrq   )r   r   rq   r   rS   )r   r   r   rh   r   r   r   r      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#   r$   r%   rO   rq   Zremove_fieldrY   Zhas_defaultdefaultZ	add_field)r   r   r'   r(   r)   Zto_modelZ
from_modelr<   r   r   r   r+     s    z)AlterOrderWithRespectTo.database_forwardsc             C   s   |  j  | | | |  d  S)N)r+   )r   r   r'   r(   r)   r   r   r   r-     s    z*AlterOrderWithRespectTo.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>     s    z(AlterOrderWithRespectTo.references_modelc             C   s.   |  j  | |  o- |  j d  k p- | |  j k S)N)r>   rq   )r   rQ   r   r   r   r   r   rl     s    z(AlterOrderWithRespectTo.references_fieldc             C   s   d |  j  |  j f S)Nz%Set order_with_respect_to on %s to %s)r   rq   )r   r   r   r   r1     s    z AlterOrderWithRespectTo.describe)r   r?   r@   rA   r   r   r   r   r    r+   r-   r>   rl   r1   r   r   r   r   rp     s   	rp   c               @   s   e  Z d  Z d Z d d d d d d d d	 g Z 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 S)AlterModelOptionsz
    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get_latest_byZmanagedZorderingpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc             C   s   | |  _  | |  _ d  S)N)r   r   )r   r   r   r   r   r   r     s    	zAlterModelOptions.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r     s    zAlterModelOptions.name_lowerc             C   s-   i |  j  d 6|  j d 6} |  j j g  | f S)Nr   r   )r   r   r   r   )r   r   r   r   r   r     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  S)N)r   r   r   r   updateALTER_OPTION_KEYSrS   )r   r   r   rh   keyr   r   r   r    "  s    z AlterModelOptions.state_forwardsc             C   s   d  S)Nr   )r   r   r'   r(   r)   r   r   r   r+   +  s    z#AlterModelOptions.database_forwardsc             C   s   d  S)Nr   )r   r   r'   r(   r)   r   r   r   r-   .  s    z$AlterModelOptions.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>   1  s    z"AlterModelOptions.references_modelc             C   s   d |  j  f S)NzChange Meta options on %s)r   )r   r   r   r   r1   4  s    zAlterModelOptions.describe)r   r?   r@   rA   rv   r   r   r   r   r    r+   r-   r>   r1   r   r   r   r   rs     s"   		rs   c               @   s   e  Z d  Z d Z d g Z 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 S)AlterModelManagersz%
    Alters the model's managers
    r   c             C   s   | |  _  | |  _ d  S)N)r   r   )r   r   r   r   r   r   r   ?  s    	zAlterModelManagers.__init__c             C   s   |  j  j   S)N)r   r   )r   r   r   r   r   C  s    zAlterModelManagers.name_lowerc             C   s   |  j  j |  j |  j g i  f S)N)r   r   r   r   )r   r   r   r   r   G  s    	zAlterModelManagers.deconstructc             C   s?   | j  | |  j f } t |  j  | _ | j | |  j  d  S)N)r   r   r   r   rS   )r   r   r   rh   r   r   r   r    N  s    z!AlterModelManagers.state_forwardsc             C   s   d  S)Nr   )r   r   r'   r(   r)   r   r   r   r+   S  s    z$AlterModelManagers.database_forwardsc             C   s   d  S)Nr   )r   r   r'   r(   r)   r   r   r   r-   V  s    z%AlterModelManagers.database_backwardsNc             C   s   | j    |  j k S)N)r   r   )r   r   r   r   r   r   r>   Y  s    z#AlterModelManagers.references_modelc             C   s   d |  j  f S)NzChange managers on %s)r   )r   r   r   r   r1   \  s    zAlterModelManagers.describe)r   r?   r@   rA   rB   r   r   r   r   r    r+   r-   r>   r1   r   r   r   r   rx   8  s   	rx   N)
__future__r   Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utilsr   Zdjango.utils.functionalr   r	   rC   rE   ra   rc   rn   rp   rs   rx   r   r   r   r   <module>   s   L*8==B<