U
    x^>7                     @   sp  d dl 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d	Z	d=d
dZ
G dd deZdd Zdd Zd>ddZd?ddZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZejZd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd@d,d-Zed.d/ ZdAd0d1Z d2d3 Z!dBd4d5Z"dCd6d7Z#dDd8d9Z$d:d; Z%dS )E    N   config   )util)	decorator)inspect_getfullargspecc                 C   s    t  }t| |}|j| |S N)compound_as_predicateskipsadd	predicatereasonZrulepred r   E/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/exclusions.pyskip_if   s    
r   c                 C   s    t  }t| |}|j| |S r	   )r
   r   failsr   r   r   r   r   fails_if   s    
r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	dd Z
dd Zdd Zdd Zdd Zejdd Zdd Zdd Zd#ddZd$d d!Zd"S )%r
   c                 C   s"   t  | _t  | _t  | _i | _d S r	   )setr   r   tagscombinationsselfr   r   r   __init__"   s    zcompound.__init__c                 C   s
   |  |S r	   )r   r   otherr   r   r   __add__(   s    zcompound.__add__c                    sl   t  }|j| j |j| j |j| j |j fdd|jD  |j fdd|jD  |S )Nc                 3   s   | ]}| fV  qd S r	   r   ).0fkwr   r   	<genexpr>0   s     z,compound.with_combination.<locals>.<genexpr>c                 3   s   | ]}| fV  qd S r	   r   )r    sr"   r   r   r$   1   s     )r
   r   updater   r   r   )r   r#   copyr   r"   r   with_combination+   s    zcompound.with_combinationc                 G   sh   t  }|j| j |j| j |j| j |D ].}|j|j |j|j |j|j q4|S r	   r
   r   r&   r   r   )r   Zothersr'   r   r   r   r   r   4   s    zcompound.addc                 C   sH   t  }|jdd | jD  |jdd | jD  |j| j |S )Nc                 s   s   | ]}t |V  qd S r	   NotPredicater    failr   r   r   r$   A   s     z compound.not_.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r	   r*   )r    skipr   r   r   r$   B   s     r)   )r   r'   r   r   r   not_?   s
    zcompound.not_c                 C   s   |  tjS r	   )enabled_for_configr   _currentr   r   r   r   enabledF   s    zcompound.enabledc                 C   s&   | j | jD ]}||r dS qdS NFTr   unionr   )r   r   r   r   r   r   r0   J   s    zcompound.enabled_for_configc                    s    fdd| j | jD S )Nc                    s   g | ]}| r|  qS r   
_as_string)r    r   r   r   r   
<listcomp>R   s   z4compound.matching_config_reasons.<locals>.<listcomp>r4   r   r   r   r   r   matching_config_reasonsQ   s    
z compound.matching_config_reasonsc                 C   s$   t | j| o | p | j|S r	   )boolr   intersection)r   Zinclude_tagsexclude_tagsr   r   r   include_testX   s    zcompound.include_testc                 C   s<   | j |j  | j|j | j|j | j|j d S r	   )r   r&   r   r   r   r   r   r   r   _extend^   s    zcompound._extendc                    s<   t |dr|j  |S t fdd}||} |_|S )N_sa_exclusion_extendc                    s    j tj| f||S r	   )_dor   r1   )fnargsr#   r   r   r   decoratei   s    z#compound.__call__.<locals>.decorate)hasattrr@   r?   r   )r   rB   rD   Z	decoratedr   r   r   __call__d   s    
zcompound.__call__c              
   c   sl   t  }|j| j| j z
d V  W n2 tk
rX } z|tj|d  W 5 d }~X Y nX |	tjd  d S r	   )
r
   r   r&   r   r5   	Exception_expect_failurer   r1   _expect_success)r   Z	all_failsexr   r   r   fail_ifq   s    
"zcompound.fail_ifc                 C   sB   || j kr>|D ].\}}|| j | kr| j | | |kr dS qdS r3   )r   )r   combinationr   kvr   r   r   _check_combinations}   s    
zcompound._check_combinationsc              
   O   s   t |dkr6t|}tt|jdd  |dd  }nd }| jD ]8}| ||r@||r@dt |	|f }t
| q@z|||}	W n6 tk
r }
 z| j||
