o
    hI                     @  s  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r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$l0m1Z1 d d%lm2Z2 d d&l3m4Z4 d d'l5m6Z6 d d(l!m7Z7 d d)l8m9Z9 d d*l8m:Z: d d+l;m<Z< d d,l;m=Z= ed-ed. d/Z>dd4d5Z?e@d6d7 eAd8eD ZBeBd9kZCeBd:kZDeBd;kZEeBd<kZFeBd=kZGeZHzd d>lImJZJ W n eKyU   d d>l!mJZJ Y nw G d?d@ d@ZLzd dAlmMZM W n eKy~   esxG dBdC dCeLZMdDZNdDZOY nw dEZNeBdFkZOzd dGlmPZP W n eKy   esG dHdI dIeLZPdDZQY nw eRePe ZS	DdddOdPZTdEZQeGrd dQlmUZU nd dRlVmWZU edeXeUf ZYeeXeUf ZZddVdWZ[ddYdZZ\dd\d]Z]d^Z^ej_ddbdcZ`ddddeZaddhdiZbddkdlZcddmdnZdddodpZeddtduZfddwdxZgddzd{Zhdd}d~ZidddZjdd Zkdd ZldddZmdddZndddZodd ZpdddZqdd ZresejtdrOdd Zudd Zvndd Zudd Zvdd ZwdddZxdddZydd Zzd ddZ{dddZ|dddZ}G dd dej7Z~ee~dddZG dd de"ZeedddĄZddƄ ZddȄ Zddd̈́Zddd҄ZdddՄZdddلZddۄ Zd	dd߄ZeDrd dlmZ d dlmZ nd dlmZ dd Zd
ddZdddZdS (      )annotationsN)Any)Dict)Iterable)Iterator)Mapping)Optional)TYPE_CHECKING)TypeVar)Union)__version__)inspectschema)sql)types)url)compiles)CheckConstraint)Column)ForeignKeyConstraint)visitors)DialectKWArgs)BindParameter)ColumnClause)quoted_name)
TextClause)UnaryExpression)traverse)	TypeGuard)Index)Table)
Connection)Dialect)Transaction)	Inspector)ColumnCollection)SQLCompiler)Insert)ColumnElement)
Constraint)
SchemaItem)Select)TableClause_CE)zColumnElement[Any]r+   )boundvaluestrreturnUnion[int, str]c                 C  s   zt | W S    |  Y S N)int)r0    r6   [/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/alembic/util/sqla_compat.py	_safe_int6   s   
r8   c                 C  s   g | ]}t |qS r6   )r8   ).0xr6   r6   r7   
<listcomp>>       r;   z(\d+|[abc]\d))      )r=      )r=   r?      )r=   r?      )   )
_NONE_NAMEc                   @  s   e Zd ZdZdS )_Unsupportedz.Placeholder for unsupported SQLAlchemy classesN)__name__
__module____qualname____doc__r6   r6   r6   r7   rD   N   s    rD   )Computedc                   @     e Zd ZdS )rI   NrE   rF   rG   r6   r6   r6   r7   rI   W       rI   FT)r=   r>      )Identityc                   @  rJ   )rN   NrK   r6   r6   r6   r7   rN   e   rL   rN   identity&Union[Identity, schema.Sequence, None]dialect_kwargsboolDict[str, Any]c                   s    d u ri S t r  }|rt tsJ | j |S i }t tr3 j|d<  jd ur3 j|d< d}| fdd|D  |S )Nalwayson_null)	start	incrementminvaluemaxvalue
nominvalue
nomaxvaluecyclecacheorderc                   s*   i | ]}t  |d d ur|t  |d qS r4   getattrr9   keyrO   r6   r7   
<dictcomp>   s
    z._get_identity_options_dict.<locals>.<dictcomp>)	identity_has_dialect_kwargs_as_dict
isinstancer   updaterQ   rN   rT   rU   )rO   rQ   as_dictattrsr6   rc   r7   _get_identity_options_dictl   s(   




rk   )	_NoneName)symbolname_ConstraintName!TypeGuard[_ConstraintNameDefined]c                 C  s   | t u p
t| ttfS r4   )rC   rg   r1   rl   rn   r6   r6   r7   constraint_name_defined   s   rr   TypeGuard[str]c                 C  s
   t | tS r4   )rg   r1   rq   r6   r6   r7   constraint_name_string   s   
