
    D6i                     b    d dl Z d dlZd dlZd dlZd dlZd dlZddZe j                  dd       Z	y)    Nc                     t        | t              st        | j                        }n| }fd}nd }	 t        j                  ||      S # t
        $ r t        j                  |d|      Y S w xY w)zCreate a mock SQLAlchemy engine from the passed engine or bind URL.

    :param bind: A SQLAlchemy engine or bind URL to mock.
    :param stream: Render all DDL operations to the stream.
    c           	      J    G d dt        | j                  j                                    }t         |j                  |       j	                  |             }t        j                  dd|      }|j                  d      j                         }j                  d|z         y )Nc                   $     e Zd Zd Z fdZ xZS )2create_mock_engine.<locals>.dump.<locals>.Compilerc                 N    | j                  |j                  |j                        S N)render_literal_valuevaluetype)self	bindparamargskwargss       b/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/sqlalchemy_utils/functions/mock.pyvisit_bindparamzBcreate_mock_engine.<locals>.dump.<locals>.Compiler.visit_bindparam   s    44Y__innUU    c                     t        |t              rt        |      S t        |t        j                  t        j                  f      rd|z  S t
        |   ||      S )Nz'%s')
isinstanceintstrdatetimedatesuperr	   )r   r
   type_	__class__s      r   r	   zGcreate_mock_engine.<locals>.dump.<locals>.Compiler.render_literal_value   sL    !%-"5z)#EHMM8;L;L+MN%~- 77uEEr   )__name__
__module____qualname__r   r	   __classcell__)r   s   @r   Compilerr      s    VF Fr   r    z\n+
z
%s;)	r   	_compilerdialectr   processresubstripwrite)sqlr   r   r    textenginestreams        r   dumpz create_mock_engine.<locals>.dump   s~    F4fnn => F x4<<SABD66&$-D::d#))+DLL4(r   c                       y r    )r   kws     r   r-   z create_mock_engine.<locals>.dump/   s    r   )executormock)strategyr1   )r   r   urlsacreate_mock_engineAttributeErrorcreate_engine)bindr,   bind_urlr-   r+   s    `  @r   r6   r6   
   s~     dC txx= 	),	L&&x$? M  L!!(VdKMLs   A !A65A6c              #     K   |t        j                         }t        j                         dd D ]>  }	 |d   }d| z  }t	        ||j
                  |j                         |j                  d   } n t        d|       t        ||      |j                  d<   t	        d| z  |j
                  |j                         | ||j                  d<   t	        d	| z  |j
                  |j                         t	        d
|j
                  |j                         t	        d|j
                  |j                         y# t        $ r Y w xY ww)aU  Mocks out the engine specified in the passed bind expression.

    Note this function is meant for convenience and protected usage. Do NOT
    blindly pass user input to this function as it uses exec.

    :param engine: A python expression that represents the engine to mock.
    :param stream: Render all DDL operations to the stream.
    N   r   z__target = %s__targetzNot a valid python expression__mockz%s = __mockz%s = __targetzdel __targetz
del __mock)
ioStringIOinspectstackexec	f_globalsf_locals	Exception
ValueErrorr6   )r+   r,   frame
expressiontargets        r   mock_enginerK   9   s"     ~
 $ B	!HE(61JU__enn=^^J/FB 8&AA  2&&AENN8 		%..A L "(ENN:6	!5??ENNC%..9u7/  		s)   1E:D4.CE4	E=E EEr   )

contextlibr   rA   r?   r%   
sqlalchemyr5   r6   contextmanagerrK   r/   r   r   <module>rO      s7       	 	 ,^ 18 18r   