o
    8 h                     @  s8  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 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&m0Z0 d d'l1m2Z2 d d(l3m4Z4 d d)l5m6Z6 d d*l7m8Z8 d d+l9m:Z: d d,l9m;Z; d-Z<dd4d5Z=dd8d9Z>dd?d@Z?e@  ZAZBddCdDZCddHdIZDddJdKZEeBFej;ddMdNZGeBFejHddPdQZIeBFejJddSdTZKeBFejLddVdWZMeBFejNddYdZZOdd^d_ZPeBFejQddadbZReBFejSddddeZTeBFejUddgdhZVeBFejWddjdkZXeBFejYdldm ZZeBFej[dndo Z\eBFej]ddqdrZ^eBFej_ddtduZ`eBFejaddwdxZbeBFejcddzd{ZdG d|d} d}ZedddZfdddddddZgdddZhdddZidd ZjdddZkdddZldddZmdddZndddZo	ddddZpd ddZqdddZrdddZs	ddddZtdddZudddZv	ddddńZwe@ ZxdddʄZyexFej/d	dd̈́Zzd
dd҄Z{dddׄZ|exFej,dddلZ}exFej0dddۄZ~exFej'dddބZeBFejdddZeA ZBdS (      )annotations)StringION)Any)cast)Dict)List)Optional)Tuple)TYPE_CHECKING)Union)PythonPrinter)schema)sql)types)_DialectArgView)conv)Label)quoted_name   )util)ops)sqla_compat)Literal)Computed)Identity)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   c/var/www/html/figdemos/bartoux_crm/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printerZ	has_linesoplinesliner8   r8   r9   rO   a   s    



rO   r`   ops.MigrateOperation	List[str]c                 C  s   t |}t|| |}|S r3   )	renderersdispatchr   to_list)r.   r`   rendererra   r8   r8   r9   r[   |   s   
r[   c                 C  s   d t| |S )NrJ   )rR   r[   r.   r`   r8   r8   r9   render_op_text   s   rj   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.   r`   rl   rk   ra   Zt_opZt_linesr8   r8   r9   _render_modify_table   s0   






rr   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   rp   rx   existing_commentr   r.   r`   Z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}
)rt   ru   r>   )rv   rw   ry   r   rz   )r{   r|   r6   rp   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rd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   Zrconsr8   r8   r9   r      s
    c                   s   g | ]	}t | jqS r8   )_render_constraint_namespace_metadata)r   consri   r8   r9   r      s    z*[z,
]z.%(prefix)screate_table(%(tablename)r,
%(args)s)	tablenamerv   argsz,
schema=%rz,
comment=%rz,
info=z,
%s=%r _, c                 s      | ]}d | V  qdS )ru   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   _identrp   r6   r   rx   infokwreplace	_prefixesif_not_existsr\   )
r.   r`   tabler   args_strr;   rx   r   kprefixesr8   ri   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)rv   rw   , schema=%rz, if_exists=%r))r6   r   rp   r   	if_existsr\   )r.   r`   r;   r8   r8   r9   _drop_table"  s   
r   dialect_kwargsr   	list[str]c                   s    fdd|  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>)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}|jd ur*|dt|j  |t| t	| |j
t|jj
dt|| |jpCd|jjrOdt|jj nd|rYd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?   )rv   r/   r   r   uniquer   kwargs)to_indexr{   r   r   r   r   ro   r\   r6   r:   r/   r   rR   _get_index_rendered_expressionsr   r   r.   r`   index	has_batchtmplrl   r;   r8   r8   r9   
_add_index;  s2   


