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

config = context.config
r   r6   )r   r   r   pyc_file_from_pathr   unlinkr7   r8   )r9   r:   r    pyc_pathr;   s        r   env_file_fixturerA   I   s~    ,.	:D	
 	  dH%D&&t,H
		(	dC A	  s   A99Bc                 x    t        t               d      }d|d| }|r||d<   t        j                  |||      S )Nr   
sqlite:////scope)urlfutureoptions)r   r   testing_utiltesting_engine)tempnamerG   rE   rH   r:   rF   s         r   _sqlite_file_dbrL   ]   s>    ,.	:D#X
.C &&3vwOOr   c                     t        t               d      }d| d}|xs& dt        j                  j                  j
                  v }t        d| d| d| rdnd	 d
|rdnd d	      S )Nr   rC   z/foo.dbrG   
[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(   rG   r:   rF   sqlalchemy_futures        r   _sqlite_testing_configr[   e   s    ,.	:DtfG
$CN8vyy/B/B/M/M#M&  "f0 10b 9 :#	% %r   c                     t        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   rG   zsqlite:///%s/foo.dbrN   rO   z
sqlalchemy.future = rQ   rR   rP   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
    rU   )r(   extra_version_locationr:   rZ   rF   s        r   _multi_dir_testing_configr^      s    ,.	:D FII$7$7$B$BB
$
&C&  0Vg> ?"f0 1   	" "r   c           	      T    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 =rO   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   rY   )dialect
directivesr:   s      r   _no_sql_testing_configrb      sI     ,.	:D   		   r   c                     t               }t        |j                  d      5 }|j                  |        d d d        |S # 1 sw Y   |S xY w)Nr6   )r   r7   config_file_namer8   )textr)   r;   s      r   rY   rY      sA    

C	c""C	( A	JJs	   =Ac                      ddl m}  t        j                  t	               t        j
                        st        j                  t	                       | t        t	               d            S )Nr   Configztest_alembic.ini)alembic.configrh   r   accessr   F_OKmkdirr   rg   s    r   r   r      sB    %99+-rww7
')**357IJKKr   c                    | j                   j                  |      }|j                  }t        j                  |      }|r|j                  |      }t        |d      5 }|j                  |       d d d        t        j                  |      }|rt        j                  |       t        j                  | |      }	| j                   j                  |	j                        }|j                  |	j                  k7  rt!        d      | j                   j#                  |	d       |rt%        ||dk(  rdnd       y y # 1 sw Y   xY w)Nwbz2Can't change down_revision on a refresh operation.T)_replacer   r   r   )revision_mapget_revisionr    textwrapdedentencoder7   r8   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
5C88Doog&G..*	dD	 R
&&t,H
		(y$/F

 
 
-
-foo
>C
F000LMM'''>z-AA)x	
  s   D55D>c                    dd l }|j                  |        |dk(  rrt        j                  |       }t        j
                  j                  d   }t        j                  j                  |       \  }}||z   }t        j                  ||       |}n|dv sJ t        j                  |       }t        j                  |t        j                        sJ t        j                  |        y )Nr   r   )r   r   )
py_compilecompiler   r>   	importlib	machineryBYTECODE_SUFFIXESr   r    splitextr2   moverj   rk   r?   )r    styler   r@   suffixfilepathextsimple_pyc_paths           r   r%   r%     s    t**40$$66q9((.#"V+Ho."----**4099Xrww'''IIdOr   c           	         t        j                         }t        j                         }t        j                         }t        j                  |       } |j                  |ddd       t        ||d| d        |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 = '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   )r)   abcr
   s        r   three_rev_fixturer   #  s   AAA((-FFQdH	C 	* FQdC	C  	  ', FQdC	C  	( 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   n  s$    	AAA((-FF	QtT 	C  	* F	QtT 	C  	* F	QtT 	C  	* a7Nr   c                 8   t        t               d      }dt        j                  j                  j
                  v }dj                  | j                               }dj                  d | j                         D              } t        d| d|rdnd	 d
| d|  d	      S )z?alembic.ini fixture to work exactly with the 'multidb' templater   rG   z, z

c              3   F   K   | ]  \  }}d | d|j                      yw)[z]
sqlalchemy.url = N)rF   ).0keyvalues      r   	<genexpr>z*_multidb_testing_config.<locals>.<genexpr>  s.      C C5$UYYK0s   !rN   z(
sourceless = false
sqlalchemy.future = rQ   rR   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   rV   rW   rX   joinkeysitemsrY   )r.   r:   rZ   	databasess       r   _multidb_testing_configr     s     ,.	:D FII$7$7$B$BB		',,.)Ikk !--/ G
 & 0Vg> ?K 	 
	! !r   r   morec                 `    t         t        |       j                  | j                               S )N)strr   joinpathas_posix)r   r   s     r   r   r     s(    "tDz""D)22455r   )TgenericF)zfoo.dbFN)FF)FrT   )
postgresqlrT   )asciiF)#importlib.machineryr   r   pathlibr   r2   rr   r/   r   r   rT   r   rI   r	   r
   r   r   r   r+   r4   r<   rA   rL   r[   r^   rb   rY   r   r   r%   r   r   r   r   r   r   r   r   <module>r      s     	    % ( "     $D2(P+\(V$NL >C
4*HVSl.b6S 6 6r   