o
    uvXjƒ@  ã                   @   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)Ú
ModelTupleÚfield_references_modelÚis_referenced_by_foreign_keyc                       sd   e Zd Zddd„Zedd„ ƒZedd„ ƒZdd	„ Zd
d„ Zddd„Z	ddd„Z
d‡ fdd„	Z‡  ZS )ÚFieldOperationNc                 C   s   || _ || _|| _d S ©N©Ú
model_nameÚnameÚfield)Úselfr   r   r   © r   úc/var/www/html/myproject/venv/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   s2   |  ¡ }|| jkrdS | jrt| jt||ƒƒS dS )NTF)r   r   r   r   r   )r   r   Ú	app_labelr   r   r   r   Úreferences_model   s   
zFieldOperation.references_modelc                 C   sÖ   |  ¡ }|| jkr!|| jkrdS | jr!t| jdƒr!|| jjv r!dS | jrit||ƒ}| jj}|rit |j	¡|krKt| jdƒrI|| jj
v sId | jj
v rKdS t|dd ƒ}|rit |¡|krit|dd ƒd u sg||jv ridS dS )NTÚfrom_fieldsÚ	to_fieldsÚthroughÚthrough_fieldsF)r   r   r   r   Úhasattrr    r   Úremote_fieldÚ
from_modelÚmodelr!   Úgetattrr#   )r   r   r   r   r   Úmodel_tupler%   r"   r   r   r   Úreferences_field'   s*   



ÿ
zFieldOperation.references_fieldc                    s$   t ƒ j||d�p| | j| j|¡ S ©N©r   )ÚsuperÚreducer*   r   r   ©r   r   r   ©Ú	__class__r   r   r.   ?   s   þzFieldOperation.reducer   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r*   r.   Ú__classcell__r   r   r0   r   r
      s    




r
   c                       óX   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	d‡ 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:   r0   r   r   r   I   ó   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:   r1   r2   ©r   Úkwargsr   r   r   ÚdeconstructM   ó   ý

ýzAddField.deconstructc                 C   sZ   | j s| j ¡ }t|_n| j}|j|| jf j | j	|f¡ |j
 }|j|| j|d� d S ©N©Údelay)r:   r   Úcloner   ÚdefaultÚmodelsr   ÚfieldsÚappendr   Úis_relationÚreload_model)r   r   Ústater   rF   r   r   r   Ústate_forwards[   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   r:   r   rH   Ú	add_fieldr   )r   r   Úschema_editorÚ
from_stateÚto_stateÚto_modelr&   r   r   r   r   Údatabase_forwardsg   s   
þ
ö	zAddField.database_forwardsc                 C   ó>   |j  || j¡}|  |jj|¡r| ||j | j	¡¡ d S d S r   ©
rP   rQ   r   rR   rS   rT   Úremove_fieldrU   rV   r   ©r   r   rX   rY   rZ   r&   r   r   r   Údatabase_backwardsu   ó   ÿ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.describeNc                    sr   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ƒ j||d�S ©Nr   r,   )Ú
isinstancer
   r   Ú
AlterFieldr7   r   r   r   ÚRemoveFieldÚRenameFieldÚnew_namer-   r.   r/   r0   r   r   r.   }   s$   
ýÿ

