U
    ^g%i­  ã                   @   s8  d dl 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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k	r¨e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¡ qÊejd jZdd„ Zdd„ Zdd„ Zdd„ Z e	 !¡ r$eƒ  ne  "¡  #e ƒ ¡ dS )é    N)Ú
fileConfig)ÚMetaData)Úcurrent_app)ÚcontextFzalembic.envc              	   C   sH   zt jd jj| dW S  ttfk
rB   t jd jj | ¡ Y S X d S )NÚmigrate)Úbind)r   Ú
extensionsÚdbÚ
get_engineÚ	TypeErrorÚAttributeErrorÚenginesÚget©Úbind_key© r   úk/var/www/html/api-medvista/venv/lib/python3.8/site-packages/flask_migrate/templates/aioflask-multidb/env.pyr
      s    r
   c                 C   sL   zt | ƒjjdd dd¡W S  tk
rF   tt | ƒjƒ dd¡ Y S X d S )NF)Zhide_passwordú%z%%)r
   ÚurlZrender_as_stringÚreplacer   Ústrr   r   r   r   Úget_engine_url   s    
ÿ ÿr   úsqlalchemy.urlZ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r2| 	|¡ q2|S )zReturn the metadata for a bind.Ú NÚ	metadatasr   )
ÚhasattrÚ	target_dbr   r   ÚmetadataZtablesÚvaluesÚinfor   Z
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 d|pXd ¡ d| }t d| ¡ t|dƒ@}t j	|d |t
|ƒd	d
 t  ¡  t j|d W 5 Q R X W 5 Q R X qDd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   Zoutput_bufferÚtarget_metadataZliteral_binds©Zengine_nameN)r   ÚconfigZget_main_optionr   Zget_section_optionÚitemsÚloggerr    ÚopenÚ	configurer#   Zbegin_transactionÚrun_migrations)r   ÚnameÚrecÚfile_Úbufferr   r   r   Úrun_migrations_offlineO   s*     
ÿÿü
r3   c              	   C   sX  dd„ }t jd j}| d¡d kr*||d< | ¡ D ]:\}}|d  ¡  |d< }tr`| ¡ |d< q2| ¡ |d< q2zÆz–| ¡ D ]P\}}t d|pŽd	 ¡ tjf |d d
| d| t|ƒdœ|—Ž tj|d qztrê| 	¡ D ]}|d  ¡  qØ| 	¡ D ]}|d  ¡  qòW n*   | 	¡ D ]}|d  ¡  q‚ Y nX W 5 | 	¡ D ]}|d  
¡  q>X d S )Nc                 S   sf   t tjddƒrb|d }t|jƒttƒd krbd}|jD ]}| ¡ s6d}q6|rbg |d d …< t d¡ d S )NZautogenerateFr   é   TzNo changes in schema detected.)	Úgetattrr)   Úcmd_optsÚlenZupgrade_ops_listr   Zis_emptyr+   r    )r   ÚrevisionZ
directivesÚscriptÚemptyZupgrade_opsr   r   r   Úprocess_revision_directivesz   s    
z6do_run_migrations.<locals>.process_revision_directivesr   r;   Ú
connectionZsync_connectionZtransactionr$   r%   z%s_upgradesz%s_downgrades)r<   Zupgrade_tokenZdowngrade_tokenr'   r(   )r   r   Zconfigure_argsr   r*   Z_sync_connectionÚUSE_TWOPHASEZbegin_twophaseÚbeginr   Úcloser+   r    r   r-   r#   r.   ÚprepareÚcommitÚrollback)Ú_r   r;   Z	conf_argsr/   r0   Úconnr   r   r   Údo_run_migrationsv   s@    üûrE   c                  Ã   s    ddt ƒ ii} tD ]}i  | |< }t |d|d< q|  ¡ D ]&\}}|d }| ¡  ¡ I dH |d< q:| d d  t| ¡I dH  |  ¡ D ]}|d  ¡ I dH  q„dS )z‰Run migrations in 'online' mode.

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

    r   Úenginer   Nr<   )	r
   r   r*   ÚconnectÚstartZrun_syncrE   r   r?   )r   r/   r0   rF   r   r   r   Úrun_migrations_online¬   s     ÿrI   )N)N)$ÚasyncioÚloggingÚlogging.configr   Z
sqlalchemyr   Zflaskr   Úalembicr   r=   r)   Zconfig_file_nameÚ	getLoggerr+   r
   r   Zset_main_optionr   r   ÚlistÚkeysr5   r   r	   Zget_bind_namesr   Zset_section_optionr   r#   r3   rE   rI   Zis_offline_modeÚget_event_loopÚrun_until_completer   r   r   r   Ú<module>   sF   


	
 ÿ  ÿ	'6
