o
    [h2                     @   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   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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   Z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   r1   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>r4   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   Zinclude_tagsZ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   r2   )fnargskwr   r   r   decorate_   s   z#compound.__call__.<locals>.decorate)hasattrr?   r>   r   )r   rA   rD   Z	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   r5   	Exception_expect_failurer   r2   _expect_success)r   Z	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   Zget_current_test_namer7   Z	skip_testrG   rH   __name__rI   )	r   cfgrA   rB   rC   r/   msgreturn_valuerJ   r   r   r   r@   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   Zpy2kunicodeencodestrprintr7   Zraise_sysexc_info)r   r   rJ   rL   r,   Zstr_exr   r   r   rH      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
   r6   r*   r   r   r   r-      s    

z+compound._expect_success.<locals>.<genexpr>)r   AssertionErrorjoin)r   r   rL   r,   r   r   r   rI      s   
zcompound._expect_successN)rQ   )rM   
__module____qualname__r   r"   r   r0   propertyr3   r1   r:   r=   r>   rF   
contextlibcontextmanagerrK   r@   rH   rI   r   r   r   r   r   "   s"    


r   c                 C   s
   t | gS r
   )r   )tagnamer   r   r   requires_tag   r#   rd   c                 C   s   t  }|j|  |S r
   )r   r   r%   )Ztagnamescompr   r   r   r      s   r   c                 C      t | } tt| |S r
   )r   r   r)   r   r   r   r   r   only_if      rh   c                 C   rf   r
   )r   r   r)   rg   r   r   r   succeeds_if   ri   rj   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   r8          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   rl   r1   rk   rt   listr   OrPredicatetupleSpecPredicater   string_typesrematch
ValueErrorgroupsplitcallableLambdaPredicate)rn   r   rt   tokensdbopspecr   rm   r   rl      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)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  r
   )NotImplementedErrorr   r   r   r   r   r   r7         zPredicate._as_stringr
   F)NF)rM   r^   r_   classmethodrl   r   r7   r   r   r   r   rk      s
    
#rk   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)valuert   )r   r   rt   r   r   r   r      s   zBooleanPredicate.__init__c                 C   s   | j S r
   )r   r9   r   r   r   rF      r   zBooleanPredicate.__call__Fc                 C   s   | j ||dS )Nr   r   r   r   r   r   r7         zBooleanPredicate._as_stringr
   r   rM   r^   r_   r   rF   r7   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 )ry   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 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 yetrF   T)	r   r   rL   r   r   _server_versionrE   _opsr   )r   r   enginedialectr   versionoperr   r   r   rF     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)rt   r   r   r   r   r   r   r   r   r7   (  s   




zSpecPredicate._as_stringNNNr   )rM   r^   r_   r   operatorltgteqnelegecontainsr   rF   r7   r   r   r   r   ry      s    
ry   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   rB   rC   rt   __doc__)r   r   rt   rB   rC   r   r   r   r   r   8  s   



zLambdaPredicate.__init__c                 C   r   r
   r   r9   r   r   r   rF   G  r#   zLambdaPredicate.__call__Fc                 C   r   r
   r   r   r   r   r   r7   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   rt   )r   r   rt   r   r   r   r   O     
zNotPredicate.__init__c                 C   s   |  | S r
   )r   r9   r   r   r   rF   S  s   zNotPredicate.__call__Fc                 C   s$   | j r
| || S | j|| S r
   )rt   r   r   r7   r   r   r   r   r7   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 )rw   Nc                 C   r   r
   )
predicatesrt   )r   r   rt   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   rF   b  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-   m  s    
z(OrPredicate._eval_str.<locals>.<genexpr>)r]   r   )r   r   r   Z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   )rt   r   r   r9   r   r   r   _negation_strq  s   
zOrPredicate._negation_strc                 C   s,   |r|  |S | jd ur| |S | |S r
   )r   rt   r   r   r   r   r   r   r7   w  s
   



zOrPredicate._as_stringr
   r   )rM   r^   r_   r   rF   r   r   r7   r   r   r   r   rw   ]  s    

	rw   c                 C   s   t | ||tjS r
   )ry   r   r2   )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.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      g | ]}t |qS r   rk   rl   r+   r   r   r   r   r8     ro   zdb_spec.<locals>.<listcomp>rw   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   )rA   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   r8     ro   z.fails_on_everything_except.<locals>.<listcomp>)rj   rw   r   r   r   r   fails_on_everything_except  s   r   c                 C   r   r
   )r   r   r   r   r   r/     r#   r/   c                    s    t t fddt| D S )Nc                    s   g | ]}t | qS r   r   r   r   r   r   r8     r   zonly_on.<locals>.<listcomp>)rh   rw   r   Zto_list)r   r   r   r   r   only_on  s
   r   c                 C   s   t t| |||S r
   )r   ry   )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   r8     ro   zagainst.<locals>.<listcomp>r   )r   Zqueriesr   r   r   against  s   r   r
   )'ra   r   r{   rY    r   r   r   Zutil.compatr   r   r   objectr   rd   r   rh   rj   rk   r   ry   r   r)   rw   rl   r   r   r   r   r   r   r   r   r   r   r/   r   r   r   r   r   r   r   <module>   sJ   

 

89$





