o
    ‹åg))  ã                   @   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   úO/var/www/html/flaskapp/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