o
    ‹åg­  ã                   @   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urTeejd  ¡ ƒZneejd jddƒZerceƒ ZeD ]Ze	j edeed�¡ qeejd jZdd„ Zdd„ Zdd„ Zdd„ Z e	 !¡ r’eƒ  dS e  "¡  #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   úh/var/www/html/flaskapp/venv/lib/python3.10/site-packages/flask_migrate/templates/aioflask-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_offlineO   s2   ÿÿü
ÿ€ù€ür>   c              	   C   sf  dd„ }t jd j}| d¡d u r||d< | ¡ D ]\}}|d  ¡  |d< }tr0| ¡ |d< q| ¡ |d< qzmzK| ¡ D ](\}}t	 
d|pGd	 ¡ tjd|d d
| d| t|ƒdœ|¤Ž tj|d� q=tru| ¡ D ]}|d  ¡  ql| ¡ D ]}|d  ¡  qyW n   | ¡ D ]}|d  ¡  q‹‚ W | ¡ D ]}|d  ¡  qšd S | ¡ D ]}|d  ¡  q©w )Nc                 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_directivesz   s   
€÷z6do_run_migrations.<locals>.process_revision_directivesr   rK   Ú
connectionÚsync_connectionÚtransactionr)   r*   z%s_upgradesz%s_downgrades)rL   Úupgrade_tokenÚdowngrade_tokenr-   r/   r   )r   r   Úconfigure_argsr   r4   Ú_sync_connectionÚUSE_TWOPHASEÚbegin_twophaseÚbeginr5   r$   r   r7   r(   r9   r#   ÚprepareÚcommitÚrollbackÚclose)Ú_r   rK   Ú	conf_argsr:   r;   Úconnr   r   r   Údo_run_migrationsv   sJ   üûÿûÿÿr]   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  qCd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   NrL   )	r
   r   r4   ÚconnectÚstartÚrun_syncr]   r#   rY   )r   r:   r;   r^   r   r   r   Úrun_migrations_online¬   s   €
ÿÿrb   )N)$ÚasyncioÚ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]   rb   Úis_offline_modeÚget_event_loopÚrun_until_completer   r   r   r   Ú<module>   sB    



	ÿÿ	'6
