o
    ‹åg®‹  ã                   @  s,  d dl mZ d dlm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 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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&m0Z0 d d'l1m2Z2 d d(l3m4Z4 d d)l5m6Z6 d d*l7m8Z8 d d+l9m:Z: d d,l9m;Z; d-Z<dád4d5„Z=dâd8d9„Z>dãd?d@„Z?e @¡  ZAZBdädCdD„ZCdådHdI„ZDdædJdK„ZEeB Fej;¡dçdMdN„ƒZGeB FejH¡dèdPdQ„ƒZIeB FejJ¡dédSdT„ƒZKeB FejL¡dêdVdW„ƒZMeB FejN¡dëdYdZ„ƒZOdìd^d_„ZPeB FejQ¡dídadb„ƒZReB FejS¡dîddde„ƒZTeB FejU¡dïdgdh„ƒZVeB FejW¡dðdjdk„ƒZXeB FejY¡dldm„ ƒZZeB Fej[¡dndo„ ƒZ\eB Fej]¡dñdqdr„ƒZ^eB Fej_¡dòdtdu„ƒZ`eB Feja¡dódwdx„ƒZbeB Fejc¡dôdzd{„ƒZdG d|d}„ d}ƒZedõd€d�„Zfd‚dƒdƒd„œdöd‹dŒ„Zgd÷d�d�„Zhdød”d•„Zid–d—„ Zjdùd˜d™„Zkdùdšd›„ZldúdŸd „Zmdûd£d¤„Zndüd¦d§„Zo	‚dýdþd«d¬„Zpdÿd¯d°„Zq�d d³d´„Zr	ƒ�d�dd·d¸„Zs�ddºd»„Zt�dd¼d½„Zu	�d�ddÂdÃ„Zve @¡ Zw�ddÇdÈ„Zxew Fej/¡�ddÊdË„ƒZy�d	dÐdÑ„Zz�d
dÕdÖ„Z{ew Fej,¡�dd×dØ„ƒZ|ew Fej0¡�ddÙdÚ„ƒZ}ew Fej'¡�ddÜdÝ„ƒZ~eB Fej¡�ddßdà„ƒZ€eA �¡ ZBdS (  é    )Úannotations)ÚStringION)ÚAny)Úcast)ÚDict)ÚList)ÚOptional)ÚTuple)ÚTYPE_CHECKING)ÚUnion)ÚPythonPrinter)Úschema)Úsql)Útypes)Úconv)ÚLabel)Úquoted_nameé   )Úutil)Úops)Úsqla_compat)ÚLiteral)ÚComputed)ÚIdentity)ÚDialectKWArgs)ÚColumnElement)Ú
TextClause)ÚCheckConstraint)ÚColumn)Ú
Constraint)ÚFetchedValue)Ú
ForeignKey)ÚForeignKeyConstraint)ÚIndex)ÚMetaData)ÚPrimaryKeyConstraint)ÚUniqueConstraint)ÚARRAY)Ú
TypeEngine)ÚAutogenContext)ÚConfig)ÚMigrationScript)ÚModifyTableOpséÿ   Úautogen_contextr)   Únameúsqla_compat._ConstraintNameÚreturnú*Optional[Union[quoted_name, str, _f_name]]c                 C  s"   t |tƒrtt| ƒ|ƒS t |¡S ©N)Ú
isinstancer   Ú_f_nameÚ_alembic_autogenerate_prefixr   Úconstraint_name_or_none)r.   r/   © r8   úW/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/autogenerate/render.pyÚ_render_gen_name;   s   

r:   ÚtextÚstrc                 C  s4   t  dt j¡ d| ¡ ¡ } t  dt j¡ d| ¡} | S )Nú^ú    z +$Ú )ÚreÚcompileÚMÚsubÚstrip)r;   r8   r8   r9   Ú_indentE   s   rE   Úmigration_scriptr+   Útemplate_argsúDict[str, Union[str, Config]]ÚNonec                 C  s\   | j }t|j|jƒD ]\}}tt|| ƒƒ||j< tt|| ƒƒ||j< q
d t	|ƒ¡|d< d S )NÚ
Úimports)
rK   ÚzipÚupgrade_ops_listÚdowngrade_ops_listrE   Ú_render_cmd_bodyÚupgrade_tokenÚdowngrade_tokenÚjoinÚsorted)r.   rF   rG   rK   Úupgrade_opsÚdowngrade_opsr8   r8   r9   Ú _render_python_into_templatevarsK   s   ÿ
ÿÿrV   Úop_containerúops.OpContainerc                 C  sr   t ƒ }t|ƒ}| d¡ d}| jD ]}t||ƒ}|pt|ƒ}|D ]}| |¡ q q|s0| d¡ | d¡ | ¡ S )Nz=# ### commands auto generated by Alembic - please adjust! ###FÚpassz# ### end Alembic commands ###)r   r   Ú	writeliner   Ú	render_opÚboolÚgetvalue)rW   r.   ÚbufÚprinterÚ	has_linesÚopÚlinesÚliner8   r8   r9   rO   a   s    ÿ

