o
    b\<                     @   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   e/var/www/secure340b-portal/env/lib/python3.10/site-packages/django/db/migrations/operations/fields.py__init__
   s   
zFieldOperation.__init__c                 C   
   | j  S r   )r   lowerr   r   r   r   model_name_lower      
zFieldOperation.model_name_lowerc                 C   r   r   )r   r   r   r   r   r   
name_lower   r   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rt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r!|| jkrdS | jr!t| jdr!|| jjv r!dS | jd u r(d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.reducer   )__name__
__module____qualname__r   r   r   r   r   r   r    r#   r%   __classcell__r   r   r'   r   r
   	   s    



r
   c                       b   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                       || _ t ||| d S r   preserve_defaultr$   r   r   r   r   r   r1   r'   r   r   r   C      zAddField.__init__c                 C   4   | j | j| jd}| jdur| j|d< | jjg |fS Nr   Tr1   r   r   r   r1   r(   r)   r   kwargsr   r   r   deconstructG      

zAddField.deconstructc                 C   sT   | j s| j }t|_n| j}||j|| jf j| j< |j	 }|j
|| j|d d S Ndelay)r1   r   cloner   defaultmodelsr   fieldsr   is_relationreload_model)r   r   stater   r=   r   r   r   state_forwardsU   s   
zAddField.state_forwardsc                 C   sr   |j || j}| |jj|r5|j || j}|j| j}| j	s'| j
j|_||| | j	s7t|_d S d S d S r   )apps	get_modelr   allow_migrate_model
connectionalias_meta	get_fieldr   r1   r   r?   	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   >   |j || j}| |jj|r|||j| j	 d S d S r   
rF   rG   r   rH   rI   rJ   Zremove_fieldrK   rL   r   r   r   rN   rO   rP   rR   r   r   r   database_backwardso      zAddField.database_backwardsc                 C      d| j | jf S )NzAdd field %s to %sr   r   r   r   r   r   describet      zAddField.describec                 C   rY   )Nz%s_%sr   r   r   r   r   r   migration_name_fragmentw      z AddField.migration_name_fragmentc                    sp   t |tr1| |r1t |trt| j|j|jdgS t |tr!g S t |t	r1t| 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   r9   rE   rS   rW   r[   propertyr^   r%   r,   r   r   r'   r   r.   @   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 )rc   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)   r7   r   r   r   r9      s   zRemoveField.deconstructc                 C   s<   |j || jf }|j| j}|j }|j|| j|d d S r;   )r@   r   rA   popr   rB   rC   )r   r   rD   model_stateZ	old_fieldr=   r   r   r   rE      s   zRemoveField.state_forwardsc                 C   rT   r   rU   rV   r   r   r   rS      rX   zRemoveField.database_forwardsc                 C   sN   |j || j}| |jj|r%|j || j}|||j| j	 d S d S r   )
rF   rG   r   rH   rI   rJ   rM   rK   rL   r   r   r   rN   rO   rP   rQ   rR   r   r   r   rW      s
   zRemoveField.database_backwardsc                 C   rY   )NzRemove field %s from %srZ   r   r   r   r   r[      r\   zRemoveField.describec                 C   rY   )Nzremove_%s_%sr]   r   r   r   r   r^      r_   z#RemoveField.migration_name_fragmentc                    s6   ddl m} t||r|j| jkr|gS t ||S )Nr   )DeleteModel)r@   rm   ra   r   r   r$   r%   )r   r   r   rm   r'   r   r   r%      s   zRemoveField.reduce)r)   r*   r+   rh   r9   rE   rS   rW   r[   ri   r^   r%   r,   r   r   r'   r   rc      s    
rc   c                       r-   )rb   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    r/   r   r0   r2   r'   r   r   r      r3   zAlterField.__init__c                 C   r4   r5   r6   r7   r   r   r   r9      r:   zAlterField.deconstructc                 C   sr   | j s| j }t|_n| j}|j|| jf }||j| j< |j	 o-t
||| jf| j|f }|j|| j|d d S r;   )r1   r   r>   r   r?   r@   r   rA   r   rB   r   rC   )r   r   rD   r   rk   r=   r   r   r   rE      s   
zAlterField.state_forwardsc           	      C   s   |j || j}| |jj|r=|j || j}|j| j}|j| j}| j	s.| j
j|_|||| | j	s?t|_d S d S d S r   )rF   rG   r   rH   rI   rJ   rK   rL   r   r1   r   r?   alter_fieldr   )	r   r   rN   rO   rP   rQ   rR   Z
from_fieldZto_fieldr   r   r   rS      s   

