
    (ph                     ^    S SK Jr  SSKJr   " S S\5      r " S S\5      r " S S	\5      rg
)    )router   )	Operationc                   H    \ rS rSrSrSS/rSS jrS rS rS	 r	S
 r
S rSrg)SeparateDatabaseAndState   a  
Take two lists of operations - ones that will be used for the database,
and ones that will be used for the state change. This allows operations
that don't support state change to have it applied, or have operations
that affect the state or not the database, or so on.
database_operationsstate_operationsNc                 D    U=(       d    / U l         U=(       d    / U l        g Nr	   r
   )selfr	   r
   s      Z/var/www/html/venv/lib/python3.13/site-packages/django/db/migrations/operations/special.py__init__!SeparateDatabaseAndState.__init__   s    #6#<"  0 6B    c                     0 nU R                   (       a  U R                   US'   U R                  (       a  U R                  US'   U R                  R                  / U4$ )Nr	   r
   )r	   r
   	__class____qualname__r   kwargss     r   deconstruct$SeparateDatabaseAndState.deconstruct   sR    ##,0,D,DF()  )-)>)>F%&++R88r   c                 L    U R                    H  nUR                  X5        M     g r   r
   state_forwardsr   	app_labelstatestate_operations       r   r   'SeparateDatabaseAndState.state_forwards        #44O**9<  5r   c                     U R                    H8  nUR                  5       nUR                  X5        UR                  XX45        UnM:     g r   )r	   cloner   database_forwards)r   r   schema_editor
from_stateto_statedatabase_operations         r   r%   *SeparateDatabaseAndState.database_forwards    sI    "&":":!'')H--iB00* "J #;r   c                     0 nU R                    H(  nXEU'   UR                  5       nUR                  X5        M*     [        U R                   5       H  nUnXW   nUR	                  XX45        M     g r   )r	   r$   r   reverseddatabase_backwards)r   r   r&   r'   r(   	to_statesdbopr)   s           r   r-   +SeparateDatabaseAndState.database_backwards*   sq    	,,D&dO~~'H	4 - #+4+C+C"D!J 4H11* #Er   c                     g)Nz(Custom state/database change combination r   s    r   describe!SeparateDatabaseAndState.describe;   s    9r   r   )NN)__name__
__module__r   __firstlineno____doc__serialization_expand_argsr   r   r   r%   r-   r4   __static_attributes__r2   r   r   r   r      s3     "78J K79="":r   r   c                   \    \ rS rSrSrSr SS jrS r\S 5       r	S r
S	 rS
 rS rS rSrg)RunSQL?   z
Run some raw SQL. A reverse SQL statement may be provided.

Also accept a list of operations that represent the state change effected
by this SQL change, in case it's custom column/table creation/deletion.
 Nc                 h    Xl         X l        U=(       d    / U l        U=(       d    0 U l        XPl        g r   )sqlreverse_sqlr
   hintselidable)r   rA   rB   r
   rC   rD   s         r   r   RunSQL.__init__I   s,     & 0 6B[b
 r   c                    SU R                   0nU R                  b  U R                  US'   U R                  (       a  U R                  US'   U R                  (       a  U R                  US'   U R                  R
                  / U4$ )NrA   rB   r
   rC   )rA   rB   r
   rC   r   r   r   s     r   r   RunSQL.deconstructR   su    488
 '$($4$4F=!  )-)>)>F%&::"jjF7O++R88r   c                     U R                   S L$ r   )rB   r3   s    r   
reversibleRunSQL.reversible^   s    t++r   c                 L    U R                    H  nUR                  X5        M     g r   r   r   s       r   r   RunSQL.state_forwardsb   r"   r   c                     [         R                  " UR                  R                  U40 U R                  D6(       a  U R                  X R                  5        g g r   )r   allow_migrate
connectionaliasrC   _run_sqlrA   r   r   r&   r'   r(   s        r   r%   RunSQL.database_forwardsf   sD    $$**I
9=
 MM-2
