U
    ^g%i*                     @   s  d dl 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 ddlm	Z	 dd	lmZ dd
lmZ dd Zd2ddZdd Zdd Zdd Zd3ddZd4ddZd5ddZd6d!d"Zd#d$ Zd%d& Zd7d(d)Zd*d+ Zd,d- Zd.d/ Zd0d1 ZdS )8    N)config)	provision   )util   )command)script)Script)ScriptDirectoryc                   C   s   t jrdt j S dS d S )Nz
scratch_%sZscratch)r   ZFOLLOWER_IDENT r   r   R/var/www/html/api-medvista/venv/lib/python3.8/site-packages/alembic/testing/env.py_get_staging_directory   s    
r   TgenericFc                 C   s   t  }| rtjt d}tj|r2td| tj|||d |rzt	
|d W n tk
rj   Y nX |dks|t|ttj|dd|krdnd tj|}|S )Nscriptsz2staging directory %s already exists; poor cleanup?)templateenv.py)Zpep3147_envonlysimplepep3147_everythingpep3147r   )_testing_configospathjoinr   existsAssertionErrorr   initr   Zload_python_fileAttributeErrormake_sourcelessr   r
   from_config)creater   
sourcelesscfgr   scr   r   r   staging_env   s*    
r#   c                  C   s(   ddl m}  | j  tt d d S )Nr   enginesT)sqlalchemy.testingr%   Ztesting_reaperZ	close_allshutilrmtreer   r$   r   r   r   clear_staging_env:   s    
r)   c              	   C   sB   t jt d}t j|d}t|d}||  W 5 Q R X d S )Nr   zscript.py.makow)r   r   r   r   openwrite)txtdir_r   fr   r   r   script_file_fixtureA   s    r0   c              	   C   sb   t jt d}d|  } t j|d}t|}|r>t | t|d}||  W 5 Q R X d S )Nr   z6
from alembic import context

config = context.config
r   r*   )	r   r   r   r   r   pyc_file_from_pathunlinkr+   r,   )r-   r.   r   pyc_pathr/   r   r   r   env_file_fixtureH   s    	

r4   foo.dbc                 K   s>   t jt d}d|| f }|r.tjr.||d< tj|||dS )Nr   zsqlite:///%s/%sscope)urlfutureoptions)r   r   r   r   r   Zsqla_14testing_utilZtesting_engine)tempnamer8   r6   r9   r.   r7   r   r   r   _sqlite_file_db\   s
    
r<   c                 C   sN   t jt d}d| }|p(dtjjjk}td||| r:dnd|rDdndf S )	Nr   sqlite:///%s/foo.dbr8   a  
[alembic]
script_location = %s
sqlalchemy.url = %s
sourceless = %s
%s

[loggers]
keys = root,sqlalchemy

[handlers]
keys = console

[logger_root]
level = WARNING
handlers = console
qualname =

[logger_sqlalchemy]
level = DEBUG
handlers =
qualname = sqlalchemy.engine

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatters]
keys = generic

[formatter_generic]
format = %%(levelname)-5.5s [%%(name)s] %%(message)s
datefmt = %%H:%%M:%%S
    truefalsezsqlalchemy.future = true 	r   r   r   r   r   db	__class__
__module___write_config_file)r    r8   r.   r7   sqlalchemy_futurer   r   r   _sqlite_testing_configd   s    %

rG   r@   c                 C   sL   t jt d}dtjjjk}d| }td|||r6dnd| r@dnd|f S )Nr   r8   r=   a  
[alembic]
script_location = %s
sqlalchemy.url = %s
sqlalchemy.future = %s
sourceless = %s
version_locations = %%(here)s/model1/ %%(here)s/model2/ %%(here)s/model3/ %s

[loggers]
keys = root

[handlers]
keys = console

[logger_root]
level = WARNING
handlers = console
qualname =

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatters]
keys = generic

[formatter_generic]
format = %%(levelname)-5.5s [%%(name)s] %%(message)s
datefmt = %%H:%%M:%%S
    r>   r?   rA   )r    Zextra_version_locationr.   rF   r7   r   r   r   _multi_dir_testing_config   s    !

rH   
postgresqlc                 C   s"   t jt d}td|| |f S )zLuse a postgresql url with no host so that
    connections guaranteed to failr   a  
[alembic]
script_location = %s
sqlalchemy.url = %s://
%s

[loggers]
keys = root

[handlers]
keys = console

[logger_root]
level = WARNING
handlers = console
qualname =

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatters]
keys = generic

