
^Q\_5                 @   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 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)FieldDoesNotExist)NOT_PROVIDED)cached_property   )	Operation)is_referenced_by_foreign_keyc                   s   e  Z d  Z d d   Z e d d    Z e d d    Z d d   Z d	 d
   Z d d d  Z	 d d d  Z
 d   f d d  Z   S)FieldOperationc             C   s   | |  _  | |  _ d  S)N)
model_namename)selfr
   r    r   L/var/www/dbchiro/venv/build/Django/django/db/migrations/operations/fields.py__init__   s    	zFieldOperation.__init__c             C   s   |  j  j   S)N)r
   lower)r   r   r   r   model_name_lower   s    zFieldOperation.model_name_lowerc             C   s   |  j  j   S)N)r   r   )r   r   r   r   
name_lower   s    zFieldOperation.name_lowerc             C   s   |  j  | j  k S)N)r   )r   	operationr   r   r   is_same_model_operation   s    z&FieldOperation.is_same_model_operationc             C   s   |  j  |  o |  j | j k S)N)r   r   )r   r   r   r   r   is_same_field_operation   s    z&FieldOperation.is_same_field_operationNc             C   s   | j    |  j k S)N)r   r   )r   r   	app_labelr   r   r   references_model   s    zFieldOperation.references_modelc             C   s"   |  j  |  o! | j   |  j k S)N)r   r   r   )r   r
   r   r   r   r   r   references_field!   s    zFieldOperation.references_fieldc                s;   t  t |   j | | d | p: | j |  j |  j |  S)Nr   )superr	   reducer   r
   r   )r   r   
in_betweenr   )	__class__r   r   r   $   s    !zFieldOperation.reduce)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   )r   r   r	      s   r	   c                   s|   e  Z d  Z d Z d   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)AddFieldz"
    Adds a field to a model.
    Tc                s/   | |  _  | |  _ t t |   j | |  d  S)N)fieldpreserve_defaultr   r    r   )r   r
   r   r!   r"   )r   r   r   r   0   s    		zAddField.__init__c             C   sV   i |  j  d 6|  j d 6|  j d 6} |  j d k	 rC |  j | d <n  |  j j g  | f S)Nr
   r   r!   Tr"   )r
   r   r!   r"   r   r   )r   kwargsr   r   r   deconstruct5   s    

	zAddField.deconstructc             C   s}   |  j  s$ |  j j   } t | _ n	 |  j } | j | |  j f j j |  j	 | f  | j
 } | j | |  j d | d  S)Ndelay)r"   r!   cloner   defaultmodelsr   fieldsappendr   is_relationreload_model)r   r   stater!   r%   r   r   r   state_forwardsC   s    		)
zAddField.state_forwardsc             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)apps	get_modelr
   allow_migrate_model
connectionalias_meta	get_fieldr   r"   r!   r'   	add_fieldr   )r   r   schema_editor
from_stateto_stateto_model
from_modelr!   r   r   r   database_forwardsO   s    		zAddField.database_forwardsc             C   sV   | j  j | |  j  } |  j | j j |  rR | j | | j j |  j	   n  d  S)N)
r/   r0   r
   r1   r2   r3   remove_fieldr4   r5   r   )r   r   r7   r8   r9   r;   r   r   r   database_backwards]   s    zAddField.database_backwardsc             C   s   d |  j  |  j f S)NzAdd field %s to %s)r   r
   )r   r   r   r   describeb   s    zAddField.describeNc                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   )
isinstancer	   r   
AlterFieldr    r
   r   r!   RemoveFieldRenameFieldnew_namer   r   )r   r   r   r   )r   r   r   r   e   s    				zAddField.reduce)r   r   r   __doc__r   r$   r.   r<   r>   r?   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)rB   z'
    Removes a field from a model.
    c             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RemoveField.deconstructc             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-   
new_fieldsZ	old_fieldr   instancer%   r   r   r   r.      s    &

zRemoveField.state_forwardsc             C   sV   | j  j | |  j  } |  j | j j |  rR | j | | j j |  j	   n  d  S)N)
r/   r0   r
   r1   r2   r3   r=   r4   r5   r   )r   r   r7   r8   r9   r;   r   r   r   r<      s    zRemoveField.database_forwardsc             C   sn   | j  j | |  j  } |  j | j j |  rj | j  j | |  j  } | j | | j j |  j	   n  d  S)N)
