o
    Df*                     @   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 )Nz
scratch_%sscratch)r   FOLLOWER_IDENT r   r   L/home/ubuntu/webapp/venv/lib/python3.10/site-packages/alembic/testing/env.py_get_staging_directory   s   
r   TgenericFc                 C   s   t  }| rMtjt d}tj|rJ d| tj|||d |rMzt	|d W n	 t
y4   Y nw |dv s=J |ttj|dd|v rJdnd tj|}|S )Nscriptsz2staging directory %s already exists; poor cleanup?)templateenv.py)pep3147_envonlysimplepep3147_everythingpep3147r   )_testing_configospathjoinr   existsr   initr   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(   testing_reaper	close_allshutilrmtreer   r'   r   r   r   clear_staging_env:   s   
r.   c                 C   sX   t jt d}t j|d}t|d}||  W d    d S 1 s%w   Y  d S )Nr   zscript.py.makow)r   r   r   r   openwrite)txtdir_r   fr   r   r   script_file_fixtureA   s
   "r5   c                 C   sx   t jt d}d|  } t j|d}t|}|rt | t|d}||  W d    d S 1 s5w   Y  d S )Nr   z6
from alembic import context

config = context.config
r   r/   )	r   r   r   r   r   pyc_file_from_pathunlinkr0   r1   )r2   r3   r   pyc_pathr4   r   r   r   env_file_fixtureH   s   	

"r9   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   sqla_14testing_utiltesting_engine)tempnamer=   r;   r>   r3   r<   r   r   r   _sqlite_file_db\   s
   
rC   c                 C   sT   t jt d}d| }|pdtjjjv }td||| rdnd|r%df S df S )	Nr   sqlite:///%s/foo.dbr=   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#   r=   r3   r<   sqlalchemy_futurer   r   r   _sqlite_testing_configd   s    %
)rN   rG   c                 C   sL   t jt d}dtjjjv }d| }td|||rdnd| r dnd|f S )Nr   r=   rD   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
    rE   rF   rH   )r#   extra_version_locationr3   rM   r<   r   r   r   _multi_dir_testing_config   s   !

rP   
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   rL   )dialect
directivesr3   r   r   r   _no_sql_testing_config   s   rT   c                 C   sB   t  }t|jd}||  W d    |S 1 sw   Y  |S )Nr/   )r   r0   config_file_namer1   )textr$   r4   r   r   r   rL      s   
rL   c                  C   s<   ddl m}  tt tjstt  | tjt dS )Nr   Configztest_alembic.ini)	alembic.configrX   r   accessr   F_OKmkdirr   r   rW   r   r   r   r      s   r   asciic           
      C   s   | j |}|j}t|}|r||}t|d}|| W d    n1 s*w   Y  t	|}|r;t
| t| |}	| j |	j}|j|	jkrRtd| j j|	dd |rit||dkrddnd d S d S )Nwbz2Can't change down_revision on a refresh operation.T)_replacer   r   r   )revision_mapget_revisionr   textwrapdedentencoder0   r1   r   r6   r   r7   r	   
_from_pathrevisiondown_revision	Exceptionadd_revisionr    )
	scriptdirrev_idcontentencodingr#   oldr   fpr8   r   r   r   r   write_script   s.   



rp   c                 C   s   dd l }||  |dkr-t| }tjjd }tj	| \}}|| }t
|| |}n|dv s3J t| }t|tjsAJ t|  d S )Nr   r   )r   r   )
py_compilecompiler   r6   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr,   moverZ   r[   r7   )r   stylerq   r8   suffixfilepathext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)rm   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   rk   r
   r!   generate_revisionrp   )r$   abcr   r   r   r   three_rev_fixture1  s@   

r   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)r   splicer~   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")

r   )r$   r   r   r   der4   r   r   r   r   multi_heads_fixture~  sF   




r   c                 C   s`   t jt d}dtjjjv }d|  }ddd | 	 D } t
d||r)dnd	|| f S )
z?alembic.ini fixture to work exactly with the 'multidb' templater   r=   z, z

c                 s   s"    | ]\}}d ||j f V  qdS )z[%s]
sqlalchemy.url = %sN)r<   ).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
    rE   rF   )r   r   r   r   r   rI   rJ   rK   keysitemsrL   )r(   r3   rM   	databasesr   r   r   _multidb_testing_config  s   
 r   )Tr   F)r:   FN)FF)FrG   )rQ   rG   )r]   F)importlib.machineryrs   r   r,   rb   r)   r   r   rG   r   r@   r   r   r	   r
   r   r&   r.   r5   r9   rC   rN   rP   rT   rL   r   rp   r    r   r   r   r   r   r   r   <module>   s:    
"


4
1(	
MY