
    h:                         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e      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Zy)    )FieldDoesNotExist)NOT_PROVIDED)cached_property   )	Operation)field_is_referencedfield_referencesget_referencesc                   ^     e Zd Zd	dZed        Zed        Zd Zd Zd Z	d Z
 fdZ xZS )
FieldOperationc                 .    || _         || _        || _        y N
model_namenamefield)selfr   r   r   s       i/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/db/migrations/operations/fields.py__init__zFieldOperation.__init__
   s    $	
    c                 6    | j                   j                         S r   )r   lowerr   s    r   model_name_lowerzFieldOperation.model_name_lower   s    $$&&r   c                 6    | j                   j                         S r   )r   r   r   s    r   
name_lowerzFieldOperation.name_lower   s    yy  r   c                 4    | j                   |j                   k(  S r   )r   r   	operations     r   is_same_model_operationz&FieldOperation.is_same_model_operation   s    $$	(B(BBBr   c                 Z    | j                  |      xr | j                  |j                  k(  S r   )r    r   r   s     r   is_same_field_operationz&FieldOperation.is_same_field_operation   s'    ++I6b4??iNbNb;bbr   c                     |j                         }|| j                  k(  ry| j                  r.t        t	        || j                  f| j                  ||f            S y)NTF)r   r   r   boolr	   )r   r   	app_labelr   s       r   references_modelzFieldOperation.references_model   sZ    ZZ\
...::(D112DJJJ@W   r   c                 N   |j                         }|| j                  k(  rK|| j                  k(  ry| j                  r/t	        | j                  d      r|| j                  j
                  v ry| j                  yt        t        || j                  f| j                  ||f|            S )NTfrom_fieldsF)r   r   r   r   hasattrr(   r$   r	   )r   r   r   r%   r   s        r   references_fieldzFieldOperation.references_field'   s    %++-t444tyy 

M BttzzOeOeGe::$--.JJ()	
  	r   c                 x    t         |   ||      xs( |j                  | j                  | j                  |       S r   )superreducer*   r   r   r   r   r%   	__class__s      r   r-   zFieldOperation.reduce9   s9    GN9i0 R**4??DIIyQQ	
r   r   )__name__
__module____qualname__r   r   r   r   r    r"   r&   r*   r-   __classcell__r/   s   @r   r   r   	   sP    
 ' ' ! !Cc$
 
r   r   c                   L     e Zd ZdZd	 fd	Zd Zd Zd Zd Zd Z	 fdZ
 xZS )
AddFieldzAdd a field to a model.c                 6    || _         t        | 	  |||       y r   preserve_defaultr,   r   r   r   r   r   r9   r/   s        r   r   zAddField.__init__C        0T51r   c                     | j                   | j                  | j                  d}| j                  dur| j                  |d<   | j                  j
                  g |fS Nr   Tr9   r   r   r   r9   r/   r0   r   kwargss     r   deconstructzAddField.deconstructG   \    //IIZZ

   ,)-)>)>F%&NN##
 	
r   c                 :   | j                   s&| j                  j                         }t        |_        n| j                  }||j
                  || j                  f   j                  | j                  <   |j                   }|j                  || j                  |       y Ndelay)r9   r   cloner   defaultmodelsr   fieldsr   is_relationreload_model)r   r%   stater   rF   s        r   state_forwardszAddField.state_forwardsU   s~    $$JJ$$&E(EMJJEKPY 5 556==diiH%%%9d&;&;5Ir   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  j                  | j                        }| j                  s| j                  j                  |_        |j                  ||       | j                  st        |_        y y y r   )apps	get_modelr   allow_migrate_model
connectionalias_meta	get_fieldr   r9   r   rH   	add_fieldr   )r   r%   schema_editor
from_stateto_stateto_model
from_modelr   s           r   database_forwardszAddField.database_forwardsa   s    ==**9dooF##M$<$<$B$BHM#229dooNJNN,,TYY7E(( $

 2 2## (( , ) Nr   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r6|j                  ||j                  j                  | j                               y y r   
rP   rQ   r   rR   rS   rT   remove_fieldrU   rV   r   r   r%   rX   rY   rZ   r\   s         r   database_backwardszAddField.database_backwardso   c    __..y$//J
##M$<$<$B$BJO&&z:3C3C3M3Mdii3XY Pr   c                 :    d| j                   d| j                  S )Nz
Add field  to r   r   r   s    r   describezAddField.describet   s    '+yy$//BBr   c                 ~   t        |t              r| j                  |      rt        |t              r-t	        | j
                  |j                  |j                        gS t        |t              rg S t        |t              r-t	        | j
                  |j                  | j                        gS t        | 1  ||      S Nr   )
