U
    ^g%iFL                     @  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' d dl#m(Z( d d l)m*Z* d d!l+m,Z, erJd 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+l8m9Z9 d d,l#m:Z: d d-l;m<Z< d d.l;m=Z= d d/l>m?Z? d d0l>m@Z@ ed1ed2 d3ZAG d4d5 d5eZBd6d7d8d9d:ZCeDd;d< eEd=eD ZFeFd>kZGeFd?kZHeFd@kZIeFdAkZJeFdBkZKeZLzd dClMmNZN W n" eOk
r   d dCl#mNZN Y nX G dDdE dEZPerdFd6dGdHdIdJZQnd dKlRmQZQ zd dLlmSZS W n4 eOk
rl   es`G dMdN dNePZSdOZTdOZUY nX dPZTeFdQkZUzd dRlmVZV W n0 eOk
r   esG dSdT dTePZVdOZWY n$X eXeVe"ZYddUdVdWdXdYdZZZdPZWeKrd d[l!m[Z[ nd d\l\m]Z[ ede^e[f Z_ee^e[f Z`d]d^d_d`daZad]dbd_dcddZbd]ded_dfdgZcdhZdejedidjdkdldmZfddndoZgdpdqdkdrdsZhdpdtdkdudvZidpdtdkdwdxZjdidVdkdydzZkd{d|d}d~dZld1d1dddZmdpddkddZnddddZodpd6ddVdddZpdd Zqdd ZrdVdddZsdVdddZtdddddZudd ZvdddtdddZwdd Zxeyejzdr|dd Z{dd Z|ndd Z{dd Z|dddddZ}ddVdddZ~ddVdddZdd ZdddtdddZddddddZd1dd1dddZG dd dej:ZeQeddd6dĜddƄZG ddȄ de$ZeQeddd6dĜddʄZddd͜ddτZdddedҜddԄZdddVdҜddׄZddVdٜddۄZdd݄ ZdddddZeHrd dlmZ d dlmZ eZn"d dlmZ dd ZddddZd{dVdddZddVdddZdS )    )annotationsN)Any)Callable)Dict)Iterable)Iterator)Mapping)Optional)Protocol)Set)Type)TYPE_CHECKING)TypeVar)Union)__version__)inspectschema)sql)types)url)CheckConstraint)Column)ForeignKeyConstraint)visitors)DialectKWArgs)BindParameter)ColumnClause)quoted_name)
TextClause)UnaryExpression)traverse)	TypeGuard)ClauseElement)Index)Table)
Connection)Dialect)Transaction)	Inspector)ColumnCollection)SQLCompiler)Insert)ColumnElement)
Constraint)
SchemaItem)Select)TableClause_CE)zColumnElement[Any]r/   )boundc                   @  s    e Zd ZdddddddZdS )_CompilerProtocolr   str)elementcompilerkwreturnc                 K  s   d S N )selfr6   r7   r8   r;   r;   W/var/www/html/api-medvista/venv/lib/python3.8/site-packages/alembic/util/sqla_compat.py__call__>       z_CompilerProtocol.__call__N)__name__
__module____qualname__r>   r;   r;   r;   r=   r4   =   s   r4   r5   zUnion[int, str])valuer9   c                 C  s    z
t | W S    |  Y S X d S r:   )int)rC   r;   r;   r=   	_safe_intA   s    
rE   c                 C  s   g | ]}t |qS r;   )rE   ).0xr;   r;   r=   
<listcomp>I   s     rH   z(\d+|[abc]\d))      )rI      )rI   rK      )rI   rK      )   )
_NONE_NAMEc                   @  s   e Zd ZdZdS )_Unsupportedz.Placeholder for unsupported SQLAlchemy classesN)r@   rA   rB   __doc__r;   r;   r;   r=   rP   Y   s   rP   zType[ClauseElement]z0Callable[[_CompilerProtocol], _CompilerProtocol])r6   dialectsr9   c                 G  s   d S r:   r;   )r6   rR   r;   r;   r=   compiles_   s    rS   )rS   )Computedc                   @  s   e Zd ZdS )rT   Nr@   rA   rB   r;   r;   r;   r=   rT   k   s   rT   FT)rI   rJ      )Identityc                   @  s   e Zd ZdS )rW   NrU   r;   r;   r;   r=   rW   y   s   rW   z&Union[Identity, schema.Sequence, None]boolzDict[str, Any])identitydialect_kwargsr9   c                   s    d kri S t r8  }|rt ts*t| j nHi }t trd j|d<  j	d k	rd j	|d< d}| fdd|D  |S )Nalwayson_null)	start	incrementZminvalueZmaxvalueZ
nominvalueZ
nomaxvaluecyclecacheorderc                   s*   i | ]"}t  |d d k	r|t  |d qS r:   )getattrrF   keyrY   r;   r=   
<dictcomp>   s    z._get_identity_options_dict.<locals>.<dictcomp>)
identity_has_dialect_kwargsZ_as_dict
isinstancer   AssertionErrorupdaterZ   rW   r[   r\   )rY   rZ   as_dictattrsr;   re   r=   _get_identity_options_dict   s&    




rm   )	_NoneName)symbol_ConstraintNamez!TypeGuard[_ConstraintNameDefined])namer9   c                 C  s   | t kpt| ttfS r:   )rO   rh   r5   rn   rq   r;   r;   r=   constraint_name_defined   s    rs   zTypeGuard[str]c                 C  s
   t | tS r:   )rh   r5   rr   r;   r;   r=   constraint_name_string   s    rt   zOptional[str]c                 C  s   t | r| S d S r:   )rt   rr   r;   r;   r=   constraint_name_or_none   s    ru   autozOptional[Connection]zIterator[None])
connectionr9   c              	   c  sl   z
| j }W n tk
r"   d }Y nX |d kr4d V  n4| sb| d k	sFt|   d V  W 5 Q R X nd V  d S r:   )in_transactionAttributeErrorri   beginrw   rx   r;   r;   r=   _ensure_scope_for_ddl   s    

r|   c                 C  s    t r| j|dS | j|dS d S )N)hide_password)sqla_14Zrender_as_stringZ__to_string__)r   r}   r;   r;   r=   url_render_as_string   s    r   r&   r(   c                 C  s   t | }|r|S |  S d S r:   )_get_connection_transactionrz   rw   Ztransactionr;   r;   r=   "_safe_begin_connection_transaction   s    r   Nonec                 C  s   t | }|r|  d S r:   )r   commitr   r;   r;   r=   #_safe_commit_connection_transaction   s    r   c                 C  s   t | }|r|  d S r:   )r   rollbackr   r;   r;   r=   %_safe_rollback_connection_transaction   s    r   c                 C  s,   z
| j }W n tk
r    Y dS X | S d S )NF)rx   ry   r{   r;   r;   r=   _get_connection_in_transaction  s
    
r   r$   zIterable[ColumnElement[Any]])idxr9   c                 C  s   | j S r:   )expressions)r   r;   r;   r=   _idx_table_bound_expressions  s    r   )schema_itemr9   c                 K  s&   t | dr| jf |S | jf |S d S )N_copy)hasattrr   copy)r   r8   r;   r;   r=   r     s    
r   zOptional[Transaction]c                 C  s   t r|  S | j}|jS d S r:   )r~   Zget_transaction_rootZ_Connection__transaction)rw   rr;   r;   r=   r     s    r   zurl.URL)r9   c                  O  s*   t tjdrtjj| |S tj| |S d S )Ncreate)r   r   URLr   )argr8   r;   r;   r=   _create_url   s    r   zUnion[str, None])connectable	tablename
schemanamer9   c                 C  s(   t rt| ||S | j| ||S d S r:   )r~   r   Z	has_tabledialect)r   r   r   r;   r;   r=   _connectable_has_table'  s      r   c              
   K  s@   t r.|  }|||W  5 Q R  S Q R X n| j||S d S r:   )r~   Z_operation_contextexecutebind)	inspectorZ	statementparamsconnr;   r;   r=   _exec_on_inspector2  s    
 r   c                 C  s&   t s
| jS ddlm} | j|jkS d S )Nr   r   )r~   Znullablesqlalchemy.sqlr   Z_user_defined_nullableZNULL_UNSPECIFIED)Zmetadata_columnr   r;   r;   r=   _nullability_might_be_unset:  s
    
r   c                  G  s   t sdS tdd | D S d S )NFc                 s  s   | ]}t |tV  qd S r:   )rh   rT   rF   sdr;   r;   r=   	<genexpr>I  s     z._server_default_is_computed.<locals>.<genexpr>)has_computedanyZserver_defaultr;   r;   r=   _server_default_is_computedE  s    r   c                  G  s   t sdS tdd | D S d S )NFc                 s  s   | ]}t |tV  qd S r:   )rh   rW   r   r;   r;   r=   r   P  s     z._server_default_is_identity.<locals>.<genexpr>)r~   r   r   r;   r;   r=   _server_default_is_identityL  s    r   r.   r%   )
constraintr9   c                 C  s*   t | tr | j}|d k	st|S | jS d S r:   )rh   r   parentri   table)r   r   r;   r;   r=   _table_for_constraintS  s
    
r   c                 C  s<   t | trdd | jD S t | tr.t| jS t| jS d S )Nc                 S  s   g | ]
}|j qS r;   )r   )rF   Zfkr;   r;   r=   rH   ^  s     z+_columns_for_constraint.<locals>.<listcomp>)rh   r   elementsr   _find_columnsZsqltextlistcolumnsr   r;   r;   r=   _columns_for_constraint\  s
    


r   r)   )r   r   r9   c                 C  s    t r| |d S | |d S d S r:   )r~   Zreflect_tableZreflecttable)r   r   r;   r;   r=   _reflect_tablee  s     r   c                 C  s*   t | r"t| \}}||j|S | S d S r:   )_type_has_variants_get_variant_mappinggetrq   )type_r   Z	base_typemappingr;   r;   r=   _resolve_for_variantn  s    r   _variant_mappingc                 C  s
   t | jS r:   )rX   r   r   r;   r;   r=   r   x  s    r   c                 C  s
   | | j fS r:   )r   r   r;   r;   r=   r   {  s    r   c                 C  s   t | tjkS r:   )typesqltypesZVariantr   r;   r;   r=   r     s    c                 C  s   | j | jfS r:   )implr   r   r;   r;   r=   r     s    r   r   c              
     s   t r0 jd k	st jd k	s tt jts0t 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 r;   )r   rq   rc   r   r;   r=   rH     s    z_fk_spec.<locals>.<listcomp>r   c                 S  s   g | ]}|j jqS r;   )columnrq   )rF   r6   r;   r;   r=   rH     s     )r   r   ri   r   rh   r   r%   Zcolumn_keysrq   r   r   r   ondeleteonupdate
deferrable	initially)r   Zsource_columnsZsource_tableZsource_schemaZtarget_schematarget_tableZtarget_columnsr   r   r   r   r;   r   r=   _fk_spec  s6    
r   c                 C  sF   | j d  }|d}|d d|}| jd k	s:t|| jjkS )Nr   .)r   Z_get_colspecsplitpopjoinr   ri   rd   )r   spectokensZtablekeyr;   r;   r=   _fk_is_self_referential  s    


r   c                 C  s   | j S r:   )Z_type_boundr   r;   r;   r=   _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)Zclausecolsr;   r;   r=   r     s    r   r*   z%Union[Column[Any], ColumnClause[Any]])
collectionr   r9   c                 C  sH   |j dk	st| |j  }t| ds,t| dr:| j| n
| | dS )z(remove a column from a ColumnCollection.NZ
_immutableZ	_readonly)rd   ri   r   Z_parentremove)r   r   Z	to_remover;   r;   r=   _remove_column_from_collection  s
    
r   z*Union[str, TextClause, ColumnElement[Any]]z&Union[ColumnElement[Any], Column[Any]])r   text_r9   c                 C  sp   t |tr$t|tj}| | |S t |tr8t| |S t |trNt| |j	S t |t
jrdt|| S tddS )zAa workaround for the Index construct's severe lack of flexibilityz#String or text() construct expectedN)rh   r5   r   r   NULLTYPEappend_columnr   _textual_index_element_textual_index_columntextr   r-   _copy_expression
ValueError)r   r   cr;   r;   r=   r     s    





r   )
expressionr   r9   c                   s    fdd}t | i |S )Nc                   sV   t | trN| jd k	rN| j k	rN| j jkr6 j| j S t| } | |S nd S d S r:   )rh   r   r   rq   r   r   r   )colr   r   r;   r=   replace  s    
z!_copy_expression.<locals>.replace)r   Zreplacement_traverse)r   r   r   r;   r   r=   r     s      r   c                   @  s.   e Zd ZdZdZddd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.

    Z_textual_idx_elementr%   r   r   )r   r   r9   c                 C  s8   || _ || _|j| _t| jjtj| _|| j d S r:   )	r   r   rd   r   r   r   r   fake_columnr   )r<   r   r   r;   r;   r=   __init__  s
    z_textual_index_element.__init__c                 K  s   | j gS r:   )r   )r<   r8   r;   r;   r=   get_children  s    z#_textual_index_element.get_childrenN)r@   rA   rB   rQ   Z__visit_name__r   r   r;   r;   r;   r=   r     s   r   r+   )r6   r7   r9   c                 K  s   |j | jf|S r:   )processr   r6   r7   r8   r;   r;   r=   _render_textual_index_column  s    r   c                   @  s   e Zd ZdS )_literal_bindparamNrU   r;   r;   r;   r=   r     s   r   c                 K  s   |j | f|S r:   )Zrender_literal_bindparamr   r;   r;   r=   _render_literal_bindparam!  s    r   r   r   )r   r9   c                 C  s   t r
| jS i S d S r:   )sqla_13kwargs)r   r;   r;   r=   _column_kwargs(  s    r   zUnion[Index, Constraint]zOptional[Dialect])r   r   r9   c                 C  s   | j d krd S |d k	sttr.|jj| ddS t| j drFt| j }nt}|t| j dd}| j	|d} t
| tjr||d }|| S |j| S d S )NFZ_alembic_quotequote)r   rr   )rq   ri   r~   identifier_preparerformat_constraintr   r   r   r5   	__class__rh   r   r$   Zddl_compilerZ_prepared_index_name)r   r   Zquoted_name_clsnew_namedr;   r;   r=   _get_constraint_final_name/  s"    
 
r   zUnion[Constraint, Index]c                 C  sD   t r6| jd krdS |d k	st|jj| dd}|d k	S | jd k	S d S )NFr   )r~   rq   ri   r   r   )r   r   rq   r;   r;   r=   _constraint_is_namedT  s    
 r   r'   )mysql_dialectr9   c                 C  s   t r
| jS t| jo| jS d S r:   )r~   Z
is_mariadbrX   Zserver_version_info_is_mariadbr   r;   r;   r=   r   c  s    r   c                 C  s   | j S r:   ) _mariadb_normalized_version_infor   r;   r;   r=   r   m  s    r   zUnion[TableClause, Table]r,   )r   r9   c                 C  s    t r|   S | jddS d S )NT)inline)r~   insertr   )r   r;   r;   r=   _insert_inlineq  s    r   )create_mock_engine)selectcreate_enginec                 K  s   t dd|dS )Nzpostgresql://Zmock)Zstrategyexecutorr  )r   r  r8   r;   r;   r=   r     s
      r   r0   c                  O  s   t jt| f|S r:   )r   r   r   )r   r8   r;   r;   r=   _select  s    r  )indexr9   c                 C  s   | j D ]}t|r dS qdS NTF)r   is_expression)r  exprr;   r;   r=   is_expression_index  s    
r	  )r  r9   c                 C  s*   t | tr| j} q t | tr"| jr&dS dS r  )rh   r    r6   r   Z
is_literal)r  r;   r;   r=   r    s
    
r  )F)T)
__future__r   
contextlibretypingr   r   r   r   r   r   r	   r
   r   r   r   r   r   Z
sqlalchemyr   r   r   r   r   r   Zsqlalchemy.enginer   Zsqlalchemy.schemar   r   r   r   r   Zsqlalchemy.sql.baser   Zsqlalchemy.sql.elementsr   r   r   r   r    Zsqlalchemy.sql.visitorsr!   Ztyping_extensionsr"   r#   r$   r%   r&   r'   r(   Zsqlalchemy.engine.reflectionr)   r*   Zsqlalchemy.sql.compilerr+   Zsqlalchemy.sql.dmlr,   r-   Zsqlalchemy.sql.schemar.   r/   Zsqlalchemy.sql.selectabler0   r1   r2   r4   rE   tuplefindallZ_versr   r~   Z
sqla_14_18Z
sqla_14_26Zsqla_2Zsqlalchemy_versionZsqlalchemy.sql.namingrO   ImportErrorrP   rS   Zsqlalchemy.ext.compilerrT   r   Zhas_computed_reflectionrW   Zhas_identity
issubclassrg   rm   rn   Zsqlalchemy.utilro   r5   rp   Z_ConstraintNameDefinedrs   rt   ru   ZAUTOINCREMENT_DEFAULTcontextmanagerr|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
TypeEnginer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z
_sa_selectr  r  r	  r  r;   r;   r;   r=   <module>   s,  


 '



			
!	%