rt   Optional[str]c                 C  s   t | r| S d S r4   )rt   rq   r6   r6   r7   constraint_name_or_none   s   rv   auto
connectionOptional[Connection]Iterator[None]c                 c  s    z| j }W n ty   d }Y nw |d u rd V  d S | s>| d us$J |   d V  W d    d S 1 s7w   Y  d S d V  d S r4   )in_transactionAttributeErrorbeginrx   r{   r6   r6   r7   _ensure_scope_for_ddl   s   


"
r   c                 C  s   t r| j|dS | j|dS )N)hide_password)sqla_14render_as_string__to_string__)r   r   r6   r6   r7   url_render_as_string      r   r"   r$   c                 C  s   t | }|r|S |  S r4   )_get_connection_transactionr}   rx   transactionr6   r6   r7   "_safe_begin_connection_transaction   s   r   Nonec                 C     t | }|r|  d S d S r4   )r   commitr   r6   r6   r7   #_safe_commit_connection_transaction      r   c                 C  r   r4   )r   rollbackr   r6   r6   r7   %_safe_rollback_connection_transaction   r   r   c                 C  s$   z| j }W | S  ty   Y dS w )NF)r{   r|   r~   r6   r6   r7   _get_connection_in_transaction   s   r   idxr    Iterable[ColumnElement[Any]]c                 C     | j S r4   )expressionsr   r6   r6   r7   _idx_table_bound_expressions      r   schema_itemc                 K  s*   t | dr| jdi |S | jdi |S )N_copyr6   )hasattrr   copy)r   kwr6   r6   r7   r      s   
r   Optional[Transaction]c                 C  s   t r|  S | j}|jS r4   )r   get_transaction_root_Connection__transaction)rx   rr6   r6   r7   r     s   r   url.URLc                  O  s.   t tjdrtjj| i |S tj| i |S )Ncreate)r   r   URLr   )argr   r6   r6   r7   _create_url  s   r   connectable	tablename
schemanameUnion[str, None]c                 C  s$   t r
t| ||S | j| ||S r4   )r   r   	has_tabledialect)r   r   r   r6   r6   r7   _connectable_has_table  s
   r   c                 K  sJ   t r|  }|||W  d    S 1 sw   Y  d S | j||S r4   )r   _operation_contextexecutebind)	inspector	statementparamsconnr6   r6   r7   _exec_on_inspector  s
   

$r   c                 C  s"   t s| jS ddlm} | j|ju S )Nr   r   )r   nullablesqlalchemy.sqlr   _user_defined_nullableNULL_UNSPECIFIED)metadata_columnr   r6   r6   r7   _nullability_might_be_unset&  s
   
r   c                  G     t sdS tdd | D S )NFc                 s      | ]}t |tV  qd S r4   )rg   rI   r9   sdr6   r6   r7   	<genexpr>5      z._server_default_is_computed.<locals>.<genexpr>)has_computedanyserver_defaultr6   r6   r7   _server_default_is_computed1     r   c                  G  r   )NFc                 s  r   r4   )rg   rN   r   r6   r6   r7   r   <  r   z._server_default_is_identity.<locals>.<genexpr>)r   r   r   r6   r6   r7   _server_default_is_identity8  r   r   
constraintr*   r!   c                 C  s&   t | tr| j}|d usJ |S | jS r4   )rg   r   parenttable)r   r   r6   r6   r7   _table_for_constraint?  s
   
r   c                 C  s8   t | trdd | jD S t | trt| jS t| jS )Nc                 S  s   g | ]}|j qS r6   )r   )r9   fkr6   r6   r7   r;   J  s    z+_columns_for_constraint.<locals>.<listcomp>)rg   r   elementsr   _find_columnssqltextlistcolumnsr   r6   r6   r7   _columns_for_constraintH  s
   



r   r   r%   r   c                 C  s   t r| |d S | |d S r4   )r   reflect_tablereflecttable)r   r   r6   r6   r7   _reflect_tableQ  s
   r   c                 C  s&   t | rt| \}}||j|S | S r4   )_type_has_variants_get_variant_mappinggetrn   )type_r   	base_typemappingr6   r6   r7   _resolve_for_variantZ  s   r   _variant_mappingc                 C  
   t | jS r4   )rR   r   r   r6   r6   r7   r   d     
