o
    `Zh1                     @   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   ]/var/www/html/lang_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"   E   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   r.   r$   r   r   r   N      zAddField.__init__c                 C   4   | 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   deconstructR      

zAddField.deconstructc                 C      | || j| j| j| j d S r   )	add_fieldr   r   r   r.   r   r   stater   r   r   state_forwards\      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   r.   r   defaultr9   r   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardse   s   

	zAddField.database_forwardsc                 C   >   |j || j}| |jj|r|||j| j	 d S d S r   
r>   r?   r
   r@   rA   rB   remove_fieldrC   rD   r   r   r   rF   rG   rH   rJ   r   r   r   database_backwardss      zAddField.database_backwardsc                 C      d| j | jf S )NzAdd field %s to %sr   r
   r   r   r   r   describez      zAddField.describec                 C   rR   )Nz%s_%sr   r   r   r   r   r   migration_name_fragment}      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   r6   r<   rK   rP   rT   propertyrW   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 )r\   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&   r4   r   r   r   r6      s   zRemoveField.deconstructc                 C   s   | || j| j d S r   )rN   r   r   r:   r   r   r   r<      s   zRemoveField.state_forwardsc                 C   rL   r   rM   rO   r   r   r   rK      rQ   zRemoveField.database_forwardsc                 C   sN   |j || j}| |jj|r%|j || j}|||j| j	 d S d S r   )
r>   r?   r
   r@   rA   rB   r9   rC   rD   r   r   r   rF   rG   rH   rI   rJ   r   r   r   rP      s
   zRemoveField.database_backwardsc                 C   rR   )NzRemove field %s from %srS   r   r   r   r   rT      rU   zRemoveField.describec                 C   rR   )Nzremove_%s_%srV   r   r   r   r   rW      rX   z#RemoveField.migration_name_fragmentc                    s6   ddl m} t||r|j| jkr|gS t ||S )Nr   )DeleteModel)modelsrd   rZ   r   r   r!   r"   )r   r   r   rd   r$   r   r   r"      s   zRemoveField.reduce)r&   r'   r(   ra   r6   r<   rK   rP   rT   rb   rW   r"   r)   r   r   r$   r   r\      s    
r\   c                       r*   )r[   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    r,   r   r-   r/   r$   r   r   r      r0   zAlterField.__init__c                 C   r1   r2   r3   r4   r   r   r   r6      r7   zAlterField.deconstructc                 C   r8   r   )alter_fieldr   r   r   r.   r:   r   r   r   r<      r=   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   )r>   r?   r
   r@   rA   rB   rC   rD   r   r.   r   rE   rf   r   )	r   r   rF   rG   rH   rI   rJ   Z
from_fieldZto_fieldr   r   r   rK      s   

zAlterField.database_forwardsc                 C   s   |  |||| d S r   )rK   )r   r   rF   rG   rH   r   r   r   rP      s   zAlterField.database_backwardsc                 C   rR   )NzAlter field %s on %srS   r   r   r   r   rT      rU   zAlterField.describec                 C   rR   )Nzalter_%s_%srV   r   r   r   r   rW      rX   z"AlterField.migration_name_fragmentc                    sd   t |ttfr| |r|gS t |tr+| |r+| jjd u r+|t| j|j| jdgS t	 
||S rY   )rZ   r[   r\   r   r]   r   Z	db_columnr
   r^   r!   r"   r#   r$   r   r   r"      s&   zAlterField.reducer_   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edd Zdd Z fddZ  ZS )r]   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _t || d S r   )old_namer^   r!   r   )r   r
   rg   r^   r$   r   r   r     s   zRenameField.__init__c                 C   r   r   )rg   r   r   r   r   r   old_name_lower  r   zRenameField.old_name_lowerc                 C   r   r   )r^   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
   rg   r^   )r
   rg   r^   r%   r&   r4   r   r   r   r6     s
   zRenameField.deconstructc                 C   s   | || j| j| j d S r   )Zrename_fieldr   rg   r^   r:   r   r   r   r<   &  s   zRenameField.state_forwardsc                 C   Z   |j || j}| |jj|r+|j || j}|||j| j	|j| j
 d S d S r   )r>   r?   r
   r@   rA   rB   rf   rC   rD   rg   r^   rc   r   r   r   rK   +     zRenameField.database_forwardsc                 C   rj   r   )r>   r?   r
   r@   rA   rB   rf   rC   rD   r^   rg   rc   r   r   r   rP   5  rk   zRenameField.database_backwardsc                 C      d| j | j| jf S )NzRename field %s on %s to %s)rg   r
   r^   r   r   r   r   rT   ?  s
   zRenameField.describec                 C   rl   )Nzrename_%s_%s_%s)rh   r   ri   r   r   r   r   rW   F  s
   z#RenameField.migration_name_fragmentc                 C   s(   |  ||o| | jkp| | jkS r   )r   r   rh   ri   )r   r
   r   r   r   r   r   r    N  s   zRenameField.references_fieldc                    sl   t |tr| |r| j|jkrt| j| j|jgS tt	| 
||p5|| j| j|p4|| j| j| S r   )rZ   r]   r   ri   rh   r
   rg   r^   r!   r   r"   r    r#   r$   r   r   r"   S  s   	zRenameField.reduce)r&   r'   r(   ra   r   r   rh   ri   r6   r<   rK   rP   rT   rb   rW   r    r"   r)   r   r   r$   r   r]     s     




r]   N)Zdjango.db.migrations.utilsr   Zdjango.db.modelsr   Zdjango.utils.functionalr   baser   r   r+   r\   r[   r]   r   r   r   r   <module>   s    CO,H