o
    ˜¨Êh”1  ã                   @   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   úX/var/www/html/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   Ú
from_fieldÚ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                    s`   t |tƒ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   Ú	db_columnr[   r
   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
   rj   r^   r$   r   r   r     s   zRenameField.__init__c                 C   r   r   )rj   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
   rj   r^   )r
   rj   r^   r%   r&   r4   r   r   r   r6     s
   ýzRenameField.deconstructc                 C   s   |  || j| j| j¡ d S r   )Úrename_fieldr   rj   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   rj   r^   rc   r   r   r   rK   +  ó   ýþzRenameField.database_forwardsc                 C   rn   r   )r>   r?   r
   r@   rA   rB   rf   rC   rD   r^   rj   rc   r   r   r   rP   5  ro   zRenameField.database_backwardsc                 C   ó   d| j | j| jf S )NzRename field %s on %s to %s)rj   r
   r^   r   r   r   r   rT   ?  s
   ýzRenameField.describec                 C   rp   )Nzrename_%s_%s_%s)rk   r   rl   r   r   r   r   rW   F  s
   ýz#RenameField.migration_name_fragmentc                 C   s(   |   ||¡o| ¡ | jkp| ¡ | jkS r   )r   r   rk   rl   )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   rl   rk   r
   rj   r^   r!   r   r"   r    r#   r$   r   r   r"   S  s   ÿþýÿ	þzRenameField.reduce)r&   r'   r(   ra   r   r   rk   rl   r6   r<   rK   rP   rT   rb   rW   r    r"   r)   r   r   r$   r   r]     s     




r]   N)Údjango.db.migrations.utilsr   Údjango.db.modelsr   Údjango.utils.functionalr   Úbaser   r   r+   r\   r[   r]   r   r   r   r   Ú<module>   s    CO,H