o
    ‹ågb'  ã                   @   s´  d dl Z d dlmZ d dlZd dlZd dlZd dlmZmZ d dl	m
Z d dlmZ d dl	mZ d dlmZ edd	„ e d
¡d d… D ƒƒZe e¡ZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ Zedd„ ƒZed6dd„ƒZe			d7dd„ƒZe		d8dd„ƒZed9dd „ƒZ e		d:d"d#„ƒZ!ed;d$d%„ƒZ"ed<d'd(„ƒZ#ed=d)d*„ƒZ$e		d>d+d,„ƒZ%ed?d-d.„ƒZ&ed@d/d0„ƒZ'ed@d1d„ƒZ(edAd2d3„ƒZ)edBd4d5„ƒZ*dS )Cé    N©Úwraps)Úcurrent_appÚg)Ú__version__)ÚConfig)Úcommand)ÚCommandErrorc                 C   s   g | ]}t |ƒ‘qS © )Úint)Ú.0Úvr
   r
   úR/var/www/html/flaskapp/venv/lib/python3.10/site-packages/flask_migrate/__init__.pyÚ
<listcomp>   s    r   Ú.é   c                   @   s    e Zd Zdd„ Zedd„ ƒZdS )Ú_MigrateConfigc                 K   s   || _ || _|j| _|| _d S ©N)ÚmigrateÚdbÚ	directoryÚconfigure_args)Úselfr   r   Úkwargsr
   r
   r   Ú__init__   s   
z_MigrateConfig.__init__c                 C   s   | j jS )z¢
        Backwards compatibility, in old releases app.extensions['migrate']
        was set to db, and env.py accessed app.extensions['migrate'].metadata
        )r   Úmetadata)r   r
   r
   r   r      s   z_MigrateConfig.metadataN)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r
   r
   r
   r   r      s    r   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )r   c                    s$   |  dd ¡| _tƒ j|i |¤Ž d S )NÚtemplate_directory)Úpopr    Úsuperr   )r   Úargsr   ©Ú	__class__r
   r   r   !   s   zConfig.__init__c                 C   s.   | j r| j S tj tj t¡¡}tj |d¡S )NÚ	templates)r    ÚosÚpathÚabspathÚdirnameÚ__file__Újoin)r   Úpackage_dirr
   r
   r   Úget_template_directory%   s   zConfig.get_template_directory)r   r   r   r   r.   Ú__classcell__r
   r
   r$   r   r       s    r   c                   @   sB   e Zd Z		ddd„Z		ddd„Zd	d
