U
    ÌZj4  ã                   @   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 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ÚreasonÚruleÚpred© r   ú`/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/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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
   |   |¡S r	   )r   ©r   Úotherr   r   r   Ú__add__(   s    zcompound.__add__c                 C   s4   t ƒ }|j | j¡ |j | j¡ |j | j¡ |S r	   )r
   r   Úupdater   r   )r   r   r   r   r   Úas_skips+   s
    zcompound.as_skipsc                 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othersÚcopyr   r   r   r   r   2   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©Ú.0Úfailr   r   r   Ú	<genexpr>?   s     z compound.not_.<locals>.<genexpr>c                 s   s   | ]}t |ƒV  qd S r	   r$   )r'   Úskipr   r   r   r)   @   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   ÚenabledD   s    zcompound.enabledc                 C   s&   | j  | j¡D ]}||ƒr dS qdS )NFT©r   Úunionr   )r   r   r   r   r   r   r,   H   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>P   s   þz4compound.matching_config_reasons.<locals>.<listcomp>r/   ©r   r   r   r   r   Úmatching_config_reasonsO   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_testV   s    þzcompound.include_testc                 C   s.   | j  |j ¡ | j |j¡ | j |j¡ d S 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   r-   )ÚfnÚargsÚkwr   r   r   Údecoratef   s    z#compound.__call__.<locals>.decorate)Úhasattrr:   r9   r   )r   r<   r?   Z	decoratedr   r   r   Ú__call__a   s    
zcompound.__call__c              
   c   sh   t ƒ }|j | j | j¡¡ z
d V  W n0 tk
rV } z| tj|¡ W 5 d }~X Y nX | 	tj¡ d S r	   )
r
   r   r    r   r0   Ú	ExceptionÚ_expect_failurer   r-   Ú_expect_success)r   Z	all_failsÚexr   r   r   Úfail_ifn   s    
 zcompound.fail_ifc           	   
   O   s�   | j D ],}||ƒrdt ¡ | |¡f }t |¡ qz|||Ž}W n4 tk
rv } z| j|||jd� W 5 d }~X Y nX | j||jd� |S d S )Nz	'%s' : %s)Úname)	r   r   Zget_current_test_namer2   Z	skip_testrB   rC   Ú__name__rD   )	r   Úcfgr<   r=   r>   r*   ÚmsgZreturn_valuerE   r   r   r   r;   z   s    
þ$zcompound._doÚblockc                 C   sl   | j D ]J}||ƒrtjr,t|ƒjddd�}nt|ƒ}td|| |¡|f ƒ  qhq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Úprintr2   Zraise_ÚsysÚexc_info)r   r   rE   rG   r(   Zstr_exr   r   r   rC   ‹   s    
 ÿÿþzcompound._expect_failurec              	      sH   | j s
d S | j D ]2}|ˆ ƒ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	   r1   r&   r   r   r   r)   ¨   s    z+compound._expect_success.<locals>.<genexpr>)r   ÚAssertionErrorÚjoin)r   r   rG   r(   r   r   r   rD   ž   s    
ÿþÿÿzcompound._expect_successN)rK   )rK   )rH   Ú
__module__Ú__qualname__r   r   r!   r   r+   Úpropertyr.   r,   r5   r8   r9   rA   Ú
contextlibÚcontextmanagerrF   r;   rC   rD   r   r   r   r   r
   "   s"   


r
   c                 C   s
   t | gƒS r	   )r   )Útagnamer   r   r   Úrequires_tag¯   s    r^   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    ra   c                 C   s   t | ƒ} tt| ƒ|ƒS r	   )r   r   r%   r`   r   r   r   Úsucceeds_if¾   s    rb   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ƒrêt d|¡}|sštd| ƒ‚| d¡}| d¡}| d¡rÖt	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   r3   Î   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
   rd   r,   rc   rk   Úlistr   ÚOrPredicateÚtupleÚSpecPredicater   Ústring_typesÚreÚmatchÚ