ÿ

rO   ra   úops.MigrateOperationú	List[str]c                 C  s   t  |¡}t || |ƒ¡}|S r3   )Ú	renderersÚdispatchr   Úto_list)r.   ra   Úrendererrb   r8   r8   r9   r[   |   s   
r[   c                 C  s   d  t| |ƒ¡S )NrJ   )rR   r[   ©r.   ra   r8   r8   r9   Úrender_op_text„   s   rk   r,   c                 C  s¶   | j }| dd¡}|jrYg }|rG|  ¡ �) | d|j|jf ¡ |jD ]}t| |ƒ}| |¡ q#| d¡ W d   ƒ |S 1 s@w   Y  |S |jD ]}t| |ƒ}| |¡ qJ|S g S )NÚrender_as_batchFz5with op.batch_alter_table(%r, schema=%r) as batch_op:r?   )	ÚoptsÚgetr   Ú_within_batchÚappendÚ
table_namer   r[   Úextend)r.   ra   rm   rl   rb   Út_opÚt_linesr8   r8   r9   Ú_render_modify_tableŠ   s0   

ÿÿ


øò
ü
ru   úops.CreateTableCommentOpc                 C  sn   | j rd}nd}|jt| ƒ|j|jd urd|j nd |jd ur$d|j nd |jd ur2d|j dd�S d dd�S )NzV{prefix}create_table_comment(
{indent}{comment},
{indent}existing_comment={existing}
)z‚{prefix}create_table_comment(
{indent}'{tname}',
{indent}{comment},
{indent}existing_comment={existing},
{indent}schema={schema}
)ú%rú'%s'r>   )ÚprefixÚtnameÚcommentÚexistingr   Úindent)Ú
_has_batchÚformatr6   rq   r{   Úexisting_commentr   ©r.   ra   Útemplr8   r8   r9   Ú_render_create_table_comment§   s$   ÿÿ

ÿö	örƒ   úops.DropTableCommentOpc                 C  sX   | j rd}nd}|jt| ƒ|j|jd urd|j nd |jd ur'd|j dd�S d dd�S )NzA{prefix}drop_table_comment(
{indent}existing_comment={existing}
)zm{prefix}drop_table_comment(
{indent}'{tname}',
{indent}existing_comment={existing},
{indent}schema={schema}
)rw   rx   r>   )ry   rz   r|   r   r}   )r~   r   r6   rq   r€   r   r�   r8   r8   r9   Ú_render_drop_table_commentÉ   s"   ÿÿ

ÿ÷÷r…   úops.CreateTableOpc           
        sV  ˆ  ¡ }dd„ ‡ fdd„|jD ƒD ƒtdd„ ‡ ‡fdd„|jD ƒD ƒƒ }t|ƒtkr5dd |¡ d }nd |¡}d	tˆjƒt	ˆ ƒ|d
