a
    g	gC                     @  sh  d dl mZ 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 erd 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%l0m1Z1 d d&l2m3Z3 d d'l4m5Z5 d d(l6m7Z7 d d)l6m8Z8 d d*l9m:Z: d d+l9m;Z; d,Z<d-d.d/d0d1d2Z=d3d3d4d5d6Z>d-d7d8d9d:d;d<Z?e@  ZAZBd=d-d3d>d?d@ZCd-dAdBdCdDdEZDd-dAd3dCdFdGZEeBFej8d-dHdBdCdIdJZGeBFejHd-dKd3dCdLdMZIeBFejJd-dNd3dCdOdPZKeBFejLd-dQd3dCdRdSZMeBFejNd-dTd3dCdUdVZOeBFejPd-dWd3dCdXdYZQeBFejRd-dZd3dCd[d\ZSeBFejTd-d]dBdCd^d_ZUeBFejVd-d`d3dCdadbZWeBFejXdcdd ZYeBFejZdedf Z[eBFej\d-dgd3dCdhdiZ]eBFej^d-djd3dCdkdlZ_eBFej`d-dmd3dCdndoZaeBFejbd-dpd3dCdqdrZcG dsdt dtZddudvdwdxdyZedd|d-d}d}d3d~ddZfdd-dBdddZgdd-d}d3dddZhdd Zid-d3dddZjd-d3dddZkd3d|d-ddddZldd-d3dddZmd|d}dddZnddd-d}dvdddZodd-d3dddZpdd-d3dddZqdddddZrddd-d}d3dddZsdd-d3dddZtdd-d3dddZuddd-d3d3dvddddZve@ Zwdd-ddvdddZxewFej,dd-ddvdddZyddvdd3dÜddńZzddd9dȜddʄZ{ewFej)dd-ddvddd̄Z|ewFej-dd-dd3ddd΄Z}ewFej$dd-ddvdddфZ~eBFejd-dd3dCddԄZeA ZBdS )    )annotations)OrderedDict)StringION)Any)cast)Dict)List)Optional)Tuple)TYPE_CHECKING)Union)PythonPrinter)schema)sql)types)conv)quoted_name   )util)ops)sqla_compat)Literal)ColumnElement)
TextClause)CheckConstraint)Column)
Constraint)FetchedValue)
ForeignKey)ForeignKeyConstraint)Index)MetaData)PrimaryKeyConstraint)UniqueConstraint)ARRAY)
TypeEngine)AutogenContext)Config)MigrationScript)ModifyTableOps)Computed)Identity   r&   zsqla_compat._ConstraintNamez*Optional[Union[quoted_name, str, _f_name]])autogen_contextnamereturnc                 C  s&   t |trtt| |S t|S d S N)
isinstancer   _f_name_alembic_autogenerate_prefixr   Zconstraint_name_or_none)r-   r.    r4   ^/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/autogenerate/render.py_render_gen_name7   s    
r6   str)textr/   c                 C  s4   t dt jd|  } t dt jd| } | S )N^    z +$ )recompileMsubstrip)r8   r4   r4   r5   _indentA   s    rA   r(   zDict[str, Union[str, Config]]None)r-   migration_scripttemplate_argsr/   c                 C  s\   | j }t|j|jD ]0\}}tt|| ||j< tt|| ||j< qdt	||d< d S )N
imports)
rF   zipZupgrade_ops_listZdowngrade_ops_listrA   _render_cmd_bodyZupgrade_tokenZdowngrade_tokenjoinsorted)r-   rC   rD   rF   Zupgrade_opsZdowngrade_opsr4   r4   r5    _render_python_into_templatevarsG   s    
rK   zops.OpContainer)op_containerr-   r/   c                 C  sr   t  }t|}|d d}| jD ].}t||}|p:t|}|D ]}|| q@q"|s`|d |d | S )Nz=# ### commands auto generated by Alembic - please adjust! ###Fpassz# ### end Alembic commands ###)r   r   Z	writeliner   	render_opboolgetvalue)rL   r-   bufprinterZ	has_linesoplinesliner4   r4   r5   rH   ]   s    



