ó
¿b›]c           @   s×  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 „ Z
 d d	 „ Z d
 e f d „  ƒ  YZ d „  Z d „  Z d d „ Z d d „ Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j Z d „  Z d „  Z d „  Z d „  Z d  „  Z d d! „ Z e d" „  ƒ Z  d d# „ Z! d$ „  Z" d d% „ Z# d d& „ Z$ d d' „ Z% d( „  Z& d S()   iÿÿÿÿNi   (   t   configi   (   t   util(   t	   decorator(   t   inspect_getfullargspecc         C   s,   t  ƒ  } t |  | ƒ } | j j | ƒ | S(   N(   t   compoundt   _as_predicatet   skipst   add(   t	   predicatet   reasont   rulet   pred(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   skip_if   s    	c         C   s,   t  ƒ  } t |  | ƒ } | j j | ƒ | S(   N(   R   R   t   failsR   (   R   R	   R
   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   fails_if   s    	R   c           B   s›   e  Z d  „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z e j d
 „  ƒ Z d „  Z d d „ Z d d „ Z RS(   c         C   s(   t  ƒ  |  _ t  ƒ  |  _ t  ƒ  |  _ d  S(   N(   t   setR   R   t   tags(   t   self(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   __init__"   s    c         C   s   |  j  | ƒ S(   N(   R   (   R   t   other(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   __add__'   s    c         G   s   t  ƒ  } | j j |  j ƒ | j j |  j ƒ | j j |  j ƒ xG | D]? } | j j | j ƒ | j j | j ƒ | j j | j ƒ qI W| S(   N(   R   R   t   updateR   R   (   R   t   otherst   copyR   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   *   s    	c         C   sZ   t  ƒ  } | j j d „  |  j Dƒ ƒ | j j d „  |  j Dƒ ƒ | j j |  j ƒ | S(   Nc         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   NotPredicate(   t   .0t   fail(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pys	   <genexpr>7   s    c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R   (   R   t   skip(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pys	   <genexpr>8   s    (   R   R   R   R   R   (   R   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   not_5   s
    	c         C   s   |  j  t j ƒ S(   N(   t   enabled_for_configR    t   _current(   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   enabled<   s    c         C   s8   x1 |  j  j |  j ƒ D] } | | ƒ r t Sq Wt Sd  S(   N(   R   t   unionR   t   Falset   True(   R   R    R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   @   s    c         C   s;   g  |  j  j |  j ƒ D]! } | | ƒ r | j | ƒ ^ q S(   N(   R   R    R   t
   _as_string(   R   R    R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   matching_config_reasonsG   s    c         C   s0   t  |  j j | ƒ o, | p, |  j j | ƒ ƒ S(   N(   t   boolR   t   intersection(   R   t   include_tagst   exclude_tags(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   include_testN   s    c         C   s=   |  j  j | j  ƒ |  j j | j ƒ |  j j | j ƒ d  S(   N(   R   R   R   R   (   R   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   _extendT   s    c            sQ   t  | d ƒ r# | j j ˆ  ƒ | St ‡  f d †  ƒ } | | ƒ } ˆ  | _ | S(   Nt   _sa_exclusion_extendc            s   ˆ  j  t j |  | | Ž S(   N(   t   _doR    R   (   t   fnt   argst   kw(   R   (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   decorate^   s    (   t   hasattrR+   R*   R   (   R   R-   R0   t	   decorated(    (   R   s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   __call__Y   s    	c         c   sn   t  ƒ  } | j j |  j j |  j ƒ ƒ y	 d  VWn& t k
 rY } | j t j | ƒ n X| j	 t j ƒ d  S(   N(
   R   R   R   R   R    t	   Exceptiont   _expect_failureR    R   t   _expect_success(   R   t	   all_failst   ex(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   fail_iff   s    		c   	      O   s¬   xI |  j  D]> } | | ƒ r
 d | j | j | ƒ f } t j | ƒ q
 q
 Wy | | | Ž  } Wn, t k
 r } |  j | | d | j ƒn X|  j | d | j ƒ| Sd  S(   Ns	   '%s' : %st   name(   R   t   __name__R#   R    t	   skip_testR4   R5   R6   (	   R   t   cfgR-   R.   R/   R   t   msgt   return_valueR8   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR,   r   s    t   blockc         C   sV   xO |  j  D]7 } | | ƒ r
 d | | j | ƒ t | ƒ f GHPq
 q
 Wt j | ƒ d  S(   Ns   %s failed as expected (%s): %s (   R   R#   t   strR   t   raise_from_cause(   R   R    R8   R:   R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR5   €   s    c            sg   |  j  s d  SxS |  j  D] } | ˆ  ƒ s Pq q Wt d | d j ‡  f d †  |  j  Dƒ ƒ f ƒ ‚ d  S(   Ns    Unexpected success for '%s' (%s)s    and c         3   s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   R#   (   R   R   (   R    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pys	   <genexpr>™   s    (   R   t   AssertionErrort   join(   R   R    R:   R   (    (   R    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR6      s    	(   R;   t
   __module__R   R   R   R   t   propertyR   R   R$   R)   R*   R3   t
   contextlibt   contextmanagerR9   R,   R5   R6   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   !   s   										c         C   s   t  |  g ƒ S(   N(   R   (   t   tagname(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   requires_tagŸ   s    c         C   s   t  ƒ  } | j j |  ƒ | S(   N(   R   R   R   (   t   tagnamest   comp(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   £   s    	c         C   s   t  |  ƒ }  t t |  ƒ | ƒ S(   N(   R   R   R   (   R   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   only_if©   s    c         C   s   t  |  ƒ }  t t |  ƒ | ƒ S(   N(   R   R   R   (   R   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   succeeds_if®   s    t	   Predicatec           B   s5   e  Z e d d  „ ƒ Z e d „ Z d e d „ Z RS(   c         C   s‘  t  | t ƒ r" |  j | j | ƒ St  | t ƒ rV | rR | j d  k rR | | _ n  | St  | t t f ƒ r” t	 g  | D] } |  j | ƒ ^ qu | ƒ St  | t
 ƒ r­ t | Œ  St  | t j ƒ r[t j d | ƒ } | sê t d | ƒ ‚ n  | j d ƒ } | j d ƒ } | j d ƒ r?t
 d „  | j d ƒ j d ƒ Dƒ ƒ n d  } t | | | d | ƒSt j | ƒ rwt | | ƒ St st d	 | ƒ ‚ d  S(
   Ns.   ([\+\w]+)\s*(?:(>=|==|!=|<=|<|>)\s*([\d\.]+))?s(   Couldn't locate DB name in predicate: %ri   i   i   c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   int(   R   t   d(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pys	   <genexpr>Í   s    t   .t   descriptions   unknown predicate type: %s(   t
   isinstanceR   t   as_predicateR   RO   RS   t   Nonet   listR   t   OrPredicatet   tuplet   SpecPredicateR   t   string_typest   ret   matcht
   ValueErrort   groupt   splitt   callablet   LambdaPredicateR!   RC   (   t   clsR   RS   R   t   tokenst   dbt   opt   spec(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRU   ´   s2    &
7c         C   s‹   |  | ƒ } | r | } n  |  j  i | r= | j j j ƒ  n d d 6| r\ | j j j ƒ  n d d 6| ro d n d d 6| r‚ d n d d 6S(	   Ns   <no driver>t   drivers   <no database>t   databases   doesn't supports   does supportt   doesnt_supportt   does_support(   RS   Re   t   urlt   get_driver_namet   get_backend_name(   R   R    t   negatet   bool_(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   _format_descriptionØ   s    
	c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   ç   s    N(   R;   RE   t   classmethodRV   RU   R!   Rq   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRO   ³   s   #t   BooleanPredicatec           B   s)   e  Z d d  „ Z d „  Z e d „ Z RS(   c         C   s    | |  _  | p d | |  _ d  S(   Ns
   boolean %s(   t   valueRS   (   R   Ru   RS   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   ì   s    	c         C   s   |  j  S(   N(   Ru   (   R   R    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR3   ð   s    c         C   s   |  j  | d | ƒS(   NRo   (   Rq   (   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   ó   s    N(   R;   RE   RV   R   R3   R!   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRt   ë   s   	RZ   c           B   s…   e  Z d d d d  „ Z i e j d 6e j d 6e j d 6e j d 6e j	 d 6e j
 d 6e j d 6d „  d	 6Z d
 „  Z e d „ Z RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   Re   Rf   Rg   RS   (   R   Re   Rf   Rg   RS   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   ø   s    			t   <t   >s   ==s   !=s   <=s   >=t   inc         C   s   |  | d k o |  | d k S(   Ni    i   (    (   t   valt   pair(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   <lambda>  t    t   betweenc         C   sñ   | j  } d |  j  k r3 |  j  j d ƒ \ } } n |  j  d  } } | r\ | j | k r\ t S| d  k	 r{ | j | k r{ t S|  j d  k	 ré | d  k s¢ t d ƒ ‚ t | ƒ } t	 |  j d ƒ rÉ |  j pÖ |  j
 |  j } | | |  j ƒ St Sd  S(   Nt   +s%   DBAPI version specs not supported yetR3   (   Re   R`   RV   R:   R!   Rh   Rf   RC   t   _server_versionR1   t   _opsRg   R"   (   R   R    t   enginet   dialectRh   t   versiont   oper(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR3   	  s    	+c         C   sˆ   |  j  d  k	 r |  j | ƒ S|  j d  k rJ | r< d |  j Sd |  j Sn: | rj d |  j |  j |  j f Sd |  j |  j |  j f Sd  S(   Ns   not %ss   %ss   not %s %s %ss   %s %s %s(   RS   RV   Rq   Rf   Re   Rg   (   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   !  s    N(   R;   RE   RV   R   t   operatort   ltt   gtt   eqt   net   let   get   containsR€   R3   R!   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRZ   ÷   s   






	Rb   c           B   s/   e  Z d d d d  „ Z d „  Z e d „ Z RS(   c            s‰   t  ˆ  ƒ } | d s+ ‡  f d †  |  _ n	 ˆ  |  _ | p= d |  _ | pL i  |  _ | rd | |  _ n! ˆ  j r| ˆ  j |  _ n	 d |  _ d  S(   Ni    c            s   ˆ  ƒ  S(   N(    (   Re   (   t   lambda_(    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR{   4  R|   s   custom function(    (   R   R   R.   R/   RS   t   __doc__(   R   R   RS   R.   R/   Rg   (    (   R   s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   1  s    
		c         C   s   |  j  | ƒ S(   N(   R   (   R   R    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR3   @  s    c         C   s   |  j  | ƒ S(   N(   Rq   (   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   C  s    N(   R;   RE   RV   R   R3   R!   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRb   0  s   	R   c           B   s)   e  Z d d  „ Z d „  Z e d „ Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R   RS   (   R   R   RS   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   H  s    	c         C   s   |  j  | ƒ S(   N(   R   (   R   R    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR3   L  s    c         C   s2   |  j  r |  j | | ƒ S|  j j | | ƒ Sd  S(   N(   RS   Rq   R   R#   (   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   O  s    	N(   R;   RE   RV   R   R3   R!   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   G  s   	RX   c           B   s>   e  Z d d  „ Z d „  Z e d „ Z d „  Z e d „ Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t
   predicatesRS   (   R   R   RS   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   W  s    	c         C   s(   x! |  j  D] } | | ƒ r
 t Sq
 Wt S(   N(   R   R"   R!   (   R   R    R   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR3   [  s    c            s8   ˆ r d } n d } | j  ‡  ‡ f d †  |  j Dƒ ƒ S(   Ns    and s    or c         3   s$   |  ] } | j  ˆ  d  ˆ ƒVq d S(   Ro   N(   R#   (   R   t   p(   R    Ro   (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pys	   <genexpr>g  s    (   RD   R   (   R   R    Ro   t   conjunction(    (   R    Ro   s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt	   _eval_stra  s
    	c         C   s7   |  j  d  k	 r  d |  j | ƒ S|  j | d t ƒSd  S(   Ns   Not Ro   (   RS   RV   Rq   R’   R"   (   R   R    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   _negation_strj  s    c         C   s@   | r |  j  | ƒ S|  j d  k	 r/ |  j | ƒ S|  j | ƒ Sd  S(   N(   R“   RS   RV   Rq   R’   (   R   R    Ro   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR#   p  s
    N(	   R;   RE   RV   R   R3   R!   R’   R“   R#   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyRX   V  s
   			c         C   s   t  |  | | ƒ t j ƒ S(   N(   RZ   R    R   (   Re   Rf   Rg   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   _is_excluded}  s    c         C   sD   |  j  ƒ  } t |  j d d ƒ } | d k r6 d } n  | j ƒ  | S(   s#   Return a server_version_info tuple.t   server_version_infoN(    (   t   connectt   getattrR‚   RV   t   close(   R   t   connRƒ   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR     s    	
c          G   s&   t  g  |  D] } t j | ƒ ^ q
 ƒ S(   N(   RX   RO   RU   (   t   dbsRe   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   db_spec  s    c           C   s   t  t t d ƒ ƒ S(   Ns   mark as execute(   R   Rt   R!   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   open‘  s    c           C   s   t  t t d ƒ ƒ S(   Ns   marked as skip(   R   Rt   R"   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   closed•  s    c         C   s   t  t t |  p d ƒ ƒ S(   Ns   expected to fail(   R   Rt   R"   (   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   ™  s    c         G   s   t  t |  ƒ d ƒ S(   Ns   Future feature(   R   Rb   (   R-   t   arg(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   future  s    c         C   s   t  |  | ƒ S(   N(   R   (   Re   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   fails_on¢  s    c          G   s,   t  t g  |  D] } t j | ƒ ^ q ƒ ƒ S(   N(   RN   RX   RO   RU   (   Rš   Re   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   fails_on_everything_except¦  s    c         C   s   t  |  | ƒ S(   N(   R   (   Re   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyR   ª  s    c         C   s8   t  t g  t j |  ƒ D] } t j | | ƒ ^ q ƒ ƒ S(   N(   RM   RX   R   t   to_listRO   RU   (   Rš   R	   Re   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   only_on®  s    c         C   s   t  t |  | | ƒ | ƒ S(   N(   R   RZ   (   Re   Rf   Rg   R	   (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   exclude¶  s    c         G   s>   | s t  d ƒ ‚ t g  | D] } t j | ƒ ^ q ƒ |  ƒ S(   Ns   no queries sent!(   RC   RX   RO   RU   (   R    t   queriest   query(    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   againstº  s    %('   RG   R…   R\   R|   R    R   R   t   util.compatR   RV   R   R   t   objectR   RJ   R   RM   RN   RO   Rt   RZ   Rb   R   RX   RU   R   R”   R   R›   Rœ   R   R   RŸ   R    R¡   R   R£   R¤   R§   (    (    (    s<   lib/python2.7/site-packages/sqlalchemy/testing/exclusions.pyt   <module>	   sB   ~		89$							