o
    ‹ågÁ9  ã                   @  sr  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%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- d.�Z9G d/d0„ d0eƒZ:dÂd5d6„Z;e<d7d8„ e =d9e¡D ƒƒZ>e>d:kZ?e>d;kZ@e>d<kZAeZBe�r;dÃdAdB„ZCnd dClDmCZC eEej+eƒZF	DdÄdÅdJdK„ZGeA�rXd dLlmHZH nd dMlImJZH edeKeHf ZLeeKeHf ZMdÆdQdR„ZNdÇdTdU„ZOdÈdWdX„ZPdYZQejRdÉd]d^„ƒZSdÊdadb„ZTdËddde„ZUdËdfdg„ZVdÌdhdi„ZWdÍdmdn„ZXdÎdpdq„ZYdÏdvdw„ZZdxdy„ Z[dzd{„ Z\dÐd|d}„Z]dÐd~d„Z^dÑdƒd„„Z_d…d†„ Z`d‡dˆ„ Zaebejcd‰ƒ�rÖdŠd‹„ ZddŒd�„ ZendŽd‹„ Zdd�d�„ ZedÒd’d“„ZfdÓd”d•„ZgdÔd–d—„Zhd˜d™„ ZidÕdždŸ„ZjdÖd¤d¥„Zkd×d¨d©„ZlG dªd«„ d«ej5ƒZmeCemƒdØd®d¯„ƒZnG d°d±„ d±e ƒZoeCeoƒdÙd²d³„ƒZpdÚd·d¸„ZqdÛdºd»„ZrdÜd½d¾„ZsdÝdÀdÁ„ZtdS )Þé    )Ú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)Ú	TypeGuardT)Ú
_NONE_NAME)ÚClauseElement)ÚIdentity)ÚIndex)ÚTable)Ú
Connection)ÚDialect)ÚTransaction)ÚColumnCollection)ÚSQLCompiler)ÚColumnElement)Ú
Constraint)Ú
SchemaItemÚ_CE)zColumnElement[Any]r+   )Úboundc                   @  s   e Zd Zd
dd„Zd	S )Ú_CompilerProtocolÚelementr   ÚcompilerÚkwÚreturnÚstrc                 K  ó   d S ©N© )Úselfr/   r0   r1   r6   r6   úT/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/util/sqla_compat.pyÚ__call__:   s    z_CompilerProtocol.__call__N)r/   r   r0   r   r1   r   r2   r3   )Ú__name__Ú
__module__Ú__qualname__r9   r6   r6   r6   r8   r.   9   s    r.   Úvaluer3   r2   úUnion[int, str]c                 C  s   zt | ƒW S    |  Y S r5   )Úint)r=   r6   r6   r8   Ú	_safe_int=   s   
r@   c                 C  s   g | ]}t |ƒ‘qS r6   )r@   )Ú.0Úxr6   r6   r8   Ú
<listcomp>E   ó    rC   z(\d+|[abc]\d))é   é   é   )rE   rF   é   )é   r/   úType[ClauseElement]Údialectsú0Callable[[_CompilerProtocol], _CompilerProtocol]c                 G  r4   r5   r6   )r/   rK   r6   r6   r8   ÚcompilesO   s   rM   )rM   FÚidentityú&Union[Identity, schema.Sequence, None]Údialect_kwargsÚboolúDict[str, Any]c                   s–   ˆ d u ri S t r$tˆ dƒsJ ‚ˆ  ¡ }|r"tˆ tƒsJ ‚| ˆ j¡ |S i }tˆ tjƒr;ˆ j	|d< ˆ j
d ur;ˆ j
|d< d}| ‡ fdd„|D ƒ¡ |S )NÚ_as_dictÚalwaysÚon_null)	ÚstartÚ	incrementÚminvalueÚmaxvalueÚ
nominvalueÚ
nomaxvalueÚcycleÚcacheÚorderc                   s*   i | ]}t ˆ |d ƒd ur|t ˆ |d ƒ“qS r5   )Úgetattr©rA   Úkey©rN   r6   r8   Ú
<dictcomp>z   s
    þz._get_identity_options_dict.<locals>.<dictcomp>)Úidentity_has_dialect_kwargsÚhasattrrS   Ú
isinstancer   ÚupdaterP   r   r!   rT   rU   )rN   rP   Úas_dictÚattrsr6   rb   r8   Ú_get_identity_options_dictZ   s*   ç



þÿrj   )Ú	_NoneName)ÚsymbolÚnameÚ_ConstraintNameú!TypeGuard[_ConstraintNameDefined]c                 C  s   | t u p
t| ttfƒS r5   )r   rf   r3   rk   ©rm   r6   r6   r8   Úconstraint_name_defined�   s   rq   úTypeGuard[str]c                 C  s
   t | tƒS r5   )rf   r3   rp   r6   r6   r8   Úconstraint_name_string“   ó   
rs   úOptional[str]c                 C  s   t | ƒr| S d S r5   )rs   rp   r6   r6   r8   Ú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 r5   )Úin_transactionÚAttributeErrorÚbegin©rx   r{   r6   r6   r8   Ú_ensure_scope_for_ddlž   s   €
ý

"ÿ
r   r$   r&   c                 C  s   |   ¡ }|r|S |  ¡ S r5   )Úget_transactionr}   ©rx   Útransactionr6   r6   r8   Ú"_safe_begin_connection_transactionµ   s   rƒ   ÚNonec                 C  ó   |   ¡ }|r| ¡  d S d S r5   )r€   Úcommitr�   r6   r6   r8   Ú#_safe_commit_connection_transaction¿   ó   ÿr‡   c                 C  r…   r5   )r€   Úrollbackr�   r6   r6   r8   Ú%_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   r8   Ú_get_connection_in_transactionÏ   s   üþr‹   Úidxr"   úIterable[ColumnElement[Any]]c                 C  ó   | j S r5   )Úexpressions)rŒ   r6   r6   r8   Ú_idx_table_bound_expressionsÙ   s   r�   Úschema_itemc                 K  s*   t | dƒr| jdi |¤ŽS | jdi |¤ŽS )NÚ_copyr6   )re   r’   Úcopy)r‘   r1   r6   r6   r8   r’   Ý   s   
r’   ÚconnectableÚ	tablenameÚ
schemanameúUnion[str, None]c                 C  s   | j  | ||¡S r5   )ÚdialectÚ	has_table)r”   r•   r–   r6   r6   r8   Ú_connectable_has_tableä   s   rš   c                 K  s8   |   ¡ �}| ||¡W  d   ƒ S 1 sw   Y  d S r5   )Ú_operation_contextÚexecute)Ú	inspectorÚ	statementÚparamsÚconnr6   r6   r8   Ú_exec_on_inspectorê   s   

$ÿr¡   c                 C  s   ddl m} | j|ju S )Nr   r   )Úsqlalchemy.sqlr   Ú_user_defined_nullableÚNULL_UNSPECIFIED)Úmetadata_columnr   r6   r6   r8   Ú_nullability_might_be_unsetï   s   r¦   c                  G  ó   t dd„ | D ƒƒS )Nc                 s  ó   � | ]	}t |tjƒV  qd S r5   )rf   r   ÚComputed©rA   Úsdr6   r6   r8   Ú	<genexpr>ö   ó   € z._server_default_is_computed.<locals>.<genexpr>©Úany©Úserver_defaultr6   r6   r8   Ú_server_default_is_computedõ   ó   r²   c                  G  r§   )Nc                 s  r¨   r5   )rf   r   r!   rª   r6   r6   r8   r¬   ú   r­   z._server_default_is_identity.<locals>.<genexpr>r®   r°   r6   r6   r8   Ú_server_default_is_identityù   r³   r´   Ú
constraintr*   r#   c                 C  s&   t | tƒr| j}|d usJ ‚|S | jS r5   )rf   r   ÚparentÚtable)rµ   r·   r6   r6   r8   Ú_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¶   )rA   Úfkr6   r6   r8   rC     s    z+_columns_for_constraint.<locals>.<listcomp>)rf   r   Úelementsr   Ú_find_columnsÚsqltextÚlistÚcolumns©rµ   r6   r6   r8   Ú_columns_for_constraint  s
   



rÀ   c                 C  s&   t | ƒrt| ƒ\}}| |j|¡S | S r5   )Ú_type_has_variantsÚ_get_variant_mappingÚgetrm   )Útype_r˜   Ú	base_typeÚmappingr6   r6   r8   Ú_resolve_for_variant  s   rÇ   Ú_variant_mappingc                 C  s
   t | jƒS r5   )rQ   rÈ   ©rÄ   r6   r6   r8   rÁ     rt   rÁ   c                 C  s
   | | j fS r5   )rÈ   rÉ   r6   r6   r8   rÂ     rt   rÂ   c                 C  s   t | ƒtju S r5   )ÚtypeÚsqltypesÚVariantrÉ   r6   r6   r8   rÁ   !  s   c                 C  s   | j | jfS r5   )ÚimplrÆ   rÉ   r6   r6   r8   rÂ   $  s   r   r   c              
     s´   t rˆ jd us	J ‚ˆ jd usJ ‚tˆ jtƒsJ ‚‡ 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¾   rm   r`   r¿   r6   r8   rC   .  s    ÿz_fk_spec.<locals>.<listcomp>r   c                 S  s   g | ]}|j j‘qS r6   )Úcolumnrm   )rA   r/   r6   r6   r8   rC   6  rD   )r   r¾   rº   rf   r¶   r#   Úcolumn_keysrm   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¿   r8   Ú_fk_spec(  s6   
