
    i*                         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 Zd"dZd Zd Zd Zd#dZd$dZd%dZd&dZd Zd Z	 d'dZd Zd Zd  Zd! ZdS )(    N)config)	provision   )util   )command)script)Script)ScriptDirectoryc                  <    t           j        rdt           j        z  S dS )Nz
scratch_%sscratch)r   FOLLOWER_IDENT     Y/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/alembic/testing/env.py_get_staging_directoryr      s      i666yr   TgenericFc                    t                      }| rt          j                            t	                      d          }t          j                            |          rJ d|z              t          j        |||           |ri	 t          j	        |d           n# t          $ r Y nw xY w|dv s
J |            t          t          j                            |d          d|v rd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   scs         r   staging_envr*      sA   


C w||244i@@7>>$'' 	
 	
@4G	
 	
' 	S$2222 		%dH5555!      "    	  
 T8,,&*44		(  
 
		+	+C	0	0BIs   B 
B&%B&c                      ddl m}  | j                                         t	          j        t                      d           d S )Nr   enginesT)sqlalchemy.testingr-   testing_reaper	close_allshutilrmtreer   r,   s    r   clear_staging_envr3   :   sH    ******$$&&&
M(**D11111r   c                    t           j                            t                      d          }t           j                            |d          }t	          |d          5 }|                    |            d d d            d S # 1 swxY w Y   d S )Nr   zscript.py.makow)r   r   r   r   openwrite)txtdir_r   fs       r   script_file_fixturer;   A   s    7<<.00)<<D7<<.//D	dC A	                 s   B  BBc                 x   t           j                            t                      d          }d| z   } t           j                            |d          }t	          j        |          }|rt          j        |           t          |d          5 }|                    |            d d d            d S # 1 swxY w Y   d S )Nr   z6
from alembic import context

config = context.config
r   r5   )	r   r   r   r   r   pyc_file_from_pathunlinkr6   r7   )r8   r9   r   pyc_pathr:   s        r   env_file_fixturer@   H   s    7<<.00)<<D	
 	  7<<h''D&t,,H 
	(	dC A	                 s   B//B36B3foo.dbc                     t           j                            t                      d          }d|d| }|rt          j        r||d<   t          j        |||          S )Nr   z
sqlite:////scope)urlfutureoptions)r   r   r   r   r   sqla_14testing_utiltesting_engine)tempnamerF   rD   rG   r9   rE   s         r   _sqlite_file_dbrL   \   sc    7<<.00)<<DD#ttXX
.C ! ! &3vwOOOOr   c                     t           j                            t                      d          }d|z  }|pdt          j        j        j        v }t          d|d|d| rdndd	|rd
ndd	          S )Nr   sqlite:///%s/foo.dbrF   
[alembic]
script_location = 
sqlalchemy.url = 
sourceless = truefalse
zsqlalchemy.future = true a  

[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
    	r   r   r   r   r   db	__class__
__module___write_config_file)r'   rF   r9   rE   sqlalchemy_futures        r   _sqlite_testing_configr\   d   s    7<<.00)<<D
$
&CN8vy/B/M#ML DDCC -FFg--*;C&&CCQ)	
+ + +r   rU   c                     t           j                            t                      d          }dt          j        j        j        v }d|z  }t          d|d|d|rdndd	| rdndd
|d          S )Nr   rF   rN   rO   rP   z
sqlalchemy.future = rR   rS   rQ   zH
version_locations = %(here)s/model1/ %(here)s/model2/ %(here)s/model3/ aI  

[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
    rV   )r'   extra_version_locationr9   r[   rE   s        r   _multi_dir_testing_configr_      s    7<<.00)<<D FI$7$BB
$
&CD DDCC'4FFW44 -FFg--"""K&	
( ( (r   
postgresqlc           	          t           j                            t                      d          }t	          d|d| d|d          S )zLuse a postgresql url with no host so that
    connections guaranteed to failr   rO   rP   z://
aF  

[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   rZ   )dialect
directivesr9   s      r   _no_sql_testing_configrd      sP     7<<.00)<<D@ 44***?	&! ! !r   c                     t                      }t          |j        d          5 }|                    |            d d d            n# 1 swxY w Y   |S )Nr5   )r   r6   config_file_namer7   )textr(   r:   s      r   rZ   rZ      s    