||jd W 5 d }
~
X Y nX | j|||jd |	S d S )Nr   z	'%s' : %s)name)lenr   listziprC   r   rO   r   Zget_current_test_namer7   Z	skip_testrG   rH   __name__rI   )r   cfgrB   rC   r#   ZinsprL   r.   msgZreturn_valuerJ   r   r   r   rA      s"    "
&zcompound._doblockc                 C   sl   | j D ]V}| ||r||rtjr8t|jddd}nt|}td||||f   qhqt	| d S )Nzutf-8ignore)errorsz%s failed as expected (%s): %s )
r   rO   r   Zpy2kunicodeencodestrprintr7   Zraise_from_cause)r   r   rJ   rL   rP   r-   Zstr_exr   r   r   rH      s    
zcompound._expect_failurec              	      sT   | j s
d S | j D ]>}| ||r| rtd|d fdd| j D f qd S )Nz Unexpected success for '%s' (%s) and c                 3   s   | ]}|  V  qd S r	   r6   r,   r   r   r   r$      s    z+compound._expect_success.<locals>.<genexpr>)r   rO   AssertionErrorjoin)r   r   rL   rP   r-   r   r   r   rI      s    
zcompound._expect_successN)rW   )rW   )rT   
__module____qualname__r   r   r(   r   r/   propertyr2   r0   r:   r>   r?   rF   
contextlibcontextmanagerrK   rO   rA   rH   rI   r   r   r   r   r
   !   s$   	



r
   c                 C   s
   t | gS r	   )r   )tagnamer   r   r   requires_tag   s    rg   c                 C   s   t  }|j|  |S r	   )r
   r   r&   )Ztagnamescompr   r   r   r      s    r   c                 C   s   t | } tt| |S r	   )r   r   r+   r   r   r   r   r   only_if   s    rj   c                 C   s   t | } tt| |S r	   )r   r   r+   ri   r   r   r   succeeds_if   s    rk   c                   @   s.   e Zd Zed	ddZd
ddZdddZdS )	PredicateNc                    s  t |tr |j|S t |tr:|r6|jd kr6||_|S t |ttfr`t fdd|D |S t |t	rrt
| S t |tjrtd|}|std| |d}|d}|drt	dd	 |dd
D nd }t
||||dS t|r t||S dstd| d S )Nc                    s   g | ]}  |qS r   )as_predicate)r    r   clsr   r   r8      s     z*Predicate.as_predicate.<locals>.<listcomp>z.([\+\w]+)\s*(?:(>=|==|!=|<=|<|>)\s*([\d\.]+))?z(Couldn't locate DB name in predicate: %rr   r      c                 s   s   | ]}t |V  qd S r	   )int)r    dr   r   r   r$      s     z)Predicate.as_predicate.<locals>.<genexpr>.)descriptionFzunknown predicate type: %s)
isinstancer
   rm   r0   rl   rt   rR   r   OrPredicatetupleSpecPredicater   string_typesrematch
ValueErrorgroupsplitcallableLambdaPredicater_   )ro   r   rt   tokensdbopspecr   rn   r   rm      s@    

 
 

 
zPredicate.as_predicateFc                 C   sV   | |}|r| }| j |r&|jj nd|r8|jj nd|rBdnd|rLdndd S )Nz<no driver>z<no database>zdoesn't supportzdoes support)driverZdatabaseZdoesnt_supportZdoes_support)rt   r   urlZget_driver_nameZget_backend_name)r   r   negateZbool_r   r   r   _format_description   s    

zPredicate._format_descriptionc                 C   s
   t  d S r	   )NotImplementedErrorr   r   r   r   r   r   r7     s    zPredicate._as_string)N)F)NF)rT   ra   rb   classmethodrm   r   r7   r   r   r   r   rl      s   #
rl   c                   @   s(   e Zd Zd	ddZdd Zd
ddZdS )BooleanPredicateNc                 C   s   || _ |pd| | _d S )Nz
boolean %s)valuert   )r   r   rt   r   r   r   r     s    zBooleanPredicate.__init__c                 C   s   | j S r	   )r   r9   r   r   r   rF     s    zBooleanPredicate.__call__Fc                 C   s   | j ||dS )Nr   r   r   r   r   r   r7     s    zBooleanPredicate._as_string)N)FrT   ra   rb   r   rF   r7   r   r   r   r   r     s   
r   c                	   @   sP   e Zd ZdddZejejejejej	ej
ejdd dZdd Zdd
dZdS )rx   Nc                 C   s   || _ || _|| _|| _d S r	   )r   r   r   rt   )r   r   r   r   rt   r   r   r   r     s    zSpecPredicate.__init__c                 C   s   | |d ko| |d kS )Nr   r   r   )valpairr   r   r   <lambda>'      zSpecPredicate.<lambda>)<>z==z!=z<=z>=inZbetweenc                 C   s   |j }d| j kr"| j d\}}n| j d  }}|r@|j|kr@dS |d k	rV|j|krVdS | jd k	r|d ksptdt|}t| jdr| jp| j| j }||| j	S dS d S )N+Fz%DBAPI version specs not supported yetrF   T)
r   r~   rP   r   r   r_   _server_versionrE   _opsr   )r   r   enginedialectr   versionoperr   r   r   rF   *  s    

zSpecPredicate.__call__Fc                 C   sh   | j d k	r| |S | jd kr8|r,d| j S d| j S n,|rPd| j| j| jf S d| j| j| jf S d S )Nznot %sz%sznot %s %s %sz%s %s %s)rt   r   r   r   r   r   r   r   r   r7   B  s    



zSpecPredicate._as_string)NNN)F)rT   ra   rb   r   operatorltgteqnelegecontainsr   rF   r7   r   r   r   r   rx     s   
rx   c                   @   s(   e Zd Zd	ddZdd Zd
ddZdS )r   Nc                    s`   t  }|d s  fdd| _n | _|p,d| _|p6i | _|rF|| _n jrV j| _nd| _d S )Nr   c                    s     S r	   r   )r   lambda_r   r   r   U  r   z*LambdaPredicate.__init__.<locals>.<lambda>r   zcustom function)r   r   rC   r#   rt   __doc__)r   r   rt   rC   r#   r   r   r   r   r   R  s    