r   ops.DropIndexOpc              	   C  s   |  }| j}|rd}nd}t| |j}|jd ur#|dt|j  |t| t| |j	t
|j|jr:dt
|j nd|rDd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   )rv   r/   rp   r   r   )r   r{   r   r   r   ro   r\   r6   r:   
index_namer   rp   r   rR   r   r8   r8   r9   _drop_indexc  s"   

r   ops.CreateUniqueConstraintOpc                 C  s   t | | dgS )NT)_uq_constraintto_constraintri   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sD|dd |D ]}||jv r_|j| }|d ur_|d||f  qFt| |j}dt| d	||rzd	d	| d S 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=%rz8%(prefix)screate_foreign_key(%(args)s%(dialect_kwargs)s)r   r?   )rv   r   r   )r   reprr:   constraint_namer{   ro   r   source_tablerq   referent_table
local_colsremote_colsinsertr   r   r   r6   rR   )r.   r`   
constraintr   r   r   valuer   r8   r8   r9   _add_fk_constraint  s:   	

r   c                 C     t  r3   NotImplementedErrorr   r.   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 }|j}g }|t| | j	sC|tt|j
 |d urC|d| |d urO|d| |d ur[|d|  | dd| dS )Nzschema=ztype_=z
if_exists=zdrop_constraint(r   r   )r6   r:   r   r   r   constraint_typer   ro   r   r{   rp   rR   )r.   r`   rv   r/   r   type_r   Zparams_strsr8   r8   r9   _drop_constraint  s    r   ops.AddColumnOpc                 C  sr   |j |j|j|jf\}}}}| jrd}nd}|r|d7 }|d u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)rz!, if_not_exists=%(if_not_exists)rr   )rv   rw   columnr   r   )r   rp   r   r   r{   r6   r   )r.   r`   r   rw   r   r   templater;   r8   r8   r9   _add_column  s*   r   ops.DropColumnOpc                 C  sx   |j |j|j|jf\}}}}| jrd}nd}|r|d7 }|d u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   z, if_exists=%(if_exists)rr   )rv   rw   cnamer   r   )r   rp   column_namer   r{   r6   r   )r.   r`   r   rw   r   r   r   r;   r8   r8   r9   _drop_column  s*   r   ops.AlterColumnOpc                 C  s  |j }|j}|j}|j}|j}|j}|j}|jdd }	|j	}
|j
}|j}|j}|j}d}| jr3d}nd}|t| ||d }|
d urN|d|t|
| f 7 }|dur_t|| }|d||f 7 }|d urk|d	||f 7 }|d urz|d
|t|| f 7 }|d ur|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|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)rv   rw   r   z,
%sexisting_type=%sFz,
%sserver_default=%sz,
%snew_column_name=%rz,
%stype_=%sz,
%snullable=%rz,
%scomment=%rz,
%sexisting_comment=%rz,
%sexisting_nullable=%rz,
%sautoincrement=%rz,
%sexisting_server_default=%sz,
%sschema=%rr   )rp   r   modify_server_defaultmodify_typemodify_nullablemodify_commentmodify_namer   rm   existing_typeexisting_nullabler}   existing_server_defaultr   r{   r6   
_repr_type_render_server_default)r.   r`   rw   r   server_defaultr   nullablerx   newnamer   r   r   r}   r   r   rz   r   r;   renderedr8   r8   r9   _alter_column  sj   

r  c                   @  s    e Zd ZdddZdd	d
ZdS )r5   rv   r<   r/   r   r1   rI   c                 C  s   || _ || _d S r3   )rv   r/   )selfrv   r/   r8   r8   r9   __init__M  s   
z_f_name.__init__c                 C  s   d| j t| jf S )Nz%sf(%r))rv   r   r/   )r  r8   r8   r9   __repr__Q  s   z_f_name.__repr__N)rv   r<   r/   r   r1   rI   )r1   r<   )__name__
__module____qualname__r  r  r8   r8   r8   r9   r5   L  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 )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)r4   r   r<   )r/   r8   r8   r9   r   U  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  Zsql_textrv   element	value_strr8   r8   r9   r   e  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     s    
z3_get_index_rendered_expressions.<locals>.<listcomp>)expressions)r  r.   r8   r   r9   r     s   
r   r   r&   alterc                 C  sN  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	|| j
}|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 )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   rv   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   ro   r   r   r   r   r/   r:   r   r   r   r   rq   r6   rR   r  )r   r.   r  rl   r   dialect_optionsr   r8   r8   r9   r     sB   


r   c                 C  s    | j d }|d u rd|j S |S )Nuser_module_prefixz%s.)rl   r  )r.   targetrv   r8   r8   r9   _user_autogenerate_prefix  s   

r(  c                 C  s   | j d pdS )Nsqlalchemy_module_prefixr?   rl   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{   rl   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_itemFr*  )r   r,  r.   renderr   r8   r8   r9   _user_defined_render  s   

r0  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 |rd
dd |D d
 ndd
dd |D  fdd| j D  d S )Nr   Fr   r   r   systemrx   rt   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   Zkwnamer   r8   r8   r9   r   	  r#  c                   s"   g | ]\}}d |t | f qS r4  r   r   r   r8   r9   r   
  s    )rv   r/   r  r   r   )r0  r   r   *_should_render_server_default_positionallyro   r   r   AUTOINCREMENT_DEFAULTr   r2  rx   r  r   r/   r   r  rR   r   r   )r   r.   r   r   rl   rx   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   r7    s
   r7  defaultBOptional[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jrHt|S t| trX|rXttdd| } tt| S )	Nr   Fr   r   T)r  z^'|'$r?   )r0  r   r9  _render_computedr   r:  _render_identityr4   r  DefaultClauser3  r<   r   r    _render_fetched_valuer   r@   rC   )r;  r.   r=  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   r5  Nr8   r   pairr8   r8   r9   r   F  r   z#_render_computed.<locals>.<genexpr>)rv   r;   r   )r   sqltextrD  r  rR   r   )rB  r.   r;   r   r8   r8   r9   r>  9  s   

r>  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   rE  r8   rF  r8   r8   r9   r   S  r   z#_render_identity.<locals>.<genexpr>)rv   r   )r   _get_identity_options_dictr  rR   r   )rI  r.   r   r8   r8   r9   r?  J  s   r?  c                 C  s   ddt | i S )Nz%(prefix)sFetchedValue()rv   )r  r   r8   r8   r9   rA  W  s   rA  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	rd
| 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)r0  hasattrr  r  render_typer  r  rK   r   _type_has_variants_render_Variant_type
startswithr@   r   groupadd__visit_name__globalsr  r(  )r   r.   rK  r   Zimpl_rtmodrK   r   dnamefnrv   r8   r8   r9   r   ]  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_type  s   r]  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)rK  Fz.with_variant(%s, %r))r   _get_variant_mappingr   rS   )r   r.   	base_typevariant_mappingbasedialecttypr8   r8   r9   rR    s   
rR  attrnameregexprv   $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%srL  rM  rN  %s.%s
sqlalchemy)r   r  r@   rC   r   r  r  rS  r   rT  r  )r   r.   rd  re  rv   Z
outer_repr
inner_typeZ
inner_reprZsub_typeZ
outer_typerX  r   rY  r8   r8   r9   r\    s(   



r\  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_renderersrf   
ValueErrorr   warn)r   r.   rj  rh   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  r4  r8   r6  r8   r8   r9   r     r#  r$  )r0  r   r/   ro   r   r:   r  rR   r   r.   rj  r   rl   r8   r8   r9   _render_primary_key  s$   rr  fkr!   metadata_schemac           	      C  s   |   }|d}|dd \}}|dur"t|dkr"d||f }n	d|dd }| jsT| jdurT| jjdurT|durT||jv rT|j| j	|}|durTt
|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   rg  r   )_get_colspecsplitr   rR   link_to_nameparentr   tablesrp  rm   r   r/   )	rs  rt  rj  colspectokensrw   colnameZtable_fullnamer   r8   r8   r9   _fk_colspec  s"   	



r  r"   rl   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   ro   r   r   r   r   r   r   )r   rl   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| | d ur*jnd  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   C  s    
z&_render_foreign_key.<locals>.<genexpr>c                 3  s     | ]}t t| V  qd S r3   )r   r  r  Zapply_metadata_schemarj  r8   r9   r   F  s
    
c                 S  r  r4  r8   r6  r8   r8   r9   r   K  r#  z'_render_foreign_key.<locals>.<listcomp>)rv   colsZrefcolsr   )
r0  r/   ro   r   r:   r  r   r  rR   elementsrq  r8   r  r9   _render_foreign_key)  s2   

r  c                 C  s$   t d| |}|dur|S t| |dS )Nr   F)r0  r   )r   r.   rj  r   r8   r8   r9   _render_unique_constraintQ  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 rE  r8   r!  r8   r8   r9   r   }  s    z+_render_check_constraint.<locals>.<genexpr>r?   rC  )rv   rl   rH  )r0  _create_rulerO  r4   r'  sqltypesr(   r/   ro   r   r:   r  rR   r   rH  rq  r8   r8   r9   _render_check_constraint^  s6   
r  ops.ExecuteSQLOpc                 C  s(   t |jts
tddjt| |jdS )NznAutogenerate rendering of SQL Expression language constructs not supported here; please use a plain SQL stringz{prefix}execute({sqltext!r}))rv   rH  )r4   rH  r<   r   r|   r6   ri   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)   r`   rc   r1   rd   )r.   r)   r`   rc   r1   r<   )r.   r)   r`   r,   r1   rd   )r.   r)   r`   rs   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r   r   r1   r   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   rd   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r.   r)   r`   r   r1   r<   )r/   r  r1   r	  )r   r   r.   r)   r
  r\   r  r\   r  r\   r1   r<   )r  r#   r.   r)   r1   rd   )r   r&   r.   r)   r  r\   r1   r<   )r.   r)   r1   r<   )r   r<   r,  r   r.   r)   r1   r-  )r   r1  r.   r)   r1   r<   )r   r   r1   r\   )T)r;  r<  r.   r)   r=  r\   r1   r	  )rB  r   r.   r)   r1   r<   )rI  r   r.   r)   r1   r<   )F)r   r(   r.   r)   rK  r\   r1   r<   )r   r'   r.   r)   r1   r<   )r   r(   r.   r)   r1   r<   r3   )r   r(   r.   r)   rd  r<   re  r<   rv   r	  r1   rf  )r   r   r.   r)   rj  rk  r1   r	  )r   r%   r.   r)   rj  rk  r1   r	  )rs  r!   rt  r	  rj  rk  r1   r<   )r   r"   rl   r  r1   rI   )r   r"   r.   r)   rj  rk  r1   r	  )r   r&   r.   r)   rj  rk  r1   r<   )r   r   r.   r)   rj  rk  r1   r	  )r.   r)   r`   r  r1   r<   )