zAlterField.database_forwardsc                 C   s   |  |||| d S r   )rS   )r   r   rN   rO   rP   r   r   r   rW         zAlterField.database_backwardsc                 C   rY   )NzAlter field %s on %srZ   r   r   r   r   r[      r\   zAlterField.describec                 C   rY   )Nzalter_%s_%sr]   r   r   r   r   r^      r_   z"AlterField.migration_name_fragmentc                    sT   t |tr| |r|gS t |tr#| |r#|t| j|j| jdgS t 	||S r`   )
ra   rc   r   rd   rb   r   re   r   r$   r%   r&   r'   r   r   r%     s   zAlterField.reducerf   rg   r   r   r'   r   rb      s    
rb   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 )rd   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namere   r$   r   )r   r   rp   re   r'   r   r   r     s   zRenameField.__init__c                 C   r   r   )rp   r   r   r   r   r   old_name_lower  r   zRenameField.old_name_lowerc                 C   r   r   )re   r   r   r   r   r   new_name_lower  r   zRenameField.new_name_lowerc                 C   s    | j | j| jd}| jjg |fS )N)r   rp   re   )r   rp   re   r(   r)   r7   r   r   r   r9   !  s   zRenameField.deconstructc                    sL  |j | jf }|j}z| j}W n ty%   td| j jf w || j< |	 D ]}t
|dd }|rEt fdd|D |_q/|j}dD ]}	|	|v r^ fdd||	 D ||	< qKd}
t|| jf j|f}|D ]+^ }}}d}
|jr|j\}}t
|d	d  jkr j|_|rt fd
d|D |_qo|j| j|
d d S )Nz%s.%s has no field named '%s'r!   c                        g | ]}| j kr jn|qS r   rp   re   ).0Zfrom_field_namer   r   r   
<listcomp><      z.RenameField.state_forwards.<locals>.<listcomp>)Zindex_togetherZunique_togetherc                    s   g | ]} fd d|D qS )c                    rs   r   rt   )ru   nr   r   r   rv   E  s     z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )ru   Ztogetherr   r   r   rv   D  s    TF
field_namec                    rs   r   rt   )ru   Zto_field_namer   r   r   rv   T  rw   r<   )r@   r   rA   rj   rp   KeyErrorr   r   re   valuesgetattrtupler!   optionsr	   tory   	to_fieldsrC   )r   r   rD   rk   rA   foundr   r!   r~   optionr=   Z
references_	referenceZremote_fieldr   r   r   r   rE   -  sP   





zRenameField.state_forwardsc                 C   Z   |j || j}| |jj|r+|j || j}|||j| j	|j| j
 d S d S r   )rF   rG   r   rH   rI   rJ   rn   rK   rL   rp   re   rl   r   r   r   rS   Z     zRenameField.database_forwardsc                 C   r   r   )rF   rG   r   rH   rI   rJ   rn   rK   rL   re   rp   rl   r   r   r   rW   d  r   zRenameField.database_backwardsc                 C      d| j | j| jf S )NzRename field %s on %s to %s)rp   r   re   r   r   r   r   r[   n  ro   zRenameField.describec                 C   r   )Nzrename_%s_%s_%s)rq   r   rr   r   r   r   r   r^   q  s
   z#RenameField.migration_name_fragmentc                 C   s(   |  ||o| | jkp| | jkS r   )r    r   rq   rr   )r   r   r   r   r   r   r   r#   y  s   zRenameField.references_fieldc                    sZ   t |tr| |r| j|jkrt| j| j|jgS tt	| 
||p,|| j| j| S r   )ra   rd   r   rr   rq   r   rp   re   r$   r
   r%   r#   r&   r'   r   r   r%     s   


zRenameField.reduce)r)   r*   r+   rh   r   r   rq   rr   r9   rE   rS   rW   r[   ri   r^   r#   r%   r,   r   r   r'   r   rd     s     

-


rd   N)Zdjango.core.exceptionsr   Zdjango.db.modelsr   Zdjango.utils.functionalr   baser   utilsr   r   r	   r
   r.   rc   rb   rd   r   r   r   r   <module>   s    7R.Q