C	c"C	(	( A	              Js   AA
A
c                     ddl m}  t          j        t	                      t          j                  s t          j        t	                                  | t          j                            t	                      d                    S )Nr   Configztest_alembic.ini)	alembic.configrj   r   accessr   F_OKmkdirr   r   ri   s    r   r   r      sp    %%%%%%9+--rw77 +
'))***6"',,5779KLLMMMr   asciic                    | j                             |          }|j        }t          j        |          }|r|                    |          }t          |d          5 }|                    |           d d d            n# 1 swxY w Y   t          j	        |          }|rt          j        |           t          j        | |          }	| j                             |	j                  }|j        |	j        k    rt!          d          | j                             |	d           |rt%          ||dk    rd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encoder6   r7   r   r=   r   r>   r
   
_from_pathrevisiondown_revision	Exceptionadd_revisionr$   )
	scriptdirrev_idcontentencodingr'   oldr   fpr?   r	   s
             r   write_scriptr      s    
 
-
-f
5
5C8Dog&&G +..**	dD		 R
              &t,,H 
	(y$//F

 
-
-fo
>
>C
F000C
 
 	
 '''>>> 
z-AAA))x	
 	
 	
 	
 	

 
s   A??BBc                    dd l }|                    |            |dk    rjt          j        |           }t          j        j        d         }t          j        	                    |           \  }}||z   }t          j        ||           |}n|dv sJ t          j        |           }t          j        |t          j                  sJ t          j        |            d S )Nr   r   )r   r   )
py_compilecompiler   r=   	importlib	machineryBYTECODE_SUFFIXESr   r   splitextr1   moverl   rm   r>   )r   styler   r?   suffixfilepathextsimple_pyc_paths           r   r$   r$     s    t*400$6q9((..#"V+Ho..."-----*4009Xrw'''''IdOOOOOr   c           	         t          j                    }t          j                    }t          j                    }t          j        |           } |j        |ddd           t          ||d|z              |j        |dd|           t          ||d| d| d	d
            |j        |dd|           t          ||d|d|d           |||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 = ''
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   )r(   abcr	   s        r   three_rev_fixturer   1  s5   AAA(--FFQdHHHH		  !	  , FQdCCCC			 	 	 	 	  '   , FQdCCCC	" 11aaa!	  * a7Nr   c           	         t          j                    }t          j                    }t          j                    }t          j        |           } |j        |d|dd           t          ||d|d|d            |j        |d|dd           t          ||d|d|d	            |j        |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er:   r	   s           r   multi_heads_fixturer   ~  sN    	AAA(--FF	QtT    	" 11aaa!	  , F	QtT    	" 11aaa!	  , F	QtT    	" 11aaa!	  , a7Nr   c                 z   t           j                            t                      d          }dt          j        j        j        v }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   rF   z, z

c              3   6   K   | ]\  }}d |d|j         V  dS )[z]
sqlalchemy.url = N)rE   ).0keyvalues      r   	<genexpr>z*_multidb_testing_config.<locals>.<genexpr>  sI        C +.##uyy9     r   rO   z(
sourceless = false
sqlalchemy.future = rR   rS   z
databases = aH  
[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   r   rW   rX   rY   keysitemsrZ   )r-   r9   r[   	databasess       r   _multidb_testing_configr     s     7<<.00)<<D FI$7$BB		',,..))Ikk  !--//    G
 B 44,9'99999gggA 	O" " "r   )Tr   F)rA   FN)FF)FrU   )r`   rU   )ro   F)importlib.machineryr   r   r1   ru   r.   r   r   rU   r   rI   r   r	   r
   r   r   r*   r3   r;   r@   rL   r\   r_   rd   rZ   r   r   r$   r   r   r   r   r   r   <module>r      s       				   % % % % % % ( ( ( ( ( ( " " " " " "                         $ $ $ $ $ $     D2 2 2    (P P P P1 1 1 1h. . . .b% % % %P  N N N >C
 
 
 
8  *J J JZV V Vr/ / / / /r   