B
    \                 @   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   @lib/python3.7/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 d |   |  X fdd}ttjj|dd}t|| _|| _	t
|| _|   z| jtjd W d | j  |  X d S )Nc                  s      S )N)recorderr   )creatordbapi_sessionr   r   r      s    z3ReplayFixtureTest.test_invocation.<locals>.recorderF)r   Zuse_native_hstore)ctxc                  s      S )N)playerr   )r   r   r   r   )   s    z1ReplayFixtureTest.test_invocation.<locals>.player)ReplayableSessionr   ZdbZpoolZ_creatorr   Zurlr	   Zmetadataenginer   Zsessionsetup_engine
_run_stepsr   teardown_engineZdisposer   Zcount_functionsclose)r   r   r   r   r   )r   r   r   test_invocation   s0    






z!ReplayFixtureTest.test_invocationc             C   s   d S )Nr   )r   r   r   r   r   ;   s    zReplayFixtureTest.setup_enginec             C   s   d S )Nr   )r   r   r   r   r   >   s    z!ReplayFixtureTest.teardown_enginec             C   s
   t  d S )N)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rFe	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   s    g | ]}| d stt|qS )_)
startswithgetattrtypes).0tr   r   r   
<listcomp>S   s    zReplayableSession.<listcomp>c             C   s   g | ]}t t|qS r   )r'   r(   )r)   r*   r   r   r   r+   V   s   )FunctionTypeBuiltinFunctionType
MethodTypeBuiltinMethodType
LambdaTypeZUnboundMethodTypec             C   s    g | ]}| d stt|qS )r%   )r&   r'   r(   )r)   r*   r   r   r   r+   e   s   c             C   s"   g | ]}t |tst|n|qS r   )
isinstancetype)r)   r*   r   r   r   r+   l   s   c             C   s   g | ]}t t|qS r   )r'   r(   )r)   r*   r   r   r   r+   r   s   )r,   r-   r.   r/   r0   c             C   s   t  | _d S )N)r   buffer)r   r   r   r   __init__~   s    zReplayableSession.__init__c             C   s   |  | j|S )N)Recorderr3   )r   baser   r   r   r      s    zReplayableSession.recorderc             C   s   |  | jS )N)Playerr3   )r   r   r   r   r      s    zReplayableSession.playerc               @   s0   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 )N)_buffer_subject)r   r3   subjectr   r   r   r4      s    z#ReplayableSession.Recorder.__init__c                sZ    fdddD \}}|||}t |tjkrH|tj t  ||S || |S d S )Nc                s   g | ]}t  |qS r   )object__getattribute__)r)   x)r   r   r   r+      s   z7ReplayableSession.Recorder.__call__.<locals>.<listcomp>)r9   r8   )r2   r   NativesappendCallable)r   argsr   r:   r3   resultr   )r   r   __call__   s    


z#ReplayableSession.Recorder.__call__c             C   s   | j S )N)r9   )r   r   r   r   _sqla_unwrap   s    z'ReplayableSession.Recorder._sqla_unwrapc                s   yt  |S  tk
r    Y nX  fdddD \}}yt|||}W n" tk
rn   |tj  Y n8X t|tjkr|tj t ||S || |S d S )Nc                s   g | ]}t  |qS r   )r;   r<   )r)   r=   )r   r   r   r+      s   z?ReplayableSession.Recorder.__getattribute__.<locals>.<listcomp>)r9   r8   )	r;   r<   AttributeErrorr2   r?   r   NoAttributer>   r@   )r   keyr:   r3   rB   r   )r   r   r<      s     

z+ReplayableSession.Recorder.__getattribute__N)r    r!   r"   r4   rC   propertyrD   r<   r   r   r   r   r5      s   r5   c               @   s0   e Zd Zdd Zdd Zedd Zdd Zd	S )
zReplayableSession.Playerc             C   s
   || _ d S )N)r8   )r   r3   r   r   r   r4      s    z!ReplayableSession.Player.__init__c             O   s*   t | d}| }|tjkr"| S |S d S )Nr8   )r;   r<   popleftr   r@   )r   rA   r   r3   rB   r   r   r   rC      s
    
z!ReplayableSession.Player.__call__c             C   s   d S )Nr   )r   r   r   r   rD      s    z%ReplayableSession.Player._sqla_unwrapc             C   s`   yt | |S  tk
r    Y nX t | d}| }|tjkrD| S |tjkrXt|n|S d S )Nr8   )r;   r<   rE   rI   r   r@   rF   )r   rG   r3   rB   r   r   r   r<      s    


z)ReplayableSession.Player.__getattribute__N)r    r!   r"   r4   rC   rH   rD   r<   r   r   r   r   r7      s   r7   N)r    r!   r"   __doc__r;   r@   rF   r
   Zpy2ksetdirr(   
differencer>   union__builtins__valuesr4   r   r   r5   r7   r   r   r   r   r   E   s(   

.r   )collectionsr   r#   r(    r   r   r   r   r	   r
   Zormr   ZTestBaser   r;   r   r   r   r   r   <module>   s   7