a
    g	g*                     @   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   V/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/testing/env.py_get_staging_directory   s    
r   TgenericFc                 C   s   t  }| rtjt d}tj|r2J d| tj|||d |rzt	|d W n t
yh   Y n0 |dv szJ |ttj|dd|v 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   existsr   initr   Zload_python_fileAttributeErrormake_sourcelessr   r
   from_config)creater   
sourcelesscfgr   Z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   sV   t jt d}t j|d}t|d}||  W d    n1 sH0    Y  d S )Nr   zscript.py.makow)r   r   r   r   openwrite)txtdir_r   fr   r   r   script_file_fixtureC   s    r.   c                 C   sv   t jt d}d|  } t j|d}t|}|r>t | t|d}||  W d    n1 sh0    Y  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_fixtureJ   s    	

r2   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)tempnamer6   r4   r7   r,   r5   r   r   r   _sqlite_file_db^   s
    
r:   c                 C   sN   t jt d}d| }|p(dtjjjv }td||| r:dnd|rDdndf S )	Nr   sqlite:///%s/foo.dbr6   a  
[alembic]
script_location = %s
sqlalchemy.url = %s
sourceless = %s
%s

[loggers]
keys = root,sqlalchemy

[handlers]
keys = console

[logger_root]
level = WARN
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   r6   r,   r5   sqlalchemy_futurer   r   r   _sqlite_testing_configf   s    %

rE   r>   c                 C   sL   t jt d}dtjjjv }d| }td|||r6dnd| r@dnd|f S )Nr   r6   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 = WARN
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   Zextra_version_locationr,   rD   r5   r   r   r   _multi_dir_testing_config   s    !

rF   
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 = WARN
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   rC   )dialectZ
directivesr,   r   r   r   _no_sql_testing_config   s    rI   c                 C   s@   t  }t|jd}||  W d    n1 s20    Y  |S )Nr(   )r   r)   Zconfig_file_namer*   )textr    r-   r   r   r   rC      s    (rC   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.configrL   r   accessr   F_OKmkdirr   r   rK   r   r   r   r      s    r   asciic           
      C   s   | j |}|j}t|}|r*||}t|d}|| W d    n1 sT0    Y  t	|}|rvt
| 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   r/   r   r0   r	   Z
_from_pathrevisionZdown_revision	ExceptionZadd_revisionr   )
Z	scriptdirrev_idcontentencodingr   oldr   fpr1   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v sfJ t| }t|tjsJ t|  d S )Nr   r   )r   r   )
py_compilecompiler   r/   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr%   moverM   rN   r0   )r   styler_   r1   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   rY   r
   r   Zgenerate_revisionr^   )r    abcr   r   r   r   three_rev_fixture4  s@    
rq   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)rl   Zsplicerk   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")

rm   )r    rn   ro   rp   der-   r   r   r   r   multi_heads_fixture  sF    



rt   c                 C   s`   t jt d}dtjjjv }d|  }ddd | 	 D } t
d||rRdnd	|| f S )
z?alembic.ini fixture to work exactly with the 'multidb' templater   r6   z, z

c                 s   s    | ]\}}d ||j f V  qdS )z[%s]
sqlalchemy.url = %sN)r5   ).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 = WARN
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   r@   rA   rB   keysitemsrC   )r#   r,   rD   Z	databasesr   r   r   _multidb_testing_config  s    
 r{   )Tr   F)r3   FN)FF)Fr>   )rG   r>   )rP   F)Zimportlib.machineryra   r   r%   rT   r$   r   r   r>   r   r8   r   r   r	   r
   r   r!   r'   r.   r2   r:   rE   rF   rI   rC   r   r^   r   rq   rt   r{   r   r   r   r   <module>   s8   
$

4
1
(	 
MY