r   c                 C  s
   | | j fS r4   )r   r   r6   r6   r7   r   g  r   r   c                 C  s   t | tju S r4   )typesqltypesVariantr   r6   r6   r7   r   l  s   c                 C  s   | j | jfS r4   )implr   r   r6   r6   r7   r   o  s   c              
     s    fdd j D } jj} jj} jd jjj} jd jjj}dd  jD } j} j} j	}	 j
}
|||||||||	|
f
S )Nc                   s   g | ]} j | jqS r6   )r   rn   ra   r   r6   r7   r;   t  s    z_fk_spec.<locals>.<listcomp>r   c                 S  s   g | ]}|j jqS r6   )columnrn   )r9   elementr6   r6   r7   r;   |  r<   )column_keysr   rn   r   r   r   r   ondeleteonupdate
deferrable	initially)r   source_columnssource_tablesource_schematarget_schematarget_tabletarget_columnsr   r   r   r   r6   r   r7   _fk_specs  s.   
r   r   c                 C  sF   | j d  }|d}|d d|}| jd usJ || jjkS )Nr   .)r   _get_colspecsplitpopjoinr   rb   )r   spectokenstablekeyr6   r6   r7   _fk_is_self_referential  s   


r   c                 C  r   r4   )_type_boundr   r6   r6   r7   _is_type_bound  s   r  c                 C  s   t  }t| i d|ji |S )z2locate Column objects within the given expression.r   )setr   add)clausecolsr6   r6   r7   r     s   r   
collectionr&   r   %Union[Column[Any], ColumnClause[Any]]c                 C  sJ   |j dusJ | |j  }t| dst| dr| j| dS | | dS )z(remove a column from a ColumnCollection.N
_immutable	_readonly)rb   r   _parentremove)r  r   	to_remover6   r6   r7   _remove_column_from_collection  s
   
r  text_*Union[str, TextClause, ColumnElement[Any]]&Union[ColumnElement[Any], Column[Any]]c                 C  sl   t |trt|tj}| | |S t |trt| |S t |tr't| |j	S t |t
jr2t|| S td)zAa workaround for the Index construct's severe lack of flexibilityz#String or text() construct expected)rg   r1   r   r   NULLTYPEappend_columnr   _textual_index_element_textual_index_columntextr   r)   _copy_expression
ValueError)r   r  cr6   r6   r7   r    s   





r  
expressionr   c                   s    fdd}t | i |S )Nc                   sP   t | tr&| jd ur&| j ur&| j jv r j| j S t| } | |S d S r4   )rg   r   r   rn   r  r   r  )colr  r   r6   r7   replace  s   


z!_copy_expression.<locals>.replace)r   replacement_traverse)r  r   r  r6   r  r7   r    s   r  c                   @  s&   e Zd ZdZdZdd	d
Zdd ZdS )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_elementr   r!   r  r   r2   r   c                 C  s8   || _ || _|j| _t| jjtj| _|| j d S r4   )	r   r  rb   r   r   r   r  fake_columnr  )selfr   r  r6   r6   r7   __init__  s
   z_textual_index_element.__init__c                 C  s   | j gS r4   )r  )r   r6   r6   r7   get_children  s   z#_textual_index_element.get_childrenN)r   r!   r  r   r2   r   )rE   rF   rG   rH   __visit_name__r!  r"  r6   r6   r6   r7   r    s
    
r  r   compilerr'   c                 K  s   |j | jfi |S r4   )processr  r   r$  r   r6   r6   r7   _render_textual_index_column  s   r'  c                   @  rJ   )_literal_bindparamNrK   r6   r6   r6   r7   r(    rL   r(  c                 K  s   |j | fi |S r4   )render_literal_bindparamr&  r6   r6   r7   _render_literal_bindparam  s   r*  c                 C  r   r4   )r   r   r   r6   r6   r7   _get_index_expressions  r   r+  c                 C  s   dd t | D S )Nc                 S  s   g | ]}t |d dqS )rn   Nr_   )r9   expr6   r6   r7   r;     s    z+_get_index_column_names.<locals>.<listcomp>)r+  r   r6   r6   r7   _get_index_column_names  s   r-  r  r   r   c                 C  s   t r| jS i S r4   )sqla_13kwargs)r  r6   r6   r7   _column_kwargs  s   r0  Union[Index, Constraint]r   Optional[Dialect]c                 C  s   | j d u rd S |d usJ tr|jj| ddS t| j dr#t| j }nt}|t| j dd}| j|d} t	| t
jrE||d }|| S |j| S )NF_alembic_quotequote)r5  rq   )rn   r   identifier_preparerformat_constraintr   r   r   r1   	__class__rg   r   r    ddl_compiler_prepared_index_name)r   r   quoted_name_clsnew_namedr6   r6   r7   _get_constraint_final_name  s$   
r>  Union[Constraint, Index]c                 C  s@   t r| jd u r	dS |d usJ |jj| dd}|d uS | jd uS )NFr3  )r   rn   r6  r7  )r   r   rn   r6   r6   r7   _constraint_is_namedE  s   