ýÿzAddField.reduce©Tr   ©r2   r3   r4   Ú__doc__r   rB   rO   r\   ra   re   r.   r5   r   r   r0   r   r7   F   s    r7   c                       sJ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zd‡ fdd„	Z	‡  Z
S )rj   zRemove a field from a model.c                 C   s   | j | jdœ}| jjg |fS )N)r   r   )r   r   r1   r2   r@   r   r   r   rB   —   s   þýzRemoveField.deconstructc                 C   sr   g }d }|j || jf jD ]\}}|| jkr| ||f¡ q|}q||j || jf _|j }|j|| j|d� d S rD   )rI   r   rJ   r   rK   rL   rM   )r   r   rN   Ú
new_fieldsÚ	old_fieldr   ÚinstancerF   r   r   r   rO   ¢   s   
zRemoveField.state_forwardsc                 C   r]   r   r^   r`   r   r   r   r\   ¯   rb   zRemoveField.database_forwardsc                 C   sN   |j  || j¡}|  |jj|¡r%|j  || j¡}| ||j | j	¡¡ d S d S r   )
rP   rQ   r   rR   rS   rT   rW   rU   rV   r   ©r   r   rX   rY   rZ   r[   r&   r   r   r   ra   ´   s
   þzRemoveField.database_backwardsc                 C   rc   )NzRemove field %s from %srd   r   r   r   r   re   º   rf   zRemoveField.describeNc                    s8   ddl m} t||ƒr|j| jkr|gS tƒ j||d�S )Nr   )ÚDeleteModelr,   )rI   rt   rh   r   r   r-   r.   )r   r   r   rt   r0   r   r   r.   ½   s   zRemoveField.reducer   )r2   r3   r4   ro   rB   rO   r\   ra   re   r.   r5   r   r   r0   r   rj   ”   s    rj   c                       r6   )ri   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    Tc                    r8   r   r9   r;   r0   r   r   r   Ê   r<   zAlterField.__init__c                 C   r=   r>   r?   r@   r   r   r   rB   Î   rC   zAlterField.deconstructc                    s‚   ˆj sˆj ¡ ‰ tˆ _nˆj‰ ‡ ‡fdd„|j|ˆjf jD ƒ|j|ˆjf _ˆ j o5t	|ˆjˆjˆj
ƒ }|j|ˆj|d� d S )Nc                    s&   g | ]\}}||ˆj krˆ n|f‘qS r   )r   )Ú.0ÚnÚf©r   r   r   r   Ú
<listcomp>â   s    ÿÿz-AlterField.state_forwards.<locals>.<listcomp>rE   )r:   r   rG   r   rH   rI   r   rJ   rL   r	   r   rM   )r   r   rN   rF   r   rx   r   rO   Ü   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   )rP   rQ   r   rR   rS   rT   rU   rV   r   r:   r   rH   Úalter_fieldr   )	r   r   rX   rY   rZ   r[   r&   Ú
from_fieldÚto_fieldr   r   r   r\   ñ   s   

øzAlterField.database_forwardsc                 C   s   |   ||||¡ d S r   )r\   )r   r   rX   rY   rZ   r   r   r   ra   ý   ó   zAlterField.database_backwardsc                 C   rc   )NzAlter field %s on %srd   r   r   r   r   re      rf   zAlterField.describeNc                    sV   t |tƒr|  |¡r|gS t |tƒr#|  |¡r#|t| j|j| jd�gS tƒ j	||d�S rg   )
rh   rj   r   rk   ri   r   rl   r   r-   r.   r/   r0   r   r   r.     s   ýþzAlterField.reducerm   r   rn   r   r   r0   r   ri   Ä   s    ri   c                       sx   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d„Zd‡ fdd„	Z‡  ZS )rk   z8Rename a field on the model. Might affect db_column too.c                    s   || _ || _tƒ  ||¡ d S r   )Úold_namerl   r-   r   )r   r   r~   rl   r0   r   r   r     s   zRenameField.__init__c                 C   r   r   )r~   r   r   r   r   r   Úold_name_lower  r   zRenameField.old_name_lowerc                 C   r   r   )rl   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   r~   rl   )r   r~   rl   r1   r2   r@   r   r   r   rB   "  s   ýýzRenameField.deconstructc                    sœ  |j |ˆ jf }|j}d}d}t|ƒD ]:\}\}}	|s)|ˆ jkr)ˆ j|	f||< d}t|	dd ƒ}
|
r=t‡ fdd„|
D ƒƒ|	_|oL|	j	 oLt
|ˆ j|	ˆ jƒ }q|s[td|ˆ jˆ jf ƒ‚|j}dD ]}||v rs‡ fdd„|| D ƒ||< q`|ˆ jf}|j  ¡ D ]D\\}}}t|jƒD ]8\}\}}	|	j}|rÁˆ  |j||¡}||krÁt|d	d ƒˆ jkr­ˆ j|_t|	d
d ƒ}|rÁt‡ fdd„|D ƒƒ|	_q‰q~|j|ˆ j|d� d S )NFTr    c                    ó    g | ]}|ˆ j krˆ jn|‘qS r   ©r~   rl   )ru   Úfrom_field_namer   r   r   ry   ;  ó    ÿÿz.RenameField.state_forwards.<locals>.<listcomp>z%s.%s has no field named '%s')Úindex_togetherÚunique_togetherc                    s   g | ]}‡ fd d„|D ƒ‘qS )c                    r�   r   r‚   )ru   rv   r   r   r   ry   N  s     z9RenameField.state_forwards.<locals>.<listcomp>.<listcomp>r   )ru   Útogetherr   r   r   ry   M  s    ÿÿÚ
field_namer!   c                    r�   r   r‚   )ru   Úto_field_namer   r   r   ry   _  r„   rE   )rI   r   rJ   Ú	enumerater~   rl   r(   Útupler    rL   r	   r   r   r   ÚoptionsÚitemsr%   Ú_get_model_tupler'   rˆ   r!   rM   )r   r   rN   Úmodel_staterJ   ÚfoundrF   Úindexr   r   r    rŒ   Úoptionr)   Úmodel_app_labelr   r%   Úremote_model_tupler!   r   r   r   rO   .  s^   
þþÿ

þ€
ÿ
þ€õzRenameField.state_forwardsc                 C   óZ   |j  || j¡}|  |jj|¡r+|j  || j¡}| ||j | j	¡|j | j
¡¡ d S d S r   )rP   rQ   r   rR   rS   rT   rz   rU   rV   r~   rl   rs   r   r   r   r\   e  ó   ýþzRenameField.database_forwardsc                 C   r•   r   )rP   rQ   r   rR   rS   rT   rz   rU   rV   rl   r~   rs   r   r   r   ra   o  r–   zRenameField.database_backwardsc                 C   s   d| j | j| jf S )NzRename field %s on %s to %s)r~   r   rl   r   r   r   r   re   y  r}   zRenameField.describeNc                 C   s&   |   |¡o| ¡ | jkp| ¡ | jkS r   )r   r   r   r€   )r   r   r   r   r   r   r   r*   |  s   
þzRenameField.references_fieldc                    s\   t |tƒr|  |¡r| j|jkrt| j| j|jƒgS tt	| ƒj
||d�p-| | j| j|¡ S r+   )rh   rk   r   r€   r   r   r~   rl   r-   r
   r.   r*   r/   r0   r   r   r.   ‚  s   
ÿýÿ
þzRenameField.reducer   )r2   r3   r4   ro   r   r   r   r€   rB   rO   r\   ra   re   r*   r.   r5   r   r   r0   r   rk     s    

7


rk   N)Údjango.core.exceptionsr   Údjango.db.models.fieldsr   Údjango.utils.functionalr   Úbaser   Úutilsr   r   r	   r
   r7   rj   ri   rk   r   r   r   r   Ú<module>   s    ;N0N