ValueErrorÚgroupÚsplitÚcallableÚLambdaPredicaterV   )rf   r   rk   ÚtokensÚdbÚopÚspecr   re   r   rd   Ä   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)rk   rz   Ú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   r2   ÷   s    zPredicate._as_string)N)F)NF)rH   rX   rY   Úclassmethodrd   r€   r2   r   r   r   r   rc   Ã   s   #
rc   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)Úvaluerk   )r   r…   rk   r   r   r   r   ü   s    zBooleanPredicate.__init__c                 C   s   | j S r	   )r…   r4   r   r   r   rA      s    zBooleanPredicate.__call__Fc                 C   s   | j ||d�S )N©r   ©r€   r‚   r   r   r   r2     s    zBooleanPredicate._as_string)N)F©rH   rX   rY   r   rA   r2   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 )rp   Nc                 C   s   || _ || _|| _|| _d S r	   )rz   r{   r|   rk   )r   rz   r{   r|   rk   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¶   |d krdS |j }d| j kr.| j  d¡\}}n| j d  }}|rL|j|krLdS |d k	rb|j|krbdS | jd k	r®|d ks|tdƒ‚t|ƒ}t| jdƒr–| jp | j| j }||| j	ƒS dS d S )NFú+z%DBAPI version specs not supported yetrA   T)
rz   rv   rG   r}   r{   rV   Ú_server_versionr@   Ú_opsr|   )r   r   ÚengineÚdialectr}   ÚversionÚoperr   r   r   rA     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)rk   r€   r{   rz   r|   r‚   r   r   r   r2   4  s    



zSpecPredicate._as_string)NNN)F)rH   rX   rY   r   ÚoperatorÚltÚgtÚeqÚneÚleÚgeÚcontainsr’   rA   r2   r   r   r   r   rp     s   
ørp   c                   @   s(   e Zd Zd	dd„Zdd„ Zd
dd„ZdS )rx   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   )rz   ©Úlambda_r   r   r‹   G  rŒ   z*LambdaPredicate.__init__.<locals>.<lambda>r   zcustom function)r   r    r=   r>   rk   Ú__doc__)r   r    rk   r=   r>   r|   r   rŸ   r   r   D  s    


zLambdaPredicate.__init__c                 C   s
   |   |¡S r	   rŸ   r4   r   r   r   rA   S  s    zLambdaPredicate.__call__Fc                 C   s
   |   |¡S r	   r‡   r‚   r   r   r   r2   V  s    zLambdaPredicate._as_string)NNN)Frˆ   r   r   r   r   rx   C  s   
rx   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   rk   )r   r   rk   r   r   r   r   [  s    zNotPredicate.__init__c                 C   s   |   |¡ S r	   )r   r4   r   r   r   rA   _  s    zNotPredicate.__call__Fc                 C   s(   | j r|  || ¡S | j || ¡S d S r	   )rk   r€   r   r2   r‚   r   r   r   r2   b  s    zNotPredicate._as_string)N)Frˆ   r   r   r   r   r%   Z  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 )rn   Nc                 C   s   || _ || _d S r	   )Ú
predicatesrk   )r   r¢   rk   r   r   r   r   j  s    zOrPredicate.__init__c                 C   s   | j D ]}||ƒr dS qdS )NTF)r¢   )r   r   r   r   r   r   rA   n  s    
zOrPredicate.__call__Fc                    s*   ˆr
d}nd}|  ‡ ‡fdd„| jD ƒ¡S )NrU   z or c                 3   s   | ]}|j ˆ ˆd �V  qdS )r†   Nr1   )r'   Úp©r   r   r   r   r)   y  s    z(OrPredicate._eval_str.<locals>.<genexpr>)rW   r¢   )r   r   r   Zconjunctionr   r¤   r   Ú	_eval_strt  s    ÿzOrPredicate._eval_strc                 C   s*   | j d k	rd|  |¡ S | j|dd�S d S )NzNot Tr†   )rk   r€   r¥   r4   r   r   r   Ú_negation_str}  s    
zOrPredicate._negation_strc                 C   s0   |r|   |¡S | jd k	r"|  |¡S |  |¡S d S r	   )r¦   rk   r€   r¥   r‚   r   r   r   r2   ƒ  s
    


zOrPredicate._as_string)N)F)F)rH   rX   rY   r   rA   r¥   r¦   r2   r   r   r   r   rn   i  s
   

	rn   c                 C   s   t | ||ƒtjƒS r	   )rp   r   r-   )rz   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   ©rc   rd   ©r'   rz   r   r   r   r3   ¡  s     zdb_spec.<locals>.<listcomp>)rn   ©Ú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   rx   )r<   Úargr   r   r   Úfuture°  s    r¶   c                 C   s
   t | |ƒS r	   )r   ©rz   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   r3   º  s     z.fails_on_everything_except.<locals>.<listcomp>)rb   rn   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   r3   Ä  s     zonly_on.<locals>.<listcomp>)ra   rn   r   Zto_list)r¯   r   r   r´   r   Úonly_onÁ  s
    ÿÿrº   c                 C   s   t t| ||ƒ|ƒS r	   )r   rp   )rz   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   r3   Ï  s     zagainst.<locals>.<listcomp>)rV   rn   )r   Zqueriesr   r   r   ÚagainstÍ  s    ÿr½   )N)N)N)N)N)N)N)N)N)'r[   r—   rr   rS   Ú r   r   r   Zutil.compatr   r   r   Úobjectr
   r^   r   ra   rb   rc   r„   rp   rx   r%   rn   rd   r   r§   r‘   r°   r²   r³   r   r¶   r¸   r¹   r*   rº   r»   r½   r   r   r   r   Ú<module>	   sH   

 

8<$





