U
    !Jj2                     @  s   d dl mZ d dlmZ d dlm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dlmZ ddlmZ ddlmZ ddlmZ ddlmZ e	 G dd dZdaG dd dZdS )    )annotations)Callable)SequenceN   )
assertions)config)eq_)drop_all_tables_from_metadata)picklers   )Column)func)Integer)select)Table)DeclarativeBase)MappedAsDataclassregistryc                   @  s\  e Zd ZU dZded< dZded< dZded< dZded	< d
Zded< ded< d2ddZ	e
 dd Ze
 dd Ze
 dd Ze
 dd Ze
 dd Ze
jdd Ze
jdd Ze
 dd Ze
 d d! Ze
 d"d# Ze
 d$d% Ze
je d&d'd( Ze
 d)d* Ze
 d+d, Ze
jd-d. d/D d&d0d1 ZdS )3TestBase ztuple[str, ...]__requires____unsupported_on__Nztuple[str, ...] | str | None__only_on__z#Sequence[Callable[[], bool]] | None__skip_if__Fbool"__leave_connections_for_teardown__Z__backend__c                 C  s   |st |d S N)AssertionError)selfvalmsgr   r   /var/www/api.dyntland.com/public_html/python_social_comments/venv/lib/python3.8/site-packages/sqlalchemy/testing/fixtures/base.pyassert_6   s    zTestBase.assert_c                 c  s"   t jj}d t j_d V  |t j_d S r   )r   dbZ_compiled_cache)r   _cacher   r   r"   nocache9   s    zTestBase.nocachec              	   c  s0   t | dd ptj}| }|V  W 5 Q R X d S Nbind)getattrr   r$   connect)r   engconnr   r   r"   connection_no_trans@   s    
zTestBase.connection_no_transc                 c  sJ   t | dd ptj}| }| }|a|V  d a|jr>|  |  d S r'   )	r)   r   r$   r*   begin_connection_fixture_connectionZ	is_activerollbackclose)r   r+   r,   transr   r   r"   
connectionG   s    zTestBase.connectionc                 #  sj   g  g d fdd	}|V  D ]}z|   W q"   Y q"X q" D ]}z|  W qF   Y qFX qFd S )NFc                   s     |  |r |  d S r   )append)resultconsumeto_closeZ
to_consumer   r"   goa   s    
z/TestBase.close_result_when_finished.<locals>.go)F)allr1   )r   r9   rr   r7   r"   close_result_when_finished\   s    z#TestBase.close_result_when_finishedc              	   c  s8   t |tt tddddid}|V  |  d S )N2   mysqlmariadboracle)metadatatype_annotation_map)r   strsaStringwith_variantdispose)r   rA   regr   r   r"   r   r   s        zTestBase.registryc                 #  s,   | G  fdddt }|V  |j  d S )Nc                      s.   e Zd Z Zee eddddiZdS )z TestBase.decl_base.<locals>.Baser=   r>   r?   r@   N	__name__
__module____qualname__rA   rC   rD   rE   rF   rB   r   Z_mdr   r"   Base   s       rN   )r   r   rG   r   rA   rN   r   rM   r"   	decl_base   s    zTestBase.decl_basec                 #  s.   | G  fdddt t}|V  |j  d S )Nc                      s,   e Zd Z Zee edddiZdS )z#TestBase.dc_decl_base.<locals>.Baser=   r>   r?   NrI   r   rM   r   r"   rN      s      rN   )r   r   r   rG   rO   r   rM   r"   dc_decl_base   s    zTestBase.dc_decl_basec                 c  s
   |V  d S r   r   )r   future_enginer3   r   r   r"   future_connection   s    zTestBase.future_connectionc                 c  s
   d V  d S r   r   )r   r   r   r"   rR      s    zTestBase.future_enginec                 #  s0   ddl m  d fdd	}|V   jd d S )Nr   enginesFc                   s$   |d kri }d|d<  j | ||dS )Nfixturescopeurloptionsasynciotesting_enginerX   rT   r   r"   gen_testing_engine   s    z3TestBase.testing_engine.<locals>.gen_testing_enginerV   )NNF) rU   Ztesting_reaperZ_drop_testing_engines)r   r^   r   rT   r"   r]      s       zTestBase.testing_enginec                   s    fdd}|S )Nc                    s   d| d<  f | S )NTr[   r   )kwr\   r   r"   r9      s    z)TestBase.async_testing_engine.<locals>.gor   )r   r]   r9   r   r\   r"   async_testing_engine   s    zTestBase.async_testing_engine)paramsc                 c  s   |j V  d S r   )param)r   requestr   r   r"   r
      s    zTestBase.picklersc              	   c  st   ddl m} | }||j_|V  |j`trdt rdt }|  t	  t
|t W 5 Q R X nt
|tj dS )z>Provide bound MetaData for a single test, dropping afterwards.r   )schemaN)sqlre   ZMetaDatainstancerA   r/   Zin_transactionZget_transactionr0   r.   r	   r   r$   )r   rd   re   rA   r2   r   r   r"   rA      s"    
 zTestBase.metadatac                 #  s<   ddl m d   fdd}|V   d k	s0tj = d S )Nr   r   c                   s    | j   std| j < | S )Nzname is required)namer   impls)Zdialect_clsrh   r   r   r"   r9      s    
z'TestBase.thirdparty_dialect.<locals>.go)Zdialectsr   r   ri   )r   r9   r   rj   r"   thirdparty_dialect   s    zTestBase.thirdparty_dialectc                 C  s*   g | ]"}d D ]}dD ]}|||fqqqS ))noneexecuter.   TFr   ).0r0   second_operationbegin_nestedr   r   r"   
<listcomp>   s     zTestBase.<listcomp>rn   c                   sP   |j \ td|tdtt| dd p.tj}|  fdd}|S )Ntestdatar(   c                   s  |   P} r@tjjjs&td |r4|  }n| }| |r\|  ddi n| ddi r~|	  n|
  dkrttjjd\ dkr|r|  ddi q| ddi ndkr|r|   n|  W 5 Q R X W 5 Q R X |r(|  dd	i n| dd	i n|r\|  ddi n| ddi |rr| 	  n| 
  nr|	  n|
  dkrVttjjd dkr |r|  ddi n| ddi nLdkr*t|dr |   n|    n"d
krL|rD|   n|  W 5 Q R X W 5 Q R X d} rr|d7 }s|d7 }|rt| tt | n2|  $}t|tt | W 5 Q R X d S )Nzsavepoints not enabledrt   
   rl   zCan't operate on closed transaction inside context manager.  Please complete the context manager before emitting further commands.rm      r.      rq   r      )r.   r   requirementsZ
savepointsZenabledZ	skip_testrq   rm   insertr0   commitr   Zexpect_raises_messagerD   excZInvalidRequestErrorhasattrr   Zscalarr   r   countselect_fromr*   )subjectZtrans_on_subjectZexecute_on_subjectr2   Znested_transZexpected_committedr,   rq   r0   rp   tr   r"   run_test  s    




 











z4TestBase.trans_ctx_manager_fixture.<locals>.run_test)rc   r   r   r   r)   r   r$   create)r   rd   rA   r+   r   r   r   r"   trans_ctx_manager_fixture   s    
wz"TestBase.trans_ctx_manager_fixture)N)rJ   rK   rL   r   __annotations__r   r   r   r   r#   r   rV   r&   r-   r3   r<   r   rP   rQ   rS   rR   r]   ra   r
   rA   rk   r   r   r   r   r"   r      sR   















r   c                   @  s   e Zd ZdZdS )FutureEngineMixinz alembic's suite still using thisN)rJ   rK   rL   __doc__r   r   r   r"   r     s   r   )
__future__r   collections.abcr   r   Z
sqlalchemyrD   r_   r   r   r   utilr	   r
   r   r   r   r   r   Zormr   r   r   Zmark_base_test_classr   r/   r   r   r   r   r"   <module>
   s,     c