ó
®â0_c           @  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 e	 f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   unicode_literals(   t   FieldDoesNotExist(   t   NOT_PROVIDED(   t   cached_propertyi   (   t	   Operation(   t   is_referenced_by_foreign_keyt   FieldOperationc           B  se   e  Z d  „  Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d d „ Z	 d d „ Z
 d d „ Z RS(	   c         C  s   | |  _  | |  _ d  S(   N(   t
   model_namet   name(   t   selfR   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   __init__   s    	c         C  s   |  j  j ƒ  S(   N(   R   t   lower(   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   model_name_lower   s    c         C  s   |  j  j ƒ  S(   N(   R   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt
   name_lower   s    c         C  s   |  j  | j  k S(   N(   R   (   R	   t	   operation(    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   is_same_model_operation   s    c         C  s   |  j  | ƒ o |  j | j k S(   N(   R   R   (   R	   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   is_same_field_operation   s    c         C  s   | j  ƒ  |  j k S(   N(   R   R   (   R	   R   t	   app_label(    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   references_model   s    c         C  s"   |  j  | ƒ o! | j ƒ  |  j k S(   N(   R   R   R   (   R	   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   references_field!   s    c         C  s;   t  t |  ƒ j | | d | ƒp: | j |  j |  j | ƒ S(   NR   (   t   superR   t   reduceR   R   R   (   R	   R   t
   in_betweenR   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   $   s    !N(   t   __name__t
   __module__R
   R   R   R   R   R   t   NoneR   R   R   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR      s   			t   AddFieldc           B  sS   e  Z d  Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d „ Z RS(	   u"   
    Adds a field to a model.
    c         C  s/   | |  _  | |  _ t t |  ƒ j | | ƒ d  S(   N(   t   fieldt   preserve_defaultR   R   R
   (   R	   R   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR
   0   s    		c         C  sV   i |  j  d 6|  j d 6|  j d 6} |  j t k	 rC |  j | d <n  |  j j g  | f S(   Nu
   model_nameu   nameu   fieldu   preserve_default(   R   R   R   R   t   Truet	   __class__R   (   R	   t   kwargs(    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   deconstruct5   s    

	c         C  s}   |  j  s$ |  j j ƒ  } t | _ n	 |  j } | j | |  j f j j |  j	 | f ƒ | j
 } | j | |  j d | ƒd  S(   Nt   delay(   R   R   t   cloneR   t   defaultt   modelsR   t   fieldst   appendR   t   is_relationt   reload_model(   R	   R   t   stateR   R!   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   state_forwardsC   s    		)
c         C  s¤   | j  j | |  j ƒ } |  j | j j | ƒ r  | j  j | |  j ƒ } | j j |  j ƒ } |  j	 sx |  j
 j | _ n  | j | | ƒ |  j	 s  t | _ q  n  d  S(   N(   t   appst	   get_modelR   t   allow_migrate_modelt
   connectiont   aliast   _metat	   get_fieldR   R   R   R#   t	   add_fieldR   (   R	   R   t   schema_editort
   from_statet   to_statet   to_modelt
   from_modelR   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   database_forwardsO   s    		c         C  sV   | j  j | |  j ƒ } |  j | j j | ƒ rR | j | | j j |  j	 ƒ ƒ n  d  S(   N(
   R+   R,   R   R-   R.   R/   t   remove_fieldR0   R1   R   (   R	   R   R3   R4   R5   R7   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   database_backwards]   s    c         C  s   d |  j  |  j f S(   Nu   Add field %s to %s(   R   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   describeb   s    c         C  s»   t  | t ƒ rœ |  j | ƒ rœ t  | t ƒ rR t d |  j d | j d | j ƒ g St  | t ƒ re g  St  | t	 ƒ rœ t d |  j d | j
 d |  j ƒ g Sn  t t |  ƒ j | | d | ƒS(   NR   R   R   R   (   t
   isinstanceR   R   t
   AlterFieldR   R   R   R   t   RemoveFieldt   RenameFieldt   new_nameR   R   (   R	   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   e   s    				N(   R   R   t   __doc__R   R
   R    R*   R8   R:   R;   R   R   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   +   s   					R>   c           B  s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   u'   
    Removes a field from a model.
    c         C  s-   i |  j  d 6|  j d 6} |  j j g  | f S(   Nu
   model_nameu   name(   R   R   R   R   (   R	   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR       s    
	c         C  s¡   g  } d  } xR | j | |  j f j D]7 \ } } | |  j k rW | j | | f ƒ q& | } q& W| | j | |  j f _ | j } | j | |  j d | ƒd  S(   NR!   (   R   R$   R   R%   R   R&   R'   R(   (   R	   R   R)   t
   new_fieldst	   old_fieldR   t   instanceR!   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR*   Œ   s    &

c         C  sV   | j  j | |  j ƒ } |  j | j j | ƒ rR | j | | j j |  j	 ƒ ƒ n  d  S(   N(
   R+   R,   R   R-   R.   R/   R9   R0   R1   R   (   R	   R   R3   R4   R5   R7   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR8   ™   s    c         C  sn   | j  j | |  j ƒ } |  j | j j | ƒ rj | j  j | |  j ƒ } | j | | j j |  j	 ƒ ƒ n  d  S(   N(
   R+   R,   R   R-   R.   R/   R2   R0   R1   R   (   R	   R   R3   R4   R5   R6   R7   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR:   ž   s    c         C  s   d |  j  |  j f S(   Nu   Remove field %s from %s(   R   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR;   ¤   s    (   R   R   RA   R    R*   R8   R:   R;   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR>   |   s   				R=   c           B  sS   e  Z d  Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d d „ Z RS(	   u\   
    Alters a field's database column (e.g. null, max_length) to the provided new field
    c         C  s/   | |  _  | |  _ t t |  ƒ j | | ƒ d  S(   N(   R   R   R   R=   R
   (   R	   R   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR
   ­   s    		c         C  sV   i |  j  d 6|  j d 6|  j d 6} |  j t k	 rC |  j | d <n  |  j j g  | f S(   Nu
   model_nameu   nameu   fieldu   preserve_default(   R   R   R   R   R   R   R   (   R	   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR    ²   s    

	c         C  sÓ   |  j  s$ |  j j ƒ  } t | _ n	 |  j } g  | j | |  j f j D]- \ } } | | |  j k rk | n | f ^ qG | j | |  j f _ | j	 o³ t
 | |  j |  j |  j ƒ } | j | |  j d | ƒd  S(   NR!   (   R   R   R"   R   R#   R$   R   R%   R   R'   R   R(   (   R	   R   R)   R   t   nt   fR!   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR*   À   s    		]
c   	      C  s¼   | j  j | |  j ƒ } |  j | j j | ƒ r¸ | j  j | |  j ƒ } | j j |  j ƒ } | j j |  j ƒ } |  j	 s |  j
 j | _ n  | j | | | ƒ |  j	 s¸ t | _ q¸ n  d  S(   N(   R+   R,   R   R-   R.   R/   R0   R1   R   R   R   R#   t   alter_fieldR   (	   R	   R   R3   R4   R5   R6   R7   t
   from_fieldt   to_field(    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR8   Õ   s    		c         C  s   |  j  | | | | ƒ d  S(   N(   R8   (   R	   R   R3   R4   R5   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR:   á   s    c         C  s   d |  j  |  j f S(   Nu   Alter field %s on %s(   R   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR;   ä   s    c         C  sŠ   t  | t ƒ r% |  j | ƒ r% | g St  | t ƒ rk |  j | ƒ rk | t d |  j d | j d |  j ƒ g St t |  ƒ j	 | | d | ƒS(   NR   R   R   R   (
   R<   R>   R   R?   R=   R   R@   R   R   R   (   R	   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   ç   s    		N(   R   R   RA   R   R
   R    R*   R8   R:   R;   R   R   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR=   ¨   s   					R?   c           B  sz   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d d	 „ Z d d
 „ Z RS(   uC   
    Renames a field on the model. Might affect db_column too.
    c         C  s/   | |  _  | |  _ t t |  ƒ j | | ƒ d  S(   N(   t   old_nameR@   R   R?   R
   (   R	   R   RJ   R@   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR
   û   s    		c         C  s   |  j  j ƒ  S(   N(   RJ   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   old_name_lower   s    c         C  s   |  j  j ƒ  S(   N(   R@   R   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   new_name_lower  s    c         C  s7   i |  j  d 6|  j d 6|  j d 6} |  j j g  | f S(   Nu
   model_nameu   old_nameu   new_name(   R   RJ   R@   R   R   (   R	   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR      s    

	c         C  s?  | j  | |  j f } | j } x‹ t | ƒ D]^ \ } \ } } | |  j k r, |  j | f | | <| j oƒ t | |  j | |  j ƒ } Pq, q, Wt	 d | |  j
 |  j f ƒ ‚ | j }	 xi d D]a }
 |
 |	 k r½ g  |	 |
 D]7 } g  | D]$ } | |  j k r|  j n | ^ qç ^ qÚ |	 |
 <q½ q½ W| j | |  j d | ƒd  S(   Nu   %s.%s has no field named '%s'u   index_togetheru   unique_togetherR!   (   u   index_togetheru   unique_together(   R$   R   R%   t	   enumerateRJ   R@   R'   R   R   R   R   t   optionsR(   (   R	   R   R)   t   model_stateR%   t   indexR   R   R!   RN   t   optiont   togetherRE   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR*     s     	
	Pc         C  s€   | j  j | |  j ƒ } |  j | j j | ƒ r| | j  j | |  j ƒ } | j | | j j |  j	 ƒ | j j |  j
 ƒ ƒ n  d  S(   N(   R+   R,   R   R-   R.   R/   RG   R0   R1   RJ   R@   (   R	   R   R3   R4   R5   R6   R7   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR8   0  s    c         C  s€   | j  j | |  j ƒ } |  j | j j | ƒ r| | j  j | |  j ƒ } | j | | j j |  j	 ƒ | j j |  j
 ƒ ƒ n  d  S(   N(   R+   R,   R   R-   R.   R/   RG   R0   R1   R@   RJ   (   R	   R   R3   R4   R5   R6   R7   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR:   :  s    c         C  s   d |  j  |  j |  j f S(   Nu   Rename field %s on %s to %s(   RJ   R   R@   (   R	   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR;   D  s    c         C  s7   |  j  | ƒ o6 | j ƒ  |  j k p6 | j ƒ  |  j k S(   N(   R   R   RK   RL   (   R	   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   G  s    c         C  s‡   t  | t ƒ rL |  j | ƒ rL |  j | j k rL t |  j |  j | j ƒ g St t	 |  ƒ j
 | | d | ƒp† | j |  j |  j | ƒ S(   NR   (   R<   R?   R   RL   RK   R   RJ   R@   R   R   R   R   (   R	   R   R   R   (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR   M  s    !N(   R   R   RA   R
   R   RK   RL   R    R*   R8   R:   R;   R   R   R   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyR?   ö   s   				
	
	N(   t
   __future__R    t   django.core.exceptionsR   t   django.db.models.fieldsR   t   django.utils.functionalR   t   baseR   t   utilsR   R   R   R>   R=   R?   (    (    (    sH   /tmp/pip-unpacked-wheel-BAJOf3/django/db/migrations/operations/fields.pyt   <module>   s    Q,N