
    +h9                       d dl mZ d dlZd dl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 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rHd 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.m0Z0 d d%l.m1Z1 d d&lm2Z2 d d'l3m4Z4 d d(lm5Z5 d d)l6m7Z7 d d*l6m8Z8  ed+ed,   -      Z9 G d. d/e      Z:dcd0Z; e< ejz                  d1e      D  cg c]
  }  e;|        c}       Z>e>d2k\  Z?e>d3k\  Z@e>d4k\  ZAeZBer	 	 	 	 	 	 ddd5ZCnd d6lDmCZC  eEejV                  e      ZF	 de	 	 	 	 	 dfd7ZGeArd d8lmHZH nd d9lImJZH edeKeHf   ZLeeKeHf   ZM	 	 	 	 dgd:ZNdhd;ZOdid<ZPd=ZQej                  	 	 	 	 djd>       ZS	 	 	 	 dkd?ZT	 	 	 	 dld@ZU	 	 	 	 dldAZVdmdBZWdndCZXdodDZY	 	 	 	 	 	 	 	 dpdEZZdF Z[dG Z\dqdHZ]dqdIZ^drdJZ_dK Z`dL Za ebej                  dM      rdN ZddO ZendP ZddQ ZedsdRZfdtdSZgdudTZhdU Zi	 	 	 	 	 	 dvdVZj	 	 	 	 	 	 dwdWZkdxdXZl G dY dZejj                        Zm eCem      	 	 	 	 	 	 dyd[       Zn G d\ d]e       Zo eCeo      	 	 	 	 	 	 dzd^       Zp	 	 	 	 	 	 d{d_Zq	 	 	 	 	 	 d|d`Zrd}daZsd~dbZtyc c} w )    )annotationsN)Any)Callable)Dict)Iterable)Iterator)Optional)Protocol)Set)Type)TYPE_CHECKING)TypeVar)Union)__version__schema)sql)types)CheckConstraint)Column)ForeignKeyConstraint)visitors)DialectKWArgs)BindParameter)ColumnClause)
TextClause)UnaryExpression)traverse)	TypeGuard)
_NONE_NAME)ClauseElement)Identity)Index)Table)
Connection)Dialect)Transaction)ColumnCollection)SQLCompiler)ColumnElement)
Constraint)
SchemaItem_CE)zColumnElement[Any]r,   )boundc                      e Zd ZddZy)_CompilerProtocolc                     y N )selfelementcompilerkws       K/var/www/html/venv/lib/python3.12/site-packages/alembic/util/sqla_compat.py__call__z_CompilerProtocol.__call__:   s        N)r5   r   r6   r   r7   r   returnstr)__name__
__module____qualname__r9   r3   r:   r8   r0   r0   9   s    Jr:   r0   c                ,    	 t        |       S #  | cY S xY wr2   )int)values    r8   	_safe_intrC   =   s    5zs   
 z(\d+|[abc]\d))         )rD   rE      )   c                     y r2   r3   )r5   dialectss     r8   compilesrK   O   s    ;>r:   )rK   c                   | i S t         rOt        | d      sJ | j                         }|r-t        | t              sJ |j                  | j                         |S i }t        | t        j                        r*| j                  |d<   | j                  | j                  |d<   d}|j                  |D ci c]  }t        | |d       |t        | |d        c}       |S c c}w )N_as_dictalwayson_null)	start	incrementminvaluemaxvalue
nominvalue
nomaxvaluecyclecacheorder)identity_has_dialect_kwargshasattrrM   
isinstancer   updatedialect_kwargsr   r"   rN   rO   getattr)identityr]   as_dictattrskeys        r8   _get_identity_options_dictrc   Z   s     		$x,,,##%h666NN82236 N3 h0 (GH+%-%5%5	"

 	 !8S$/; WXsD11	
 Ns   1"C)	_NoneName)symbolc                B    | t         u xs t        | t        t        f      S r2   )r    r[   r<   rd   names    r8   constraint_name_definedri      s      :CD3	2B!CCr:   c                "    t        | t              S r2   )r[   r<   rg   s    r8   constraint_name_stringrk      s    dC  r:   c                     t        |       r| S d S r2   )rk   rg   s    r8   constraint_name_or_nonerm      s    )$/49T9r:   autoc              #     K   	 | j                   }|d  y  |       s"| J | j                         5  d  d d d        y d  y # t        $ r d }Y Bw xY w# 1 sw Y   y xY wwr2   )in_transactionAttributeErrorbegin