rH   zops.MigrateOperationz	List[str])r-   rS   r/   c                 C  s   t |}t|| |}|S r0   )	renderersdispatchr   Zto_list)r-   rS   rendererrT   r4   r4   r5   rN   y   s    
rN   c                 C  s   d t| |S )NrE   )rI   rN   r-   rS   r4   r4   r5   render_op_text   s    rZ   r)   c                 C  s   | j }|dd}|jrg }|r|  P |d|j|jf  |jD ]}t| |}|| qF|d W d    q1 s~0    Y  n |jD ]}t| |}|| q|S g S d S )Nrender_as_batchFz5with op.batch_alter_table(%r, schema=%r) as batch_op:r;   )	optsgetr   Z_within_batchappend
table_namer   rN   extend)r-   rS   r\   r[   rT   Zt_opZt_linesr4   r4   r5   _render_modify_table   s(    



*

ra   zops.CreateTableCommentOpc                 C  s\   d}|j t| |j|jd ur&d|j nd |jd ur<d|j nd |jd urRd|j nd ddS )Nz{prefix}create_table_comment(
{indent}'{tname}',
{indent}{comment},
{indent}existing_comment={existing},
{indent}schema={schema}
)%r'%s'r:   )prefixtnamecommentexistingr   indent)formatr3   r_   rf   existing_commentr   r-   rS   Ztemplr4   r4   r5   _render_create_table_comment   s    rl   zops.DropTableCommentOpc                 C  sF   d}|j t| |j|jd ur&d|j nd |jd ur<d|j nd ddS )Nzm{prefix}drop_table_comment(
{indent}'{tname}',
{indent}existing_comment={existing},
{indent}schema={schema}
)rb   rc   r:   )rd   re   rg   r   rh   )ri   r3   r_   rj   r   rk   r4   r4   r5   _render_drop_table_comment   s    rm   zops.CreateTableOpc           	        s$    }dd  fdd|jD D tdd  fdd|jD D  }t|tkrjdd| d }n
d|}d	tjt	 |d
 }j
r|dtj
 7 }|j}|r|dt| 7 }tjD ]"}|d|ddj| f 7 }q|jrddd |jD }|d| 7 }|d7 }|S )Nc                 S  s   g | ]}|r|qS r4   r4   .0colr4   r4   r5   
<listcomp>   s   z_add_table.<locals>.<listcomp>c                   s   g | ]}t | qS r4   )_render_columnrn   r-   r4   r5   rq      s   c                 S  s   g | ]}|d ur|qS r0   r4   )ro   Zrconsr4   r4   r5   rq      s   c                   s   g | ]}t | jqS r4   )_render_constraintZ_namespace_metadata)ro   ZconsrY   r4   r5   rq      s   z*[z,
]z.%(prefix)screate_table(%(tablename)r,
%(args)s)Z	tablenamerd   argsz,
schema=%rz,
comment=%rz,
%s=%r _, c                 s  s   | ]}d | V  qdS )rc   Nr4   )ro   pr4   r4   r5   	<genexpr>       z_add_table.<locals>.<genexpr>z,
prefixes=[%s]z
))Zto_tablecolumnsrJ   constraintslenMAX_PYTHON_ARGSrI   _identr_   r3   r   rf   kwreplace	_prefixes)	r-   rS   tablerv   args_strr8   rf   kprefixesr4   rY   r5   
_add_table   sD    

 r   zops.DropTableOpc                 C  s<   dt | t|jd }|jr0|dt|j 7 }|d7 }|S )Nz%(prefix)sdrop_table(%(tname)r)rd   re   , schema=%r))r3   r   r_   r   )r-   rS   r8   r4   r4   r5   _drop_table  s    r   zops.CreateIndexOpc                   s   |  } j}|rd}nd}|jd us*J |t t |jt|jjdt| |j	p\d|jj
rtdt|jj
 ndt|jrdd fdd|j 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)ry   Fr   r;   c                   s"   g | ]\}}d |t | f qS %s=%s_render_potential_exprro   keyvalrs   r4   r5   rq   2  s   z_add_index.<locals>.<listcomp>)rd   r.   r   r}   uniquer   kwargs)to_index
_has_batchr   r3   r6   r.   r   rI   _get_index_rendered_expressionsr   r   r   r   itemsr-   rS   index	has_batchtmplr8   r4   rs   r5   
_add_index  s@    