œ }ˆj
rS|dtˆj
ƒ 7 }|j}|r`|dt|ƒ 7 }|j}|rl|d|›�7 }tˆjƒD ]}|d| dd¡ˆj| f 7 }qq|jr—d dd„ |jD ƒ¡}	|d|	 7 }ˆjd ur¥|dtˆjƒ 7 }|d7 }|S )Nc                 S  s   g | ]}|r|‘qS r8   r8   ©Ú.0Úcolr8   r8   r9   Ú
<listcomp>ì   s    ûÿz_add_table.<locals>.<listcomp>c                   s   g | ]}t |ˆ ƒ‘qS r8   )Ú_render_columnr‡   ©r.   r8   r9   rŠ   î   s    
ÿc                 S  s   g | ]}|d ur|‘qS r3   r8   )rˆ   Úrconsr8   r8   r9   rŠ   ó   s
    ùc                   s   g | ]	}t |ˆ ˆjƒ‘qS r8   )Ú_render_constraintÚ_namespace_metadata)rˆ   Úconsrj   r8   r9   rŠ   õ   s    ýÿÿz*[z,
ú]z.%(prefix)screate_table(%(tablename)r,
%(args)s)Ú	tablenamery   Úargsz,
schema=%rz,
comment=%rz,
info=z,
%s=%rú Ú_ú, c                 s  ó   � | ]}d | V  qdS )rx   Nr8   )rˆ   Úpr8   r8   r9   Ú	<genexpr>  ó   € z_add_table.<locals>.<genexpr>z,
prefixes=[%s]z,
if_not_exists=%rz
))Úto_tableÚcolumnsrS   ÚconstraintsÚlenÚMAX_PYTHON_ARGSrR   Ú_identrq   r6   r   r{   ÚinfoÚkwÚreplaceÚ	_prefixesÚif_not_existsr\   )
r.   ra   Útabler“   Úargs_strr;   r{   r¡   ÚkÚprefixesr8   rj   r9   Ú
_add_tableè   sN   
ÿþüþÿú
ý 
rª   úops.DropTableOpc                 C  sX   dt | ƒt|jƒdœ }|jr|dt|jƒ 7 }|jd ur&|dt|jƒ 7 }|d7 }|S )Nz%(prefix)sdrop_table(%(tname)r)ry   rz   ú, schema=%rz, if_exists=%rú))r6   r    rq   r   Ú	if_existsr\   )r.   ra   r;   r8   r8   r9   Ú_drop_table"  s   þ
r¯   Úitemr   ú	list[str]c                   s   ‡ fdd„|j  ¡ D ƒS )Nc                   s$   g | ]\}}|› d t |ˆ ƒ› �‘qS )ú=©Ú_render_potential_expr©rˆ   ÚkeyÚvalrŒ   r8   r9   rŠ   5  s    ÿÿz0_render_dialect_kwargs_items.<locals>.<listcomp>)Údialect_kwargsÚitems)r.   r°   r8   rŒ   r9   Ú_render_dialect_kwargs_items2  s   
þrº   úops.CreateIndexOpc                 C  s¾   |  ¡ }| j}|rd}nd}|jd usJ ‚t| |ƒ}|jd ur)| dt|jƒ ¡ |t| ƒt| |j	ƒt
|jj	ƒd t|| ƒ¡|jpBd|jjrNdt
|jjƒ nd|rXdd |¡ nddœ }|S )	NzL%(prefix)screate_index(%(name)r, [%(columns)s], unique=%(unique)r%(kwargs)s)za%(prefix)screate_index(%(name)r, %(table)r, [%(columns)s], unique=%(unique)r%(schema)s%(kwargs)s)zif_not_exists=%rr–   Fr¬   r?   )ry   r/   r¦   rœ   Úuniquer   Úkwargs)Úto_indexr~   r¦   rº   r¥   rp   r\   r6   r:   r/   r    rR   Ú_get_index_rendered_expressionsr¼   r   ©r.   ra   ÚindexÚ	has_batchÚtmplrm   r;   r8   r8   r9   Ú
_add_index;  s2   ÿÿ



ÿÿórÄ   úops.DropIndexOpc              	   C  s”   |  ¡ }| j}|rd}nd}t| |ƒ}|jd ur"| dt|jƒ ¡ |t| ƒt| |jƒt	|j
ƒ|jr9dt	|jƒ nd|rCdd |¡ nddœ }|S )Nz(%(prefix)sdrop_index(%(name)r%(kwargs)s)zM%(prefix)sdrop_index(%(name)r, table_name=%(table_name)r%(schema)s%(kwargs)s)zif_exists=%rr¬   r?   r–   )ry   r/   rq   r   r½   )r¾   r~   rº   r®   rp   r\   r6   r:   Ú
index_namer    rq   r   rR   rÀ   r8   r8   r9   Ú_drop_indexc  s"   ÿ


ûrÇ   úops.CreateUniqueConstraintOpc                 C  s   t | ¡ | dƒgS )NT)Ú_uq_constraintÚto_constraintrj   r8   r8   r9   Ú_add_unique_constraint}  s   rË   úops.CreateForeignKeyOpc                 C  sÐ   t t| |jƒƒg}| js| t t|jƒƒ¡ | t t|jƒƒt dd„ |j	D ƒƒt dd„ |j
D ƒƒg¡ g d¢}| js@| dd¡ |D ]}||jv r[|j| }|d ur[| d||f ¡ qBdt| ƒd	 |¡d
œ S )Nc                 S  ó   g | ]}t |ƒ‘qS r8   ©r    r‡   r8   r8   r9   rŠ   �  ó    z&_add_fk_constraint.<locals>.<listcomp>c                 S  rÍ   r8   rÎ   r‡   r8   r8   r9   rŠ   �  rÏ   )Úreferent_schemaÚonupdateÚondeleteÚ	initiallyÚ
deferrableÚ	use_alterÚmatchr   Úsource_schemaú%s=%rz&%(prefix)screate_foreign_key(%(args)s)r–   ©ry   r“   )Úreprr:   Úconstraint_namer~   rp   r    Úsource_tablerr   Úreferent_tableÚ
local_colsÚremote_colsÚinsertr¢   r6   rR   )r.   ra   r“   r½   r¨   Úvaluer8   r8   r9   Ú_add_fk_constraint„  s,   ýÿ	

€þrâ   c                 C  ó   t ƒ ‚r3   ©ÚNotImplementedError©Ú
constraintr.   r8   r8   r9   Ú_add_pk_constraint«  ó   rè   c                 C  rã   r3   rä   ræ   r8   r8   r9   Ú_add_check_constraint°  ré   rê   úops.DropConstraintOpc                 C  s®   t | ƒ}t| |jƒ}|jrt|jƒnd }|jrt|jƒnd }g }| t|ƒ¡ | js@| tt|j	ƒƒ¡ |d ur@| d|›�¡ |d urL| d|›�¡ |› dd 
|¡› d�S )Nzschema=ztype_=zdrop_constraint(r–   r­   )r6   r:   rÛ   r   r    Úconstraint_typerp   rÚ   r~   rq   rR   )r.   ra   ry   r/   r   Útype_Úparams_strsr8   r8   r9   Ú_drop_constraintµ  s   rï   úops.AddColumnOpc                 C  sZ   |j |j|j}}}| jrd}nd}|r|d7 }|d7 }|t| ƒ|t|| ƒ|dœ }|S )Nz %(prefix)sadd_column(%(column)s)z*%(prefix)sadd_column(%(tname)r, %(column)sú, schema=%(schema)rr­   )ry   rz   Úcolumnr   )r   rq   rò   r~   r6   r‹   )r.   ra   r   rz   rò   Útemplater;   r8   r8   r9   Ú_add_columnÊ  s   ürô   úops.DropColumnOpc                 C  s`   |j |j|j}}}| jrd}nd}|r|d7 }|d7 }|t| ƒt|ƒt|ƒt|ƒdœ }|S )Nz %(prefix)sdrop_column(%(cname)r)z*%(prefix)sdrop_column(%(tname)r, %(cname)rrñ   r­   )ry   rz   Úcnamer   )r   rq   Úcolumn_namer~   r6   r    )r.   ra   r   rz   r÷   ró   r;   r8   r8   r9   Ú_drop_columnÝ  s   ürø   úops.AlterColumnOpc                 C  s¢  |j }|j}|j}|j}|j}|j}|j dd ¡}|j}	|j	}
|j
}|j}|j}d}| jr0d}nd}|t| ƒ||dœ }|	d urK|d|t|	| ƒf 7 }|dur\t|| ƒ}|d||f 7 }|d urk|d	|t|| ƒf 7 }|d urw|d
||f 7 }|durƒ|d||f 7 }|d ur�|d||f 7 }|d u rŸ|
d urŸ|d||
f 7 }|d ur«|d||f 7 }|du r¾|r¾t|| ƒ}|d||f 7 }|rË| jsË|d||f 7 }|d7 }|S )NÚautoincrementz           z %(prefix)salter_column(%(cname)rz+%(prefix)salter_column(%(tname)r, %(cname)r)ry   rz   rö   z,
%sexisting_type=%sFz,
%sserver_default=%sz,
%stype_=%sz,
%snullable=%rz,
%scomment=%rz,
%sexisting_comment=%rz,
%sexisting_nullable=%rz,
%sautoincrement=%rz,
%sexisting_server_default=%sz,
%sschema=%rr­   )rq   r÷   Úmodify_server_defaultÚmodify_typeÚmodify_nullableÚmodify_commentr¢   rn   Úexisting_typeÚexisting_nullabler€   Úexisting_server_defaultr   r~   r6   Ú
_repr_typeÚ_render_server_default)r.   ra   rz   rö   Úserver_defaultrí   Únullabler{   rú   rÿ   r   r€   r  r   r}   ró   r;   Úrenderedr8   r8   r9   Ú_alter_columnò  sd   ýþ
ÿ
r  c                   @  s    e Zd Zddd„Zdd	d
„ZdS )r5   ry   r<   r/   r   r1   rI   c                 C  s   || _ || _d S r3   )ry   r/   )Úselfry   r/   r8   r8   r9   Ú__init__0  s   
z_f_name.__init__c                 C  s   d| j t| jƒf S )Nz%sf(%r))ry   r    r/   )r  r8   r8   r9   Ú__repr__4  s   z_f_name.__repr__N)ry   r<   r/   r   r1   rI   )r1   r<   )Ú__name__Ú
__module__Ú__qualname__r	  r
  r8   r8   r8   r9   r5   /  s    
