o
    y¬´\Õ1  ã                   @   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d<d0d1„Z d2d3„ Z!d<d4d5„Z"d<d6d7„Z#d<d8d9„Z$d:d;„ Z%dS )=é    Né   ©Úconfigé   )Úutil)Ú	decorator)Úinspect_getargspecc                 C   ó    t ƒ }t| |ƒ}|j |¡ |S ©N)ÚcompoundÚ_as_predicateÚskipsÚadd©Ú	predicateÚreasonÚruleÚpred© r   úO/var/www/html/env/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>7   ó   € z compound.not_.<locals>.<genexpr>c                 s   r(   r
   r)   )r,   Úskipr   r   r   r.   8   r/   r$   )r   r'   r   r   r   Únot_5   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   @   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>H   s    ýÿz4compound.matching_config_reasons.<locals>.<listcomp>r5   ©r   r   r   r   r   Úmatching_config_reasonsG   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_testN   s   þzcompound.include_testc                 C   s.   | j  |j ¡ | j |j¡ | j |j¡ d S r
   )r   r%   r   r   r    r   r   r   Ú_extendT   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__Y   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_iff   s   €
€ÿzcompound.fail_ifc           	   
   O   s’   | j D ]}||ƒrd|j| |¡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   Ú__name__r8   r   Ú	skip_testrK   rL   rM   )	r   ÚcfgrD   rE   rF   r0   ÚmsgÚreturn_valuerO   r   r   r   rC   r   s   

€ €ÿzcompound._doÚblockc                 C   sD   | j D ]}||ƒrtd|| |¡t|ƒf ƒ  d S qt |¡ d S )Nz%s failed as expected (%s): %s )r   Úprintr8   Ústrr   Úraise_from_cause)r   r   rO   rQ   r-   r   r   r   rL   €   s   
ÿþù	zcompound._expect_failurec                    sJ   | j sd S | j D ]	}|ˆ ƒs d S qtd|d ‡ fdd„| j D ƒ¡f ƒ‚)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)rW   )rR   Ú
__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#   rd   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©   ó   ri   c                 C   rg   r
   )r   r   r*   rh   r   r   r   Úsucceeds_if®   rj   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|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   rm   r2   rl   ru   Úlistr   ÚOrPredicateÚtupleÚSpecPredicater   Ústring_typesÚreÚmatchÚ
ValueErrorÚgroupÚsplitÚcallableÚLambdaPredicate)ro   r   ru   ÚtokensÚdbÚopÚspecr   rn   r   rm   ´   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)ru   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)rR   r^   r_   Úclassmethodrm   r�   r8   r   r   r   r   rl   ³   s
    
#rl   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)Úvalueru   )r   r˜   ru   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”   ©rR   r^   r_   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 )rz   Nc                 C   s   || _ || _|| _|| _d S r
   )r„   r…   r†   ru   )r   r„   r…   r†   ru   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)ru   r�   r…   r„   r†   r’   r   r   r   r8   !  s   




zSpecPredicate._as_string©NNNr”   )rR   r^   r_   r   ÚoperatorÚltÚgtÚeqÚneÚleÚgeÚcontainsr¨   rJ   r8   r   r   r   r   rz   ÷   s    
ørz   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    4  s    z*LambdaPredicate.__init__.<locals>.<lambda>r   zcustom function)r   r·   rE   rF   ru   Ú__doc__)r   r·   ru   rE   rF   r†   r   r¶   r   r   1  s   



zLambdaPredicate.__init__c                 C   r   r
   r¶   r:   r   r   r   rJ   @  r#   zLambdaPredicate.__call__Fc                 C   r   r
   rš   r’   r   r   r   r8   C  r#   zLambdaPredicate._as_stringr­   r”   rœ   r   r   r   r   r‚   0  s    
r‚   c                   @   r–   )r*   Nc                 C   ó   || _ || _d S r
   )r   ru   )r   r   ru   r   r   r   r   H  ó   
zNotPredicate.__init__c                 C   s   |   |¡ S r
   )r   r:   r   r   r   rJ   L  s   zNotPredicate.__call__Fc                 C   s$   | j r
|  || ¡S | j || ¡S r
   )ru   r�   r   r8   r’   r   r   r   r8   O  s   zNotPredicate._as_stringr
   r”   rœ   r   r   r   r   r*   G  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 )rx   Nc                 C   r¹   r
   )Ú
predicatesru   )r   r»   ru   r   r   r   r   W  rº   zOrPredicate.__init__c                 C   s   | j D ]	}||ƒr dS qdS )NTF)r»   )r   r   r   r   r   r   rJ   [  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™   Nr7   )r,   Úp©r   rŽ   r   r   r.   f  s   € 
ÿz(OrPredicate._eval_str.<locals>.<genexpr>)r]   r»   )r   r   rŽ   Úconjunctionr   r½   r   Ú	_eval_stra  s   ÿzOrPredicate._eval_strc                 C   s&   | j d urd|  |¡ S | j|dd�S )NzNot Tr™   )ru   r�   r¿   r:   r   r   r   Ú_negation_strj  s   
zOrPredicate._negation_strc                 C   s,   |r|   |¡S | jd ur|  |¡S |  |¡S r
   )rÀ   ru   r�   r¿   r’   r   r   r   r8   p  s
   



zOrPredicate._as_stringr
   r”   )rR   r^   r_   r   rJ   r¿   rÀ   r8   r   r   r   r   rx   V  s    

	rx   c                 C   s   t | ||ƒtjƒS r
   )rz   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   ©rl   rm   ©r,   r„   r   r   r   r9   Ž  rp   zdb_spec.<locals>.<listcomp>©rx   ©Ú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   §  rp   z.fails_on_everything_except.<locals>.<listcomp>)rk   rx   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>)ri   rx   r   Úto_list)rÍ   r   r   rÓ   r   Úonly_on®  s
   ÿÿrÛ   c                 C   s   t t| ||ƒ|ƒS r
   )r   rz   )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   ¼  rp   zagainst.<locals>.<listcomp>rË   )r   Úqueriesr   r   r   Úagainstº  s   ÿrß   r
   )&ra   r®   r|   Ú r   r   r   Úutil.compatr   r   r   Úobjectr   rd   r   ri   rk   rl   r—   rz   r‚   r*   rx   rm   r   rÁ   r§   rÎ   rÑ   rÒ   r   rÕ   rØ   rÙ   r0   rÛ   rÜ   rß   r   r   r   r   Ú<module>   sF   

~

89$