r/   r0   r
   r1   r2   r3   r6   r4   r5   r   )r   r   r7   r8   r9   r:   r;   r   r   r   r>      s    zRemoveField.database_backwardsc             C   s   d |  j  |  j f S)NzRemove field %s from %s)r   r
   )r   r   r   r   r?      s    zRemoveField.describeN)	r   r   r   rE   r$   r.   r<   r>   r?   r   r   r   r   rB   |   s   rB   c                   s|   e  Z d  Z d Z d   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)rA   z\
    Alters a field's database column (e.g. null, max_length) to the provided new field
    Tc                s/   | |  _  | |  _ t t |   j | |  d  S)N)r!   r"   r   rA   r   )r   r
   r   r!   r"   )r   r   r   r      s    		zAlterField.__init__c             C   sV   i |  j  d 6|  j d 6|  j d 6} |  j d k	 rC |  j | d <n  |  j j g  | f S)Nr
   r   r!   Tr"   )r
   r   r!   r"   r   r   )r   r#   r   r   r   r$      s    

	zAlterField.deconstructc                s    j  s$  j j     t   _ n	  j      f d d   | j |  j f j D | j |  j f _   j o t	 |  j  j  j
  } | j |  j d | d  S)Nc                s7   g  |  ]- \ } } | |  j  k r*   n | f  q Sr   )r   ).0nf)r!   r   r   r   
<listcomp>   s   	z-AlterField.state_forwards.<locals>.<listcomp>r%   )r"   r!   r&   r   r'   r(   r   r)   r+   r   r   r,   )r   r   r-   r%   r   )r!   r   r   r.      s    		0
zAlterField.state_forwardsc       	      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/   r0   r
   r1   r2   r3   r4   r5   r   r"   r!   r'   alter_fieldr   )	r   r   r7   r8   r9   r:   r;   Z
from_fieldZto_fieldr   r   r   r<      s    		zAlterField.database_forwardsc             C   s   |  j  | | | |  d  S)N)r<   )r   r   r7   r8   r9   r   r   r   r>      s    zAlterField.database_backwardsc             C   s   d |  j  |  j f S)NzAlter field %s on %s)r   r
   )r   r   r   r   r?      s    zAlterField.describeNc                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@   rB   r   rC   rA   r
   rD   r!   r   r   )r   r   r   r   )r   r   r   r      s    		zAlterField.reduce)r   r   r   rE   r   r$   r.   r<   r>   r?   r   r   r   )r   r   rA      s   rA   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   f d d  Z   S)rC   zC
    Renames a field on the model. Might affect db_column too.
    c                s/   | |  _  | |  _ t t |   j | |  d  S)N)old_namerD   r   rC   r   )r   r
   rM   rD   )r   r   r   r      s    		zRenameField.__init__c             C   s   |  j  j   S)N)rM   r   )r   r   r   r   old_name_lower   s    zRenameField.old_name_lowerc             C   s   |  j  j   S)N)rD   r   )r   r   r   r   new_name_lower  s    zRenameField.new_name_lowerc             C   s7   i |  j  d 6|  j d 6|  j d 6} |  j j g  | f S)Nr
   rM   rD   )r
   rM   rD   r   r   )r   r#   r   r   r   r$     s    

	zRenameField.deconstructc                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 }	 x> d D]6 }
 |
 |	 k r   f d d   |	 |
 D |	 |
 <q q W| j |   j d | d  S)Nz%s.%s has no field named '%s'index_togetherunique_togetherc                s)   g  |  ] }   f d  d   | D  q S)c                s.   g  |  ]$ } |   j  k r$   j n |  q Sr   )rM   rD   )rH   rI   )r   r   r   rK   +  s   	 z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )rH   Ztogether)r   r   r   rK   +  s   	z.RenameField.state_forwards.<locals>.<listcomp>r%   )rP   rQ   )r(   r   r)   	enumeraterM   rD   r+   r   r   r   r
   optionsr,   )r   r   r-   Zmodel_stater)   indexr   r!   r%   rS   optionr   )r   r   r.     s     	
	zRenameField.state_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r| | j  j | |  j  } | j | | j j |  j	  | j j |  j
   n  d  S)N)r/   r0   r
   r1   r2   r3   rL   r4   r5   rM   rD   )r   r   r7   r8   r9   r:   r;   r   r   r   r<   0  s    zRenameField.database_forwardsc             C   s   | j  j | |  j  } |  j | j j |  r| | j  j | |  j  } | j | | j j |  j	  | j j |  j
   n  d  S)N)r/   r0   r
   r1   r2   r3   rL   r4   r5   rD   rM   )r   r   r7   r8   r9   r:   r;   r   r   r   r>   :  s    zRenameField.database_backwardsc             C   s   d |  j  |  j |  j f S)NzRename field %s on %s to %s)rM   r
   rD   )r   r   r   r   r?   D  s    zRenameField.describeNc             C   s7   |  j  |  o6 | j   |  j k p6 | j   |  j k S)N)r   r   rN   rO   )r   r
   r   r   r   r   r   r   G  s    zRenameField.references_fieldc                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@   rC   r   rO   rN   r
   rM   rD   r   r	   r   r   )r   r   r   r   )r   r   r   r   M  s    !zRenameField.reduce)r   r   r   rE   r   r   rN   rO   r$   r.   r<   r>   r?   r   r   r   r   )r   r   rC      s   

rC   N)
__future__r   Zdjango.core.exceptionsr   Zdjango.db.models.fieldsr   Zdjango.utils.functionalr   baser   utilsr   r	   r    rB   rA   rC   r   r   r   r   <module>   s    Q,N