o
    i2                     @   sx  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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 d<d0d1Z!d2d3 Z"d<d4d5Z#d<d6d7Z$d<d8d9Z%d:d; 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   X/var/www/edux/Edux_v2/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                   @   s   e Z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  | _t  | _d S r
   )setr   r   tagsselfr   r   r   __init__#   s   zcompound.__init__c                 C   
   |  |S r
   )r   r   otherr   r   r   __add__(      
zcompound.__add__c                 G   sh   t  }|j| j |j| j |j| j |D ]}|j|j |j|j |j|j q|S r
   r   r   updater   r   )r   otherscopyr!   r   r   r   r   +   s   zcompound.addc                 C   sH   t  }|jdd | jD  |jdd | jD  |j| j |S )Nc                 s       | ]}t |V  qd S r
   NotPredicate.0failr   r   r   	<genexpr>8       z compound.not_.<locals>.<genexpr>c                 s   r(   r
   r)   )r,   skipr   r   r   r.   9   r/   r$   )r   r'   r   r   r   not_6   s
   zcompound.not_c                 C   s   |  tjS r
   )enabled_for_configr   _currentr   r   r   r   enabled=   s   zcompound.enabledc                 C   s&   | j | jD ]	}||r dS qdS )NFTr   unionr   )r   r   r   r   r   r   r2   A   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>I   s    z4compound.matching_config_reasons.<locals>.<listcomp>r5   r   r   r   r   r   matching_config_reasonsH   s   
z compound.matching_config_reasonsc                 C   s$   t | j| o| p| j|S r
   )boolr   intersection)r   include_tagsexclude_tagsr   r   r   include_testO   s   zcompound.include_testc                 C   s.   | j |j  | j|j | j|j d S r
   )r   r%   r   r   r    r   r   r   _extendU   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   r3   )fnargskwr   r   r   decorate_   s   z#compound.__call__.<locals>.decorate)hasattrrB   rA   r   )r   rD   rG   	decoratedr   r   r   __call__Z   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   r6   	Exception_expect_failurer   r3   _expect_success)r   	all_failsexr   r   r   fail_ifg   s   
zcompound.fail_ifc           	   
   O   s   | j D ]}||rdt ||f }t| qz	||i |}W n ty? } z| j|||jd W Y d }~d S d }~ww | j||jd |S )Nz	'%s' : %s)name)	r   r   get_current_test_namer8   	skip_testrK   rL   __name__rM   )	r   cfgrD   rE   rF   r0   msgreturn_valuerO   r   r   r   rC   s   s    

 zcompound._doblockc                 C   sn   | j D ]&}||r)tjrt|jddd}nt|}td||||f   d S qtj|t	
 d d d S )Nzutf-8ignore)errorsz%s failed as expected (%s): %s r   )with_traceback)r   r   py2kunicodeencodestrprintr8   raise_sysexc_info)r   r   rO   rQ   r-   str_exr   r   r   rL      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
   r7   r+   r   r   r   r.      s    

z+compound._expect_success.<locals>.<genexpr>)r   AssertionErrorjoin)r   r   rQ   r-   r   r   r   rM      s   
zcompound._expect_successN)rX   )rT   
__module____qualname__r   r"   r   r1   propertyr4   r2   r;   r@   rA   rJ   
contextlibcontextmanagerrP   rC   rL   rM   r   r   r   r   r   "   s"    


r   c                 C   s
   t | gS r
   )r   )tagnamer   r   r   requires_tag   r#   rn   c                 C   s   t  }|j|  |S r
   )r   r   r%   )tagnamescompr   r   r   r      s   r   c                 C      t | } tt| |S r
   )r   r   r*   r   r   r   r   r   only_if      rs   c                 C   rq   r
   )r   r   r*   rr   r   r   r   succeeds_if   rt   ru   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jrutd|}|sMtd| |d}|d}|drkt	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   r9          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   r.      r/   z)Predicate.as_predicate.<locals>.<genexpr>.)descriptionFzunknown predicate type: %s)