r   zops.DropIndexOpc                   s   |  } j}|rd}nd}|t t |jt|j|jrJdt|j ndt|j	rxdd
 fdd|j	 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)r   r;   ry   c                   s"   g | ]\}}d |t | f qS r   r   r   rs   r4   r5   rq   U  s   z_drop_index.<locals>.<listcomp>)rd   r.   r_   r   r   )r   r   r3   r6   Z
index_namer   r_   r   r   r   rI   r   r   r4   rs   r5   _drop_index?  s0    

r   zops.CreateUniqueConstraintOpc                 C  s   t | | dgS )NT)_uq_constraintZto_constraintrY   r4   r4   r5   _add_unique_constraintb  s    r   z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 ]2}||jv r|j| }|d ur|d||f  qdt| d	|d
 S )Nc                 S  s   g | ]}t |qS r4   r   rn   r4   r4   r5   rq   u  r|   z&_add_fk_constraint.<locals>.<listcomp>c                 S  s   g | ]}t |qS r4   r   rn   r4   r4   r5   rq   v  r|   )Zreferent_schemaonupdateondelete	initially
deferrable	use_alterr   Zsource_schema%s=%rz&%(prefix)screate_foreign_key(%(args)s)ry   rd   rv   )reprr6   constraint_namer   r^   r   Zsource_tabler`   Zreferent_tableZ
local_colsZremote_colsinsertr   r3   rI   )r-   rS   rv   r   r   valuer4   r4   r5   _add_fk_constrainti  s*    

r   c                 C  s
   t  d S r0   NotImplementedError
constraintr-   r4   r4   r5   _add_pk_constraint  s    r   c                 C  s
   t  d S r0   r   r   r4   r4   r5   _add_check_constraint  s    r   zops.DropConstraintOpc                 C  sP   | j rd}nd}|t| t| |jt|j|j|jrBdt|j ndd }|S )Nz3%(prefix)sdrop_constraint(%(name)r, type_=%(type)r)zO%(prefix)sdrop_constraint(%(name)r, '%(table_name)s'%(schema)s, type_=%(type)r)r   r;   )rd   r.   r_   typer   )r   r3   r6   r   r   r_   Zconstraint_typer   )r-   rS   templater8   r4   r4   r5   _drop_constraint  s    
r   zops.AddColumnOpc                 C  sZ   |j |j|j  }}}| jr"d}nd}|r2|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   )rd   re   columnr   )r   r_   r   r   r3   rr   )r-   rS   r   re   r   r   r8   r4   r4   r5   _add_column  s    r   zops.DropColumnOpc                 C  s`   |j |j|j  }}}| jr"d}nd}|r2|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   )rd   re   cnamer   )r   r_   column_namer   r3   r   )r-   rS   r   re   r   r   r8   r4   r4   r5   _drop_column  s    r   zops.AlterColumnOpc                 C  s  |j }|j}|j}|j}|j}|j}|jdd }|j}	|j	}
|j
}|j}|j}d}| jr`d}nd}|t| ||d }|	d ur|d|t|	| f 7 }|durt|| }|d||f 7 }|d ur|d	|t|| f 7 }|d ur|d
||f 7 }|dur|d||f 7 }|d ur"|d||f 7 }|d u rF|
d urF|d||
f 7 }|d ur`|d||f 7 }|du r|rt|| }|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)rd   re   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   )r_   r   Zmodify_server_defaultZmodify_typeZmodify_nullableZmodify_commentr   r]   existing_typeexisting_nullablerj   existing_server_defaultr   r   r3   
_repr_type_render_server_default)r-   rS   re   r   server_defaulttype_nullablerf   r   r   r   rj   r   r   rh   r   r8   renderedr4   r4   r5   _alter_column  sd    



r   c                   @  s,   e Zd ZddddddZdddd	Zd
S )r2   r7   r   rB   )rd   r.   r/   c                 C  s   || _ || _d S r0   )rd   r.   )selfrd   r.   r4   r4   r5   __init__  s    z_f_name.__init__)r/   c                 C  s   d| j t| jf S )Nz%sf(%r))rd   r   r.   )r   r4   r4   r5   __repr__  s    z_f_name.__repr__N)__name__
__module____qualname__r   r   r4   r4   r4   r5   r2     s   r2   z!Optional[Union[quoted_name, str]]zOptional[str])r.   r/   c                 C  s0   | du r| S t | trt| S t | tr,| S dS )zproduce 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)r1   r   r7   )r.   r4   r4   r5   r   "  s    