isinstancer   r"   
AlterFieldr6   r   r   r   RemoveFieldRenameFieldnew_namer,   r-   r.   s      r   r-   zAddField.reducew   s    i0T5Q5QR[5\)Z0#'??&^^'oo  I{3	I{3#'??&//"jj  w~i33r   Tr0   r1   r2   __doc__r   rA   rN   r]   rb   rg   r-   r3   r4   s   @r   r6   r6   @   s1    !2

J-Z
C4 4r   r6   c                   @     e Zd ZdZd Zd Zd Zd Zd Z fdZ	 xZ
S )rl   zRemove a field from a model.c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r   r   )r   r   r/   r0   r?   s     r   rA   zRemoveField.deconstruct   s6    //II

 NN##
 	
r   c                     |j                   || j                  f   }|j                  j                  | j                        }|j
                   }|j                  || j                  |       y rD   )rI   r   rJ   popr   rK   rL   )r   r%   rM   model_state	old_fieldrF   s         r   rN   zRemoveField.state_forwards   s^    ll9d.C.C#CD&&**4995	)))9d&;&;5Ir   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r6|j                  ||j                  j                  | j                               y y r   r_   ra   s         r   r]   zRemoveField.database_forwards   rc   r   c                 T   |j                   j                  || j                        }| j                  |j                  j
                  |      r\|j                   j                  || j                        }|j                  ||j                  j                  | j                               y y r   )
rP   rQ   r   rR   rS   rT   rW   rU   rV   r   r   r%   rX   rY   rZ   r[   r\   s          r   rb   zRemoveField.database_backwards   s{    ==**9dooF##M$<$<$B$BHM#229dooNJ##J0H0H0ST Nr   c                 :    d| j                   d| j                  S )NzRemove field z from rf   r   s    r   rg   zRemoveField.describe   s    ,0IItGGr   c                     ddl m} t        ||      r|j                  | j                  k(  r|gS t
        |   ||      S )Nr   )DeleteModel)rI   r}   rj   r   r   r,   r-   )r   r   r%   r}   r/   s       r   r-   zRemoveField.reduce   s<    'i-)2F2F$J_J_2_;w~i33r   )r0   r1   r2   rq   rA   rN   r]   rb   rg   r-   r3   r4   s   @r   rl   rl      s-    &	
JZ
UH4 4r   rl   c                   L     e Zd ZdZd	 fd	Zd Zd Zd Zd Zd Z	 fdZ
 xZS )