r5   ú!Optional[Union[quoted_name, str]]úOptional[str]c                 C  s0   | du r| S t | tƒrt| ƒS t | tƒr| S dS )zþproduce a __repr__() object for a string identifier that may
    use quoted_name() in SQLAlchemy 0.9 and greater.

    The issue worked around here is that quoted_name() doesn't have
    very good repr() behavior by itself when unicode is involved.

    N)r4   r   r<   )r/   r8   r8   r9   r    8  s   

ÿr    TF)Úwrap_in_elementÚis_server_defaultÚis_indexrá   r   r  r\   r  r  c          	      C  sŽ   t | tjƒrC|jjj| ||d�}|r?t|ƒ}|rdnd}|› |› d|›d�}|r=t | tƒr=t| j	ƒt
u r=|d| j	›d� S |S t|ƒS t| ƒS )N)r  r  Úliteral_columnr;   ú(r­   z.label()r4   r   ÚClauseElementÚmigration_contextÚimplÚrender_ddl_sql_exprÚ_sqlalchemy_autogenerate_prefixr   Útyper/   r<   rÚ   )	rá   r.   r  r  r  Úsql_textry   ÚelementÚ	value_strr8   r8   r9   r´   H  s"   ÿÿþr´   Úidxr#   c                   s   ‡ fdd„| j D ƒS )Nc                   s:   g | ]}t |tjƒrttt|d dƒƒƒnt|ˆ dd�‘qS )r/   NT)r  )r4   Ú	sa_schemar   rÚ   r    Úgetattrr´   )rˆ   ÚexprŒ   r8   r9   rŠ   i  s    
ýÿüz3_get_index_rendered_expressions.<locals>.<listcomp>)Úexpressions)r  r.   r8   rŒ   r9   r¿   f  s   
úr¿   rç   r&   Úalterc                 C  sL  g }|j }| jr| d| jf¡ | jr| d| jf¡ |s.|r.| jjr.| dt| jjƒf¡ |s>| jr>| dt|| jƒf¡ t	|| ƒ}|rƒt
t|| jƒƒg}|s[|t
t| jjƒƒg7 }| t
dd„ | jD ƒƒ¡ | dd„ |D ƒ¡ | |¡ dt|ƒd	 |¡d
œ S dd„ | jD ƒ}| dd„ |D ƒ¡ | |¡ dt|ƒd	 |¡d
œ S )NrÔ   rÓ   r   r/   c                 S  ó   g | ]}t |jƒ‘qS r8   )r    r/   r‡   r8   r8   r9   rŠ   Œ  ó    z"_uq_constraint.<locals>.<listcomp>c                 S  ó   g | ]
\}}d ||f ‘qS ©rØ   r8   ©rˆ   r¨   Úvr8   r8   r9   rŠ   �  ó    z,%(prefix)screate_unique_constraint(%(args)s)r–   rÙ   c                 S  s   g | ]	}t t|jƒƒ‘qS r8   )rÚ   r    r/   r‡   r8   r8   r9   rŠ   ”  s    c                 S  r&  r'  r8   r(  r8   r8   r9   rŠ   •  r*  z$%(prefix)sUniqueConstraint(%(args)s))r~   rÔ   rp   rÓ   r¦   r   r    r/   r:   rº   rÚ   rœ   rr   r6   rR   r  )rç   r.   r#  rm   rÂ   Údialect_optionsr“   r8   r8   r9   rÉ   s  s>   
ÿ

