
    +h$                    l   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 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 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 ddlmZ ddlmZ e	rBd dlmZ 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 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%  G d d      Z&y )!    )annotations)Any)Dict)List)Optional)Sequence)Tuple)TYPE_CHECKING)Unionschema)Column)
Constraint)Index)Integer)NULLTYPE   )util)sqla_compat)ColumnElement)
TextClause)CheckConstraint)
ForeignKey)ForeignKeyConstraint)MetaData)PrimaryKeyConstraint)Table)UniqueConstraint)
TypeEngine)MigrationContextc                  &   e Zd Z	 d	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 ddZddZ	dd	Z
dd
Z	 d	 	 	 	 	 	 	 	 	 ddZddZddZy)SchemaObjectsNc                    || _         y N)migration_context)selfr%   s     O/var/www/html/venv/lib/python3.12/site-packages/alembic/operations/schemaobj.py__init__zSchemaObjects.__init__)   s     "3    c                    | j                         }|D cg c]  }t        j                  |t               }}t        j                  ||g|d|i}	t        j
                  |D cg c]  }|	j                  |    c}d|i|}
|
S c c}w c c}w Nr   name)metadata	sa_schemar   r   r   r   c)r&   r,   
table_namecolsr   
dialect_kwmncolumnstps              r'   primary_key_constraintz$SchemaObjects.primary_key_constraint.   s     MMO:>?Q9##Ax0??OOJCGCFC **"#acc!f#
*.
2<
  @
 $s   !B%Bc           
     0   | j                         }||k(  r|	|
k(  r||z   }nB|}t        j                  ||g|D cg c]  }t        j                  |t               c}d|
i t        j                  ||gt        j                  |      D cg c]  }t        j                  |t               c}d|	i}|
r|
d|n|}||d<   t        j                  ||D cg c]	  }|d| c}f|||||d|}|j                  |       |S c c}w c c}w c c}w )Nr   .match)r,   onupdateondelete
deferrable	initially)	r-   r.   r   r   r   r   unique_listr   append_constraint)r&   r,   sourcereferent
local_colsremote_colsr<   r=   r>   source_schemareferent_schemar?   r;   r2   r3   t1_colsr4   t1tnamefs                       r'   foreign_key_constraintz$SchemaObjects.foreign_key_constraint@   sP     MMOX-?"B ;.G GOO :EEA)""1h/E '	 __

 ))'2   H-
 !
  '1 	 $
7**+67aq!7	
 !	
 	
 	QE F" 8s   !D	
!D
D
c           
     B   t        j                  || j                         g|D cg c]  }t        j                  |t               c}d|i}||d<   t        j
                  |D cg c]  }|j                  |    c}i |}|j                  |       |S c c}w c c}w r+   )r.   r   r-   r   r   r   r/   rA   )	r&   r,   rB   rD   r   kwr4   r6   uqs	            r'   unique_constraintzSchemaObjects.unique_constraint|   s     OOMMO
 6@@iq(+@
 	
 6
''*)EQ!##a&)ELL 	
B	 A *Fs   !B
'Bc                    t        j                  || j                         t        j                  dt              |      }t        j
                  |fd|i|}|j                  |       |S )Nxr   r,   )r.   r   r-   r   r   r   rA   )r&   r,   rB   	conditionr   rN   r6   cks           r'   check_constraintzSchemaObjects.check_constraint   s`     OOMMOS'*	
 &&yBtBrB	B	r)   c           
     R   | j                  ||      }d t        j                  t        j                  d t        j                  d}	 ||   } ||      }|j                  |       |S # t        $ r3}	t        ddj                  t        d |D                    z        |	d }	~	ww xY w)	Nr   c                2    t        j                  g g |       S )Nr,   )r.   r   rX   s    r'   <lambda>z2SchemaObjects.generic_constraint.<locals>.<lambda>   s    y'E'EBT( r)   c                0    t        j                  d|       S )N rX   )r.   r   rX   s    r'   rY   z2SchemaObjects.generic_constraint.<locals>.<lambda>   s    )";";BT"J r)   )
