o
    Šåg¬0  ã                   @   s`  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	 d8dd	„Z
d8d
d„ZG dd„ dƒZd8dd„Zd8d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'„ Zd8d(d)„Zd*d+„ Zd8d,d-„Zd.d/„ Zd8d0d1„Z d8d2d3„Z!d8d4d5„Z"d6d7„ Z#dS )9é    Né   ©Úconfigé   )Úutil)Ú	decorator)Úinspect_getfullargspecc                 C   ó    t ƒ }t| |ƒ}|j |¡ |S ©N)ÚcompoundÚ_as_predicateÚskipsÚadd©Ú	predicateÚreasonÚruleÚpred© r   úY/var/www/html/flaskapp/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d	d
„ Ze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 ƒ | _d S r
   )Úsetr   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_skips*   s   zcompound.as_skipsc                 G   sL   t ƒ }|j | j¡ |j | j¡ |D ]}|j |j¡ |j |j¡ q|S r
   ©r   r   r#   r   )r   ÚothersÚcopyr    r   r   r   r   0   s   zcompound.addc                 C   s:   t ƒ }|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><   ó   € z compound.not_.<locals>.<genexpr>c                 s   r(   r
   r)   )r,   Úskipr   r   r   r.   =   r/   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   Ú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   D   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>L   s    ýÿz4compound.matching_config_reasons.<locals>.<listcomp>r5   ©r   r   r   r   r   Úmatching_config_reasonsK   s   
þz compound.matching_config_reasonsc                 C   s    | j  |j ¡ | j |j¡ d S r
   )r   r#   r   r   r   r   r   Ú_extendR   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)Úhasattrr=   r<   r   )r   r?   rB   Ú	decoratedr   r   r   Ú__call__V   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_ifc   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_testrF   rG   Ú__name__rH   )	r   Úcfgr?   r@   rA   r0   ÚmsgÚreturn_valuerJ   r   r   r   r>   o   s    
þ
€ €ÿ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   Úprintr8   Úwith_tracebackÚsysÚexc_info)r   r   rJ   rL   r-   r   r   r   rG   €   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   rL   r-   r   r   r   rH   ‹   s   
ÿþÿÿÿÿzcompound._expect_successN)rS   )rO   Ú
__module__Ú__qualname__r   r!   r$   r   r1   Úpropertyr4   r2   r;   r<   rE   Ú
contextlibÚcontextmanagerrK   r>   rG   rH   r   r   r   r   r   "   s"    



r   c                 C   ó   t | ƒ} tt| ƒ|ƒS r
   )r   r   r*   ©r   r   r   r   r   Úonly_ifœ   ó   rb   c                 C   r`   r
   )r   r   r*   ra   r   r   r   Úsucceeds_if¡   rc   rd   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   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   rf   r2   re   rn   Úlistr   ÚOrPredicateÚtupleÚSpecPredicateÚstrÚreÚmatchÚ
ValueErrorÚgroupÚsplitÚcallableÚLambdaPredicate)rh   r   rn   ÚtokensÚdbÚopÚspecr   rg   r   rf   §   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)rn   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)rO   r[   r\   Úclassmethodrf   r‰   r8   r   r   r   r   re   ¦   s
    
#re   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)Úvaluern   )r   r‘   rn   r   r   r   r   ß   s   zBooleanPredicate.__init__c                 C   s   | j S r
   )r‘   r:   r   r   r   rE   ã   rŒ   zBooleanPredicate.__call__Fc                 C   s   | j ||d�S )N©r‡   ©r‰   r‹   r   r   r   r8   æ   ó   zBooleanPredicate._as_stringr
   r�   ©rO   r[   r\   r   rE   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 )rs   Nc                 C   s   || _ || _|| _|| _d S r
   )r}   r~   r   rn   )r   r}   r~   r   rn   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 yetrE   T)	r}   ry   rL   r€   r~   Ú_server_versionrC   Ú_opsr   )r   r   ÚengineÚdialectr€   ÚversionÚoperr   r   r   rE   ü   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)rn   r‰   r~   r}   r   r‹   r   r   r   r8     s   




