î

_Ý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	 Gd d „  d e	 ƒ Z
 Gd	 d
 „  d
 e	 ƒ Z Gd d „  d e	 ƒ Z Gd d „  d e	 ƒ Z d S)é    )Úunicode_literals)ÚNOT_PROVIDED)Úsix)Úcached_propertyé   )Ú	Operationc               @   s£   e  Z d  Z d Z d 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 d „ Z d S)ÚAddFieldz"
    Adds a field to a model.
    Tc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)Ú
model_nameÚnameÚfieldÚpreserve_default)Úselfr	   r
   r   r   © r   úH/tmp/pip-build-ghmbqnp_/Django/django/db/migrations/operations/fields.pyÚ__init__   s    			zAddField.__init__c             C   s   |  j  j ƒ  S)N)r
   Úlower)r   r   r   r   Ú
name_lower   s    zAddField.name_lowerc             C   s   |  j  j ƒ  S)N)r	   r   )r   r   r   r   Úmodel_name_lower   s    zAddField.model_name_lowerc             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   Ú	__class__Ú__name__)r   Úkwargsr   r   r   Údeconstruct   s    

	zAddField.deconstructc             C   sm   |  j  s$ |  j j ƒ  } t | _ n	 |  j } | j | |  j f j j |  j	 | f ƒ | j
 | |  j ƒ d  S)N)r   r   Úcloner   ÚdefaultÚmodelsr   ÚfieldsÚappendr
   Úreload_model)r   Ú	app_labelÚstater   r   r   r   Ústate_forwards+   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_forwards5   s    		zAddField.database_forwardsc             C   sV   | j  j | |  j ƒ } |  j | j j | ƒ rR | j | | j j |  j	 ƒ ƒ n  d  S)N)
r!   r"   r	   r#   r$   r%   Úremove_fieldr&   r'   r
   )r   r   r)   r*   r+   r-   r   r   r   Údatabase_backwardsC   s    zAddField.database_backwardsc             C   s   d |  j  |  j f S)NzAdd field %s to %s)r
   r	   )r   r   r   r   ÚdescribeH   s    zAddField.describeNc             C   s   | j  ƒ  |  j k S)N)r   r   )r   r
   r   r   r   r   Úreferences_modelK   s    zAddField.references_modelc             C   s"   |  j  | ƒ o! | j ƒ  |  j k S)N)r2   r   r   )r   r	   r
   r   r   r   r   Úreferences_fieldN   s    zAddField.references_field)r   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r    r.   r0   r1   r2   r3   r   r   r   r   r   
   s   
r   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 „  Z d d d „ Z d d d „ Z d S)ÚRemoveFieldz'
    Removes a field from a model.
    c             C   s   | |  _  | |  _ d  S)N)r	   r
   )r   r	   r
   r   r   r   r   W   s    	zRemoveField.__init__c             C   s   |  j  j ƒ  S)N)r
   r   )r   r   r   r   r   [   s    zRemoveField.name_lowerc             C   s   |  j  j ƒ  S)N)r	   r   )r   r   r   r   r   _   s    zRemoveField.model_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   c   s    
	zRemoveField.deconstructc             C   s…   g  } xL | j  | |  j f j D]1 \ } } | |  j k r  | j | | f ƒ q  q  W| | j  | |  j f _ | j | |  j ƒ d  S)N)r   r   r   r
   r   r   )r   r   r   Ú
new_fieldsr
   Úinstancer   r   r   r    n   s    &zRemoveField.state_forwardsc             C   sV   | j  j | |  j ƒ } |  j | j j | ƒ rR | j | | j j |  j	 ƒ ƒ n  d  S)N)
r!   r"   r	   r#   r$   r%   r/   r&   r'   r
   )r   r   r)   r*   r+   r-   r   r   r   r.   v   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!   r"   r	   r#   r$   r%   r(   r&   r'   r
   )r   r   r)   r*   r+   r,   r-   r   r   r   r0   {   s    zRemoveField.database_backwardsc             C   s   d |  j  |  j f S)NzRemove field %s from %s)r
   r	   )r   r   r   r   r1      s    zRemoveField.describeNc             C   s   | j  ƒ  |  j k S)N)r   r   )r   r
   r   r   r   r   r2   „   s    zRemoveField.references_modelc             C   s"   |  j  | ƒ o! | j ƒ  |  j k S)N)r2   r   r   )r   r	   r
   r   r   r   r   r3   ‡   s    zRemoveField.references_field)r   r4   r5   r6   r   r   r   r   r   r    r.   r0   r1   r2   r3   r   r   r   r   r7   R   s   r7   c               @   s£   e  Z d  Z d Z d 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 d „ Z d S)Ú