„ Zdd„ Zddd„ZdS )ÚMigrateNÚ
migrationsr   Tc                 K   s`   g | _ || _|| _t|ƒ| _|| _|| jd< || jd< |d ur,|d ur.|  |||¡ d S d S d S )NÚcompare_typeÚrender_as_batch)Úconfigure_callbacksr   r   Ústrr   Úalembic_ctx_kwargsÚinit_app)r   Úappr   r   r   r2   r3   r   r
   r
   r   r   -   s   


ÿzMigrate.__init__c           	      K   s¦   |p| j | _ |p
| j| _t|p| jƒ| _| j |¡ |d ur#|| jd< |d ur,|| jd< t|dƒs4i |_t| | j fi | j¤Ž|jd< ddl	m } |j
j|| jd� d S )Nr2   r3   Ú
extensionsr   r   )r   )Úname)r   r   r5   r   r6   ÚupdateÚhasattrr9   r   Úflask_migrate.cliÚcliÚadd_command)	r   r8   r   r   r   r2   r3   r   Údb_cli_groupr
   r
   r   r7   9   s"   


ÿÿzMigrate.init_appc                 C   s   | j  |¡ |S r   )r4   Úappend)r   Úfr
   r
   r   Ú	configureK   s   zMigrate.configurec                 C   s   | j D ]}||ƒ}q|S r   )r4   )r   ÚconfigrB   r
   r
   r   Úcall_configure_callbacksO   s   

z Migrate.call_configure_callbacksc                 C   sì   |d u r| j }t|ƒ}ttj |d¡ƒ}| d|¡ |jd u r$t 	¡ |_|p'g D ]	}t
|j|dƒ q(t|jdƒsqt
|jdg ƒ ttdg ƒD ]	}|jj |¡ qE|d urqt|tƒs]t|tƒrj|D ]	}|jj |¡ q_n|jj |¡ |  |¡S )Núalembic.iniÚscript_locationTÚxÚx_arg)r   r5   r   r'   r(   r,   Úset_main_optionÚcmd_optsÚargparseÚ	NamespaceÚsetattrr<   Úgetattrr   rH   rA   Ú
isinstanceÚlistÚtuplerE   )r   r   rI   ÚoptsrD   ÚoptrH   r
   r
   r   Ú
get_configT   s(   

ÿ
zMigrate.get_config)NNr1   r   TT)NNNNN)NNN)r   r   r   r   r7   rC   rE   rU   r
   r
   r
   r   r0   ,   s    
ÿ
ÿr0   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )Nc               
      s\   z
ˆ | i |¤Ž W d S  t tfy- } zt dt|ƒ ¡ t d¡ W Y d }~d S d }~ww )NzError: é   )r	   ÚRuntimeErrorÚlogÚerrorr5   ÚsysÚexit)r#   r   Úexc©rB   r
   r   Úwrappedl   s   €þzcatch_errors.<locals>.wrappedr   )rB   r^   r
   r]   r   Úcatch_errorsk   s   r_   c               	   C   s~   t ƒ } |  d¡ tt |  ¡ ¡ƒD ]+}ttj |  ¡ |d¡ƒ�}t	|ƒ 
¡ }W d  ƒ n1 s0w   Y  |  d||¡ qdS )zList available templates.zAvailable templates:
ÚREADMENz%s - %s)r   Úprint_stdoutÚsortedr'   Úlistdirr.   Úopenr(   r,   ÚnextÚstrip)rD   ÚtempnameÚreadmeÚsynopsisr
   r
   r   Úlist_templatesv   s   
ÿýûrj   Fc                 C   s¬   | du r
t jd j} d}|dur d|v sd|v r tj |¡\}}t|d�}| d| ¡ tj | d¡|_	t jd j
 |¡}|rE|du rEd}n|du rKd	}tj|| ||d
� dS )z"Creates a new migration repositoryNr   ú/ú\)r    rG   rF   zflask-multidbÚflask)ÚtemplateÚpackage)r   r9   r   r'   r(   Úsplitr   rJ   r,   Úconfig_file_namer   rE   r   Úinit)r   Úmultidbrn   ro   r    rD   r
   r
   r   rr   ƒ   s    
ÿrr   Úheadc	                 C   sD   |rdgnd}	t jd jj| |	d�}
tj|
||||||||d�	 dS )zCreate a new revision file.ÚautogenerateNr   )rS   ©ru   Úsqlrt   ÚspliceÚbranch_labelÚversion_pathÚrev_id©r   r9   r   rU   r   Úrevision)r   Úmessageru   rw   rt   rx   ry   rz   r{   rS   rD   r
   r
   r   r}   —   s   ÿ
þr}   c	           
      C   s:   t jd jj| dg|d�}	tj|	|d||||||d�	 dS )z#Alias for 'revision --autogenerate'r   ru   )rS   rI   Trv   Nr|   )
r   r~   rw   rt   rx   ry   rz   r{   rI   rD   r
   r
   r   r   ¤   s   ÿ
þr   Úcurrentc                 C   s2   t dkrtjd j | ¡}t ||¡ dS tdƒ‚)zEdit current revision.)r   é   r   r   z$Alembic 0.8.0 or greater is requiredN)Úalembic_versionr   r9   r   rU   r   ÚeditrW   ©r   r}   rD   r
   r
   r   r‚   ¯   s   ÿr‚   Ú c                 C   ó*   t jd j | ¡}tj|||||d� dS )z;Merge two revisions together.  Creates a new migration filer   )r~   ry   r{   N)r   r9   r   rU   r   Úmerge)r   Ú	revisionsr~   ry   r{   rD   r
   r
   r   r†   º   s   

ÿr†   c                 C   s,   t jd jj| |d�}tj||||d� dS )zUpgrade to a later versionr   ©rI   ©rw   ÚtagN)r   r9   r   rU   r   Úupgrade©r   r}   rw   rŠ   rI   rD   r
   r
   r   r‹   Ã   s   ÿr‹   ú-1c                 C   s<   t jd jj| |d�}|r|dkrd}tj||||d� dS )zRevert to a previous versionr   rˆ   r�   zhead:-1r‰   N)r   r9   r   rU   r   Ú	downgraderŒ   r
   r
   r   rŽ   Ë   s   ÿrŽ   c                 C   s"   t jd j | ¡}t ||¡ dS )z.Show the revision denoted by the given symbol.r   N)r   r9   r   rU   r   Úshowrƒ   r
   r
   r   r�   Õ   s   r�   c                 C   sD   t jd j | ¡}tdkrtj||||d� dS tj|||d� dS )z.List changeset scripts in chronological order.r   )r   é	   r�   )ÚverboseÚindicate_current©r‘   N)r   r9   r   rU   r�   r   Úhistory)r   Ú	rev_ranger‘   r’   rD   r
   r
   r   r”   Ü   s   

ÿr”   c                 C   s&   t jd j | ¡}tj|||d� dS )z4Show current available heads in the script directoryr   )r‘   Úresolve_dependenciesN)r   r9   r   rU   r   Úheads)r   r‘   r–   rD   r
   r
   r   r—   è   s   
ÿr—   c                 C   ó$   t jd j | ¡}tj||d� dS )zShow current branch pointsr   r“   N)r   r9   r   rU   r   Úbranches©r   r‘   rD   r
   r
   r   r™   ð   ó   r™   c                 C   r˜   )z/Display the current revision for each database.r   r“   N)r   r9   r   rU   r   r   rš   r
   r
   r   r   ÷   r›   c                 C   r…   )zP'stamp' the revision table with the given revision; don't run any
    migrationsr   )rw   rŠ   ÚpurgeN)r   r9   r   rU   r   Ústamp)r   r}   rw   rŠ   rœ   rD   r
   r
   r   r�   þ   s   r�   c                 C   s    t jd j | ¡}t |¡ dS )z0Check if there are any new operations to migrater   N)r   r9   r   rU   r   Úcheck)r   rD   r
   r
   r   rž     s   rž   )NFNF)	NNFFrt   FNNN)	NNFrt   FNNNN)Nr   )Nr„   NNN)Nrt   FNN)Nr�   FNN)Nrt   )NNFF)NFF)NF)Nrt   FNFr   )+rL   Ú	functoolsr   Úloggingr'   rZ   rm   r   r   Úalembicr   Ú__alembic_version__Úalembic.configr   ÚAlembicConfigr   Úalembic.utilr	   rR   rp   r�   Ú	getLoggerr   rX   Úobjectr   r0   r_   rj   rr   r}   r   r‚   r†   r‹   rŽ   r�   r”   r—   r™   r   r�   rž   r
   r
   r
   r   Ú<module>   sn     
?
þÿ

ÿ	ÿ