zLambdaPredicate.__init__c                 C   s
   |  |S r	   r   r9   r   r   r   rF   a  s    zLambdaPredicate.__call__Fc                 C   s
   |  |S r	   r   r   r   r   r   r7   d  s    zLambdaPredicate._as_string)NNN)Fr   r   r   r   r   r   Q  s   
r   c                   @   s(   e Zd Zd	ddZdd Zd
ddZdS )r+   Nc                 C   s   || _ || _d S r	   )r   rt   )r   r   rt   r   r   r   r   i  s    zNotPredicate.__init__c                 C   s   |  | S r	   )r   r9   r   r   r   rF   m  s    zNotPredicate.__call__Fc                 C   s(   | j r| || S | j|| S d S r	   )rt   r   r   r7   r   r   r   r   r7   p  s    zNotPredicate._as_string)N)Fr   r   r   r   r   r+   h  s   
r+   c                   @   s:   e Zd ZdddZdd ZdddZd	d
 ZdddZdS )rv   Nc                 C   s   || _ || _d S r	   )
predicatesrt   )r   r   rt   r   r   r   r   x  s    zOrPredicate.__init__c                 C   s   | j D ]}||r dS qdS )NTF)r   )r   r   r   r   r   r   rF   |  s    
zOrPredicate.__call__Fc                    s*   r
d}nd}|  fdd| jD S )Nr^   z or c                 3   s   | ]}|j  d V  qdS )r   Nr6   )r    pr   r   r   r   r$     s    z(OrPredicate._eval_str.<locals>.<genexpr>)r`   r   )r   r   r   Zconjunctionr   r   r   	_eval_str  s    zOrPredicate._eval_strc                 C   s*   | j d k	rd| | S | j|ddS d S )NzNot Tr   )rt   r   r   r9   r   r   r   _negation_str  s    
zOrPredicate._negation_strc                 C   s0   |r|  |S | jd k	r"| |S | |S d S r	   )r   rt   r   r   r   r   r   r   r7     s
    


zOrPredicate._as_string)N)F)F)rT   ra   rb   r   rF   r   r   r7   r   r   r   r   rv   w  s
   

	rv   c                 C   s   t | ||tjS r	   )rx   r   r1   )r   r   r   r   r   r   _is_excluded  s    r   c                 C   s.   |   }t| jdd}|dkr"d}|  |S )z#Return a server_version_info tuple.Zserver_version_infoNr   )connectgetattrr   close)r   connr   r   r   r   r     s    r   c                  G   s   t dd | D S )Nc                 S   s   g | ]}t |qS r   rl   rm   r    r   r   r   r   r8     s     zdb_spec.<locals>.<listcomp>)rv   dbsr   r   r   db_spec  s    r   c                   C   s   t tddS )NFzmark as executer   r   r   r   r   r   open  s    r   c                   C   s   t tddS )NTzmarked as skipr   r   r   r   r   closed  s    r   c                 C   s   t td| pdS )NTzexpected to fail)r   r   r   r   r   r   r     s    r   c                 G   s   t t| dS )NzFuture feature)r   r   )rB   argr   r   r   future  s    r   c                 C   s
   t | |S r	   )r   r   r   r   r   r   fails_on  s    r   c                  G   s   t tdd | D S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r   r8     s     z.fails_on_everything_except.<locals>.<listcomp>)rk   rv   r   r   r   r   fails_on_everything_except  s    r   c                 C   s
   t | |S r	   )r   r   r   r   r   r.     s    r.   c                    s    t t fddt| D S )Nc                    s   g | ]}t | qS r   r   r   r   r   r   r8     s     zonly_on.<locals>.<listcomp>)rj   rv   r   Zto_list)r   r   r   r   r   only_on  s
    r   c                 C   s   t t| |||S r	   )r   rx   )r   r   r   r   r   r   r   exclude  s    r   c                 G   s"   |st dtdd |D | S )Nzno queries sent!c                 S   s   g | ]}t |qS r   r   )r    queryr   r   r   r8     s     zagainst.<locals>.<listcomp>)r_   rv   )r   Zqueriesr   r   r   against  s    r   )N)N)N)N)N)N)N)N)N)&rd   r   rz    r   r   r   Zutil.compatr   r   r   objectr
   rg   r   rj   rk   rl   r   rx   r   r+   rv   rm   r   r   r   r   r   r   r   r   r   r   r.   r   r   r   r   r   r   r   <module>	   sF   

  

89$