isinstancer   rw   r2   rv   r   listr   OrPredicatetupleSpecPredicater   string_typesrematch
ValueErrorgroupsplitcallableLambdaPredicate)ry   r   r   tokensdbopspecr   rx   r   rw      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   r8         zPredicate._as_stringr
   F)NF)rT   rh   ri   classmethodrw   r   r8   r   r   r   r   rv      s
    
#rv   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   rJ      r   zBooleanPredicate.__call__Fc                 C   s   | j ||dS )Nr   r   r   r   r   r   r8         zBooleanPredicate._as_stringr
   r   rT   rh   ri   r   rJ   r8   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   |j }d| j v r| j d\}}n| j d }}|r |j|kr dS |d ur+|j|kr+dS | jd urQ|d u s8J dt|}t| jdrE| jpJ| j| j }||| jS dS )N+Fz%DBAPI version specs not supported yetrJ   T)	r   r   rQ   r   r   _server_versionrH   _opsr   )r   r   enginedialectr   versionoperr   r   r   rJ     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   r8   (  s   




zSpecPredicate._as_stringNNNr   )rT   rh   ri   r   operatorltgteqnelegecontainsr   rJ   r8   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    z*LambdaPredicate.__init__.<locals>.<lambda>r   zcustom function)r   r   rE   rF   r   __doc__)r   r   r   rE   rF   r   r   r   r   r   8  s   



zLambdaPredicate.__init__c                 C   r   r
   r   r:   r   r   r   rJ   G  r#   zLambdaPredicate.__call__Fc                 C   r   r
   r   r   r   r   r   r8   J  r#   zLambdaPredicate._as_stringr   r   r   r   r   r   r   r   7  s    
r   c                   @   r   )r*   Nc                 C      || _ || _d S r
   )r   r   )r   r   r   r   r   r   r   O     
zNotPredicate.__init__c                 C   s   |  | S r
   )r   r:   r   r   r   rJ   S  s   zNotPredicate.__call__Fc                 C   s$   | j r
| || S | j|| S r
   )r   r   r   r8   r   r   r   r   r8   V  s   zNotPredicate._as_stringr
   r   r   r   r   r   r   r*   N  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   ^  r   zOrPredicate.__init__c                 C   s   | j D ]	}||r dS qdS )NTF)r   )r   r   r   r   r   r   rJ   b  s
   
zOrPredicate.__call__Fc                    s*   rd}nd}|  fdd| jD S )Nre   z or c                 3   s    | ]
}|j  d V  qdS )r   Nr7   )r,   pr   r   r   r   r.   m  s    
z(OrPredicate._eval_str.<locals>.<genexpr>)rg   r   )r   r   r   conjunctionr   r   r   	_eval_strh  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_strq  s   
zOrPredicate._negation_strc                 C   s,   |r|  |S | jd ur| |S | |S r
   )r   r   r   r   r   r   r   r   r8   w  s
   



zOrPredicate._as_stringr
   r   )rT   rh   ri   r   rJ   r   r   r8   r   r   r   r   r   ]  s    

	r   c                 C   s   t | ||tjS r
   )r   r   r3   )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   rv   rw   r,   r   r   r   r   r9     rz   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   c                   C   r   )NTzmarked as skipr   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                 G   s   t t| dS )NzFuture feature)r   r   )rD   argr   r   r   future  s   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   r9     rz   z.fails_on_everything_except.<locals>.<listcomp>)ru   r   r   r   r   r   fails_on_everything_except  s   r   c                 C   r   r
   )r   r   r   r   r   r0     r#   r0   c                    s    t t fddt| D S )Nc                    s   g | ]}t | qS r   r   r   r   r   r   r9     r   zonly_on.<locals>.<listcomp>)rs   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   r9     rz   zagainst.<locals>.<listcomp>r   )r   queriesr   r   r   against  s   r   r
   )'rk   r   r   rb    r   r   r   util.compatr   r   r   objectr   rn   r   rs   ru   rv   r   r   r   r*   r   rw   r   r   r   r   r   r   r   r   r   r   r0   r   r   r   r   r   r   r   <module>   sJ   

 

89$