ÿö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¶   ra   )rµ   ÚspecÚtokensÚtablekeyr6   r6   r8   Ú_fk_is_self_referentialI  s   


rä   c                 C  rŽ   r5   )Ú_type_boundr¿   r6   r6   r8   Ú_is_type_boundR  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   r8   r»   Y  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)ra   re   Ú_parentÚremove)rë   rÎ   Ú	to_remover6   r6   r8   Ú_remove_column_from_collectiona  s
   
rò   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)rf   r3   r   rË   ÚNULLTYPEÚappend_columnr   Ú_textual_index_elementÚ_textual_index_columnÚtextr   r)   Ú_copy_expressionÚ
ValueError)r·   ró   Úcr6   r6   r8   rù   s  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 r5   )rf   r   r·   rm   rý   r’   r÷   )Úcolrý   ©rØ   r6   r8   Úreplace†  s   ÿ


z!_copy_expression.<locals>.replace)r   Úreplacement_traverse)rþ   rØ   r  r6   r   r8   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 r5   )	r·   rú   ra   r   r   rË   rö   Úfake_columnr÷   )r7   r·   rú   r6   r6   r8   Ú__init__¬  s
   z_textual_index_element.__init__c                 K  s   | j gS r5   )r  )r7   r1   r6   r6   r8   Úget_children³  s   z#_textual_index_element.get_childrenN)r·   r#   rú   r   r2   r„   )r:   r;   r<   Ú__doc__Ú__visit_name__r  r  r6   r6   r6   r8   rø   š  s
    
