o
    : h5'                     @   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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)__version__)Config)command)CommandErrorc                 C   s   g | ]}t |qS  )int).0vr	   r	   ^/var/www/html/figdemos/bartoux_crm/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	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|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   Z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   r/   r0   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 )Nr/   r0   
extensionsr   r   )r   )name)r   r   r2   r   r3   updatehasattrr6   r   Zflask_migrate.clicliadd_command)	r   r5   r   r   r   r/   r0   r   Zdb_cli_groupr	   r	   r   r4   9   s"   


zMigrate.init_appc                 C   s   | j | |S r   )r1   append)r   fr	   r	   r   	configureK   s   zMigrate.configurec                 C   s   | j D ]}||}q|S r   )r1   )r   configr=   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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_optionZcmd_optsargparse	Namespacesetattrr9   
isinstancelisttuplerC   r<   r@   )r   r   x_argoptsr?   optrC   r	   r	   r   
get_configT   s&   


zMigrate.get_config)NNr.   r   TT)NNNNN)NNN)r   r   r   r   r4   r>   r@   rN   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   wrappedl   s   zcatch_errors.<locals>.wrappedr   )r=   rW   r	   rV   r   catch_errorsk   s   rX   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:
ZREADMENz%s - %s)r   Zprint_stdoutsortedr%   listdirr+   openr&   r*   nextstrip)r?   ZtempnameZreadmeZsynopsisr	   r	   r   list_templatesv   s   
r^   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   rB   rA   zflask-multidbflask)templatepackage)r   r6   r   r%   r&   splitr   rD   r*   Zconfig_file_namer   r@   r   init)r   Zmultidbrb   rc   r   r?   r	   r	   r   re      s    
re   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   )rL   rg   sqlrf   splicebranch_labelversion_pathrev_idr   r6   r   rN   r   revision)r   messagerg   ri   rf   rj   rk   rl   rm   rL   r?   r	   r	   r   ro      s   
ro   c	           
      C   s:   t jd jj| dg|d}	tj|	|d||||||d	 dS )z#Alias for 'revision --autogenerate'r   rg   )rL   rK   Trh   Nrn   )
r   rp   ri   rf   rj   rk   rl   rm   rK   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   r6   r   rN   r   editrP   r   ro   r?   r	   r	   r   rt      s   rt    c                 C   s*   t jd j| }tj|||||d dS )z;Merge two revisions together.  Creates a new migration filer   )rp   rk   rm   N)r   r6   r   rN   r   merge)r   Z	revisionsrp   rk   rm   r?   r	   r	   r   rw      s   

rw   c                 C   s,   t jd jj| |d}tj||||d dS )zUpgrade to a later versionr   rK   ri   tagN)r   r6   r   rN   r   upgrader   ro   ri   rz   rK   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   rx   r}   zhead:-1ry   N)r   r6   r   rN   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   r6   r   rN   r   showru   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   r6   r   rN   rs   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   r6   r   rN   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   r6   r   rN   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   r6   r   rN   r   rq   r   r	   r	   r   rq      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   ry   N)r   r6   r   rN   r   stamp)r   ro   ri   rz   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   r6   r   rN   r   check)r   r?   r	   r	   r   r     s   r   )NFNF)	NNFFrf   FNNN)	NNFrf   FNNNN)Nrq   )Nrv   NNN)Nrf   FNN)Nr}   FNN)Nrf   )NNFF)NFF)NF)Nrf   FNr   )*rE   	functoolsr   loggingr%   rS   ra   r   Zalembicr   Z__alembic_version__Zalembic.configr   ZAlembicConfigr   Zalembic.utilr   rJ   rd   rs   	getLoggerr   rQ   objectr   r-   rX   r^   re   ro   r   rt   rw   r{   r~   r   r   r   r   rq   r   r   r	   r	   r	   r   <module>   sn     
?


	