B
    ©0H[¸4  ã               @   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	 G dd„ deƒZ
G d	d
„ d
e
ƒZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZdS )é    )ÚFieldDoesNotExist)ÚNOT_PROVIDED)Úcached_propertyé   )Ú	Operation)Úis_referenced_by_foreign_keyc                   sb   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‡  ZS )ÚFieldOperationc             C   s   || _ || _d S )N)Ú
model_nameÚname)Úselfr	   r
   © r   újC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\db\migrations\operations\fields.pyÚ__init__
   s    zFieldOperation.__init__c             C   s
   | j  ¡ S )N)r	   Úlower)r   r   r   r   Úmodel_name_lower   s    zFieldOperation.model_name_lowerc             C   s
   | 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   |   |¡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kS )N)r   r   )r   r
   Ú	app_labelr   r   r   Úreferences_model   s    zFieldOperation.references_modelc             C   s   |   |¡o| ¡ | jkS )N)r   r   r   )r   r	   r
   r   r   r   r   Úreferences_field   s    zFieldOperation.references_fieldc                s&   t ƒ j|||d�p$| | j| j|¡ S )N)r   )ÚsuperÚreducer   r	   r
   )r   r   Ú
in_betweenr   )Ú	__class__r   r   r   "   s    zFieldOperation.reduce)N)N)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   Ú__classcell__r   r   )r   r   r   	   s   

r   c                   sX   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
‡  ZS )ÚAddFieldzAdd a field to a model.Tc                s   || _ || _tƒ  ||¡ d S )N)ÚfieldÚpreserve_defaultr   r   )r   r	   r
   r!   r"   )r   r   r   r   ,   s    zAddField.__init__c             C   s4   | j | j| jdœ}| jdk	r&| j|d< | jjg |fS )N)r	   r
   r!   Tr"   )r	   r
   r!   r"   r   r   )r   Úkwargsr   r   r   Údeconstruct1   s    


zAddField.deconstructc             C   sZ   | j s| j ¡ }t|_n| j}|j|| jf 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_forwards?   s    
zAddField.state_forwardsc             C   sj   |j  || j¡}|  |jj|¡rf|j  || j¡}|j | j¡}| j	sN| j
j|_| ||¡ | j	sft|_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   s:   |j  || j¡}|  |jj|¡r6| ||j | j	¡¡ d S )N)
r/   r0   r	   r1   r2   r3   Úremove_fieldr4   r5   r
   )r   r   r7   r8   r9   r;   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                st   t |tƒrb|  |¡rbt |tƒr4t| j|j|jd�gS t |tƒrBg S t |t	ƒrbt| j|j
| jd�gS tƒ j|||d�S )N)r	   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)T)N)r   r   r   Ú__doc__r   r$   r.   r<   r>   r?   r   r   r   r   )r   r   r    )   s   r    c               @   s8   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Remove a field from a model.c             C   s   | j | jdœ}| jjg |fS )N)r	   r
   )r	   r
   r   r   )r   r#   r   r   r   r$   {   s
    
zRemoveField.deconstructc             C   sv   g }d }x<|j || jf jD ]&\}}|| jkr>| ||f¡ q|}qW ||j || jf _|j }|j|| j|d� d S )N)r%   )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   s:   |j  || j¡}|  |jj|¡r6| ||j | j	¡¡ 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   sJ   |j  || j¡}|  |jj|¡rF|j  || j¡}| ||j | j	¡¡ 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   x   s   rB   c                   sX   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
‡  ZS )rA   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                s   || _ || _tƒ  ||¡ d S )N)r!   r"   r   r   )r   r	   r
   r!   r"   )r   r   r   r   ¨   s    zAlterField.__init__c             C   s4   | j | j| jdœ}| jdk	r&| j|d< | jjg |fS )N)r	   r
   r!   Tr"   )r	   r
   r!   r"   r   r   )r   r#   r   r   r   r$   ­   s    


zAlterField.deconstructc                s‚   ˆj sˆj ¡ ‰ tˆ _nˆj‰ ‡ ‡fdd„|j|ˆjf jD ƒ|j|ˆjf _ˆ j ojt	|ˆjˆjˆj
ƒ }|j|ˆj|d� d S )Nc                s&   g | ]\}}||ˆj krˆ n|f‘qS r   )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    
$zAlterField.state_forwardsc       	      C   sz   |j  || j¡}|  |jj|¡rv|j  || j¡}|j | j¡}|j | j¡}| j	s\| j
j|_| |||¡ | j	svt|_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   |   ||||¡ 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                sX   t |tƒr|  |¡r|gS t |tƒrF|  |¡rF|t| j|j| jd�gS tƒ j	|||d�S )N)r	   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)T)N)r   r   r   rE   r   r$   r.   r<   r>   r?   r   r   r   r   )r   r   rA   ¢   s   rA   c                   sx   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‡  ZS )rC   z8Rename a field on the model. Might affect db_column too.c                s   || _ || _tƒ  ||¡ d S )N)Úold_namerD   r   r   )r   r	   rM   rD   )r   r   r   r   ô   s    zRenameField.__init__c             C   s
   | j  ¡ S )N)rM   r   )r   r   r   r   Úold_name_lowerù   s    zRenameField.old_name_lowerc             C   s
   | j  ¡ S )N)rD   r   )r   r   r   r   Únew_name_lowerý   s    zRenameField.new_name_lowerc             C   s    | j | j| jdœ}| jjg |fS )N)r	   rM   rD   )r	   rM   rD   r   r   )r   r#   r   r   r   r$     s    
zRenameField.deconstructc                sÈ   |j |ˆ jf }|j}xdt|ƒD ]B\}\}}|ˆ jkr ˆ j|f||< |j o^t|ˆ j|ˆ jƒ }P q W t	d|ˆ j
ˆ jf ƒ‚|j}	x.dD ]&}
|
|	krˆ‡ fdd„|	|
 D ƒ|	|
< qˆW |j|ˆ j|d� d S )Nz%s.%s has no field named '%s')Zindex_togetherZunique_togetherc                s   g | ]}‡ fd d„|D ƒ‘qS )c                s    g | ]}|ˆ j krˆ jn|‘qS r   )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%   )r(   r   r)   Ú	enumeraterM   rD   r+   r   r
   r   r	   Úoptionsr,   )r   r   r-   Zmodel_stater)   Úindexr
   r!   r%   rQ   Úoptionr   )r   r   r.     s     


zRenameField.state_forwardsc             C   sV   |j  || j¡}|  |jj|¡rR|j  || j¡}| ||j | j	¡|j | j
¡¡ 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<   )  s    zRenameField.database_forwardsc             C   sV   |j  || j¡}|  |jj|¡rR|j  || j¡}| ||j | j	¡|j | j
¡¡ 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>   3  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?   =  s    zRenameField.describeNc             C   s&   |   |¡o$| ¡ | jkp$| ¡ | jkS )N)r   r   rN   rO   )r   r	   r
   r   r   r   r   r   @  s    
zRenameField.references_fieldc                s^   t |tƒr4|  |¡r4| j|jkr4t| j| j|jƒgS tt	| ƒj
|||d�p\| | j| j|¡ S )N)r   )r@   rC   r   rO   rN   r	   rM   rD   r   r   r   r   )r   r   r   r   )r   r   r   r   F  s    


zRenameField.reduce)N)N)r   r   r   rE   r   r   rN   rO   r$   r.   r<   r>   r?   r   r   r   r   r   )r   r   rC   ñ   s   


rC   N)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    O*O