zSpecPredicate._as_string©NNNr�   )rO   r[   r\   r   ÚoperatorÚltÚgtÚeqÚneÚleÚgeÚcontainsr¡   rE   r8   r   r   r   r   rs   ê   s    
ørs   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°   r@   rA   rn   Ú__doc__)r   r°   rn   r@   rA   r   r   r¯   r   r   '  s   



zLambdaPredicate.__init__c                 C   r   r
   r¯   r:   r   r   r   rE   6  r"   zLambdaPredicate.__call__Fc                 C   r   r
   r“   r‹   r   r   r   r8   9  r"   zLambdaPredicate._as_stringr¦   r�   r•   r   r   r   r   r{   &  s    
r{   c                   @   r�   )r*   Nc                 C   ó   || _ || _d S r
   )r   rn   )r   r   rn   r   r   r   r   >  ó   
zNotPredicate.__init__c                 C   s   |   |¡ S r
   )r   r:   r   r   r   rE   B  s   zNotPredicate.__call__Fc                 C   s$   | j r
|  || ¡S | j || ¡S r
   )rn   r‰   r   r8   r‹   r   r   r   r8   E  s   zNotPredicate._as_stringr
   r�   r•   r   r   r   r   r*   =  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 )rq   Nc                 C   r²   r
   )Ú
predicatesrn   )r   r´   rn   r   r   r   r   M  r³   zOrPredicate.__init__c                 C   s   | j D ]	}||ƒr dS qdS )NTF)r´   )r   r   r   r   r   r   rE   Q  s
   
ÿzOrPredicate.__call__Fc                    s*   ˆrd}nd}|  ‡ ‡fdd„| jD ƒ¡S )NrX   z or c                 3   s   � | ]
}|j ˆ ˆd �V  qdS )r’   Nr7   )r,   Úp©r   r‡   r   r   r.   \  s   € 
ÿz(OrPredicate._eval_str.<locals>.<genexpr>)rZ   r´   )r   r   r‡   Úconjunctionr   r¶   r   Ú	_eval_strW  s   ÿzOrPredicate._eval_strc                 C   s&   | j d urd|  |¡ S | j|dd�S )NzNot Tr’   )rn   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¹   rn   r‰   r¸   r‹   r   r   r   r8   f  s
   



zOrPredicate._as_stringr
   r�   )rO   r[   r\   r   rE   r¸   r¹   r8   r   r   r   r   rq   L  s    

	rq   c                 C   s   t | ||ƒtjƒS r
   )rs   r   r3   )r}   r~   r   r   r   r   Ú_is_excludeds  ó   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    w  s   r    c                  G   s   t dd„ | D ƒƒS )Nc                 S   ó   g | ]}t  |¡‘qS r   ©re   rf   ©r,   r}   r   r   r   r9   „  ri   zdb_spec.<locals>.<listcomp>©rq   ©Ú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                   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   r9   œ  ri   z.fails_on_everything_except.<locals>.<listcomp>)rd   rq   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>)rb   rq   r   Úto_list)rÆ   r   r   rÍ   r   Úonly_on£  s
   ÿÿrÔ   c                 C   s   t t| ||ƒ|ƒS r
   )r   rs   )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   ±  ri   zagainst.<locals>.<listcomp>rÄ   )r   Úqueriesr   r   r   Úagainst¯  s   ÿrØ   r
   )$r^   r§   ru   rV   Ú r   r   r   Úutil.compatr   r   r   r   rb   rd   re   r�   rs   r{   r*   rq   rf   r   rº   r    rÇ   rÊ   rË   r   rÎ   rÑ   rÒ   r0   rÔ   rÕ   rØ   r   r   r   r   Ú<module>   sB   


z
8<$