r   TFr   rO   )r   r-   wrap_in_textis_server_defaultr/   c                 C  sF   t | tjr:|rd}nd}|t||jjj| |dd S t| S d S )Nz%(prefix)stext(%(sql)r)z%(sql)rr   )rd   r   )r1   r   ZClauseElement_sqlalchemy_autogenerate_prefixmigration_contextimplZrender_ddl_sql_exprr   )r   r-   r   r   r   r4   r4   r5   r   2  s    r   r    )idxr-   r/   c                   s    fdd| j D S )Nc                   s6   g | ].}t |tjr(ttt|d dnt| qS )r.   N)r1   	sa_schemar   r   r   getattrr   )ro   exprs   r4   r5   rq   M  s   
z3_get_index_rendered_expressions.<locals>.<listcomp>)Zexpressions)r   r-   r4   rs   r5   r   J  s    
r   r#   )r   r-   alterr/   c                 C  s:  g }|j }| jr$|dt| jf | jr>|dt| jf |sd|rd| jjrd|dt| jjf |s| jr|dt	|| jf |rt
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 d S )Nr   r   r   r.   c                 S  s   g | ]}t |jqS r4   )r   r.   rn   r4   r4   r5   rq   m  r|   z"_uq_constraint.<locals>.<listcomp>c                 S  s   g | ]\}}d ||f qS r   r4   ro   r   vr4   r4   r5   rq   n  r|   z,%(prefix)screate_unique_constraint(%(args)s)ry   r   c                 S  s   g | ]}t t|jqS r4   )r   r   r.   rn   r4   r4   r5   rq   t  r|   c                 S  s   g | ]\}}d ||f qS r   r4   r   r4   r4   r5   rq   u  r|   z$%(prefix)sUniqueConstraint(%(args)s))r   r   r^   r7   r   r   r   r   r.   r6   r   r}   r`   r3   rI   r   )r   r-   r   r\   r   rv   r4   r4   r5   r   U  s8    
r   c                 C  s$   | j d }|d u rd|j S |S d S )NZuser_module_prefixz%s.)r\   r   )r-   targetrd   r4   r4   r5   _user_autogenerate_prefix|  s    

r   )r-   r/   c                 C  s   | j d pdS )NZsqlalchemy_module_prefixr;   r\   rs   r4   r4   r5   r     s    r   c                 C  s   | j r
dS | jd pdS d S )Nz	batch_op.Zalembic_module_prefixr;   )r   r\   rs   r4   r4   r5   r3     s    r3   zUnion[str, Literal[False]])r   object_r-   r/   c                 C  s4   d|j v r0|j d }|r0|| ||}|dur0|S dS )NZrender_itemFr   )r   r   r-   renderr   r4   r4   r5   _user_defined_render  s    

r   r   )r   r-   r/   c                   s<  t d|  }|dur|S g }g }| jrZt| j }|rZt| jrL|| n|d|f | jd ur| jtjkr|d| jf | jd ur|d| jf | j	r|d| j	f | j
}|r|dd| f d	t t| jt| j |rd
dd |D d
 ndd
dd |D  fddt|  D  d S )Nr   Fr   r   r   systemrf   rb   z8%(prefix)sColumn(%(name)r, %(type)s, %(args)s%(kwargs)s)ry   c                 S  s   g | ]}t |qS r4   )r7   )ro   argr4   r4   r5   rq     r|   z"_render_column.<locals>.<listcomp>r;   c                 S  s   g | ]\}}d ||f qS r   r4   ro   Zkwnamer   r4   r4   r5   rq     r|   c                   s"   g | ]\}}d |t | f qS r   r   r   rs   r4   r5   rq     s   )rd   r.   r   rv   r   )r   r   r   *_should_render_server_default_positionallyr^   r   r   ZAUTOINCREMENT_DEFAULTr   r   rf   r   r   r.   r   r   rI   Z_column_kwargsr   )r   r-   r   rv   r\   rf   r4   rs   r5   rr     sP    


 
rr   )r   r/   c                 C  s   t | pt | S r0   )r   _server_default_is_computed_server_default_is_identity)r   r4   r4   r5   r     s
    r   z=Optional[Union[FetchedValue, str, TextClause, ColumnElement]])defaultr-   repr_r/   c                 C  s   t d| |}|dur|S t| r2ttd| |S t| rLttd| |S t| tj	r|t| j