foreignkeyprimaryuniquecheckNrX   z'type' can be one of %sz, c              3  2   K   | ]  }t        |        y wr$   )repr).0rR   s     r'   	<genexpr>z3SchemaObjects.generic_constraint.<locals>.<genexpr>   s     ":q47":s   )
tabler.   r   r   r   rA   KeyError	TypeErrorjoinsorted)
r&   r,   r0   type_r   rN   r6   typesconstkes
             r'   generic_constraintz SchemaObjects.generic_constraint   s     JJz&J1 !5500J&&+

	%LE t$E&L  	)))F":E"::;< 	s   	A* *	B&3.B!!B&c                    i }| j                   Ld| j                   j                  v r4| j                   j                  d   }t        |d      r|j                  |d<   t	        j
                  di |S )Ntarget_metadatanaming_convention )r%   optshasattrrp   r.   r   )r&   rN   mts      r'   r-   zSchemaObjects.metadata   sn    "".!T%;%;%@%@@'',,->?Br./*,*>*>&'!!'B''r)   c                f   | j                         }|D cg c]5  }t        |t              r#|j                  t	        j
                  |      n|7 }}|j                  dd      }|r|D ]  }dx|_        |_         t        j                  ||g|i |}|D 	cg c]M  }	t        |	t        t        f      r5t        |	dd       |ur$t        |	dd       t	        j
                  |	|      n|	O }
}	|
D ]  }|j                  |        |j                  D ]  }| j!                  ||        |S c c}w c c}	w )N_constraints_includedFparent)target_table)r-   
isinstancer   rd   r   _copypopr^   indexr.   r   r   r   getattrrA   foreign_keys_ensure_table_for_fk)r&   r,   r5   rN   r3   r/   r1   rv   r6   elemconstraintsrk   rK   s                r'   rd   zSchemaObjects.table   s\   MMO 
!V$ %&GG$7Ka Q>
 
 !#'> F  +%**17+ OOD!1d1b1  	
 $U 34 4409D(D1= !!$Q7 	
 	
 ! 	'E&	'  	,A%%a+	,E
$	
s   :D)AD.c                0    t        j                  ||fi |S r$   )r.   r   )r&   r,   ri   rN   s       r'   columnzSchemaObjects.column   s    e2r22r)   c           
         t        j                  |xs d| j                         |      }||d<   t        j                  |g|D cg c]"  }t        j
                  j                  ||      $ c}i |}|S c c}w )Nno_tabler   _table)r.   r   r-   r   r   r   _textual_index_column)	r&   r,   	tablenamer5   r   rN   r6   r4   idxs	            r'   r|   zSchemaObjects.index   s     OO#MMO

 8oo
DKLqd44Q:L
 

 
 Ms   'A7
c                v    d|v r.|j                  d      }dj                  |dd       }|d   }||fS |}d }||fS )Nr:   r   )splitrg   )r&   	table_keytokenssnamerJ   s        r'   _parse_table_keyzSchemaObjects._parse_table_key  sW    )__S)F#&88F1RL#9E2JE u~ EEu~r)   c                |   t        |j                  t              r|j                  j                  dd      \  }}| j	                  |      \  }}||j
                  vrt        j                  |||      }n|j
                  |   }||j                  vr*|j                  t        j                  |t                     yyy)zUcreate a placeholder Table object for the referent of a
        ForeignKey.

        r:      r   N)ry   _colspecstrrsplitr   tablesr.   r   r/   append_columnr   r   )r&   r-   fkr   cnamer   rJ   rel_ts           r'   r   z"SchemaObjects._ensure_table_for_fk  s    
 bkk3'!{{11#q9Iu00;LE5/!xF 	2EGG###I$4$4UH$EF $ (r)   r$   )r%   zOptional[MigrationContext]returnNone)
r,   ,Optional[sqla_compat._ConstraintNameDefined]r0   r   r1   Sequence[str]r   Optional[str]r   r   )NNNNNNN)r,   r   rB   r   rC   r   rD   	List[str]rE   r   r<   r   r=   r   r>   zOptional[bool]rF   r   rG   r   r?   r   r;   r   r   r   )
r,   r   rB   r   rD   r   r   r   r   r   )
r,   r   rB   r   rS   z*Union[str, TextClause, ColumnElement[Any]]r   r   r   zUnion[CheckConstraint])
r,   r   r0   r   ri   r   r   r   r   r   )r   r   )r,   r   r   r   )r,   r   ri   r   r   r   )
r,   r   r   r   r5   z4Sequence[Union[str, TextClause, ColumnElement[Any]]]r   r   r   r   )r   r   r   zTuple[Optional[str], str])r-   r   r   r   r   r   )__name__
__module____qualname__r(   r8   rL   rP   rU   rm   r-   rd   r   r|   r   r   rq   r)   r'   r"   r"   (   s   >B3!;3	3 !%:  	
  
2 #'"&%)'+)-#'#::: : 	:
 : :  :  : #: %: ': !: : 
:B !%:  "	
  
4 !%:  >	
  
 . !%:  	
  
<	(%N3 !% ! F	
  
*Gr)   r"   N)'
__future__r   typingr   r   r   r   r   r	   r
   r   
sqlalchemyr   r.   sqlalchemy.sql.schemar   r   r   sqlalchemy.typesr   r   r[   r   r   sqlalchemy.sql.elementsr   r   r   r   r   r   r   r   r   sqlalchemy.sql.type_apir   runtime.migrationr    r"   rq   r)   r'   <module>r      sl    #          * ( , ' $ %  5250:.:+624zG zGr)   