o znh>7@spddlZddlZddlZddlmZddlmZddlmZddlmZd0z,compound.with_combination..c3r%r r)r&sr(rrr*1r+)r rupdater rr)rr)copyrr(rwith_combination+szcompound.with_combinationcGsht}|j|j|j|j|j|j|D]}|j|j|j|j|j|jq|Sr r rr-r r)rothersr.r"rrrr4sz compound.addcCsHt}|jdd|jD|jdd|jD|j|j|S)Ncs|]}t|VqdSr  NotPredicater&failrrrr*Ar+z compound.not_..csr2r r3)r&skiprrrr*Br+r0)rr.rrrnot_?s z compound.not_cCs |tjSr )enabled_for_configr_currentrrrrenabledFs zcompound.enabledcCs&|j|jD] }||rdSqdSNFTr unionr)rrrrrrr9Js zcompound.enabled_for_configcsfdd|j|jDS)Ncsg|] }|r|qSr _as_string)r&rrrr Rs z4compound.matching_config_reasons..r=rrrrrmatching_config_reasonsQs  z compound.matching_config_reasonscCs$t|j| o| p|j|Sr )boolr intersection)r include_tags exclude_tagsrrr include_testXszcompound.include_testcCs<|j|j|j|j|j|j|j|jdSr )r r-rrrr!rrr_extend^szcompound._extendcs<t|dr |j|Stfdd}||}|_|S)N_sa_exclusion_extendcsjtj|g|Ri|Sr )_dorr:)fnargsr)rrrdecorateisz#compound.__call__..decorate)hasattrrJrIr)rrLrN decoratedrrr__call__ds  zcompound.__call__c csrt}|j|j|jzdVWnty/}z|tj|dWYd}~dSd}~ww| tjddSr ) r rr-r r> Exception_expect_failurerr:_expect_success)r all_failsexrrrfail_ifqs zcompound.fail_ifcCsB||jvr|D]\}}||j|vr|j|||krdSqdSr<)r)r combinationrkvrrr_check_combinations}s  zcompound._check_combinationsc Ost|dkrt|}tt|jdd|dd}nd}|jD]}|||r<||r.)rr[AssertionErrorjoin)rrrXr\r6rrrrTs zcompound._expect_successN)rg)rb __module__ __qualname__rr#r/rr8propertyr;r9rCrHrIrQ contextlibcontextmanagerrWr[rKrSrTrrrrr !s&      r cCs t|gSr )r)tagnamerrr requires_tagr$rzcCst}|j||Sr )r rr-)tagnamescomprrrrs rcCt|}tt||Sr )r rr4rrrrronly_ifrcCr}r )r rr4r~rrr succeeds_ifrrc@s.eZdZed ddZd ddZd ddZdS) PredicateNcs t|tr |j|St|tr|r|jdur||_|St|ttfr0tfdd|D|St|t r9t |St|t j rut d|}|sMtd||d}|d}|drkt dd |dd Dnd}t ||||d St |rt||SJd |)Ncsg|]}|qSr) as_predicate)r&rclsrrrAz*Predicate.as_predicate..z.([\+\w]+)\s*(?:(>=|==|!=|<=|<|>)\s*([\d\.]+))?z(Couldn't locate DB name in predicate: %rrrcsr2r )int)r&drrrr*r+z)Predicate.as_predicate...) descriptionFzunknown predicate type: %s) isinstancer rr9rrr^r OrPredicatetuple SpecPredicater string_typesrematch ValueErrorgroupsplitcallableLambdaPredicate)rrrtokensdbopspecrrrrs<          zPredicate.as_predicateFcCs\||}|r | }|j|r|jjnd|r|jjnd|r!dnd|r)ddSddS)Nz z zdoesn't supportz does support)driverdatabasedoesnt_support does_support)rrurlget_driver_nameget_backend_name)rrnegatebool_rrr_format_descriptions zPredicate._format_descriptioncCstr )NotImplementedErrorrrrrrrr@zPredicate._as_stringr F)NF)rbrtru classmethodrrr@rrrrrs   #rc@(eZdZd ddZddZd ddZdS) BooleanPredicateNcCs||_|pd||_dS)Nz boolean %s)valuer)rrrrrrr szBooleanPredicate.__init__cCs|jSr )rrBrrrrQrzBooleanPredicate.__call__FcCs|j||dS)Nrrrrrrr@zBooleanPredicate._as_stringr rrbrtrurrQr@rrrrr  rc @sPeZdZd ddZejejejejej ej ej dddZ ddZ d d d ZdS)rNcCs||_||_||_||_dSr )rrrr)rrrrrrrrrs zSpecPredicate.__init__cCs||dko ||dkS)Nrrr)valpairrrr'zSpecPredicate.)<>z==z!=z<=z>=inbetweencCs|j}d|jvr|jd\}}n|jd}}|r |j|kr dS|dur+|j|kr+dS|jdurQ|dus8Jdt|}t|jdrE|jpJ|j|j}|||jSdS)N+Fz%DBAPI version specs not supported yetrQT) rrr\rr_server_versionrO_opsr)rrenginedialectrversionoperrrrrQ*s    zSpecPredicate.__call__FcCsb|jdur ||S|jdur|rd|jSd|jS|r'd|j|j|jfSd|j|j|jfS)Nznot %sz%sz not %s %s %sz%s %s %s)rrrrrrrrrr@Bs     zSpecPredicate._as_stringNNNr)rbrtruroperatorltgteqnelegecontainsrrQr@rrrrrs  rc@r) rNcsdt}|dsfdd|_n|_|pd|_|pi|_|r$||_dSjr-j|_dSd|_dS)NrcsSr r)rlambda_rrrUsz*LambdaPredicate.__init__..rzcustom function)rrrMr)r__doc__)rrrrMr)rrrrrRs     zLambdaPredicate.__init__cCr r rrBrrrrQar$zLambdaPredicate.__call__FcCr r rrrrrr@dr$zLambdaPredicate._as_stringrrrrrrrrQs rc@r) r4NcC||_||_dSr )rr)rrrrrrri zNotPredicate.__init__cCs || Sr )rrBrrrrQms zNotPredicate.__call__FcCs$|jr ||| S|j|| Sr )rrrr@rrrrr@pszNotPredicate._as_stringr rrrrrrr4hrr4c@s:eZdZd ddZddZdddZd d Zdd d ZdS)rNcCrr ) predicatesr)rrrrrrrxrzOrPredicate.__init__cCs|jD] }||r dSqdS)NTF)r)rrrrrrrQ|s zOrPredicate.__call__Fcs*rd}nd}|fdd|jDS)Nrqz or c3s|] }|jdVqdS)rNr?)r&prrrrr*s z(OrPredicate._eval_str..)rsr)rrr conjunctionrrr _eval_strs zOrPredicate._eval_strcCs&|jdur d||S|j|ddS)NzNot Tr)rrrrBrrr _negation_strs zOrPredicate._negation_strcCs,|r||S|jdur||S||Sr )rrrrrrrrr@s     zOrPredicate._as_stringr r)rbrtrurrQrrr@rrrrrws    rcCst|||tjSr )rrr:)rrrrrr _is_excludedrcCs.|}t|jdd}|durd}||S)z#Return a server_version_info tuple.server_version_infoNr)connectgetattrrclose)rconnrrrrrs rcGstdd|DS)NcSg|]}t|qSrrrr&rrrrrArzdb_spec..rdbsrrrdb_specrrcCttddS)NFzmark as executerrrrrropenrrcCr)NTzmarked as skiprrrrrclosedrrcCsttd|pdS)NTzexpected to fail)rrrrrrrrrcGstt|dS)NzFuture feature)rr)rLargrrrfuturesrcC t||Sr )rrrrrrfails_onr$rcGsttdd|DS)NcSrrrrrrrrArz.fails_on_everything_except..)rrrrrrfails_on_everything_exceptsrcCrr )rrrrrr7r$r7cs ttfddt|DS)Ncsg|]}t|qSrrrrrrrArzonly_on..)rrrto_list)rrrrronly_ons rcCstt||||Sr )rr)rrrrrrrexcluderrcGs"|sJdtdd|D|S)Nzno queries sent!cSrrr)r&queryrrrrArzagainst..r)rqueriesrrragainsts rr )&rwrrrrr util.compatrrrobjectr rzrrrrrrrr4rrr rrrrrrrrrr7rrrrrrrsH         8 9$