o
    8cAx                     @   s^  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Zzd dlmZ dd ZW n eya   dd ZY nw dd Zdd Ze  ZZdd Zdd Zdd Z e!ej"dd Z#e!ej$dd  Z%e!ej&d!d" Z'e!ej(d#d$ Z)e!ej*d%d& Z+e!ej,d'd( Z-e!ej.d)d* Z/e!ej0d+d, Z1e!ej2d-d. Z3e!ej4d/d0 Z5e!ej6d1d2 Z7e!ej8d3d4 Z9e!ej:d5d6 Z;e!ej<d7d8 Z=e!ej>d9d: Z?G d;d< d<e@ZAd=d> ZB	@dsdAdBZCdCdD ZDdEdF ZEdGdH ZFdIdJ ZGdKdL ZHdMdN ZIdOdP ZJdQdR ZKdtdSdTZLdUdV ZMdWdX ZNdYdZ ZOd[d\ ZPd]d^ ZQd_d` ZR	dudadbZSe ZTdcdd ZUeT!ejVdedf ZWdgdh ZXdidj ZYeT!ejZdkdl Z[eT!ej\dmdn Z]eT!ej^dodp Z_e!ej`dqdr Zaeb ZdS )v    )OrderedDictN)PythonPrinter)schema)sql)types   )util)ops)compat)sqla_compat)string_types)StringIO   )convc                 C   s   t |trtt| |S |S N)
isinstancer   _f_name_alembic_autogenerate_prefixautogen_contextname r   Q/var/www/html/gps/gps/lib/python3.10/site-packages/alembic/autogenerate/render.py_render_gen_name   s   
r   c                 C   s   |S r   r   r   r   r   r   r      s   c                 C   s4   t dt jd|  } t dt jd| } | S )N^    z +$ )recompileMsubstrip)textr   r   r   _indent#   s   r#   c                 C   s\   | j }t|j|jD ]\}}tt|| ||j< tt|| ||j< q
dt	||d< d S )N
imports)
r%   zipupgrade_ops_listdowngrade_ops_listr#   _render_cmd_bodyupgrade_tokendowngrade_tokenjoinsorted)r   migration_scripttemplate_argsr%   upgrade_opsdowngrade_opsr   r   r    _render_python_into_templatevars)   s   
r2   c                 C   sn   t  }t|}|d d}| jD ]}t||}|p|}|D ]}|| qq|s.|d |d | S )Nz=# ### commands auto generated by Alembic - please adjust! ###Fpassz# ### end Alembic commands ###)r   r   	writeliner	   	render_opgetvalue)op_containerr   bufprinter	has_linesoplinesliner   r   r   r)   =   s    



r)   c                 C   s   t |}t|| |}|S r   )	renderersdispatchr   to_list)r   r;   rendererr<   r   r   r   r5   V   s   
r5   c                 C   s   d t| |S )Nr$   )r,   r5   r   r;   r   r   r   render_op_text\   s   rC   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   r5   extend)r   r;   rE   rD   r<   t_opt_linesr   r   r   _render_modify_table`   s0   






rM   c                 C   sb   d}|j t| |j|jd urd|j nd |jd urd|j nd |jd ur,d|j ddS 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)formatr   rI   rR   existing_commentr   r   r;   templr   r   r   _render_create_table_comment{   s   rY   c                 C   sL   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 )Nzm{prefix}drop_table_comment(
{indent}'{tname}',
{indent}existing_comment={existing},
{indent}schema={schema}
)rN   rO   r   )rP   rQ   rS   r   rT   )rU   r   rI   rV   r   rW   r   r   r   _render_drop_table_comment   s   rZ   c                    s"    }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 }tjD ]}|d|ddj| f 7 }qe|jrddd |jD }|d| 7 }|d7 }|S )Nc                 S   s   g | ]}|r|qS r   r   .0colr   r   r   
<listcomp>   s    z_add_table.<locals>.<listcomp>c                    s   g | ]}t | qS r   )_render_columnr[   r   r   r   r^      s    
c                 S   s   g | ]}|d ur|qS r   r   )r\   rconsr   r   r   r^      s    c                    s   g | ]	}t | jqS r   )_render_constraint_namespace_metadata)r\   consrB   r   r   r^      s    z*[z,
]z.%(prefix)screate_table(%(tablename)r,
%(args)s)	tablenamerP   argsz,
schema=%rz,
comment=%rz,
%s=%r _, c                 s       | ]}d | V  qdS )rO   Nr   )r\   pr   r   r   	<genexpr>       z_add_table.<locals>.<genexpr>z,
prefixes=[%s]z
))to_tablecolumnsr-   constraintslenMAX_PYTHON_ARGSr,   _identrI   r   r   rR   kwreplace	_prefixes)r   r;   tablerg   r"   rR   kprefixesr   rB   r   
_add_table   sD   

 r{   c                 C   s<   dt | t|jd }|jr|dt|j 7 }|d7 }|S )Nz%(prefix)sdrop_table(%(tname)r)rP   rQ   , schema=%r))r   rt   rI   r   )r   r;   r"   r   r   r   _drop_table   s   r~   c                    s   |  } j}|rd}nd}|t t |jt|jjdt| |j	p'd|jj
r3dt|jj
 ndt|jrJd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)rj   Fr|   r   c                    "   g | ]\}}d |t | f qS %s=%s_render_potential_exprr\   keyvalr`   r   r   r^         z_add_index.<locals>.<listcomp>)rP   r   rx   rp   uniquer   kwargs)to_index