þ
þrÉ   c                 C  s    | j d }|d u rd|j S |S )NÚuser_module_prefixz%s.)rm   r  )r.   Útargetry   r8   r8   r9   Ú_user_autogenerate_prefix�  s   

r.  c                 C  s   | j d pdS )NÚsqlalchemy_module_prefixr?   ©rm   rŒ   r8   r8   r9   r  ¥  s   r  c                 C  s   | j rdS | jd pdS )Nz	batch_op.Úalembic_module_prefixr?   )r~   rm   rŒ   r8   r8   r9   r6   ©  s   r6   rí   Úobject_úUnion[str, Literal[False]]c                 C  s4   d|j v r|j d }|r|| ||ƒ}|dur|S dS )NÚrender_itemFr0  )rí   r2  r.   Úrenderr  r8   r8   r9   Ú_user_defined_render°  s   

r6  rò   úColumn[Any]c                   s6  t d| ˆ ƒ}|dur|S g }g }| jr-t| jˆ ƒ}|r-t| jƒr&| |¡ n| d|f¡ | jd ur@| jtjkr@| d| jf¡ | jd urM| d| jf¡ | j	rX| d| j	f¡ | j
}|rf| dd| f¡ d	tˆ ƒt| jƒt| jˆ ƒ|r�d
 dd„ |D ƒ¡d
 ndd
 dd„ |D ƒ‡ fdd„| j ¡ D ƒ ¡dœ S )Nrò   Fr  rú   r  Úsystemr{   rw   z8%(prefix)sColumn(%(name)r, %(type)s, %(args)s%(kwargs)s)r–   c                 S  rÍ   r8   )r<   )rˆ   Úargr8   r8   r9   rŠ   ç  rÏ   z"_render_column.<locals>.<listcomp>r?   c                 S  r&  ©ú%s=%sr8   ©rˆ   Úkwnamer·   r8   r8   r9   rŠ   ê  r*  c                   s"   g | ]\}}d |t |ˆ ƒf ‘qS r:  r³   rµ   rŒ   r8   r9   rŠ   ë  s    þÿÿ)ry   r/   r  r“   r½   )r6  r  r  Ú*_should_render_server_default_positionallyrp   rú   r   ÚAUTOINCREMENT_DEFAULTr  r8  r{   r  r    r/   r  r  rR   r½   r¹   )rò   r.   r  r“   rm   r{   r8   rŒ   r9   r‹   ¼  sL   ÿÿ



ýÿÿúr‹   r  c                 C  s   t  | ¡p	t  | ¡S r3   )r   Ú_server_default_is_computedÚ_server_default_is_identity)r  r8   r8   r9   r>  õ  s
   ÿþr>  ÚdefaultúBOptional[Union[FetchedValue, str, TextClause, ColumnElement[Any]]]Úrepr_c                 C  s¦   t d| |ƒ}|dur|S t | ¡rttd| ƒ|ƒS t | ¡r&ttd| ƒ|ƒS t| tj	ƒr>t| j