connectionrp   s     r8   _ensure_scope_for_ddlru      sy     #22 )))!!#      s=   A"A "A"AA"AA"AA"AA"c                J    | j                         }|r|S | j                         S r2   )get_transactionrr   rt   transactions     r8   "_safe_begin_connection_transactionrz      s*     ,,.K!!r:   c                J    | j                         }|r|j                          y y r2   )rw   commitrx   s     r8   #_safe_commit_connection_transactionr}      s&     ,,.K r:   c                J    | j                         }|r|j                          y y r2   )rw   rollbackrx   s     r8   %_safe_rollback_connection_transactionr      s&     ,,.K r:   c                H    	 | j                   } |       S # t        $ r Y yw xY w)NF)rp   rq   rs   s     r8   _get_connection_in_transactionr      s1     #22
 	  s    	!!c                    | j                   S r2   )expressions)idxs    r8   _idx_table_bound_expressionsr      s    ??r:   c                b    t        | d      r | j                  di |S  | j                  di |S )N_copyr3   )rZ   r   copy)schema_itemr7   s     r8   r   r      s8    {G$ {  &2&&{%"%%r:   c                <    | j                   j                  | ||      S r2   )dialect	has_table)connectable	tablename
schemanames      r8   _connectable_has_tabler      s     ((iLLr:   c                r    | j                         5 }|j                  ||      cd d d        S # 1 sw Y   y xY wr2   )_operation_contextexecute)	inspector	statementparamsconns       r8   _exec_on_inspectorr      s3    		%	%	' /4||Iv./ / /s   -6c                >    ddl m} | j                  |j                  u S )Nr   r   )sqlalchemy.sqlr   _user_defined_nullableNULL_UNSPECIFIED)metadata_columnr   s     r8   _nullability_might_be_unsetr      s    %11V5L5LLLr:   c                 &    t        d | D              S )Nc              3  P   K   | ]  }t        |t        j                           y wr2   )r[   r   Computed.0sds     r8   	<genexpr>z._server_default_is_computed.<locals>.<genexpr>        H2z"foo.H   $&anyserver_defaults    r8   _server_default_is_computedr          HHHHr:   c                 &    t        d | D              S )Nc              3  P   K   | ]  }t        |t        j                           y wr2   )r[   r   r"   r   s     r8   r   z._server_default_is_identity.<locals>.<genexpr>   r   r   r   r   s    r8   _server_default_is_identityr      r   r:   c                ^    t        | t              r| j                  }|J |S | j                  S r2   )r[   r   parenttable)
constraintr   s     r8   _table_for_constraintr      s5    *23!!   r:   c                    t        | t              r$| j                  D cg c]  }|j                   c}S t        | t              rt        | j                        S t        | j                        S c c}w r2   )	r[   r   elementsr   r   _find_columnssqltextlistcolumns)r   fks     r8   _columns_for_constraintr     sY    *23$.$7$78b		88	J	0Z//00J&&''	 9s   A/c                p    t        |       r*t        |       \  }}|j                  |j                  |      S | S r2   )_type_has_variants_get_variant_mappinggetrh   )type_r   	base_typemappings       r8   _resolve_for_variantr     s3    % 1%8	7{{7<<33r:   _variant_mappingc                ,    t        | j                        S r2   )boolr   r   s    r8   r   r     s    E**++r:   c                    | | j                   fS r2   )r   r   s    r8   r   r     s    e,,,,r:   c                8    t        |       t        j                  u S r2   )typesqltypesVariantr   s    r8   r   r   !  s    E{h....r:   c                2    | j                   | j                  fS r2   )implr   r   s    r8   r   r   $  s    zz5==((r:   c           
        t         r8| j                  J | j                  J t        | j                  t
              sJ | j                  D cg c]  }| j                  |   j                   }}| j                  j                  }| j                  j                  }| j                  d   j                  j                  j                  }| j                  d   j                  j                  j                  }| j                  D cg c]  }|j                  j                   }}| j                  }	| j                  }