r@  mysql_dialectr#   c                 C  s   t r| jS t| jo| jS r4   )r   
is_mariadbrR   server_version_info_is_mariadbrA  r6   r6   r7   rD  T  s   rD  c                 C  r   r4   ) _mariadb_normalized_version_inforE  r6   r6   r7   rF  ^  r   rF  Union[TableClause, Table]r(   c                 C  s   t r|   S | jddS )NT)inline)r   insertrH  )r   r6   r6   r7   _insert_inlineb  r   rJ  )create_mock_engine)selectcreate_enginec                 K  s   t dd|dS )Nzpostgresql://mock)strategyexecutorrM  )r   rQ  r   r6   r6   r7   rK  o  s   rK  r,   c                  O  s   t jt| fi |S r4   )r   rL  r   )r   r   r6   r6   r7   _selectt  s   rR  indexc                 C  s@   | j D ]}t|tr|j}t|ts
t|tr|jr dS qdS )NTF)r   rg   r   r   r   
is_literal)rS  exprr6   r6   r7   is_expression_indexx  s   


rV  )r0   r1   r2   r3   )F)rO   rP   rQ   rR   r2   rS   )rn   ro   r2   rp   )rn   ro   r2   rs   )rn   ro   r2   ru   )rx   ry   r2   rz   )T)rx   r"   r2   r$   )rx   r"   r2   r   )rx   ry   r2   rR   )r   r    r2   r   )r   r.   r2   r.   )rx   r"   r2   r   )r2   r   )r   r"   r   r1   r   r   r2   rR   )r2   rR   )r   r*   r2   r!   )r   r%   r   r!   r2   r   )r   r   r2   rR   )r   r*   r2   rR   )r  r&   r   r  r2   r   )r   r!   r  r  r2   r  )r  r.   r   r!   r2   r.   )r   r  r$  r'   r2   r1   )r   r(  r$  r'   r2   r1   )r  r   r2   r   )r   r1  r   r2  r2   ru   )r   r?  r   r2  r2   rR   )rA  r#   r2   rR   )r   rG  r2   r(   )r2   r,   )rS  r    r2   rR   )
__future__r   
contextlibretypingr   r   r   r   r   r   r	   r
   r   
sqlalchemyr   r   r   r   r   r   sqlalchemy.enginer   sqlalchemy.ext.compilerr   sqlalchemy.schemar   r   r   r   r   sqlalchemy.sql.baser   sqlalchemy.sql.elementsr   r   r   r   r   sqlalchemy.sql.visitorsr   typing_extensionsr   r    r!   r"   r#   r$   sqlalchemy.engine.reflectionr%   r&   sqlalchemy.sql.compilerr'   sqlalchemy.sql.dmlr(   r)   sqlalchemy.sql.schemar*   r+   sqlalchemy.sql.selectabler,   r-   r.   r8   tuplefindall_versr.  r   
sqla_14_18
sqla_14_26sqla_2sqlalchemy_versionsqlalchemy.sql.namingrC   ImportErrorrD   rI   r   has_computed_reflectionrN   has_identity
issubclassre   rk   rl   sqlalchemy.utilrm   r1   ro   _ConstraintNameDefinedrr   rt   rv   AUTOINCREMENT_DEFAULTcontextmanagerr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
TypeEnginer   r   r   r   r  r   r  r  r  r  r'  r(  r*  r+  r-  r0  r>  r@  rD  rF  rJ  rK  rL  rR  rN  rV  r6   r6   r6   r7   <module>   s$   
	
'


















	
		


	'
