o
    ‹åg.  ã                   @   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 ¡ rŠeƒ  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   úe/var/www/html/flaskapp/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
  ¡  q”W n   | ¡ D ]}|d
  ¡  q¦‚ W | ¡ D ]}|d	  ¡  qµdS | ¡ D ]}|d	  ¡  qÄw )z‰Run 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

