o
    8cl#                     @   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 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d4ddZe			d5d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/d0Z&ed>d1dZ'ed?d2d3Z(dS )@    Nwraps)current_app)__version__)Config)command)CommandErrorc                 C   s   g | ]}t |qS  )int).0vr	   r	   L/var/www/html/gps/gps/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                   @   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
migrationsc                 K   sF   g | _ || _t|| _|| _|d ur|d ur!| ||| d S d S d S r   )configure_callbacksr   strr   alembic_ctx_kwargsinit_appr   appr   r   r   r	   r	   r   r   -   s   
zMigrate.__init__c                 K   sX   |p| j | _ t|p| j| _| j| t|dsi |_t| | j fi | j|jd< d S )N
extensionsr   )r   r2   r   r3   updatehasattrr7   r   r5   r	   r	   r   r4   5   s   
zMigrate.init_appc                 C   s   | j | |S r   )r1   append)r   fr	   r	   r   	configure>   s   zMigrate.configurec                 C   s   | j D ]}||}q|S r   )r1   )r   configr;   r	   r	   r   call_configure_callbacksB   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si|d urbt
|jdg  t|tsMt|trZ|D ]	}|jj| qOn|jj| nt
|jdd  | |S )Nalembic.iniscript_locationTx)r   r2   r   r&   r'   r+   set_main_optioncmd_optsargparse	Namespacesetattrr9   
isinstancelisttuplerA   r:   r>   )r   r   x_argoptsr=   optrA   r	   r	   r   
get_configG   s&   


zMigrate.get_config)NNr0   )NN)NNN)r   r   r   r   r4   r<   r>   rM   r	   r	   r	   r   r/   ,   s    

	r/   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errorr2   sysexit)r"   r   excr;   r	   r   wrapped_   s   zcatch_errors.<locals>.wrappedr   )r;   rV   r	   rU   r   catch_errors^   s   rW   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)r=   tempnamereadmesynopsisr	   r	   r   list_templatesi   s   
rb   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   r@   r?   zflask-multidbflask)templatepackage)r   r7   r   r&   r'   splitr   rB   r+   config_file_namer   r>   r   init)r   multidbrf   rg   r   r=   r	   r	   r   rj   v   s    
rj   headc	           
      C   s2   t jd j| }	tj|	||||||||d	 dS )zCreate a new revision file.r   autogeneratesqlrl   splicebranch_labelversion_pathrev_idNr   r7   r   rM   r   revision)
r   messagern   ro   rl   rp   rq   rr   rs   r=   r	   r	   r   ru      s
   
ru   c	           
      C   s:   t jd jj| dg|d}	tj|	|d||||||d	 dS )z#Alias for 'revision --autogenerate'r   rn   )rK   rJ   Trm   Nrt   )
r   rv   ro   rl   rp   rq   rr   rs   rJ   r=   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   r7   r   rM   r   editrO   r   ru   r=   r	   r	   r   rz      s   rz    c                 C   s*   t jd j| }tj|||||d dS )z;Merge two revisions together.  Creates a new migration filer   )rv   rq   rs   N)r   r7   r   rM   r   merge)r   	revisionsrv   rq   rs   r=   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   rJ   ro   tagN)r   r7   r   rM   r   upgrader   ru   ro   r   rJ   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   rM   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   rM   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   r7   r   rM   ry   r   history)r   	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   rM   r   heads)r   r   r   r=   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   r7   r   rM   r   branchesr   r   r=   r	   r	   r   r         r   c                 C   r   )z/Display the current revision for each database.r   r   N)r   r7   r   rM   r   rw   r   r	   r	   r   rw      r   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   r   N)r   r7   r   rM   r   stamp)r   ru   ro   r   r=   r	   r	   r   r      s   r   )NFNF)	NNFFrl   FNNN)	NNFrl   FNNNN)Nrw   )Nr|   NNN)Nrl   FNN)Nr   FNN)Nrl   )NNFF)NFF)NF)Nrl   FN))rD   	functoolsr   loggingr&   rR   re   r   alembicr   __alembic_version__alembic.configr   AlembicConfigr   alembic.utilr   rI   rh   ry   	getLoggerr   rP   objectr   r/   rW   rb   rj   ru   r   rz   r}   r   r   r   r   r   r   rw   r   r	   r	   r	   r   <module>   sj     
2



	