tƒr6| j
} nt| j
|dd�S t| tƒrN|rNtt dd| ¡ƒ} tt| ƒS )	Nr  Fr   r   T)r  z^'|'$r?   )r6  r   r@  Ú_render_computedr   rA  Ú_render_identityr4   r  ÚDefaultClauser9  r<   r´   rÚ   r@   rC   )rB  r.   rD  r  r8   r8   r9   r  û  s    

ÿ
r  Úcomputedr   c                 C  sP   t | j|dd�}i }| jd ur| j|d< dt|ƒ|d dd„ | ¡ D ƒ¡dœ S )	NF©r  Ú	persistedz(%(prefix)sComputed(%(text)s, %(kwargs)s)r–   c                 s  r—   ©r;  Nr8   ©rˆ   Úpairr8   r8   r9   r™   %  rš   z#_render_computed.<locals>.<genexpr>)ry   r;   r½   )r´   ÚsqltextrJ  r  rR   r¹   )rH  r.   r;   r½   r8   r8   r9   rE    s   ÿ

ýrE  Úidentityr   c                 C  s4   t j| dd�}dt|ƒd dd„ | ¡ D ƒ¡dœ S )NT)r¸   z%(prefix)sIdentity(%(kwargs)s)r–   c                 s  r—   rK  r8   rL  r8   r8   r9   r™   2  rš   z#_render_identity.<locals>.<genexpr>)ry   r½   )r   Ú_get_identity_options_dictr  rR   r¹   )rO  r.   r½   r8   r8   r9   rF  )  s   ÿþrF  r(   Ú_skip_variantsc                 C  s  t d| |ƒ}|dur|S t|jdƒr|jj | |¡}nd }t| ƒj}|j}|s1t 	| ¡r1t
| |ƒS | d¡r\t d|¡}|d usBJ ‚| d¡}|d urR| d| ¡ |rV|S d|| f S |r`|S | d	¡r„d
| j tƒ v rztƒ d
| j  }	|	| |ƒS t|ƒ}
d|
| f S t|| ƒ}
d|
| f S )Nr  Fr  úsqlalchemy.dialectsúsqlalchemy\.dialects\.(\w+)é   z"from sqlalchemy.dialects import %sz%s.%rzsqlalchemy.z_render_%s_typez%s%r)r6  Úhasattrr  r  Úrender_typer  r  rK   r   Ú_type_has_variantsÚ_render_Variant_typeÚ
startswithr@   rÖ   ÚgroupÚaddÚ__visit_name__Úglobalsr  r.  )rí   r.   rQ  r  Úimpl_rtÚmodrK   rÖ   ÚdnameÚfnry   r8   r8   r9   r  6  s>   ÿ






r  r'   c                 C  s   t tt| |ddƒƒS )NÚ	item_typez(.+?\())r   r<   Ú_render_type_w_subtype)rí   r.   r8   r8   r9   Ú_render_ARRAY_typec  s   ÿþrd  c                 C  sd   t  | ¡\}}t||dd�}|d ur|dusJ ‚t|ƒD ]}|| }|dt||dd�|f 7 }q|S )NT)rQ  Fz.with_variant(%s, %r))r   Ú_get_variant_mappingr  rS   )rí   r.   Ú	base_typeÚvariant_mappingÚbaseÚdialectÚtypr8   r8   r9   rX  l  s   
þrX  ÚattrnameÚregexpry   ú$Union[Optional[str], Literal[False]]c                 C  sÐ   t | ƒ}t| |d ƒ}|d u rdS t |ƒ}t dd|¡}tt| |ƒ|ƒ}t || d| |¡}	|r6d||	f S t| ƒj}
|
 d¡rWt d|
¡}|d usLJ ‚| 	d¡}d	||	f S |
 d
¡rft
|ƒ}d||	f S d S )NFz([\(\)])z\\\1z\1%sz%s%srR  rS  rT  ú%s.%sÚ
sqlalchemy)rÚ   r   r@   rC   r  r  r  rY  rÖ   rZ  r  )rí   r.   rk  rl  ry   Ú
outer_reprÚ
inner_typeÚ
inner_reprÚsub_typeÚ
outer_typer_  rÖ   r`  r8   r8   r9   rc  {  s(   



rc  r   Únamespace_metadataúOptional[MetaData]c                 C  sD   zt  | ¡}W n ty   t d|  ¡ d|   Y S w || ||ƒS )Nz(No renderer is established for object %rz[Unknown Python object %r])Ú_constraint_renderersrg   Ú
ValueErrorr   Úwarn)rç   r.   ru  ri   r8   r8   r9   rŽ      s   þrŽ   r%   c                 C  sx   t d| |ƒ}|dur|S | jsd S g }| jr#| dtt|| jƒƒf¡ dt|ƒd dd„ | jD ƒdd„ |D ƒ ¡d	œ S )
NÚprimary_keyFr/   z(%(prefix)sPrimaryKeyConstraint(%(args)s)r–   c                 S  r$  r8   )rÚ   r/   )rˆ   Úcr8   r8   r9   rŠ   Ã  r%  z'_render_primary_key.<locals>.<listcomp>c                 S  r&  r:  r8   r<  r8   r8   r9   rŠ   Ä  r*  rÙ   )r6  rœ   r/   rp   rÚ   r:   r  rR   ©rç   r.   ru  r  rm   r8   r8   r9   Ú_render_primary_key®  s$   ÿÿÿþr}  Úfkr!   Úmetadata_schemar$   c           	      C  s°   |   ¡ }| d¡}|dd… \}}|dur"t|ƒdkr"d||f }n	d |dd… ¡}| jsP| jdurP| jjdurP||jv rP|j| j 	|¡}|durPt
|jƒ}d||f }|S )zxImplement a 'safe' version of ForeignKey._get_colspec() that
    won't fail if the remote table can't be resolved.

    Ú.éþÿÿÿNr   rn  r   éÿÿÿÿ)Ú_get_colspecÚsplitrž   rR   Úlink_to_nameÚparentr¦   Útablesr{  rn   r    r/   )	r~  r  ru  ÚcolspecÚtokensrz   ÚcolnameÚtable_fullnamer‰   r8   r8   r9   Ú_fk_colspecÉ  s    	
