๎
ชอ X๐/  ใ               @   sฒ   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)ฺNOT_PROVIDED)ฺcached_property้   )ฺ	Operationc                   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   ๚T/home/ubuntu/projects/ifolica/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   .   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   ฺdeconstruct3   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
   r   ฺstater   r   r   r   ฺstate_forwardsA   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_forwardsK   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_fieldr0   r1   r	   )r
   r   r3   r4   r5   r7   r   r   r   ฺdatabase_backwardsY   s    zAddField.database_backwardsc             C   s   d |  j  |  j f S)NzAdd field %s to %s)r	   r   )r
   r   r   r   ฺdescribe^   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   a   s    				zAddField.reduce)r   r   r   ฺ__doc__r   r"   r*   r8   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)r>   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  } 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*      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/   r9   r0   r1   r	   )r
   r   r3   r4   r5   r7   r   r   r   r8      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/   r2   r0   r1   r	   )r
   r   r3   r4   r5   r6   r7   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   rA   r"   r*   r8   r:   r;   r   r   r   r   r>   x   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)r=   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   r=   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 |  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   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$   ฺalter_fieldr   )	r
   r   r3   r4   r5   r6   r7   Z
from_fieldZto_fieldr   r   r   r8   ฤ   s    		zAlterField.database_forwardsc             C   s   |  j  | | | |  d  S)N)r8   )r
   r   r3   r4   r5   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<   r>   r   r?   r=   r   r@   r   r   r   )r
   r   r   r   )r   r   r   r   ึ   s    		zAlterField.reduce)r   r   r   rA   r   r"   r*   r8   r:   r;   r   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   f d d  Z   S)r?   zC
    Renames a field on the model. Might affect db_column too.
    c                s/   | |  _  | |  _ t t |   j | |  d  S)N)ฺold_namer@   r   r?   r   )r
   r   rI   r@   )r   r   r   r   ๊   s    		zRenameField.__init__c             C   s   |  j  j   S)N)rI   r   )r
   r   r   r   ฺold_name_lower๏   s    zRenameField.old_name_lowerc             C   s   |  j  j   S)N)r@   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   rI   r@   )r   rI   r@   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   )rI   r@   )rD   rE   rF   )r
   r   r   rG     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   )rI   r@   )rD   rE   )r
   r   r   rG     s   	 z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )rD   Ztogether)r
   r   r   rG     s   	)rL   rM   )r%   r   r&   ฺoptionsr(   )r
   r   r)   rN   ฺ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/   rH   r0   r1   rI   r@   )r
   r   r3   r4   r5   r6   r7   r   r   r   r8     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/   rH   r0   r1   r@   rI   )r
   r   r3   r4   r5   r6   r7   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)rI   r   r@   )r
   r   r   r   r;   '  s    zRenameField.describeNc             C   s7   |  j  |  o6 | j   |  j k p6 | j   |  j k S)N)r   r   rJ   rK   )r
   r   r	   r   r   r   r   r   *  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<   r?   r   rK   rJ   r   rI   r@   r   r   r   r   )r
   r   r   r   )r   r   r   r   0  s    !zRenameField.reduce)r   r   r   rA   r   r   rJ   rK   r"   r*   r8   r:   r;   r   r   r   r   )r   r   r?   ๅ   s   

r?   N)ฺ
__future__r   Zdjango.db.models.fieldsr   Zdjango.utils.functionalr   ฺbaser   r   r   r>   r=   r?   r   r   r   r   ฺ<module>   s    O'F