
    ZeIi-                        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,dZd Zd Zd Z	 d-d Zd! Zd" Z d# Z!d$ Z"d%e#d&e#fd'Z$dS ).    N)Path)config)	provision   )util   )command)script)Script)ScriptDirectoryc                  <    t           j        rdt           j         S dS )Nscratch_scratch)r   FOLLOWER_IDENT     X/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/alembic/testing/env.py_get_staging_directoryr      s#     4)2444yr   TgenericFc                    t                      }| rt          t                      d          }t          j                            |          rJ d|z              t          j        |||           |rY	 t          j	        |d           n# t          $ r Y nw xY w|dv s
J |            t          t          |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
_join_pathr   ospathexistsr	   initr   load_python_fileAttributeErrormake_sourcelessr
   r   from_config)creater   
sourcelesscfgr!   scs         r   staging_envr,      s7   


C 022I>>7>>$'' 	
 	
@4G	
 	
 	
 	S$2222 		%dH5555!      "    	  
 4**&*44		(  
 
		+	+C	0	0BIs   3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_envr5   ;   sH    ******$$&&&
M(**D11111r   c                     t          t                      d          }t          |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   openwrite)txtdir_r!   fs       r   script_file_fixturer=   B   s    ,..	::Dd,--D	dC A	                 s   A  A$'A$c                 8   t          t                      d          }d| z   } t          |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   r7   )r   r   r   pyc_file_from_pathr    unlinkr8   r9   )r:   r;   r!   pyc_pathr<   s        r   env_file_fixturerB   I   s    ,..	::D	
 	  dH%%D&t,,H 
	(	dC A	                 s   ,BBBfoo.dbc                     t          t                      d          }d|d| }|r||d<   t          j        |||          S )Nr   
sqlite:////scope)urlfutureoptions)r   r   testing_utiltesting_engine)tempnamerI   rG   rJ   r;   rH   s         r   _sqlite_file_dbrN   ]   sT    ,..	::DD#ttXX
.C ! &3vwOOOOr   c                     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   rE   z/foo.dbrI   
[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)   rI   r;   rH   sqlalchemy_futures        r   _sqlite_testing_configr]   e   s    ,..	::D
$t
$
$
$CN8vy/B/M#M#	#	 #	 #	 #	 #/ff	#	 #	
  18b#	 #	 #	% % %r   rV   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   rI   zsqlite:///%s/foo.dbrP   rQ   z
sqlalchemy.future = rS   rT   rR   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
    rW   )r)   extra_version_locationr;   r\   rH   s        r   _multi_dir_testing_configr`      s    ,..	::D FI$7$BB
$
&C!	!	 !	 !	 !	  1=VVg	!	 !	
 #/ff!	 !	 !	 !	 !	# # #r   
postgresqlc                     t          t                      d          }t          d| dt          j        |           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
directivesr;   s      r   _no_sql_pyproject_configrj      ss     ,..	::D		 	 
	 	 			 	 	$ $ $r   c           	      l    t          t                      d          }t          d| d|  d| d          S )rc   r   z
[alembic]
script_location =rQ   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   r[   rg   s      r   _no_sql_testing_configrl      sa     ,..	::D		 	 	 	 		 	 	     r   c                     t          |          }t          |j        d          5 }|                    |            d d d            n# 1 swxY w Y   |S Nr7   )r[   r8   toml_file_namer9   )tomltextinitextr*   r<   s       r   rd   rd     s    
W
%
%C	c #	&	& !	              Js   AAAc                     t                      }t          |j        d          5 }|                    |            d d d            n# 1 swxY w Y   |S rn   )r   r8   config_file_namer9   )textr*   r<   s      r   r[   r[     s    


C	c"C	(	( A	              Js   AA
A
c                  $   ddl m}  t          j        t	                      t          j                  s t          j        t	                                  | t          t	                      d          t          t	                      d                    S )Nr   Configztest_alembic.inizpyproject.toml)alembic.configrw   r    accessr   F_OKmkdirr   rv   s    r   r   r      s    %%%%%%9+--rw77 +
'))***6)++-?@@)++-=>>  r   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!   re   rf   encoder8   r9   r   r?   r    r@   r   
_from_pathrevisiondown_revision	Exceptionadd_revisionr&   )
	scriptdirrev_idcontentencodingr)   oldr!   fprA   r
   s
             r   write_scriptr   +  s    
 
-
-f
5
5C8Dog&&G +..**	dD		 R
              &t,,H 
	(y$//F

 
-
-fo
>
>C
F000LMMM'''>>> 
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!   splitextr3   movery   rz   r@   )r!   styler   rA   suffixfilepathextsimple_pyc_paths           r   r&   r&   E  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| 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   Z  sM   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			 	 	 	 	  ( 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     s~    	AAA(--FF	QtT    			 	 	 	 	  * F	QtT    			 	 	 	 	  * F	QtT    			 	 	 	 	  * a7Nr   c                 Z   t          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   rI   z, z

c              3   6   K   | ]\  }}d | d|j          V  dS )[z]
sqlalchemy.url = N)rH   ).0keyvalues      r   	<genexpr>z*_multidb_testing_config.<locals>.<genexpr>  sL        C 	1C00UY00     r   rP   z(
sourceless = false
sqlalchemy.future = rS   rT   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   rX   rY   rZ   joinkeysitemsr[   )r/   r;   r\   	databasess       r   _multidb_testing_configr     s     ,..	::D FI$7$BB		',,..))Ikk  !--//    G
 		 	  1=VVg		 	
 	 	 		 	 	! ! !r   r   morec                 n    t           t          |           j        |                                           S )N)strr   joinpathas_posix)r   r   s     r   r   r   ,  s-    "tDzz"D)2244555r   )Tr   F)rC   FN)FF)FrV   )ra   rV   )r|   F)%importlib.machineryr   r    pathlibr   r3   re   r0   r   r   rV   r   rK   r	   r
   r   r   r   r,   r5   r=   rB   rN   r]   r`   rj   rl   rd   r[   r   r   r&   r   r   r   r   r   r   r   r   <module>r      sC       				         % % % % % % ( ( ( ( ( ( " " " " " "                         $ $ $ $ $ $     D2 2 2    (P P P P+ + + +\) ) ) )X) ) ) )X$ $ $ $N       >C
 
 
 
4  *H H HVS S Sl. . .b6S 6 6 6 6 6 6 6r   