ÿ


rŒ  r"   rm   úList[Tuple[str, str]]c                 C  s¤   | j r| dt| j ƒf¡ | jr| dt| jƒf¡ | jr'| dt| jƒf¡ | jr4| dt| jƒf¡ | jrA| dt| jƒf¡ | jrP| dt| jƒf¡ d S d S )NrÑ   rÒ   rÓ   rÔ   rÕ   rÖ   )rÑ   rp   rÚ   rÒ   rÓ   rÔ   rÕ   rÖ   )rç   rm   r8   r8   r9   Ú_populate_render_fk_optsî  s   ÿrŽ  c                   sœ   t d| |ƒ}|dur|S g }| jr| dtt|| jƒƒf¡ t| |ƒ ˆj‰ dt|ƒd dd„ | j	D ƒ¡d ‡ ‡fdd„| j	D ƒ¡d d	d
„ |D ƒ¡dœ S )NÚforeign_keyFr/   zC%(prefix)sForeignKeyConstraint([%(cols)s], [%(refcols)s], %(args)s)r–   c                 s  s    � | ]}t t|jjƒƒV  qd S r3   )rÚ   r    r†  r/   ©rˆ   Úfr8   r8   r9   r™     s   € 
ÿz&_render_foreign_key.<locals>.<genexpr>c                 3  s    � | ]}t t|ˆ ˆƒƒV  qd S r3   )rÚ   rŒ  r�  ©Úapply_metadata_schemaru  r8   r9   r™     s
   € ÿ
ÿc                 S  r&  r:  r8   r<  r8   r8   r9   rŠ     r*  z'_render_foreign_key.<locals>.<listcomp>)ry   ÚcolsÚrefcolsr“   )
r6  r/   rp   rÚ   r:   rŽ  r   r  rR   Úelementsr|  r8   r’  r9   Ú_render_foreign_keyÿ  s0   ÿ