trl| j
} nt| j
|ddS t| tr|rttdd| } tt| S )	Nr   Fr*   r+   Tr   z^'|'$r;   )r   r   r   _render_computedr   r   _render_identityr1   r   ZDefaultClauser   r7   r   r   r<   r?   )r   r-   r   r   r4   r4   r5   r     s     

r   r*   )computedr-   r/   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)ry   c                 s  s   | ]}d | V  qdS r   Nr4   ro   pairr4   r4   r5   r{     r|   z#_render_computed.<locals>.<genexpr>)rd   r8   r   )r   sqltextr   r   rI   r   )r   r-   r8   r   r4   r4   r5   r     s    

r   r+   )identityr-   r/   c                 C  sT   t | jd}| jd ur | j|d< |t|  dt|ddd | D d S )N)alwayson_nullz%(prefix)sIdentity(%(kwargs)s)ry   c                 s  s   | ]}d | V  qdS r   r4   r   r4   r4   r5   r{     r|   z#_render_identity.<locals>.<genexpr>)rd   r   )r   r   r   update_get_identity_optionsr   rI   r   )r   r-   r   r4   r4   r5   r     s    

r   r   )identity_optionsr/   c                 C  s2   t  }tjD ] }t| |d }|d ur|||< q|S r0   )r   r   Z_identity_options_attrsr   )r   r   attrr   r4   r4   r5   r     s    

r   r%   )r   r-   _skip_variantsr/   c                 C  s*  t d| |}|dur|S t|jdr6|jj| |}nd }t| j}|j}|drt	
d|}|d uslJ |d}|d ur|d|  |r|S d|| f S n|r|S |st| rt| |S |d	rd
| j t v  rt d
| j  }	|	| |S t|}
d|
| f S nt|| }
d|
| f S d S )Nr   Fr   sqlalchemy.dialectssqlalchemy\.dialects\.(\w+)   z"from sqlalchemy.dialects import %sz%s.%rzsqlalchemy.z_render_%s_typez%s%r)r   hasattrr   r   Zrender_typer   r   rF   
startswithr<   matchgroupaddr   Z_type_has_variants_render_Variant_typeZ__visit_name__globalsr   r   )r   r-   r   r   Zimpl_rtmodrF   r  dnamefnrd   r4   r4   r5   r     s>    





r   r$   )r   r-   r/   c                 C  s   t tt| |ddS )NZ	item_typez(.+?\())r   r7   _render_type_w_subtype)r   r-   r4   r4   r5   _render_ARRAY_typeI  s    r
  c                 C  sd   t | \}}t||dd}|d ur,|dus0J t|D ]&}|| }|dt||dd|f 7 }q8|S )NT)r   Fz.with_variant(%s, %r))r   Z_get_variant_mappingr   rJ   )r   r-   Z	base_typeZvariant_mappingbasedialecttypr4   r4   r5   r  R  s    
r  z$Union[Optional[str], Literal[False]])r   r-   attrnameregexprd   r/   c                 C  s   t | }t| |d }|d u r dS t |}tdd|}tt| ||}t|| d| |}	|rld||	f S t| j}
|
drtd|
}|d usJ |	d}d	||	f S |
d
rt
|}d||	f S d S d S )NFz([\(\)])z\\\1z\1%sz%s%sr   r   r   %s.%s
sqlalchemy)r   r   r<   r?   r   r   r   r   r  r  r   )r   r-   r  r  rd   Z
outer_reprZ
inner_typeZ
inner_reprZsub_typeZ
outer_typer  r  r  r4   r4   r5   r	  a  s(    



r	  r   zOptional[MetaData])r   r-   namespace_metadatar/   c                 C  sH   zt | }W n( ty6   td|   d|   Y S 0 || ||S d S )Nz(No renderer is established for object %rz[Unknown Python object %r])_constraint_renderersrW   
ValueErrorr   warn)r   r-   r  rX   r4   r4   r5   rt     s    rt   r"   c                 C  sx   t d| |}|dur|S | js"d S g }| jrF|dtt|| jf dt|ddd | jD dd |D  d	 S )
NZprimary_keyFr.   z(%(prefix)sPrimaryKeyConstraint(%(args)s)ry   c                 S  s   g | ]}t |jqS r4   )r   r.   )ro   cr4   r4   r5   rq     r|   z'_render_primary_key.<locals>.<listcomp>c                 S  s   g | ]\}}d ||f qS r   r4   r   r4   r4   r5   rq     r|   r   )r   r}   r.   r^   r   r6   r   rI   r   r-   r  r   r\   r4   r4   r5   _render_primary_key  s$    r  r   r!   )fkmetadata_schemar  r/   c           	      C  s   |   }|d}|dd \}}|durDt|dkrDd||f }nd|dd }| js| jdur| jjdur||jv r|j| j	|}|durt
|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   r  r   )Z_get_colspecsplitr   rI   Zlink_to_nameparentr   Ztablesr  r]   r   r.   )	r  r  r  Zcolspectokensre   ZcolnameZtable_fullnamerp   r4   r4   r5   _fk_colspec  s$    	

	

