a
    Lcòf”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   úc/home/httpd/docs/test/DocsMgr/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    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u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u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 u 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