o
    [hd2                     @   s   d dl mZ d dlmZ d dlmZ ddl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 )    )field_references)NOT_PROVIDED)cached_property   )	OperationOperationCategoryc                       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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   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                       h   e Zd ZdZej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   P      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   deconstructT      

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   defaultr:   r   )r   r   schema_editor
from_stateto_stateto_model
from_modelr   r   r   r   database_forwardsg   s   

	zAddField.database_forwardsc                 C   >   |j || j}| |jj|r|||j| j	 d S d S r	   
r?   r@   r   rA   rB   rC   remove_fieldrD   rE   r   r   r   rG   rH   rI   rK   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   describe|      zAddField.describec                 C   rS   )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   ZADDITIONcategoryr   r7   r=   rL   rQ   rU   propertyrX   r#   r*   r   r   r%   r   r,   K   s    
	
r,   c                       sZ   e Zd ZdZej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'   r5   r   r   r   r7      s   zRemoveField.deconstructc                 C   s   | || j| j d S r	   )rO   r   r   r;   r   r   r   r=      s   zRemoveField.state_forwardsc                 C   rM   r	   rN   rP   r   r   r   rL      rR   zRemoveField.database_forwardsc                 C   sN   |j || j}| |jj|r%|j || j}|||j| j	 d S d S r	   )
r?   r@   r   rA   rB   rC   r:   rD   rE   r   r   r   rG   rH   rI   rJ   rK   r   r   r   rQ      s
   zRemoveField.database_backwardsc                 C   rS   )NzRemove field %s from %srT   r   r   r   r   rU      rV   zRemoveField.describec                 C   rS   )Nzremove_%s_%srW   r   r   r   r   rX      rY   z#RemoveField.migration_name_fragmentc                    s6   ddl m} t||r|j| jkr|gS t ||S )Nr   )DeleteModel)modelsre   r[   r   r   r"   r#   )r   r   r   re   r%   r   r   r#      s   zRemoveField.reduce)r'   r(   r)   ra   r   ZREMOVALrb   r7   r=   rL   rQ   rU   rc   rX   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.   r0   r%   r   r   r      r1   zAlterField.__init__c                 C   r2   r3   r4   r5   r   r   r   r7      r8   zAlterField.deconstructc                 C   r9   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   rA   rB   rC   rD   rE   r   r/   r   rF   rg   r   )	r   r   rG   rH   rI   rJ   rK   Z
from_fieldZto_fieldr   r   r   rL      s   

zAlterField.database_forwardsc                 C   s   |  |||| d S r	   )rL   )r   r   rG   rH   rI   r   r   r   rQ      s   zAlterField.database_backwardsc                 C   rS   )NzAlter field %s on %srT   r   r   r   r   rU      rV   zAlterField.describec                 C   rS   )Nzalter_%s_%srW   r   r   r   r   rX      rY   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 rZ   )r[   r\   r]   r   r^   r   Z	db_columnr   r_   r"   r#   r$   r%   r   r   r#      s&   zAlterField.reducer`   )r'   r(   r)   ra   r   
ALTERATIONrb   r   r7   r=   rL   rQ   rU   rc   rX   r#   r*   r   r   r%   r   r\      s    
	
r\   c                       s   e Zd ZdZej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   ri   r_   r%   r   r   r     s   zRenameField.__init__c                 C   r   r	   )ri   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   ri   r_   )r   ri   r_   r&   r'   r5   r   r   r   r7   &  s
   zRenameField.deconstructc                 C   s   | || j| j| j d S r	   )Zrename_fieldr   ri   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   rA   rB   rC   rg   rD   rE   ri   r_   rd   r   r   r   rL   3     zRenameField.database_forwardsc                 C   rl   r	   )r?   r@   r   rA   rB   rC   rg   rD   rE   r_   ri   rd   r   r   r   rQ   =  rm   zRenameField.database_backwardsc                 C      d| j | j| jf S )NzRename field %s on %s to %s)ri   r   r_   r   r   r   r   rU   G  s
   zRenameField.describec                 C   rn   )Nzrename_%s_%s_%s)rj   r   rk   r   r   r   r   rX   N  s
   z#RenameField.migration_name_fragmentc                 C   s(   |  ||o| | jkp| | jkS r	   )r   r   rj   rk   )r   r   r   r   r   r   r   r!   V  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	   )r[   r^   r   rk   rj   r   ri   r_   r"   r   r#   r!   r$   r%   r   r   r#   [  s   	zRenameField.reduce)r'   r(   r)   ra   r   rh   rb   r   r   rj   rk   r7   r=   rL   rQ   rU   rc   rX   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   r   <module>   s    CQ.J