a
    xd:                     @   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	m
Z
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)field_is_referencedfield_referencesget_referencesc                       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   ^/var/www/html/Ranjet/env/lib/python3.9/site-packages/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v rBdS | jd u 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#   9   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                       sV   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	 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   C   s    zAddField.__init__c                 C   s4   | j | j| jd}| jdur&| j|d< | jjg |fS Nr   Tr-   r   r   r   r-   r&   r'   r   kwargsr   r   r   deconstructG   s    

zAddField.deconstructc                 C   sT   | j s| j }t|_n| j}||j|| jf j| j< |j	 }|j
|| j|d d S Ndelay)r-   r   cloner   defaultmodelsr   fieldsr   is_relationreload_model)r   r   stater   r6   r   r   r   state_forwardsU   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   r8   	add_fieldr   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardsa   s    
zAddField.database_forwardsc                 C   s:   |j || j}| |jj|r6|||j| j	 d S r   
r?   r@   r   rA   rB   rC   Zremove_fieldrD   rE   r   r   r   rG   rH   rI   rK   r   r   r   database_backwardso   s    zAddField.database_backwardsc                 C   s   d| j | jf S )NzAdd field %s to %sr   r   r   r   r   r   describet   s    zAddField.describec                    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#   w   s$    


zAddField.reduce)Tr'   r(   r)   __doc__r   r3   r>   rL   rO   rQ   r#   r*   r   r   r%   r   r+   @   s   r+   c                       sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Z fddZ	  Z
S )rU   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'   r1   r   r   r   r3      s    zRemoveField.deconstructc                 C   s<   |j || jf }|j| j}|j }|j|| j|d d S r4   )r9   r   r:   popr   r;   r<   )r   r   r=   model_stateZ	old_fieldr6   r   r   r   r>      s    zRemoveField.state_forwardsc                 C   s:   |j || j}| |jj|r6|||j| j	 d S r   rM   rN   r   r   r   rL      s    zRemoveField.database_forwardsc                 C   sJ   |j || j}| |jj|rF|j || j}|||j| j	 d S r   )
r?   r@   r   rA   rB   rC   rF   rD   rE   r   r   r   rG   rH   rI   rJ   rK   r   r   r   rO      s    zRemoveField.database_backwardsc                 C   s   d| j | jf S )NzRemove field %s from %srP   r   r   r   r   rQ      s    zRemoveField.describec                    s6   ddl m} t||r(|j| jkr(|gS t ||S )Nr   )DeleteModel)r9   r]   rS   r   r   r"   r#   )r   r   r   r]   r%   r   r   r#      s    zRemoveField.reduce)r'   r(   r)   rY   r3   r>   rL   rO   rQ   r#   r*   r   r   r%   r   rU      s   rU   c                       sV   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	 fddZ
  ZS )rT   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ur&| j|d< | jjg |fS r/   r0   r1   r   r   r   r3      s    

zAlterField.deconstructc                 C   sr   | j s| j }t|_n| j}|j|| jf }||j| j< |j	 oZt
||| jf| j|f }|j|| j|d d S r4   )r-   r   r7   r   r8   r9   r   r:   r   r;   r   r<   )r   r   r=   r   r[   r6   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 r   )r?   r@   r   rA   rB   rC   rD   rE   r   r-   r   r8   alter_fieldr   )	r   r   rG   rH   rI   rJ   rK   Z
from_fieldZto_fieldr   r   r   rL      s    
zAlterField.database_forwardsc                 C   s   |  |||| d S r   )rL   )r   r   rG   rH   rI   r   r   r   rO      s    zAlterField.database_backwardsc                 C   s   d| j | jf S )NzAlter field %s on %srP   r   r   r   r   rQ      s    zAlterField.describec                    sT   t |tr| |r|gS t |trF| |rF|t| j|j| jdgS t 	||S rR   )
rS   rU   r   rV   rT   r   rW   r   r"   r#   r$   r%   r   r   r#      s    zAlterField.reduce)TrX   r   r   r%   r   rT      s   rT   c                       st   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 Z fddZ  ZS )rV   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namerW   r"   r   )r   r   r_   rW   r%   r   r   r     s    zRenameField.__init__c                 C   s
   | j  S r   )r_   r   r   r   r   r   old_name_lower  s    zRenameField.old_name_lowerc                 C   s
   | j  S r   )rW   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   r_   rW   )r   r_   rW   r&   r'   r1   r   r   r   r3     s    zRenameField.deconstructc                    sR  |j | jf }|j}z| j}W n( tyN   td| j jf Y n0 || j< |	 D ],}t
|dd }|rbt fdd|D |_qb|j}dD ]&}	|	|v r fdd||	 D ||	< qd}
t|| jf j|f}|D ]X^ }}}d}
|jr|j\}}t
|d	d  jkr j|_|rt fd
d|D |_q|j| j|
d d S )Nz%s.%s has no field named '%s'r   c                    s    g | ]}| j kr jn|qS r   r_   rW   ).0Zfrom_field_namer   r   r   
<listcomp>0  s   z.RenameField.state_forwards.<locals>.<listcomp>)Zindex_togetherZunique_togetherc                    s   g | ]} fd d|D qS )c                    s    g | ]}| j kr jn|qS r   rb   )rc   nr   r   r   rd   9      z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )rc   Ztogetherr   r   r   rd   8  s   TF
field_namec                    s    g | ]}| j kr jn|qS r   rb   )rc   Zto_field_namer   r   r   rd   H  s   r5   )r9   r   r:   rZ   r_   KeyErrorr   r   rW   valuesgetattrtupler   optionsr	   torg   	to_fieldsr<   )r   r   r=   r[   r:   foundr   r   rl   optionr6   Z
references_	referenceZremote_fieldrn   r   r   r   r>   !  sH    



zRenameField.state_forwardsc                 C   sV   |j || j}| |jj|rR|j || j}|||j| j	|j| j
 d S r   )r?   r@   r   rA   rB   rC   r^   rD   rE   r_   rW   r\   r   r   r   rL   N  s    zRenameField.database_forwardsc                 C   sV   |j || j}| |jj|rR|j || j}|||j| j	|j| j
 d S r   )r?   r@   r   rA   rB   rC   r^   rD   rE   rW   r_   r\   r   r   r   rO   X  s    zRenameField.database_backwardsc                 C   s   d| j | j| jf S )NzRename field %s on %s to %s)r_   r   rW   r   r   r   r   rQ   b  s    zRenameField.describec                 C   s(   |  ||o&| | jkp&| | jkS r   )r   r   r`   ra   )r   r   r   r   r   r   r   r!   e  s    zRenameField.references_fieldc                    sZ   t |tr4| |r4| j|jkr4t| j| j|jgS tt	| 
||pX|| j| j| S r   )rS   rV   r   ra   r`   r   r_   rW   r"   r
   r#   r!   r$   r%   r   r   r#   k  s    


zRenameField.reduce)r'   r(   r)   rY   r   r   r`   ra   r3   r>   rL   rO   rQ   r!   r#   r*   r   r   r%   r   rV     s   

-

rV   N)Zdjango.core.exceptionsr   Zdjango.db.modelsr   Zdjango.utils.functionalr   baser   utilsr   r   r	   r
   r+   rU   rT   rV   r   r   r   r   <module>   s   7N*M