rk   z`
    Alter a field's database column (e.g. null, max_length) to the provided
    new field.
    c                 6    || _         t        | 	  |||       y r   r8   r:   s        r   r   zAlterField.__init__   r;   r   c                     | j                   | j                  | j                  d}| j                  dur| j                  |d<   | j                  j
                  g |fS r=   r>   r?   s     r   rA   zAlterField.deconstruct   rB   r   c                    | j                   s&| j                  j                         }t        |_        n| j                  }|j
                  || j                  f   }||j                  | j                  <   |j                   xr& t        ||| j                  f| j                  |f       }|j                  || j                  |       y rD   )r9   r   rG   r   rH   rI   r   rJ   r   rK   r   rL   )r   r%   rM   r   rv   rF   s         r   rN   zAlterField.state_forwards   s    $$JJ$$&E(EMJJEll9d.C.C#CD(-499% !!! #	4#8#89DIIu;M  	 	9d&;&;5Ir   c                 "   |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  j                  | j                        }|j                  j                  | j                        }| j                  s| j                  j                  |_        |j                  |||       | j                  st        |_        y y y r   )rP   rQ   r   rR   rS   rT   rU   rV   r   r9   r   rH   alter_fieldr   )	r   r%   rX   rY   rZ   r[   r\   
from_fieldto_fields	            r   r]   zAlterField.database_forwards   s    ==**9dooF##M$<$<$B$BHM#229dooNJ#))33DII>J~~//		:H((#'::#5#5 %%j*hG((#/  ) Nr   c                 ,    | j                  ||||       y r   )r]   )r   r%   rX   rY   rZ   s        r   rb   zAlterField.database_backwards   s    y-XNr   c                 :    d| j                   d| j                  S )NzAlter field  on rf   r   s    r   rg   zAlterField.describe   s    )-DOODDr   c                 
   t        |t              r| j                  |      r|gS t        |t              r?| j                  |      r.|t	        | j
                  |j                  | j                        gS t        | %  ||      S ri   )
rj   rl   r"   rm   rk   r   rn   r   r,   r-   r.   s      r   r-   zAlterField.reduce   sy    i-$2N2Ny2Y;	;/D4P4PQZ4[#"++**  w~i33r   ro   rp   r4   s   @r   rk   rk      s3    
2
J(
0OE4 4r   rk   c                   p     e Zd ZdZ fdZed        Zed        Zd Zd Z	d Z
d Zd	 Zd
 Z fdZ xZS )rm   z8Rename a field on the model. Might affect db_column too.c                 B    || _         || _        t        |   ||       y r   )old_namern   r,   r   )r   r   r   rn   r/   s       r   r   zRenameField.__init__  s       X.r   c                 6    | j                   j                         S r   )r   r   r   s    r   old_name_lowerzRenameField.old_name_lower      }}""$$r   c                 6    | j                   j                         S r   )rn   r   r   s    r   new_name_lowerzRenameField.new_name_lower  r   r   c                 |    | j                   | j                  | j                  d}| j                  j                  g |fS )N)r   r   rn   )r   r   rn   r/   r0   r?   s     r   rA   zRenameField.deconstruct  s=    //
 NN##
 	
r   c           
      T   |j                   || j                  f   }|j                  }	 |j                  | j                        }||| j                  <   |j                         D ]K  }t        |dd       }|st        |D cg c]  }|| j                  k(  r| j                  n|! c}      |_        M |j                  }	dD ]H  }
|
|	v s|	|
   D cg c]-  }|D cg c]  }|| j                  k(  r| j                  n|! c}/ c}}|	|
<   J d}t        ||| j                  f| j                  |f      }|D ]  ^ }}}d}|j                  s|j                  \  }}t        |dd       | j                  k(  r| j                  |_        |sSt        |D cg c]  }|| j                  k(  r| j                  n|! c}      |_         |j%                  || j                  |	       y # t
        $ r) t        |d| j                  d| j                  d      w xY wc c}w c c}w c c}}w c c}w )
N.z has no field named ''r(   )index_togetherunique_togetherTF
field_namerE   )rI   r   rJ   ru   r   KeyErrorr   r   rn   valuesgetattrtupler(   optionsr
   tor   	to_fieldsrL   )r   r%   rM   rv   rJ   foundr   r(   from_field_namer   optiontogethernrF   
references_	referenceremote_fieldr   to_field_names                       r   rN   zRenameField.state_forwards!  s+   ll9d.C.C#CD##	JJt}}-E
 !&t}}]]_ 	E!%=K$)+6+' &5%EDMM?Z+ %!		 %%; 	F  %,FO#  JRRAa4==&8T]]a?R#	 #It445u7M

 %/ 
	 QyE||*3,,'i<t<M.2mmL+&+-6-) *7$--)G]Z- 'EO
	 	9d&;&;5IK  	#3<doot}}] 	+ S# -s/   G  ?$H
	H$H<H$H%
 2HHc                    |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  ||j                  j                  | j                        |j                  j                  | j                               y y r   )rP   rQ   r   rR   rS   rT   r   rU   rV   r   rn   rz   s          r   r]   zRenameField.database_forwardsN      ==**9dooF##M$<$<$B$BHM#229dooNJ%%  **4==9((7 Nr   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  ||j                  j                  | j                        |j                  j                  | j                               y y r   )rP   rQ   r   rR   rS   rT   r   rU   rV   rn   r   rz   s          r   rb   zRenameField.database_backwardsX  r   r   c                 T    d| j                   d| j                  d| j                  S )NzRename field r   re   )r   r   rn   r   s    r   rg   zRenameField.describeb  s    04tPTP]P]^^r   c                     | j                  ||      xr< |j                         | j                  k(  xs |j                         | j                  k(  S r   )r&   r   r   r   )r   r   r   r%   s       r   r*   zRenameField.references_fielde  sI    $$Z; 
JJLD/// 0JJLD///	
r   c                 L   t        |t              rV| j                  |      rE| j                  |j                  k(  r,t        | j
                  | j                  |j                        gS t        t        | +  ||      xs( |j                  | j
                  | j                  |       S r   )rj   rm   r    r   r   r   r   rn   r,   r   r-   r*   r.   s      r   r-   zRenameField.reducek  s    y+.,,Y7##y'?'??OOMM&&  .$.y)D V**4??DMM9UU	
r   )r0   r1   r2   rq   r   r   r   r   rA   rN   r]   rb   rg   r*   r-   r3   r4   s   @r   rm   rm     s^    B/
 % % % %

+JZ_

 
r   rm   N)django.core.exceptionsr   django.db.modelsr   django.utils.functionalr   baser   utilsr   r	   r
   r   r6   rl   rk   rm    r   r   <module>r      s]    4 ) 3  H H4
Y 4
nK4~ K4\'4. '4TJ4 J4Zv
. v
r   