o
    LDi5                     @   sj  d dl Z 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dd ZG dd dZd;ddZd;ddZG 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ejZd d! Zd"d# Zd$d% Zd&d' Zd<d)d*Zd;d+d,Zd-d. Zd;d/d0Zd1d2 Z d;d3d4Z!d;d5d6Z"d;d7d8Z#d9d: Z$dS )=    N   config   )util)	decorator)inspect_getfullargspecc                 C       t  }t| |}|j| |S N)compound_as_predicateskipsadd	predicatereasonrulepred r   i/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/sqlalchemy/testing/exclusions.pyskip_if      
r   c                 C   r	   r
   )r   r   failsr   r   r   r   r   fails_if   r   r   c                 C   s    t  }t| }||f|j|< |S r
   )r   r   warns)r   
expressionassert_r   r   r   r   r   warns_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dZd!ddZd S )"r   c                 C   s   t  | _t  | _i | _d S r
   )setr   r   r   selfr   r   r   __init__*   s   
zcompound.__init__c                 C   
   |  |S r
   )r   r    otherr   r   r   __add__/      
zcompound.__add__c                 C   s&   t  }|j| j |j| j |S r
   )r   r   updater   )r    r   r   r   r   as_skips2   s   zcompound.as_skipsc                 G   sh   t  }|j| j |j| j |j| j |D ]}|j|j |j|j |j|j q|S r
   )r   r   r'   r   r   )r    otherscopyr$   r   r   r   r   8   s   zcompound.addc                 C   sV   t  }|jdd | jD  |jdd | jD  |jdd | j D  |S )Nc                 s       | ]}t |V  qd S r
   NotPredicate.0failr   r   r   	<genexpr>F       z compound.not_.<locals>.<genexpr>c                 s   r+   r
   r,   )r/   skipr   r   r   r1   G   r2   c                 S   s   i | ]	\}}t ||qS r   r,   )r/   warnelementr   r   r   
<dictcomp>I   s    z!compound.not_.<locals>.<dictcomp>)r   r   r'   r   r   items)r    r*   r   r   r   not_D   s   zcompound.not_c                 C   s   |  tjS r
   )enabled_for_configr   _currentr   r   r   r   enabledP   s   zcompound.enabledc                 C   s&   | j | jD ]	}||r dS qdS )NFTr   unionr   )r    r   r   r   r   r   r9   T   s
   zcompound.enabled_for_configc                    s    fdd| j  D S )Nc                    s    g | ]\}\}}| r|qS r   r   )r/   r   messager   r   r   r   
<listcomp>\   s    
z.compound.matching_warnings.<locals>.<listcomp>)r   r7   r    r   r   r   r   matching_warnings[   s   
zcompound.matching_warningsc                    s    fdd| j | jD S )Nc                    s   g | ]}| r|  qS r   
_as_string)r/   r   r   r   r   r?   c   s    z4compound.matching_config_reasons.<locals>.<listcomp>r<   r@   r   r   r   matching_config_reasonsb   s   
z compound.matching_config_reasonsc                 C   s.   | j |j  | j|j | j|j d S r
   )r   r'   r   r   r#   r   r   r   _extendi   s   zcompound._extendc                    s<   t |dr|j  |S t fdd}||} |_|S )N_sa_exclusion_extendc                    s    j tj| g|R i |S r
   )_dor   r:   )fnargskwr   r   r   decorates   s   z#compound.__call__.<locals>.decorate)hasattrrF   rE   r   )r    rH   rK   	decoratedr   r   r   __call__n   s   
zcompound.__call__c              
   c   sn    t  }|j| j| j zd V  W n ty. } z|tj| W Y d }~d S d }~ww |	tj d S r
   )
r   r   r'   r   r=   	Exception_expect_failurer   r:   _expect_success)r    	all_failsexr   r   r   fail_if{   s   
zcompound.fail_ifc              
      s   j D ]}||rdt ||f }t| qjr1ddlm  tj	 fdd}| }nt
 }z| ||i |}	W d    n1 sJw   Y  W n tyl }
 zj||
|jd W Y d }
~
d S d }
~
ww j||jd |	S )Nz	'%s' : %sr   )expect_warningsc                  3   s\    t  } j D ]\}}|  ||d qd V  W d    d S 1 s'w   Y  d S )N)r   )
contextlib	ExitStackr   valuesenter_context)stackr   r   rU   r    r   r   _expect_warnings   s   

