o
    voiw/                     @   s^  d dl Zd dlZd dlZd dlm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dadd Zdd Zd?ddZdd Zdd Zdd Zd@ddZdAd d!ZdBd#d$ZdCd&d'ZdCd(d)Zd*d+ Zd,d- Z d.d/ Z!	dDd1d2Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&d;e'd<e'fd=d>Z(dS )E    N)Path)config)	provision   )util   )command)script)Script)ScriptDirectoryc                   C   s   t jr	dt j S dS )Nscratch_scratch)r   FOLLOWER_IDENT r   r   G/home/ubuntu/.local/lib/python3.10/site-packages/alembic/testing/env.py_get_staging_directory   s   r   c                   C   sF   t d u r!tjtjjfa ttjt_tjtj_ttjtj_d S d S N)_restore_logloggingrootLoggermanager
RootLoggerWARNINGManagerr   r   r   r   _replace_logger   s   
r   c                   C   s,   t d urt \t_tj_tjtj_d a d S d S r   )r   r   r   r   r   r   r   r   r   _restore_logger&   s
   
r   TgenericFc                 C   s   t   t }| rLtt d}tj|rJ d| tj|||d |rLzt	
|d W n	 ty5   Y nw |dv s>J |tt|dd|v rIdnd tj|}|S )Nscriptsz2staging directory %s already exists; poor cleanup?)templateenv.py)pep3147_envonlysimplepep3147_everythingpep3147r"   )r   _testing_config
_join_pathr   ospathexistsr   initr   load_python_fileAttributeErrormake_sourcelessr	   r   from_config)creater   
sourcelesscfgr(   scr   r   r   staging_env/   s.   
r3   c                  C   s.   ddl m}  | j  tt d t  d S )Nr   enginesT)sqlalchemy.testingr5   testing_reaper	close_allshutilrmtreer   r   r4   r   r   r   clear_staging_envR   s   

r;   c                 C   sP   t t d}t |d}t|d}||  W d    d S 1 s!w   Y  d S )Nr   zscript.py.makow)r&   r   openwrite)txtdir_r(   fr   r   r   script_file_fixtureZ   s
   
"rB   c                 C   sp   t t d}d|  } t |d}t|}|rt| t|d}||  W d    d S 1 s1w   Y  d S )Nr   z6
from alembic import context

config = context.config
r    r<   )r&   r   r   pyc_file_from_pathr'   unlinkr=   r>   )r?   r@   r(   pyc_pathrA   r   r   r   env_file_fixturea   s   
	

"rF   foo.dbc                 K   s4   t t d}d|| f }|r||d< tj|||dS )Nr   zsqlite:///%s/%sscope)urlfutureoptions)r&   r   testing_utiltesting_engine)tempnamerJ   rH   rK   r@   rI   r   r   r   _sqlite_file_dbu   s
   rO   c              
   C   s\   t t d}d| d}|pdtjjjv }td| d| d| r!dnd	 d
|r(dnd d	S )Nr   z
sqlite:///z/foo.dbrJ   
[alembic]
script_location = 
sqlalchemy.url = 
sourceless = truefalse
zsqlalchemy.future = true a  

[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
    r&   r   r   db	__class__
__module___write_config_file)r0   rJ   r@   rI   sqlalchemy_futurer   r   r   _sqlite_testing_config}   s   

r]   rV   c                 C   sZ   t t d}dtjjjv }d| }td| d| d|rdnd d	| r$dnd d
| dS )Nr   rJ   zsqlite:///%s/foo.dbrP   rQ   z
sqlalchemy.future = rS   rT   rR   z_
path_separator = space
version_locations = %(here)s/model1/ %(here)s/model2/ %(here)s/model3/ aR  

[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
    rW   )r0   extra_version_locationr@   r\   rI   r   r   r   _multi_dir_testing_config   s    

r_   
postgresqlc                 C   s2   t t d}td| dt| dd|  dS )Luse a postgresql url with no host so that
    connections guaranteed to failr   z"
[tool.alembic]
script_location ="z"
z


        z
[alembic]
sqlalchemy.url = aR  ://

[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   _write_toml_configtextwrapdedentdialect
directivesr@   r   r   r   _no_sql_pyproject_config   s   rh   c                 C   s(   t t d}td| d|  d| dS )ra   r   z
[alembic]
script_location =rQ   z://
aO  

[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[   re   r   r   r   _no_sql_testing_config  s   ri   c                 C   sD   t |}t|jd}||  W d    |S 1 sw   Y  |S Nr<   )r[   r=   toml_file_namer>   )tomltextinitextr1   rA   r   r   r   rb   *  s   
rb   c                 C   sB   t  }t|jd}||  W d    |S 1 sw   Y  |S rj   )r%   r=   config_file_namer>   )textr1   rA   r   r   r   r[   1  s   
r[   c                  C   sB   ddl m}  tt tjstt  | tt dtt dS )Nr   Configztest_alembic.inizpyproject.toml)alembic.configrq   r'   accessr   F_OKmkdirr&   rp   r   r   r   r%   8  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(   rc   rd   encoder=   r>   r   rC   r'   rD   r
   
_from_pathrevisiondown_revision	Exceptionadd_revisionr-   )
	scriptdirrev_idcontentencodingr0   oldr(   fprE   r	   r   r   r   write_scriptC  s*   



r   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   rC   	importlib	machineryBYTECODE_SUFFIXESr'   r(   splitextr9   movers   rt   rD   )r(   styler   rE   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| d |j|dd|d t||d| d	| d
dd |j|dd|d t||d| d	| d |||fS )Nz
revision aTbase)refreshheadz"Rev A"
revision = 'z'
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 = ''
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 = 'z}'

from alembic import op


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


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

r   r   r   r.   generate_revisionr   )r1   abcr	   r   r   r   three_rev_fixturer  sD   

r   c                 C   s   t  }t  }t  }t| }|j|d|ddd t||d| d| d |j|d|ddd t||d| d| d	 |j|d
|ddd t||d| d| d |||fS )z:Create a multiple head fixture from the three-revs fixturezrevision d from bT)r   splicer   z"Rev D"
revision = 'r   z}'

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 = 'z}'

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 = 'z}'

from alembic import op


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


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

r   )r1   r   r   r   derA   r	   r   r   r   multi_heads_fixture  sR   




r   c              
   C   sj   t t d}dtjjjv }d|  }ddd |  D } t	d| d|r)d	nd
 d| d|  d	S )z?alembic.ini fixture to work exactly with the 'multidb' templater   rJ   z, z

c                 s   s&    | ]\}}d | d|j  V  qdS )[z]
sqlalchemy.url = N)rI   ).0keyvaluer   r   r   	<genexpr>  s
    
z*_multidb_testing_config.<locals>.<genexpr>rP   z(
sourceless = false
sqlalchemy.future = rS   rT   z
databases = aQ  
[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   rX   rY   rZ   joinkeysitemsr[   )r5   r@   r\   	databasesr   r   r   _multidb_testing_config  s"   

r   r   morec                 G   s   t t| j|  S r   )strr   joinpathas_posix)r   r   r   r   r   r&   D  s   r&   )Tr   F)rG   FN)FF)FrV   )r`   rV   )rv   F))importlib.machineryr   r   r'   pathlibr   r9   rc   r6   r   r   rV   r   rL   r   r	   r
   r   r   r   r   r   r3   r;   rB   rF   rO   r]   r_   rh   ri   rb   r[   r%   r   r-   r   r   r   r   r&   r   r   r   r   <module>   sJ    	
	#


.
,
,'
KV1