U
    e1                     @   s   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 )    )field_references)NOT_PROVIDED)cached_property   )	Operationc                       s^   e 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
 fddZ  ZS )FieldOperationNc                 C   s   || _ || _|| _d S N
model_namenamefield)selfr
   r   r    r   J/tmp/pip-unpacked-wheel-lctamlir/django/db/migrations/operations/fields.py__init__	   s    zFieldOperation.__init__c                 C   s
   | j  S r   )r
   lowerr   r   r   r   model_name_lower   s    zFieldOperation.model_name_lowerc                 C   s
   | j  S r   )r   r   r   r   r   r   
name_lower   s    zFieldOperation.name_lowerc                 C   s   | j |j kS r   )r   r   	operationr   r   r   is_same_model_operation   s    z&FieldOperation.is_same_model_operationc                 C   s   |  |o| j|jkS r   )r   r   r   r   r   r   is_same_field_operation   s    

z&FieldOperation.is_same_field_operationc                 C   s<   |  }|| jkrdS | jr8tt|| jf| j||fS dS )NTF)r   r   r   boolr   )r   r   	app_labelr   r   r   r   references_model   s    
zFieldOperation.references_modelc                 C   sn   |  }|| jkrB|| jkr dS | jrBt| jdrB|| jjkrBdS | jd krPdS tt|| jf| j||f|S )NTfrom_fieldsF)r   r   r   r   hasattrr   r   r   )r   r
   r   r   r   r   r   r   references_field-   s*    




zFieldOperation.references_fieldc                    s"   t  ||p || j| j| S r   )superreducer   r
   r   r   r   r   	__class__r   r   r    E   s
      zFieldOperation.reduce)N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r    __classcell__r   r   r"   r   r      s   


r   c                       sb   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	e
dd Z fddZ  ZS )AddFieldzAdd a field to a model.Tc                    s   || _ t ||| d S r   preserve_defaultr   r   r   r
   r   r   r*   r"   r   r   r   N   s    zAddField.__init__c                 C   s4   | j | j| jd}| jdk	r&| j|d< | jjg |fS Nr	   Tr*   r
   r   r   r*   r#   r$   r   kwargsr   r   r   deconstructR   s    

zAddField.deconstructc                 C   s   | || j| j| j| j d S r   )	add_fieldr   r   r   r*   r   r   stater   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 r   )apps	get_modelr
   allow_migrate_model
connectionalias_meta	get_fieldr   r*   r   defaultr1   r   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardse   s    
zAddField.database_forwardsc                 C   s:   |j || j}| |jj|r6|||j| j	 d S r   
r5   r6   r
   r7   r8   r9   remove_fieldr:   r;   r   r   r   r=   r>   r?   rA   r   r   r   database_backwardss   s     zAddField.database_backwardsc                 C   s   d| j | jf S )NzAdd field %s to %sr   r
   r   r   r   r   describez   s    zAddField.describec                 C   s   d| j | jf S )Nz%s_%sr   r   r   r   r   r   migration_name_fragment}   s    z AddField.migration_name_fragmentc                    sp   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 ||S Nr	   )
isinstancer   r   
AlterFieldr(   r
   r   r   RemoveFieldRenameFieldnew_namer   r    r!   r"   r   r   r       s(    


zAddField.reduce)Tr$   r%   r&   __doc__r   r0   r4   rB   rF   rH   propertyrJ   r    r'   r   r   r"   r   r(   K   s   
	
r(   c                       sT   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	dd Z
 fddZ  ZS )rN   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   r0      s    zRemoveField.deconstructc                 C   s   | || j| j d S r   )rD   r   r   r2   r   r   r   r4      s    zRemoveField.state_forwardsc                 C   s:   |j || j}| |jj|r6|||j| j	 d S r   rC   rE   r   r   r   rB      s     zRemoveField.database_forwardsc                 C   sJ   |j || j}| |jj|rF|j || j}|||j| j	 d S r   )