r   c                     U R                   c  [        S5      e[        R                  " UR                  R
                  U40 U R                  D6(       a  U R                  X R                   5        g g Nz!You cannot reverse this operation)rB   NotImplementedErrorr   rN   rO   rP   rC   rQ   rR   s        r   r-   RunSQL.database_backwardsl   s^    #%&IJJ$$**I
9=
 MM-)9)9:
r   c                     g)NzRaw SQL operationr2   r3   s    r   r4   RunSQL.describet   s    "r   c                    [        U[        [        45      (       aZ  U HS  nS n[        U[        [        45      (       a$  [        U5      nUS:X  a  Uu  p4O[	        SU-  5      eUR                  X4S9  MU     g U[        R                  :w  a?  UR                  R                  R                  U5      nU H  nUR                  US S9  M     g g )N   zExpected a 2-tuple but got %d)params)
isinstancelisttuplelen
ValueErrorexecuter=   nooprO   opsprepare_sql_script)r   r&   sqlsrA   r\   elements
statements	statements           r   rQ   RunSQL._run_sqlw   s    dT5M**cD%=11"3xH1}&)V()H8)STT%%c%9  V[[ &1155HHNJ'	%%i%= ( !r   )rD   rC   rB   rA   r
   NNNF)r6   r7   r   r8   r9   rc   r   r   propertyrI   r   r%   r-   r4   rQ   r;   r2   r   r   r=   r=   ?   sL     D RW!
9 , ,=3;#>r   r=   c                   f    \ rS rSrSrSr SS jrS r\S 5       r	S r
S	 rS
 rS r\S 5       rSrg)	RunPython   zK
Run Python code in a context suitable for doing versioned ORM operations.
FNc                     X0l         [        U5      (       d  [        S5      eXl        Uc  S U l        O![        U5      (       d  [        S5      eX l        U=(       d    0 U l        XPl        g )Nz*RunPython must be supplied with a callablez2RunPython must be supplied with callable arguments)atomiccallablera   codereverse_coderC   rD   )r   rs   rt   rq   rC   rD   s         r   r   RunPython.__init__   s^     ~~IJJ	 $DL)) !UVV ,[b
 r   c                     SU R                   0nU R                  b  U R                  US'   U R                  b  U R                  US'   U R                  (       a  U R                  US'   U R                  R
                  / U4$ )Nrs   rt   rq   rC   )rs   rt   rq   rC   r   r   r   s     r   r   RunPython.deconstruct   ss    DII
 (%)%6%6F>";;"#{{F8::"jjF7O++R88r   c                     U R                   S L$ r   )rt   r3   s    r   rI   RunPython.reversible   s      ,,r   c                     g r   r2   )r   r   r   s      r   r   RunPython.state_forwards   s     	r   c                     UR                  5         [        R                  " UR                  R                  U40 U R
                  D6(       a  U R                  UR                  U5        g g r   )clear_delayed_apps_cacher   rN   rO   rP   rC   rs   appsrR   s        r   r%   RunPython.database_forwards   sT     	++-$$**I
9=
 IIjoo}5
r   c                     U R                   c  [        S5      e[        R                  " UR                  R
                  U40 U R                  D6(       a  U R                  UR                  U5        g g rU   )rt   rV   r   rN   rO   rP   rC   r~   rR   s        r   r-   RunPython.database_backwards   s`    $%&IJJ$$**I
9=
 joo}=
r   c                     g)NzRaw Python operationr2   r3   s    r   r4   RunPython.describe   s    %r   c                     g r   r2   )r~   r&   s     r   rc   RunPython.noop   s    r   )rq   rs   rD   rC   rt   rk   )r6   r7   r   r8   r9   reduces_to_sqlr   r   rl   rI   r   r%   r-   r4   staticmethodrc   r;   r2   r   r   rn   rn      s[     N JO!$
9 - -
6>&  r   rn   N)	django.dbr   baser   r   r=   rn   r2   r   r   <module>r      s5     6:y 6:rF>Y F>RH	 Hr   