o
    Ph-                     @   sB  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;ddZdd Zdd Zdd Zd<ddZd=ddZd>dd Zd?d"d#Zd?d$d%Zd&d' Zd(d) Zd*d+ Z	d@d-d.Zd/d0 Zd1d2 Z d3d4 Z!d5d6 Z"d7e#d8e#fd9d:Z$dS )A    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   X/var/www/html/stock_analysis/be/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   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
    rL   )r%   extra_version_locationr5   rQ   r>   r   r   r   _multi_dir_testing_config   s    

rT   
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
directivesr5   r   r   r   _no_sql_pyproject_config   s   r]   c                 C   s(   t t d}td| d|  d| dS )rV   r   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   rZ   r   r   r   _no_sql_testing_config   s   r^   c                 C   sD   t |}t|jd}||  W d    |S 1 sw   Y  |S Nr1   )rP   r2   toml_file_namer3   )tomltextinitextr&   r6   r   r   r   rW     s   
rW   c                 C   sB   t  }t|jd}||  W d    |S 1 sw   Y  |S r_   )r   r2   config_file_namer3   )textr&   r6   r   r   r   rP     s   
rP   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.configrf   r   accessr   F_OKmkdirr   re   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   rX   rY   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*   



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   r8   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr.   moverh   ri   r9   )r   styler}   r:   suffixfilepathextsimple_pyc_pathr   r   r   r"   E  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)ry   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   rw   r   r#   generate_revisionr|   )r&   abcr	   r   r   r   three_rev_fixtureZ  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_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   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   )rk   F)%importlib.machineryr   r   pathlibr   r.   rX   r+   r   r   rK   r   rA   r   r	   r
   r   r   r(   r0   r7   r;   rD   rR   rT   r]   r^   rW   rP   r   r|   r"   r   r   r   r   r   r   r   r   r   <module>   sB    
"


.
,
,'
KV1