AlterFieldz\
    Alters a field's database column (e.g. null, max_length) to the provided new field
    Tc             C   s(   | |  _  | |  _ | |  _ | |  _ d  S)N)r	   r
   r   r   )r   r	   r
   r   r   r   r   r   r      s    			zAlterField.__init__c             C   s   |  j  j ƒ  S)N)r
   r   )r   r   r   r   r   –   s    zAlterField.name_lowerc             C   s   |  j  j ƒ  S)N)r	   r   )r   r   r   r   r   š   s    zAlterField.model_name_lowerc             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 | ˆ j ƒ 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    ¬   s    		0zAlterField.state_forwardsc       	      C   s7  | j  j | |  j ƒ } |  j | j j | ƒ r3| j  j | |  j ƒ } | j j |  j ƒ } | j j |  j ƒ } | j	 rí | j	 j
 rí t | j	 j
 t j ƒ r´ | j	 j
 | j	 _
 qí | j	 rí t | j	 j
 t j ƒ rí | j	 j
 | j	 _
 qí n  |  j s|  j j | _ n  | j | | | ƒ |  j s3t | _ q3n  d  S)N)r!   r"   r	   r#   r$   r%   r&   r'   r
   Zremote_fieldÚmodelÚ
isinstancer   Ústring_typesr   r   r   Úalter_fieldr   )	r   r   r)   r*   r+   r,   r-   Z
from_fieldZto_fieldr   r   r   r.   ¹   s    !		zAlterField.database_forwardsc             C   s   |  j  | | | | ƒ d  S)N)r.   )r   r   r)   r*   r+   r   r   r   r0   Í   s    zAlterField.database_backwardsc             C   s   d |  j  |  j f S)NzAlter field %s on %s)r
   r	   )r   r   r   r   r1   Ð   s    zAlterField.describeNc             C   s   | j  ƒ  |  j k S)N)r   r   )r   r
   r   r   r   r   r2   Ó   s    zAlterField.references_modelc             C   s"   |  j  | ƒ o! | j ƒ  |  j k S)N)r2   r   r   )r   r	   r
   r   r   r   r   r3   Ö   s    zAlterField.references_field)r   r4   r5   r6   r   r   r   r   r   r    r.   r0   r1   r2   r3   r   r   r   r   r:   ‹   s   r:   c               @   s²   e  Z d  Z d Z d d „  Z e 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 d „ Z d S)ÚRenameFieldzC
    Renames a field on the model. Might affect db_column too.
    c             C   s   | |  _  | |  _ | |  _ d  S)N)r	   Úold_nameÚnew_name)r   r	   rD   rE   r   r   r   r   ß   s    		zRenameField.__init__c             C   s   |  j  j ƒ  S)N)rD   r   )r   r   r   r   Úold_name_lowerä   s    zRenameField.old_name_lowerc             C   s   |  j  j ƒ  S)N)rE   r   )r   r   r   r   Únew_name_lowerè   s    zRenameField.new_name_lowerc             C   s   |  j  j ƒ  S)N)r	   r   )r   r   r   r   r   ì   s    zRenameField.model_name_lowerc             C   s7   i |  j  d 6|  j d 6|  j d 6} |  j j g  | f S)Nr	   rD   rE   )r	   rD   rE   r   r   )r   r   r   r   r   r   ð   s    

	zRenameField.deconstructc                s°   ‡  f d d †  | j  | ˆ  j f j Dƒ | j  | ˆ  j f _ | j  | ˆ  j f j } x> d D]6 } | | k r_ ‡  f d d †  | | Dƒ | | <q_ q_ W| j | ˆ  j ƒ d  S)Nc                s:   g  |  ]0 \ } } | ˆ  j  k r* ˆ  j n | | f ‘ q Sr   )rD   rE   )r;   r<   r=   )r   r   r   r>   ÿ   s   	z.RenameField.state_forwards.<locals>.<listcomp>Úindex_togetherÚunique_togetherc                s)   g  |  ] } ‡  f d  d †  | Dƒ ‘ q S)c                s.   g  |  ]$ } | ˆ  j  k r$ ˆ  j n | ‘ q Sr   )rD   rE   )r;   r<   )r   r   r   r>     s   	 z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )r;   Ztogether)r   r   r   r>     s   	)rH   rI   )r   r   r   Úoptionsr   )r   r   r   rJ   Úoptionr   )r   r   r    ü   s    0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!   r"   r	   r#   r$   r%   rB   r&   r'   rD   rE   )r   r   r)   r*   r+   r,   r-   r   r   r   r.     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!   r"   r	   r#   r$   r%   rB   r&   r'   rE   rD   )r   r   r)   r*   r+   r,   r-   r   r   r   r0     s    zRenameField.database_backwardsc             C   s   d |  j  |  j |  j f S)NzRename field %s on %s to %s)rD   r	   rE   )r   r   r   r   r1      s    zRenameField.describeNc             C   s   | j  ƒ  |  j k S)N)r   r   )r   r
   r   r   r   r   r2   #  s    zRenameField.references_modelc             C   s7   |  j  | ƒ o6 | j ƒ  |  j k p6 | j ƒ  |  j k S)N)r2   r   rF   rG   )r   r	   r
   r   r   r   r   r3   &  s    zRenameField.references_field)r   r4   r5   r6   r   r   rF   rG   r   r   r    r.   r0   r1   r2   r3   r   r   r   r   rC   Ú   s   

rC   N)Ú
__future__r   Zdjango.db.models.fieldsr   Zdjango.utilsr   Zdjango.utils.functionalr   Úbaser   r   r7   r:   rC   r   r   r   r   Ú<module>   s   H9O