r5   r6   r
   r7   r8   r9   r1   r:   r;   r   r   r   r=   r>   r?   r@   rA   r   r   r   rF      s    zRemoveField.database_backwardsc                 C   s   d| j | jf S )NzRemove field %s from %srG   r   r   r   r   rH      s    zRemoveField.describec                 C   s   d| j | jf S )Nzremove_%s_%srI   r   r   r   r   rJ      s    z#RemoveField.migration_name_fragmentc                    s6   ddl m} t||r(|j| jkr(|gS t ||S )Nr   )DeleteModel)modelsrU   rL   r   r   r   r    )r   r   r   rU   r"   r   r   r       s    
zRemoveField.reduce)r$   r%   r&   rR   r0   r4   rB   rF   rH   rS   rJ   r    r'   r   r   r"   r   rN      s   
rN   c                       sb   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	e
dd Z fddZ  ZS )rM   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    s   || _ t ||| d S 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 r,   r-   r.   r   r   r   r0      s    

zAlterField.deconstructc                 C   s   | || j| j| j| j d S r   )alter_fieldr   r   r   r*   r2   r   r   r   r4      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 r   )r5   r6   r
   r7   r8   r9   r:   r;   r   r*   r   r<   rW   r   )	r   r   r=   r>   r?   r@   rA   Z
from_fieldZto_fieldr   r   r   rB      s    
zAlterField.database_forwardsc                 C   s   |  |||| d S r   )rB   )r   r   r=   r>   r?   r   r   r   rF      s    zAlterField.database_backwardsc                 C   s   d| j | jf S )NzAlter field %s on %srG   r   r   r   r   rH      s    zAlterField.describec                 C   s   d| j | jf S )Nzalter_%s_%srI   r   r   r   r   rJ      s    z"AlterField.migration_name_fragmentc                    s`   t |tr| |r|gS t |trR| |rR| jjd krR|t| j|j| jdgS t	 
||S rK   )rL   rN   r   rO   r   Z	db_columnrM   r
   rP   r   r    r!   r"   r   r   r       s$    
zAlterField.reduce)TrQ   r   r   r"   r   rM      s   
	
rM   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edd Zdd Z fddZ  ZS )rO   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namerP   r   r   )r   r
   rX   rP   r"   r   r   r     s    zRenameField.__init__c                 C   s
   | j  S r   )rX   r   r   r   r   r   old_name_lower  s    zRenameField.old_name_lowerc                 C   s
   | j  S r   )rP   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
   rX   rP   )r
   rX   rP   r#   r$   r.   r   r   r   r0     s
    zRenameField.deconstructc                 C   s   | || j| j| j d S r   )Zrename_fieldr   rX   rP   r2   r   r   r   r4   &  s       zRenameField.state_forwardsc                 C   sV   |j || j}| |jj|rR|j || j}|||j| j	|j| j
 d S r   )r5   r6   r
   r7   r8   r9   rW   r:   r;   rX   rP   rT   r   r   r   rB   +  s    zRenameField.database_forwardsc                 C   sV   |j || j}| |jj|rR|j || j}|||j| j	|j| j
 d S r   )r5   r6   r
   r7   r8   r9   rW   r:   r;   rP   rX   rT   r   r   r   rF   5  s    zRenameField.database_backwardsc                 C   s   d| j | j| jf S )NzRename field %s on %s to %s)rX   r
   rP   r   r   r   r   rH   ?  s
    zRenameField.describec                 C   s   d| j | j| jf S )Nzrename_%s_%s_%s)rY   r   rZ   r   r   r   r   rJ   F  s
    z#RenameField.migration_name_fragmentc                 C   s(   |  ||o&| | jkp&| | jkS r   )r   r   rY   rZ   )r   r
   r   r   r   r   r   r   N  s    zRenameField.references_fieldc                    sl   t |tr4| |r4| j|jkr4t| j| j|jgS tt	| 
||pj|| j| j|ph|| j| j| S r   )rL   rO   r   rZ   rY   r
   rX   rP   r   r   r    r   r!   r"   r   r   r    S  s     
	zRenameField.reduce)r$   r%   r&   rR   r   r   rY   rZ   r0   r4   rB   rF   rH   rS   rJ   r   r    r'   r   r   r"   r   rO     s   




rO   N)Zdjango.db.migrations.utilsr   Zdjango.db.modelsr   Zdjango.utils.functionalr   baser   r   r(   rN   rM   rO   r   r   r   r   <module>   s   CO,H