_has_batchr   r   r   rt   rx   r,   _get_index_rendered_expressionsr   r   rr   r   itemsr   r;   index	has_batchtmplr"   r   r`   r   
_add_index   s<   



r   c                    s   |  } j}|rd}nd}|t t |jt|j|jr%dt|j ndt|j	r<d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   rj   c                    r   r   r   r   r`   r   r   r^   '  r   z_drop_index.<locals>.<listcomp>)rP   r   rI   r   r   )r   r   r   r   
index_namert   rI   r   rr   r   r,   r   r   r   r`   r   _drop_index  s.   


r   c                 C   s   t | | dgS )NT)_uq_constraintto_constraintrB   r   r   r   _add_unique_constraint4  s   r   c                 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 r   rt   r[   r   r   r   r^   C      z&_add_fk_constraint.<locals>.<listcomp>c                 S   r   r   r   r[   r   r   r   r^   D  r   )referent_schemaonupdateondelete	initially
deferrable	use_alterr   source_schema%s=%rz&%(prefix)screate_foreign_key(%(args)s)rj   rP   rg   )reprr   constraint_namer   rH   rt   source_tablerJ   referent_table
local_colsremote_colsinsertru   r   r,   )r   r;   rg   r   ry   valuer   r   r   _add_fk_constraint9  s,   

r   c                 C      t  r   NotImplementedError
constraintr   r   r   r   _add_pk_constraint^     r   c                 C   r   r   r   r   r   r   r   _add_check_constraintc  r   r   c                 C   sP   | j rd}nd}|t| t| |jt|j|j|jr!d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   )rP   r   rI   typer   )r   r   r   r   rt   rI   constraint_typer   )r   r;   templater"   r   r   r   _drop_constrainth  s   
r   c                 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}   )rP   rQ   columnr   )r   rI   r   r   r   r_   )r   r;   r   rQ   r   r   r"   r   r   r   _add_column}  s   r   c                 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}   )rP   rQ   cnamer   )r   rI   column_namer   r   rt   )r   r;   r   rQ   r   r   r"   r   r   r   _drop_column  s   r   c                 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|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)rP   rQ   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}   )rI   r   modify_server_defaultmodify_typemodify_nullablemodify_commentru   rF   existing_typeexisting_nullablerV   existing_server_defaultr   r   r   
_repr_type_render_server_default)r   r;   rQ   r   server_defaulttype_nullablerR   r   r   r   rV   r   r   rT   r   r"   renderedr   r   r   _alter_column  sd   

r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   || _ || _d S r   )rP   r   )selfrP   r   r   r   r   __init__  s   
z_f_name.__init__c                 C   s   d| j t| jf S )Nz%sf(%r))rP   rt   r   )r   r   r   r   __repr__  s   z_f_name.__repr__N)__name__
__module____qualname__r   r   r   r   r   r   r     s    r   c                 C   sh   | du r| S t | tjjr*tjr%z| dW S  ty$   t|  Y S w t| S t | tj	r2| 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ascii)
r   r   elementsquoted_namer
   py2kencodeUnicodeError	text_typer   )r   r   r   r   rt     s   