rø   r0   r(   c                 K  s   |j | jfi |¤ŽS r5   )Úprocessrú   ©r/   r0   r1   r6   r6   r8   Ú_render_textual_index_column·  s   r  c                   @  s   e Zd ZdS )Ú_literal_bindparamN)r:   r;   r<   r6   r6   r6   r8   r  ¾  s    r  c                 K  s   |j | fi |¤ŽS r5   )Úrender_literal_bindparamr
  r6   r6   r8   Ú_render_literal_bindparamÂ  s   r  úUnion[Index, Constraint]r˜   úOptional[Dialect]c                 C  s*   | j d u rd S |d usJ ‚|jj| dd�S ©NF)Ú_alembic_quote©rm   Úidentifier_preparerÚformat_constraint)rµ   r˜   r6   r6   r8   Ú_get_constraint_final_nameÉ  s   
ÿr  úUnion[Constraint, Index]c                 C  s2   | j d u rdS |d usJ ‚|jj| dd�}|d uS r  r  )rµ   r˜   rm   r6   r6   r8   Ú_constraint_is_namedÙ  s   
ÿr  Úindexc                 C  s   | j D ]	}t|ƒr dS qdS ©NTF)r�   Úis_expression)r  Úexprr6   r6   r8   Úis_expression_indexå  s
   
ÿr  r  c                 C  s2   t | tƒr| j} t | tƒst | tƒr| jrdS dS r  )rf   r   r/   r   Ú
is_literal)r  r6   r6   r8   r  ì  s   

ÿr  )r=   r3   r2   r>   )r/   rJ   rK   r3   r2   rL   )F)rN   rO   rP   rQ   r2   rR   )rm   rn   r2   ro   )rm   rn   r2   rr   )rm   rn   r2   ru   )rx   ry   r2   rz   )rx   r$   r2   r&   )rx   r$   r2   r„   )rx   ry   r2   rQ   )rŒ   r"   r2   r�   )r‘   r,   r2   r,   )r”   r$   r•   r3   r–   r—   r2   rQ   )r2   rQ   )rµ   r*   r2   r#   )rµ   r   r2   r   )rµ   r   r2   rQ   )rµ   r*   r2   rQ   )rë   r'   rÎ   rì   r2   r„   )r·   r#   ró   rô   r2   rõ   )rþ   r,   rØ   r#   r2   r,   )r/   rø   r0   r(   r2   r3   )r/   r  r0   r(   r2   r3   )rµ   r  r˜   r  r2   ru   )rµ   r  r˜   r  r2   rQ   )r  r"   r2   rQ   )r  r   r2   rQ   )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,   r.   r@   ÚtupleÚfindallÚ_versÚ
sqla_14_18Ú
sqla_14_26Úsqla_2Úsqlalchemy_versionrM   Úsqlalchemy.ext.compilerÚ
issubclassrd   rj   rk   Úsqlalchemy.utilrl   r3   rn   Ú_ConstraintNameDefinedrq   rs   rv   ÚAUTOINCREMENT_DEFAULTÚcontextmanagerr   rƒ   r‡   rŠ   r‹   r�   r’   rš   r¡   r¦   r²   r´   r¸   rÀ   rÇ   re   Ú
TypeEnginerÁ   rÂ   rÚ   rä   ræ   r»   rò   rù   rû   rø   r  r  r  r  r  r  r  r6   r6   r6   r8   Ú<module>   sØ   
ÿþ)










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