[formatter_generic]
format = %%(levelname)-5.5s [%%(name)s] %%(message)s
datefmt = %%H:%%M:%%S

)r   r   r   r   rE   )dialectZ
directivesr.   r   r   r   _no_sql_testing_config   s    rK   c              	   C   s,   t  }t|jd}||  W 5 Q R X |S )Nr*   )r   r+   Zconfig_file_namer,   )textr!   r/   r   r   r   rE      s    rE   c                  C   s<   ddl m}  tt tjs(tt  | tjt dS )Nr   Configztest_alembic.ini)	Zalembic.configrN   r   accessr   F_OKmkdirr   r   rM   r   r   r   r      s    r   asciic           
   	   C   s   | j |}|j}t|}|r*||}t|d}|| W 5 Q R X t	|}|rbt
| t| |}	| j |	j}|j|	jkrtd| j j|	dd |rt||dkrdnd d S )Nwbz2Can't change down_revision on a refresh operation.T)_replacer   r   r   )Zrevision_mapget_revisionr   textwrapdedentencoder+   r,   r   r1   r   r2   r	   Z
_from_pathrevisionZdown_revision	ExceptionZadd_revisionr   )
Z	scriptdirrev_idcontentencodingr    oldr   fpr3   r   r   r   r   write_script   s,    



 r`   c                 C   s   dd l }||  |dkrZt| }tjjd }tj	| \}}|| }t
|| |}n|dksftt| }t|tjstt|  d S )Nr   r   )r   r   )
py_compilecompiler   r1   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr'   mover   rO   rP   r2   )r   stylera   r3   suffixfilepathextZsimple_pyc_pathr   r   r   r     s    


r   c                 C   s   t  }t  }t  }t| }|j|dddd t||d|  |j|dd|d t||d| d| d	d
d |j|dd|d t||d||f  |||fS )Nz
revision aTbase)refreshheadz"Rev A"
revision = '%s'
down_revision = None

from alembic import op


def upgrade():
    op.execute("CREATE STEP 1")


def downgrade():
    op.execute("DROP STEP 1")

z
revision bu/   # coding: utf-8
"Rev B, méil, %3"
revision = 'z'
down_revision = 'z}'

from alembic import op


def upgrade():
    op.execute("CREATE STEP 2")


def downgrade():
    op.execute("DROP STEP 2")

zutf-8)r]   z
revision cz"Rev C"
revision = '%s'
down_revision = '%s'

from alembic import op


def upgrade():
    op.execute("CREATE STEP 3")


def downgrade():
    op.execute("DROP STEP 3")

r   r[   r
   r   Zgenerate_revisionr`   )r!   abcr   r   r   r   three_rev_fixture1  s@    
rs   c                 C   s   t  }t  }t  }t| }|j|d|ddd t||d||f  |j|d|ddd t||d||f  |j|d|ddd t||d||f  |||fS )	z:Create a multiple head fixture from the three-revs fixturezrevision d from bT)rn   Zsplicerm   z"Rev D"
revision = '%s'
down_revision = '%s'

from alembic import op


def upgrade():
    op.execute("CREATE STEP 4")


def downgrade():
    op.execute("DROP STEP 4")

zrevision e from dz"Rev E"
revision = '%s'
down_revision = '%s'

from alembic import op


def upgrade():
    op.execute("CREATE STEP 5")


def downgrade():
    op.execute("DROP STEP 5")

zrevision f from bz"Rev F"
revision = '%s'
down_revision = '%s'

from alembic import op


def upgrade():
    op.execute("CREATE STEP 6")


def downgrade():
    op.execute("DROP STEP 6")

ro   )r!   rp   rq   rr   der/   r   r   r   r   multi_heads_fixture~  s^    
            rv   c                 C   s`   t jt d}dtjjjk}d|  }ddd | 	 D } t
d||rRdnd	|| f S )
z?alembic.ini fixture to work exactly with the 'multidb' templater   r8   z, z

c                 s   s    | ]\}}d ||j f V  qdS )z[%s]
sqlalchemy.url = %sN)r7   ).0keyvaluer   r   r   	<genexpr>  s   z*_multidb_testing_config.<locals>.<genexpr>a  
[alembic]
script_location = %s
sourceless = false
sqlalchemy.future = %s
databases = %s

%s
[loggers]
keys = root

[handlers]
keys = console

[logger_root]
level = WARNING
handlers = console
qualname =

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatters]
keys = generic

[formatter_generic]
format = %%(levelname)-5.5s [%%(name)s] %%(message)s
datefmt = %%H:%%M:%%S
    r>   r?   )r   r   r   r   r   rB   rC   rD   keysitemsrE   )r%   r.   rF   Z	databasesr   r   r   _multidb_testing_config  s    
 r}   )Tr   F)r5   FN)FF)Fr@   )rI   r@   )rR   F)Zimportlib.machineryrc   r   r'   rV   r&   r   r   r@   r   r:   r   r   r	   r
   r   r#   r)   r0   r4   r<   rG   rH   rK   rE   r   r`   r   rs   rv   r}   r   r   r   r   <module>   s:   
"

4
1
(	   
MY