rt   TFc                 C   sB   t | tjr|rd}nd}|t||jjj| |dd S t| S )Nz%(prefix)stext(%(sql)r)z%(sql)ris_server_default)rP   r   )r   r   ClauseElement_sqlalchemy_autogenerate_prefixmigration_contextimplrender_ddl_sql_exprr   )r   r   wrap_in_textr   r   r   r   r   r     s   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)r   	sa_schemaColumnr   rt   getattrr   )r\   expr`   r   r   r^     s    
z3_get_index_rendered_expressions.<locals>.<listcomp>)expressions)idxr   r   r`   r   r     s   
r   c                 C   s6  g }|j }| jr|dt| jf | jr|dt| jf |s2|r2| jjr2|dt| jjf |sB| jrB|dt	|| jf |r}t
t	|| jg}|sZ|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 r   )rt   r   r[   r   r   r   r^   8      z"_uq_constraint.<locals>.<listcomp>c                 S      g | ]
\}}d ||f qS r   r   r\   ry   vr   r   r   r^   9      z,%(prefix)screate_unique_constraint(%(args)s)rj   r   c                 S   s   g | ]	}t t|jqS r   )r   rt   r   r[   r   r   r   r^   ?  s    c                 S   r   r   r   r   r   r   r   r^   @  r   z$%(prefix)sUniqueConstraint(%(args)s))r   r   rH   strr   rx   r   rt   r   r   r   rp   rJ   r   r,   r   )r   r   alterrE   r   rg   r   r   r   r   $  s8   
r   c                 C   s    | j d }|d u rd|j S |S )Nuser_module_prefixz%s.)rE   r   )r   targetrP   r   r   r   _user_autogenerate_prefixG  s   

r   c                 C   s   | j d pdS )Nsqlalchemy_module_prefixr   rE   r`   r   r   r   r   O  s   r   c                 C   s   | j rdS | jd pdS )Nz	batch_op.alembic_module_prefixr   )r   rE   r`   r   r   r   r   S  s   r   c                 C   s4   d|j v r|j d }|r|| ||}|dur|S dS )Nrender_itemFr   )r   object_r   renderr   r   r   r   _user_defined_renderZ  s   

r   c                    s:  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t|  D  d S )Nr   Fr   r   r   systemrR   rN   z8%(prefix)sColumn(%(name)r, %(type)s, %(args)s%(kwargs)s)rj   c                 S   r   r   )r   )r\   argr   r   r   r^     r   z"_render_column.<locals>.<listcomp>r   c                 S   r   r   r   r\   kwnamer   r   r   r   r^     r   c                    r   r   r   r   r`   r   r   r^     r   )rP   r   r   rg   r   )r   r   r   *_should_render_server_default_positionallyrH   r   r   AUTOINCREMENT_DEFAULTr   r   rR   r   rt   r   r   r   r,   _column_kwargsr   )r   r   r   rg   rE   rR   r   r`   r   r_   d  sP   



r_   c                 C   s   t | p	t | S r   )r   _server_default_is_computed_server_default_is_identity)r   r   r   r   r     s
   r   c                 C   s   t d| |}|dur|S t| rt| |S t| r t| |S t| tjr9t| j	t
jr1| j	} nt| j	|ddS t| trI|rIttdd| } | S )Nr   FTr   z^'|'$r   )r   r   r  _render_computedr  _render_identityr   r   DefaultClauser   r
   r   r   r   r   r    )defaultr   repr_r   r   r   r   r     s    



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)rj   c                 s   rk   r   Nr   r\   pairr   r   r   rm     rn   z#_render_computed.<locals>.<genexpr>)rP   r"   r   )r   sqltextr  r   r,   r   )computedr   r"   r   r   r   r   r    s   

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)rj   c                 s   rk   r  r   r  r   r   r   rm     rn   z#_render_identity.<locals>.<genexpr>)rP   r   )r   r  r  update_get_identity_optionsr   r,   r   )identityr   r   r   r   r   r    s   