"z&compound._do.<locals>._expect_warnings)name)r   r   get_current_test_namerC   	skip_testr   
assertionsrU   rV   contextmanagernullcontextrO   rP   __name__rQ   )r    cfgrH   rI   rJ   r3   msgr\   ctxreturn_valuerS   r   r[   r   rG      s2   

 zcompound._doblockc                 C   sD   | j D ]}||rtd||||f   d S q|t d )Nz%s failed as expected (%s): %s r   )r   printrC   with_tracebacksysexc_info)r    r   rS   r]   r0   r   r   r   rP      s   
zcompound._expect_failurec              	      sH   | j sd S | j D ]}| 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
   rB   r.   r   r   r   r1      s    

z+compound._expect_success.<locals>.<genexpr>)r   AssertionErrorjoin)r    r   r]   r0   r   r   r   rQ      s   
zcompound._expect_successN)rh   )rc   
__module____qualname__r!   r%   r(   r   r8   propertyr;   r9   rA   rD   rE   rN   rV   ra   rT   rG   rP   rQ   r   r   r   r   r   )   s$    


"r   c                 C      t | } tt| |S r
   )r   r   r-   r   r   r   r   r   only_if      ru   c                 C   rs   r
   )r   r   r-   rt   r   r   r   succeeds_if   rv   rw   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|r|jd u r||_|S t |ttfr0t fdd|D |S t |t	r9t
| S t |trttd|}|sLtd| |d}|d}|drjt	dd	 |dd
D nd }t
||||dS t|r}t||S J d| )Nc                    s   g | ]}  |qS r   )as_predicate)r/   r   clsr   r   r?          z*Predicate.as_predicate.<locals>.<listcomp>z.([\+\w]+)\s*(?:(>=|==|!=|<=|<|>)\s*([\d\.]+))?z(Couldn't locate DB name in predicate: %rr   r      c                 s   r+   r
   )int)r/   dr   r   r   r1      r2   z)Predicate.as_predicate.<locals>.<genexpr>.)descriptionFzunknown predicate type: %s)
isinstancer   ry   r9   rx   r   listr   OrPredicatetupleSpecPredicatestrrematch
ValueErrorgroupsplitcallableLambdaPredicate)r{   r   r   tokensdbopspecr   rz   r   ry      s<   





 
zPredicate.as_predicateFc                 C   s\   | |}|r	| }| j |r|jj nd|r|jj nd|r!dnd|r)dd S dd S )Nz<no driver>z<no database>zdoesn't supportzdoes support)driverdatabasedoesnt_supportdoes_support)r   r   urlget_driver_nameget_backend_name)r    r   negatebool_r   r   r   _format_description   s   
zPredicate._format_descriptionc                 C   s   t  r
   )NotImplementedErrorr    r   r   r   r   r   rC        zPredicate._as_stringr
   F)NF)rc   rp   rq   classmethodry   r   rC   r   r   r   r   rx      s
    
#rx   c                   @   (   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)valuer   )r    r   r   r   r   r   r!     s   zBooleanPredicate.__init__c                 C   s   | j S r
   )r   r@   r   r   r   rN     r   zBooleanPredicate.__call__Fc                 C   s   | j ||dS )Nr   r   r   r   r   r   rC        zBooleanPredicate._as_stringr
   r   rc   rp   rq   r!   rN   rC   r   r   r   r   r         
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 )r   Nc                 C   s   || _ || _|| _|| _d S r
   )r   r   r   r   )r    r   r   r   r   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>=inbetweenc                 C   s   |d u rdS |j }d| j v r| j d\}}n| j d }}|r&|j|kr&dS |d ur1|j|kr1dS | jd urW|d u s>J dt|}t| jdrK| jpP| j| j }||| jS dS )NF+z%DBAPI version specs not supported yetrN   T)	r   r   r]   r   r   _server_versionrL   _opsr   )r    r   enginedialectr   versionoperr   r   r   rN   %  s"   

zSpecPredicate.__call__Fc                 C   sb   | j d ur
| |S | jd u r|rd| j S d| j S |r'd| j| j| jf S d| j| j| jf S )Nznot %sz%sznot %s %s %sz%s %s %s)r   r   r   r   r   r   r   r   r   rC   @  s   




