o
    If.                     @   s  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Z	ej
Z
ee
j e dZddd	Zdd
dZe
de  g Zej
ddurPeej
d  Zneejd jddZer_e ZeD ]Zej
edeed qaejd jZdd Zdd Zdd Ze re  dS e  dS )    N)
fileConfig)MetaData)current_app)contextFzalembic.envc              	   C   sB   zt jd jj| dW S  ttfy    t jd jj|  Y S w )Nmigrate)bind)r   
extensionsdb
get_engine	TypeErrorAttributeErrorenginesgetbind_key r   b/home/ubuntu/webapp/venv/lib/python3.10/site-packages/flask_migrate/templates/flask-multidb/env.pyr
      s
   r
   c                 C   sF   zt | jjddddW S  ty"   tt | jdd Y S w )NF)hide_password%z%%)r
   urlrender_as_stringreplacer   strr   r   r   r   get_engine_url   s   
r   sqlalchemy.urlSQLALCHEMY_BINDSr   
bind_namesr   c                 C   sV   | dkrd} t tdrtj|  S t }tjj D ]}|jd| kr(|	| q|S )zReturn the metadata for a bind. N	metadatasr   )
hasattr	target_dbr   r   metadatatablesvaluesinfor   
tometadata)r   mtr   r   r   get_metadata>   s   


r(   c               
   C   s   ddt jdii} tD ]}i  | |< }t j|d|d< q|  D ]T\}}td|p,d  d| }td|  t|d/}t j	|d |t
|d	d
 t   t j|d W d   n1 sbw   Y  W d   n1 sqw   Y  q"dS )aF  Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.

    r   r   r   Migrating database %s	<default>z%s.sqlzWriting output to %swT)r   output_buffertarget_metadataliteral_bindsengine_nameN)r   configget_main_optionr   get_section_optionitemsloggerr$   open	configurer(   begin_transactionrun_migrations)r   namerecfile_bufferr   r   r   run_migrations_offlineM   s2   
r>   c               	   C   s  dd } t jd j}|ddu r| |d< ddt ii}tD ]}i  ||< }t|d|d< q| D ]\}}|d }|  |d	< }trK|	 |d
< q2|
 |d
< q2zmzK| D ](\}}td|pbd  tjd|d	 d| d| t|d| tj|d qXtr| D ]}|d
   q| D ]}|d
   qW n   | D ]}|d
   q W | D ]}|d	   qdS | D ]}|d	   qw )zRun migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    c                 S   sr   t tjddr3|d }t|jttd kr5d}|jD ]}| s#d}q|r7g |d d < td d S d S d S d S )NautogenerateFr      TzNo changes in schema detected.)	getattrr1   cmd_optslenupgrade_ops_listr   is_emptyr5   r$   )r   revision
directivesscriptemptyupgrade_opsr   r   r   process_revision_directives   s   
z:run_migrations_online.<locals>.process_revision_directivesr   rK   Nr   enginer   
connectiontransactionr)   r*   z%s_upgradesz%s_downgrades)rM   upgrade_tokendowngrade_tokenr-   r/   r   )r   r   configure_argsr   r
   r   r4   connectUSE_TWOPHASEbegin_twophasebeginr5   r$   r   r7   r(   r9   r#   preparecommitrollbackclose)rK   	conf_argsr   r:   r;   rL   connr   r   r   run_migrations_onlinet   sV   
r\   )N) logginglogging.configr   
sqlalchemyr   flaskr   alembicr   rS   r1   config_file_name	getLoggerr5   r
   r   set_main_optionr   r   listkeysrA   r   r	   get_bind_namesr   set_section_optionr    r(   r>   r\   is_offline_moder   r   r   r   <module>   s>    



	'H