r  c                 C   s2   t  }tjD ]}t| |d }|d ur|||< q|S r   )r   r   _identity_options_attrsr   )identity_optionsr   attrr   r   r   r   r    s   
r  c           	      C   s  t d| |}|dur|S t|jdr|jj| |}nd }t| j}|j}|drHt	
d|d}|d ur>|d|  |rB|S d|| f S |rL|S |d	r|t| tju r]t| |S d
| j t v rrt 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)r   hasattrr   r   render_typer   r   r%   
startswithr   matchgroupaddsqltypesVariant_render_Variant_type__visit_name__globalsr   r   )	r   r   r   impl_rtmodr%   dnamefnrP   r   r   r   r     s:   





r   c                 C   s   t | |ddS )N	item_typez(.+?\())_render_type_w_subtype)r   r   r   r   r   _render_ARRAY_type  s   r-  c                 C   s@   t | j|}t| jD ]}| j| }|dt |||f 7 }q|S )Nz.with_variant(%s, %r))r   r   r-   mapping)r   r   basedialecttypr   r   r   r$  
  s   

r$  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rOtd|
	d}d	||	f S |
d
r^t
|}d||	f 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   attrnameregexprP   
outer_repr
inner_type
inner_reprsub_type
outer_typer(  r)  r   r   r   r,    s$   


r,  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_renderersr?   
ValueErrorr   warn)r   r   namespace_metadatarA   r   r   r   rb   4  s   rb   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)rj   c                 S   r   r   )r   r   )r\   cr   r   r   r^   O  r   z'_render_primary_key.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r^   P  r   r   )r   rp   r   rH   r   r   r   r,   r   r   r>  r   rE   r   r   r   _render_primary_key>  s$   rB  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   r2  r   )_get_colspecsplitrr   r,   link_to_nameparentrx   tablesr@  rF   rt   r   )	fkmetadata_schemar>  colspectokensrQ   colnametable_fullnamer]   r   r   r   _fk_colspecU  s$   


	
rQ  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rC|dt| jf d S d S )Nr   r   r   r   r   )r   rH   r   r   r   r   r   )r   rE   r   r   r   _populate_render_fk_optsv  s   rR  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)rj   c                 s   s     | ]}d t |jj V  qdS )rN   N)rt   rI  r   r\   fr   r   r   rm     s    
z&_render_foreign_key.<locals>.<genexpr>c                 3   s     | ]}t t| V  qd S r   )r   rQ  rT  apply_metadata_schemar>  r   r   rm     s
    
c                 S   r   r   r   r   r   r   r   r^     r   z'_render_foreign_key.<locals>.<listcomp>)rP   colsrefcolsrg   )
r   r   rH   r   r   rR  r   r   r,   r   rA  r   rV  r   _render_foreign_key  s0   

rZ  c                 C   s$   t d| |}|dur|S t| |dS )Nr   F)r   r   )r   r   r>  r   r   r   r   _render_unique_constraint  s   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)rj   c                 s   s     | ]\}}d ||f V  qdS r  r   r   r   r   r   rm     s    z+_render_check_constraint.<locals>.<genexpr>r   r
  )rP   rE   r  )r   _create_ruler  r   r   r"  
TypeEnginer   rH   r   r   r   r,   r   r  rA  r   r   r   _render_check_constraint  s0   
r_  c                 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))r   r  r   r   rB   r   r   r   _execute_sql  s
   
r`  )TF)Tr   )ccollectionsr   r   
mako.pygenr   r3  r   r   r   r   r"  r   r   
operationsr	   r
   r   util.compatr   r   rs   sqlalchemy.sql.namingr   r   ImportErrorr#   r2   
Dispatcherdefault_renderersr>   r)   r5   rC   dispatch_forModifyTableOpsrM   CreateTableCommentOprY   DropTableCommentOprZ   CreateTableOpr{   DropTableOpr~   CreateIndexOpr   DropIndexOpr   CreateUniqueConstraintOpr   CreateForeignKeyOpr   CreatePrimaryKeyOpr   CreateCheckConstraintOpr   DropConstraintOpr   AddColumnOpr   DropColumnOpr   AlterColumnOpr   objectr   rt   r   r   r   r   r   r   r   r_   r   r   r  r  r  r   r-  r$  r,  r;  rb   PrimaryKeyConstraintrB  rQ  rR  ForeignKeyConstraintrZ  UniqueConstraintr[  CheckConstraintr_  ExecuteSQLOpr`  branchr   r   r   r   <module>   s    








1



+

"



$










;	
	#
8
	&



!


!




	