U
    ^g%ib'                  
   @   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dAd1dZ(edBd2d3Z)edCd4d5Z*dS )D    Nwraps)current_appg)__version__)Config)command)CommandErrorc                 C   s   g | ]}t |qS  )int).0vr
   r
   U/var/www/html/api-medvista/venv/lib/python3.8/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	directoryZ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|| 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 )NZ	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                   @   s:   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   sX   g | _ || _|| _t|| _|| _|| jd< || jd< |d k	rT|d k	rT| ||| d S )Ncompare_typerender_as_batch)configure_callbacksr   r   strr   alembic_ctx_kwargsinit_app)r   appr   r   r   r0   r1   r   r
   r
   r   r   -   s    


zMigrate.__init__c           	      K   s   |p| j | _ |p| j| _t|p"| j| _| j| |d k	rF|| jd< |d k	rX|| jd< t|dshi |_t| | j f| j|jd< ddl	m } |j
j|| jd d S )Nr0   r1   
extensionsr   r   )r   )name)r   r   r3   r   r4   updatehasattrr7   r   Zflask_migrate.clicliZadd_command)	r   r6   r   r   r   r0   r1   r   Zdb_cli_groupr
   r
   r   r5   9   s$    


 
zMigrate.init_appc                 C   s   | j | |S r   )r2   append)r   fr
   r
   r   	configureK   s    zMigrate.configurec                 C   s   | j D ]}||}q|S r   )r2   )r   configr=   r
   r
   r   call_configure_callbacksO   s    

z Migrate.call_configure_callbacksc                 C   s   |d kr| j }t|}ttj|d}|d| |jd krHt	 |_|pNg D ]}t
|j|d qPt|jdst
|jdg  ttdg D ]}|jj| q|d k	rt|tst|tr|D ]}|jj| qn|jj| | |S )Nalembic.iniscript_locationTxx_arg)r   r3   r   r%   r&   r*   set_main_optioncmd_optsargparse	Namespacesetattrr:   getattrr   rC   r<   
isinstancelisttupler@   )r   r   rD   optsr?   optrC   r
   r
   r   
get_configT   s&    

zMigrate.get_config)NNr/   r   TT)NNNNN)NNN)r   r   r   r   r5   r>   r@   rP   r
   r
   r
   r   r.   ,   s       
    
r.   c                    s   t   fdd}|S )Nc               
      sV   z | | W nB t tfk
rP } z tdt|  td W 5 d }~X Y nX d S )NzError:    )r	   RuntimeErrorlogerrorr3   sysexit)r"   r   excr=   r
   r   wrappedl   s
    zcatch_errors.<locals>.wrappedr   )r=   rY   r
   rX   r   catch_errorsk   s    rZ   c               
   C   sj   t  } | d tt|  D ]B}ttj|  |d}t	|
 }W 5 Q R X | d|| q"dS )zList available templates.zAvailable templates:
ZREADMEz%s - %sN)r   Zprint_stdoutsortedr%   listdirr,   openr&   r*   nextstrip)r?   tempnameZreadmeZsynopsisr
   r
   r   list_templatesv   s    
ra   Fc                 C   s   | dkrt jd j} d}|dk	r@d|ks0d|kr@tj|\}}t|d}|d|  tj| d|_	t jd j
|}|r|dkrd}n|dkrd	}tj|| ||d
 dS )z"Creates a new migration repositoryNr   /\)r   rB   rA   zflask-multidbflask)templatepackage)r   r7   r   r%   r&   splitr   rE   r*   Zconfig_file_namer   r@   r   init)r   Zmultidbre   rf   r   r?   r
   r
   r   rh      s     
rh   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   )rN   rj   sqlri   splicebranch_labelversion_pathrev_idr   r7   r   rP   r   revision)r   messagerj   rl   ri   rm   rn   ro   rp   rN   r?   r
   r
   r   rr      s        rr   c	           
      C   s:   t jd jj| dg|d}	tj|	|d||||||d	 dS )z#Alias for 'revision --autogenerate'r   rj   )rN   rD   Trk   Nrq   )
r   rs   rl   ri   rm   rn   ro   rp   rD   r?   r
   r
   r   r      s         r   currentc                 C   s4   t dkr(tjd j| }t|| ntddS )zEdit current revision.)r      r   r   z$Alembic 0.8.0 or greater is requiredN)alembic_versionr   r7   r   rP   r   editrR   r   rr   r?   r
   r
   r   rw      s    rw    c                 C   s*   t jd j| }tj|||||d dS )z;Merge two revisions together.  Creates a new migration filer   )rs   rn   rp   N)r   r7   r   rP   r   merge)r   Z	revisionsrs   rn   rp   r?   r
   r
   r   rz      s
    
 rz   c                 C   s,   t jd jj| |d}tj||||d dS )zUpgrade to a later versionr   rD   rl   tagN)r   r7   r   rP   r   upgrader   rr   rl   r}   rD   r?   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   r7   r   rP   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   r7   r   rP   r   showrx   r
   r
   r   r      s    r   c                 C   sB   t jd j| }tdkr.tj||||d ntj|||d dS )z.List changeset scripts in chronological order.r   )r   	   r   )verboseindicate_currentr   N)r   r7   r   rP   rv   r   history)r   Z	rev_ranger   r   r?   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   r7   r   rP   r   heads)r   r   r   r?   r
   r
   r   r      s    r   c                 C   s$   t jd j| }tj||d dS )zShow current branch pointsr   r   N)r   r7   r   rP   r   branchesr   r   r?   r
   r
   r   r      s    r   c                 C   s$   t jd j| }tj||d dS )z/Display the current revision for each database.r   r   N)r   r7   r   rP   r   rt   r   r
   r
   r   rt      s    c                 C   s*   t jd j| }tj|||||d dS )zP'stamp' the revision table with the given revision; don't run any
    migrationsr   )rl   r}   purgeN)r   r7   r   rP   r   stamp)r   rr   rl   r}   r   r?   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   r7   r   rP   r   check)r   r?   r
   r
   r   r     s    r   )NFNF)	NNFFri   FNNN)	NNFri   FNNNN)Nrt   )Nry   NNN)Nri   FNN)Nr   FNN)Nri   )NNFF)NFF)NF)NF)Nri   FNF)N)+rG   	functoolsr   loggingr%   rU   rd   r   r   alembicr   Z__alembic_version__Zalembic.configr   ZAlembicConfigr   Zalembic.utilr	   rM   rg   rv   	getLoggerr   rS   objectr   r.   rZ   ra   rh   rr   r   rw   rz   r~   r   r   r   r   r   rt   r   r   r
   r
   r
   r   <module>   sx    
?
                 

  	  