o
    h))                     @   s0  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d7ddZdd Zdd Zdd Zd8ddZd9ddZd:dd Zd;d"d#Zd$d% Zd&d' Z	d<d)d*Zd+d, Zd-d. Zd/d0 Zd1d2 Z d3e!d4e!fd5d6Z"dS )=    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/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/alembic/testing/env.py_get_staging_directory   s   r   TgenericFc                 C   s   t  }| rItt d}tj|rJ d| tj|||d |rIzt	|d W n	 t
y2   Y nw |dv s;J |tt|dd|v rFdnd tj|}|S )Nscriptsz2staging directory %s already exists; poor cleanup?)templateenv.py)pep3147_envonlysimplepep3147_everythingpep3147r   )_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,   
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   
r0   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_fixtureB   s
   
"r7   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   r1   )r   r   r   pyc_file_from_pathr   unlinkr2   r3   )r4   r5   r   pyc_pathr6   r   r   r   env_file_fixtureI   s   
	

"r;   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)tempnamer?   r=   r@   r5   r>   r   r   r   _sqlite_file_db]   s
   rD   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.dbr?   
[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)r%   r?   r5   r>   sqlalchemy_futurer   r   r   _sqlite_testing_confige   s   

rR   rK   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   r?   zsqlite:///%s/foo.dbrE   rF   z
sqlalchemy.future = rH   rI   rG   zH
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
    rL   )r%   extra_version_locationr5   rQ   r>   r   r   r   _multi_dir_testing_config   s    

rT   
postgresqlc                 C   s(   t t d}td| d|  d| dS )zLuse a postgresql url with no host so that
    connections guaranteed to failr   z
[alembic]
script_location =rF   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   rP   )dialect
directivesr5   r   r   r   _no_sql_testing_config   s   rX   c                 C   sB   t  }t|jd}||  W d    |S 1 sw   Y  |S )Nr1   )r   r2   config_file_namer3   )textr&   r6   r   r   r   rP      s   
rP   c                  C   s8   ddl m}  tt tjstt  | tt dS )Nr   Configztest_alembic.ini)alembic.configr\   r   accessr   F_OKmkdirr   r[   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encoder2   r3   r   r8   r   r9   r
   
_from_pathrevisiondown_revision	Exceptionadd_revisionr"   )
	scriptdirrev_idcontentencodingr%   oldr   fpr:   r	   r   r   r   write_script   s*   



rt   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   r8   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr.   mover^   r_   r9   )r   styleru   r:   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)rq   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   ro   r   r#   generate_revisionrt   )r&   abcr	   r   r   r   three_rev_fixture#  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   )r&   r   r   r   der6   r	   r   r   r   multi_heads_fixturen  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   r?   z, z

c                 s   s&    | ]\}}d | d|j  V  qdS )[z]
sqlalchemy.url = N)r>   ).0keyvaluer   r   r   	<genexpr>  s
    
z*_multidb_testing_config.<locals>.<genexpr>rE   z(
sourceless = false
sqlalchemy.future = rH   rI   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   rM   rN   rO   joinkeysitemsrP   )r*   r5   rQ   	databasesr   r   r   _multidb_testing_config  s"   

r   r   morec                 G   s   t t| j|  S )N)strr   joinpathas_posix)r   r   r   r   r   r     s   r   )Tr   F)r<   FN)FF)FrK   )rU   rK   )ra   F)#importlib.machineryrw   r   pathlibr   r.   rf   r+   r   r   rK   r   rA   r   r	   r
   r   r   r(   r0   r7   r;   rD   rR   rT   rX   rP   r   rt   r"   r   r   r   r   r   r   r   r   r   <module>   s>    
"


.
+'	
KV1