o
    i                     @   s   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 G dd dejZG dd deZdS )    )dequeN   )config)fixtures)	profiling   )create_engine)MetaData)util)Sessionc                   @   s:   e Zd Zejdd Zdd Zdd Zdd Zd	d
 Z	dS )ReplayFixtureTestc                 o   s    d V  d S N )selfargkwr   r   \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/sqlalchemy/testing/replay_fixture.py
_dummy_ctx   s   
zReplayFixtureTest._dummy_ctxc                    s  t  tjjj  fdd}ttjj|dd}t|| _|| _	t
|| _|   z| j| jd W |   |  n	|   |  w fdd}ttjj|dd}t|| _|| _	t
|| _|   z| jtjd W | j  |  d S | j  |  w )Nc                      s      S r   )recorderr   creatordbapi_sessionr   r   r         z3ReplayFixtureTest.test_invocation.<locals>.recorderF)r   use_native_hstore)ctxc                      s      S r   )playerr   )r   r   r   r   )   s   z1ReplayFixtureTest.test_invocation.<locals>.player)ReplayableSessionr   dbpool_creatorr   urlr	   metadataenginer   sessionsetup_engine
_run_stepsr   teardown_enginedisposer   count_functionsclose)r   r   r"   r   r   r   r   test_invocation   s<   











z!ReplayFixtureTest.test_invocationc                 C      d S r   r   r   r   r   r   r$   ;      zReplayFixtureTest.setup_enginec                 C   r+   r   r   r,   r   r   r   r&   >   r-   z!ReplayFixtureTest.teardown_enginec                 C   s   t  r   )NotImplementedError)r   r   r   r   r   r%   A   s   zReplayFixtureTest._run_stepsN)
__name__
__module____qualname__
contextlibcontextmanagerr   r*   r$   r&   r%   r   r   r   r   r      s    
(r   c                   @   s   e Zd ZdZe Ze Zejr#e	dd e
eD dd dD Zne	dd e
eD dd e D dd d	D Zd
d Zdd Zdd ZG dd deZG dd deZdS )r   a  A simple record/playback tool.

    This is *not* a mock testing class.  It only records a session for later
    playback and makes no assertions on call consistency whatsoever.  It's
    unlikely to be suitable for anything other than DB-API recording.

    c                 C       g | ]}| d stt|qS _
startswithgetattrtypes.0tr   r   r   
<listcomp>S   s     zReplayableSession.<listcomp>c                 C      g | ]}t t|qS r   r9   r:   r;   r   r   r   r>   U       )FunctionTypeBuiltinFunctionType
MethodTypeBuiltinMethodType
LambdaTypeUnboundMethodTypec                 C   r4   r5   r7   r;   r   r   r   r>   d   s    c                 C   s"   g | ]}t |tst|n|qS r   )
isinstancetyper;   r   r   r   r>   k   s    c                 C   r?   r   r@   r;   r   r   r   r>   q   rA   )rB   rC   rD   rE   rF   c                 C   s   t  | _d S r   )r   bufferr,   r   r   r   __init__~   r   zReplayableSession.__init__c                 C   s   |  | j|S r   )RecorderrJ   )r   baser   r   r   r      s   zReplayableSession.recorderc                 C   s   |  | jS r   )PlayerrJ   r,   r   r   r   r      r   zReplayableSession.playerc                   @   0   e Zd Zdd Zdd Zedd Zdd Zd	S )
zReplayableSession.Recorderc                 C   s   || _ || _d S r   )_buffer_subject)r   rJ   subjectr   r   r   rK      s   
z#ReplayableSession.Recorder.__init__c                    sZ    fdddD \}}||i |}t |tjvr&|tj t  ||S || |S )Nc                       g | ]}t  |qS r   object__getattribute__r<   xr,   r   r   r>          
z7ReplayableSession.Recorder.__call__.<locals>.<listcomp>rQ   rP   )rI   r   NativesappendCallable)r   argsr   rR   rJ   resultr   r,   r   __call__   s   


z#ReplayableSession.Recorder.__call__c                 C   s   | j S r   )rQ   r,   r   r   r   _sqla_unwrap   s   z'ReplayableSession.Recorder._sqla_unwrapc                    s   zt  |W S  ty   Y nw  fdddD \}}z
t|||}W n ty4   |tj  w t|tjvrI|tj t ||S || |S )Nc                    rS   r   rT   rW   r,   r   r   r>      rY   z?ReplayableSession.Recorder.__getattribute__.<locals>.<listcomp>rZ   )	rU   rV   AttributeErrorrI   r\   r   NoAttributer[   r]   )r   keyrR   rJ   r_   r   r,   r   rV      s&   


z+ReplayableSession.Recorder.__getattribute__Nr/   r0   r1   rK   r`   propertyra   rV   r   r   r   r   rL      s    
rL   c                   @   rO   )
zReplayableSession.Playerc                 C   s
   || _ d S r   )rP   )r   rJ   r   r   r   rK      s   
z!ReplayableSession.Player.__init__c                 O   s&   t | d}| }|tju r| S |S NrP   )rU   rV   popleftr   r]   )r   r^   r   rJ   r_   r   r   r   r`      s
   
z!ReplayableSession.Player.__call__c                 C   r+   r   r   r,   r   r   r   ra      s   z%ReplayableSession.Player._sqla_unwrapc                 C   sZ   zt | |W S  ty   Y nw t | d}| }|tju r"| S |tju r+t||S rg   )rU   rV   rb   rh   r   r]   rc   )r   rd   rJ   r_   r   r   r   rV      s   

z)ReplayableSession.Player.__getattribute__Nre   r   r   r   r   rN      s    
rN   N)r/   r0   r1   __doc__rU   r]   rc   r
   py2ksetdirr:   
differencer[   union__builtins__valuesrK   r   r   rL   rN   r   r   r   r   r   E   sF    .r   )collectionsr   r2   r:    r   r   r   r   r	   r
   ormr   TestBaser   rU   r   r   r   r   r   <module>   s    7