ÿþÿ÷þÿr—  c                 C  s$   t d| |ƒ}|dur|S t| |dƒS )Nr¼   F)r6  rÉ   )rç   r.   ru  r  r8   r8   r9   Ú_render_unique_constraint%  s   r˜  r   c                 C  sž   t d| |ƒ}|dur|S | jrt| jdƒrt| jjtjƒrd S g }| jr1| dt	t
|| jƒƒf¡ dt|ƒ|rCdd dd„ |D ƒ¡ nd	t| j|dd
�dœ S )NÚcheckFr-  r/   z.%(prefix)sCheckConstraint(%(sqltext)s%(opts)s)r–   c                 s  s    � | ]\}}d ||f V  qdS rK  r8   r(  r8   r8   r9   r™   Q  s   € z+_render_check_constraint.<locals>.<genexpr>r?   rI  )ry   rm   rN  )r6  Ú_create_rulerU  r4   r-  Úsqltypesr(   r/   rp   rÚ   r:   r  rR   r´   rN  r|  r8   r8   r9   Ú_render_check_constraint2  s6   ÿ
þþýÿÿÿùrœ  úops.ExecuteSQLOpc                 C  s   t |jtƒs
tdƒ‚d|j S )NznAutogenerate rendering of SQL Expression language constructs not supported here; please use a plain SQL stringzop.execute(%r))r4   rN  r<   rå   rj   r8   r8   r9   Ú_execute_sql[  s
   ÿ
rž  )r.   r)   r/   r0   r1   r2   )r;   r<   r1   r<   )r.   r)   rF   r+   rG   rH   r1   rI   )rW   rX   r.   r)   r1   r<   )r.   r)   ra   rd   r1   re   )r.   r)   ra   rd   r1   r<   )r.   r)   ra   r,   r1   re   )r.   r)   ra   rv   r1   r<   )r.   r)   ra   r„   r1   r<   )r.   r)   ra   r†   r1   r<   )r.   r)   ra   r«   r1   r<   )r.   r)   r°   r   r1   r±   )r.   r)   ra   r»   r1   r<   )r.   r)   ra   rÅ   r1   r<   )r.   r)   ra   rÈ   r1   re   )r.   r)   ra   rÌ   r1   r<   )r.   r)   ra   rë   r1   r<   )r.   r)   ra   rð   r1   r<   )r.   r)   ra   rõ   r1   r<   )r.   r)   ra   rù   r1   r<   )r/   r  r1   r  )rá   r   r.   r)   r  r\   r  r\   r  r\   r1   r<   )r  r#   r.   r)   r1   re   )rç   r&   r.   r)   r#  r\   r1   r<   )r.   r)   r1   r<   )rí   r<   r2  r   r.   r)   r1   r3  )rò   r7  r.   r)   r1   r<   )r  r   r1   r\   )T)rB  rC  r.   r)   rD  r\   r1   r  )rH  r   r.   r)   r1   r<   )rO  r   r.   r)   r1   r<   )F)rí   r(   r.   r)   rQ  r\   r1   r<   )rí   r'   r.   r)   r1   r<   )rí   r(   r.   r)   r1   r<   r3   )rí   r(   r.   r)   rk  r<   rl  r<   ry   r  r1   rm  )rç   r   r.   r)   ru  rv  r1   r  )rç   r%   r.   r)   ru  rv  r1   r  )r~  r!   r  r  ru  r$   r1   r<   )rç   r"   rm   r�  r1   rI   )rç   r"   r.   r)   ru  r$   r1   r  )rç   r&   r.   r)   ru  rv  r1   r<   )rç   r   r.   r)   ru  rv  r1   r  )r.   r)   ra   r�  r1   r<   )‚Ú
__future__r   Úior   r@   Útypingr   r   r   r   r   r	   r
   r   Ú
mako.pygenr   ro  r   r  r   r   r›  Úsqlalchemy.sql.elementsr   r   r   r?   r   Ú
operationsr   r   r   r   r   Úsqlalchemy.sql.baser   r   r   Úsqlalchemy.sql.schemar   r   r   r    r!   r"   r#   r$   r%   r&   Úsqlalchemy.sql.sqltypesr'   Úsqlalchemy.sql.type_apir(   Úalembic.autogenerate.apir)   Úalembic.configr*   Úalembic.operations.opsr+   r,   rŸ   r:   rE   rV   Ú
DispatcherÚdefault_renderersrf   rO   r[   rk   Údispatch_forru   ÚCreateTableCommentOprƒ   ÚDropTableCommentOpr…   ÚCreateTableOprª   ÚDropTableOpr¯   rº   ÚCreateIndexOprÄ   ÚDropIndexOprÇ   ÚCreateUniqueConstraintOprË   ÚCreateForeignKeyOprâ   ÚCreatePrimaryKeyOprè   ÚCreateCheckConstraintOprê   ÚDropConstraintOprï   ÚAddColumnOprô   ÚDropColumnOprø   ÚAlterColumnOpr  r5   r    r´   r¿   rÉ   r.  r  r6   r6  r‹   r>  r  rE  rF  r  rd  rX  rc  rw  rŽ   r}  rŒ  rŽ  r—  r˜  rœ  ÚExecuteSQLOprž  Úbranchr8   r8   r8   r9   Ú<module>   sô   









!

9

	
'


&






<
	ú

*




9û
ý-	û"
%

%

(	