| j                  }| j                  }|||||||
|	||f
S c c}w c c}w )Nr   )r   r   r   r[   r   r$   column_keysrh   r   columnr   ondeleteonupdate
deferrable	initially)r   rb   source_columnssource_tablesource_schematarget_schematarget_tabler5   target_columnsr   r   r   r   s                r8   _fk_specr   (  s\   !!---""...*++U333 1;0F0F),
3$$N  $$))L%%,,M''*1177>>M&&q)0066;;L9C9L9LMggnn))MNM""H""H&&J$$I  Ns    EE#c                    | j                   d   j                         }|j                  d      }|j                  d       dj	                  |      }| j
                  J || j
                  j                  k(  S )Nr   .)r   _get_colspecsplitpopjoinr   rb   )r   spectokenstablekeys       r8   _fk_is_self_referentialr   I  sj    q!..0DZZ_F
JJrNxxH(((z((,,,,r:   c                    | j                   S r2   )_type_bound)r   s    r8   _is_type_boundr   R  s     !!!r:   c                L    t               }t        | i d|j                  i       |S )z2locate Column objects within the given expression.r   )setr   add)clausecolss     r8   r   r   Y  s%     %(EDVR(DHH-.Kr:   c                    |j                   J | |j                      }t        | d      st        | d      r| j                  j                  |       y| j                  |       y)z(remove a column from a ColumnCollection.N
_immutable	_readonly)rb   rZ   _parentremove)
collectionr   	to_removes      r8   _remove_column_from_collectionr   a  sY     ::!!!6::&I z<(GJ,L!!),)$r:   c                b   t        |t              r-t        |t        j                        }| j                  |       |S t        |t              rt        | |      S t        |t              rt        | |j                        S t        |t        j                        rt        ||       S t        d      )zAa workaround for the Index construct's severe lack of flexibilityz#String or text() construct expected)r[   r<   r   r   NULLTYPEappend_columnr   _textual_index_element_textual_index_columntextr   r*   _copy_expression
ValueError)r   text_cs      r8   r   r   s  s     %5(++,A	E:	&%eU33	E1	2$UEJJ77	E3,,	-u-->??r:   c                <    fd}t        j                  | i |      S )Nc                    t        | t              ri| j                  ]| j                  urO| j                  j                  v rj                  | j                     S t        |       }j                  |       |S y r2   )r[   r   r   rh   r  r   r   )colr  r   s     r8   replacez!_copy_expression.<locals>.replace  se    sF#		%		-xx<>>)#~~chh//#J**1-r:   )r   replacement_traverse)
expressionr   r  s    ` r8   r  r    s$     ((B r:   c                  "    e Zd ZdZdZddZd Zy)r   aQ  Wrap around a sqlalchemy text() construct in such a way that
    we appear like a column-oriented SQL expression to an Index
    construct.

    The issue here is that currently the Postgresql dialect, the biggest
    recipient of functional indexes, keys all the index expressions to
    the corresponding column expressions when rendering CREATE INDEX,
    so the Index we create here needs to have a .columns collection that
    is the same length as the .expressions collection.  Ultimately
    SQLAlchemy should support text() expressions in indexes.

    See SQLAlchemy issue 3174.

    _textual_idx_elementc                    || _         || _        |j                  | _        t        j                  | j                  j                  t
        j                        | _        |j                  | j                         y r2   )	r   r   rb   r   r   r   r   fake_columnr   )r4   r   r   s      r8   __init__z_textual_index_element.__init__  sP    
	99!==9J9JKD,,-r:   c                    | j                   gS r2   )r  )r4   r7   s     r8   get_childrenz#_textual_index_element.get_children  s      !!r:   N)r   r$   r   r   r;   None)r=   r>   r?   __doc____visit_name__r  r  r3   r:   r8   r   r     s     ,N."r:   r   c                <     |j                   | j                  fi |S r2   )processr   r5   r6   r7   s      r8   _render_textual_index_columnr    s      8GLL/B//r:   c                      e Zd Zy)_literal_bindparamN)r=   r>   r?   r3   r:   r8   r  r    s    r:   r  c                (     |j                   | fi |S r2   )render_literal_bindparamr  s      r8   _render_literal_bindparamr    s     -8,,W;;;r:   c                ^    | j                   y |J |j                  j                  | d      S NF)_alembic_quoterh   identifier_preparerformat_constraint)r   r   s     r8   _get_constraint_final_namer$    sB      &&885 9  r:   c                f    | j                   y|J |j                  j                  | d      }|d uS r  r!  )r   r   rh   s      r8   _constraint_is_namedr&    sJ     &&885 9 D tr:   c                @    | j                   D ]  }t        |      s y yNTF)r   is_expression)indexexprs     r8   is_expression_indexr,    s'    !!  r:   c                    t        | t              r| j                  } t        | t              rt        | t              r| j                  ryyr(  )r[   r   r5   r   
is_literal)r+  s    r8   r)  r)    s7    
T?
+|| T?
+dL)T__r:   )rB   r<   r;   zUnion[int, str])r5   zType[ClauseElement]rJ   r<   r;   z0Callable[[_CompilerProtocol], _CompilerProtocol])F)r_   z&Union[Identity, schema.Sequence, None]r]   r   r;   zDict[str, Any])rh   _ConstraintNamer;   z!TypeGuard[_ConstraintNameDefined])rh   r/  r;   zTypeGuard[str])rh   r/  r;   Optional[str])rt   Optional[Connection]r;   zIterator[None])rt   r%   r;   r'   )rt   r%   r;   r  )rt   r1  r;   r   )r   r#   r;   zIterable[ColumnElement[Any]])r   r-   r;   r-   )r   r%   r   r<   r   zUnion[str, None]r;   r   )r;   r   )r   r+   r;   r$   )r   r   r;   r   )r   r   r;   r   )r   r+   r;   r   )r   r(   r   z%Union[Column[Any], ColumnClause[Any]]r;   r  )r   r$   r  z*Union[str, TextClause, ColumnElement[Any]]r;   z&Union[ColumnElement[Any], Column[Any]])r
  r-   r   r$   r;   r-   )r5   r   r6   r)   r;   r<   )r5   r  r6   r)   r;   r<   )r   zUnion[Index, Constraint]r   Optional[Dialect]r;   r0  )r   zUnion[Constraint, Index]r   r2  r;   r   )r*  r#   r;   r   )r+  r   r;   r   )u
__future__r   
contextlibretypingr   r   r   r   r   r	   r
   r   r   r   r   r   
sqlalchemyr   r   r   r   r   sqlalchemy.schemar   r   r   r   r   sqlalchemy.sql.baser   sqlalchemy.sql.elementsr   r   r   r   sqlalchemy.sql.visitorsr   typing_extensionsr   sqlalchemy.sql.namingr    r!   r"   r#   r$   sqlalchemy.enginer%   r&   r'   r(   sqlalchemy.sql.compilerr)   r*   sqlalchemy.sql.schemar+   r,   r-   r0   rC   tuplefindall_vers
sqla_14_18
sqla_14_26sqla_2sqlalchemy_versionrK   sqlalchemy.ext.compiler
issubclassrY   rc   rd   sqlalchemy.utilre   r<   r/  _ConstraintNameDefinedri   rk   rm   AUTOINCREMENT_DEFAULTcontextmanagerru   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   rZ   
TypeEnginer   r   r   r   r   r   r   r   r  r   r  r  r  r$  r&  r,  r)  )xs   0r8   <module>rP     s   #  	              "   ( - $ 2 # - 1 0 . 3 , '>(#  ,)-43500e5!CDEK K 	%2::&6DEaYq\E	 j 
j 
	$  ?$?14?	9?
 1 )-H 
 !&4&& &R 
-3 c9,-sI~. D
D&D!:   $ ,"""		 &MM(+M9IM	M/
MII ( 8 23,-
/)B-"% %*O%	%$@@C@+@$*"S.. ": 

 !0#0/:00 "0	 	 

<<+6<< <(3D 	(	3D			O Fs   5K