r!  r   zList[Tuple[str, str]])r   r\   r/   c                 C  s   | j r|dt| j f | jr4|dt| jf | jrN|dt| jf | jrh|dt| jf | jr|dt| jf d S )Nr   r   r   r   r   )r   r^   r   r   r   r   r   )r   r\   r4   r4   r5   _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 )NZforeign_keyFr.   zC%(prefix)sForeignKeyConstraint([%(cols)s], [%(refcols)s], %(args)s)ry   c                 s  s$   | ]}d t td|jj V  qdS )rb   r   N)r   r   r  r.   ro   fr4   r4   r5   r{     s   z&_render_foreign_key.<locals>.<genexpr>c                 3  s   | ]}t t| V  qd S r0   )r   r!  r#  Zapply_metadata_schemar  r4   r5   r{      s   c                 S  s   g | ]\}}d ||f qS r   r4   r   r4   r4   r5   rq     r|   z'_render_foreign_key.<locals>.<listcomp>)rd   colsZrefcolsrv   )
r   r.   r^   r   r6   r"  r   r   rI   elementsr  r4   r%  r5   _render_foreign_key  s0    

r(  c                 C  s$   t d| |}|dur|S t| |dS )Nr   F)r   r   )r   r-   r  r   r4   r4   r5   _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rb|dt	t
|| jf dt||rdddd |D  nd	t| j|dd
d S )NcheckFr   r.   z.%(prefix)sCheckConstraint(%(sqltext)s%(opts)s)ry   c                 s  s   | ]\}}d ||f V  qdS r   r4   r   r4   r4   r5   r{   8  r|   z+_render_check_constraint.<locals>.<genexpr>r;   r   )rd   r\   r   )r   Z_create_ruler   r1   r   sqltypesr%   r.   r^   r   r6   r   rI   r   r   r  r4   r4   r5   _render_check_constraint  s:    
r,  z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))r1   r   r7   r   rY   r4   r4   r5   _execute_sqlA  s
    r-  )TF)T)F)N)
__future__r   collectionsr   ior   r<   typingr   r   r   r   r	   r
   r   r   Z
mako.pygenr   r  r   r   r   r   r+  Zsqlalchemy.sql.elementsr   r   r;   r   
operationsr   r   r   r   r   Zsqlalchemy.sql.schemar   r   r   r   r   r   r    r!   r"   r#   Zsqlalchemy.sql.sqltypesr$   Zsqlalchemy.sql.type_apir%   Zalembic.autogenerate.apir&   Zalembic.configr'   Zalembic.operations.opsr(   r)   Zalembic.util.sqla_compatr*   r+   r   r6   rA   rK   Z
DispatcherZdefault_renderersrV   rH   rN   rZ   Zdispatch_forra   ZCreateTableCommentOprl   ZDropTableCommentOprm   ZCreateTableOpr   ZDropTableOpr   ZCreateIndexOpr   ZDropIndexOpr   ZCreateUniqueConstraintOpr   ZCreateForeignKeyOpr   ZCreatePrimaryKeyOpr   ZCreateCheckConstraintOpr   ZDropConstraintOpr   ZAddColumnOpr   ZDropColumnOpr   ZAlterColumnOpr   r2   r   r   r   r   r   r   r3   r   rr   r   r   r   r   r   r   r
  r  r	  r  rt   r  r!  r"  r(  r)  r,  ZExecuteSQLOpr-  branchr4   r4   r4   r5   <module>   s   




1

,
"

&







=	  '8	  ,	 "
%
&

(
	