zSpecPredicate._as_stringNNNr   )rc   rp   rq   r!   operatorltgteqnelegecontainsr   rN   rC   r   r   r   r   r     s    
r   c                   @   r   )r   Nc                    sd   t  }|d s fdd| _n | _|pd| _|pi | _|r$|| _d S  jr- j| _d S d| _d S )Nr   c                    s     S r
   r   )r   lambda_r   r   r   S  s    z*LambdaPredicate.__init__.<locals>.<lambda>r   zcustom function)r   r   rI   rJ   r   __doc__)r    r   r   rI   rJ   r   r   r   r   r!   P  s   



zLambdaPredicate.__init__c                 C   r"   r
   r   r@   r   r   r   rN   _  r&   zLambdaPredicate.__call__Fc                 C   r"   r
   r   r   r   r   r   rC   b  r&   zLambdaPredicate._as_stringr   r   r   r   r   r   r   r   O  s    
r   c                   @   r   )r-   Nc                 C      || _ || _d S r
   )r   r   )r    r   r   r   r   r   r!   g     
zNotPredicate.__init__c                 C   s   |  | S r
   )r   r@   r   r   r   rN   k  s   zNotPredicate.__call__Fc                 C   s$   | j r
| || S | j|| S r
   )r   r   r   rC   r   r   r   r   rC   n  s   zNotPredicate._as_stringr
   r   r   r   r   r   r   r-   f  r   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 )r   Nc                 C   r   r
   )
predicatesr   )r    r   r   r   r   r   r!   v  r   zOrPredicate.__init__c                 C   s   | j D ]	}||r dS qdS )NTF)r   )r    r   r   r   r   r   rN   z  s
   
zOrPredicate.__call__Fc                    s*   rd}nd}|  fdd| jD S )Nrm   z or c                 3   s    | ]
}|j  d V  qdS )r   NrB   )r/   pr   r   r   r   r1     s    
z(OrPredicate._eval_str.<locals>.<genexpr>)ro   r   )r    r   r   conjunctionr   r   r   	_eval_str  s   zOrPredicate._eval_strc                 C   s&   | j d urd| | S | j|ddS )NzNot Tr   )r   r   r   r@   r   r   r   _negation_str  s   
zOrPredicate._negation_strc                 C   s,   |r|  |S | jd ur| |S | |S r
   )r   r   r   r   r   r   r   r   rC     s
   



zOrPredicate._as_stringr
   r   )rc   rp   rq   r!   rN   r   r   rC   r   r   r   r   r   u  s    

	r   c                 C   s   t | ||tjS r
   )r   r   r:   )r   r   r   r   r   r   _is_excluded     r   c                 C   s.   |   }t| jdd}|du rd}|  |S )z#Return a server_version_info tuple.server_version_infoNr   )connectgetattrr   close)r   connr   r   r   r   r     s   r   c                  G   s   t dd | D S )Nc                 S      g | ]}t |qS r   rx   ry   r/   r   r   r   r   r?     r|   zdb_spec.<locals>.<listcomp>r   dbsr   r   r   db_spec  r   r   c                   C      t tddS )NFzmark as executer   r   r   r   r   r   open  r   r   marked as skipc                 C   s   t td| S )NTr   r   r   r   r   closed  r   r   c                 C   s   t td| pdS )NTzexpected to failr   r   r   r   r   r   r     r   r   c                   C   r   )NTzFuture featurer   r   r   r   r   future  r   r   c                 C   
   t | |S r
   )r   r   r   r   r   r   fails_on  r&   r   c                  G   s   t tdd | D S )Nc                 S   r   r   r   r   r   r   r   r?     r|   z.fails_on_everything_except.<locals>.<listcomp>)rw   r   r   r   r   r   fails_on_everything_except  s   r   c                 C   r   r
   )r   r   r   r   r   r3     r&   r3   c                    s    t t fddt| D S )Nc                    s   g | ]}t | qS r   r   r   r   r   r   r?     r   zonly_on.<locals>.<listcomp>)ru   r   r   to_list)r   r   r   r   r   only_on  s
   r   c                 C   s   t t| |||S r
   )r   r   )r   r   r   r   r   r   r   exclude  r   r   c                 G   s"   |sJ dt dd |D | S )Nzno queries sent!c                 S   r   r   r   )r/   queryr   r   r   r?     r|   zagainst.<locals>.<listcomp>r   )r   queriesr   r   r   against  s   r   r
   )r   )%rV   r   r   rk    r   r   r   util.compatr   r   r   r   r   ru   rw   rx   r   r   r   r-   r   ry   r   r   r   r   r   r   r   r   r   r   r3   r   r   r   r   r   r   r   <module>   sF   

 

8<$