__future__r   ior   r@   typingr   r   r   r   r   r	   r
   r   
mako.pygenr   rh  r   r  r   r   r  Zsqlalchemy.sql.baser   sqlalchemy.sql.elementsr   r   r   r?   r   
operationsr   r   r   r   r   r   r   sqlalchemy.sql.schemar   r   r   r    r!   r"   r#   r$   r%   r&   Zsqlalchemy.sql.sqltypesr'   sqlalchemy.sql.type_apir(   Zalembic.autogenerate.apir)   alembic.configr*   Zalembic.operations.opsr+   r,   r   r:   rE   rV   
DispatcherZdefault_renderersre   rO   r[   rj   dispatch_forrr   CreateTableCommentOpr   DropTableCommentOpr   CreateTableOpr   DropTableOpr   r   CreateIndexOpr   DropIndexOpr   CreateUniqueConstraintOpr   CreateForeignKeyOpr   CreatePrimaryKeyOpr   CreateCheckConstraintOpr   DropConstraintOpr   AddColumnOpr   DropColumnOpr   AlterColumnOpr  r5   r   r   r   r   r(  r  r6   r0  r   r7  r   r>  r?  rA  r   r]  rR  r\  rl  r   rr  r  r  r  r  r  ExecuteSQLOpr  branchr8   r8   r8   r9   <module>   s   









!

9

	
'


.






?
	

,




9
	-	"
(

'

(