o
    Ifb'                     @   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
   O/home/ubuntu/webapp/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     
?


	