ó
—<'Xc           @   s+  d  Z  y d d l j Z Wn e k
 r8 d d l Z n Xd „  Z d „  Z d „  Z d „  Z	 d „  Z
 y e j Z Wn e k
 r e ƒ  Z n Xy e j Z Wn e k
 r¹ e	 ƒ  Z n Xy e j Z Wn e k
 rã e
 ƒ  Z n Xy d d l m Z Wn e k
 rd	 „  Z n Xi  Z e d
 „ Z d S(   s+  
Patch recently added ABCs into the standard lib module
``collections.abc`` (Py3) or ``collections`` (Py2).

Usage::

    import backports_abc
    backports_abc.patch()

or::

    try:
        from collections.abc import Generator
    except ImportError:
        from backports_abc import Generator
iÿÿÿÿNc         C   s*   y |  j  SWn t k
 r% t |  ƒ SXd  S(   N(   t   __mro__t   AttributeErrort   old_style_mro(   t   cls(    (    s,   lib/python2.7/site-packages/backports_abc.pyt   get_mro   s    c         c   s9   |  Vx- |  j  D]" } x t | ƒ D] } | Vq" Wq Wd  S(   N(   t	   __bases__R   (   R   t   baset   c(    (    s,   lib/python2.7/site-packages/backports_abc.pyR      s    c             sˆ   d d l  m ‰ d t t d ƒ d ƒ r. d n d d d d f ‰ d	 t j f ‡  ‡ ‡ f d
 †  ƒ  Y‰  t d „  ƒ  ƒ }  ˆ  j |  ƒ ˆ  S(   Niÿÿÿÿ(   t   abstractmethodt   __iter__t   __next__t   nextt   sendt   throwt   closet	   Generatorc              st   e  Z d Z d  ˆ k r$ d „  Z n	 d „  Z ˆ d „  ƒ Z ˆ d d d „ ƒ Z d „  Z e	 ‡  ‡ f d †  ƒ Z
 RS(	   R
   c         S   s   |  j  d  ƒ S(   N(   R   t   None(   t   self(    (    s,   lib/python2.7/site-packages/backports_abc.pyR
   1   s    c         S   s   |  j  d  ƒ S(   N(   R   R   (   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyR   4   s    c         S   s
   t  ‚ d  S(   N(   t   StopIteration(   R   t   value(    (    s,   lib/python2.7/site-packages/backports_abc.pyR   7   s    c         S   sU   | d  k r- | d  k r! | ‚ n  | ƒ  } n  | d  k	 rK | j | ƒ } n  | ‚ d  S(   N(   R   t   with_traceback(   R   t   typt   valt   tb(    (    s,   lib/python2.7/site-packages/backports_abc.pyR   ;   s    	c         S   s;   y |  j  t ƒ Wn t t f k
 r* n Xt d ƒ ‚ d  S(   Ns   generator ignored GeneratorExit(   R   t   GeneratorExitR   t   RuntimeError(   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyR   E   s
    c            sY   |  ˆ  k rU t  | ƒ } x6 ˆ D]. } x% | D] } | | j k r, Pq, q, Wt Sq Wt St S(   N(   R   t   __dict__t   NotImplementedt   True(   R   t   Ct   mrot   methodR   (   R   t   required_methods(    s,   lib/python2.7/site-packages/backports_abc.pyt   __subclasshook__M   s    (    N(   t   __name__t
   __module__t	   __slots__R
   R   R   R   R   R   t   classmethodR!   (    (   R   R   R    (    s,   lib/python2.7/site-packages/backports_abc.pyR   -   s   			c           s   s	   d  Vd  S(   N(    (    (    (    s,   lib/python2.7/site-packages/backports_abc.pyt   <lambda>Z   s    (    (   t   abcR   t   hasattrt   itert   _collections_abct   Iteratort   typet   register(   t	   generator(    (   R   R   R    s,   lib/python2.7/site-packages/backports_abc.pyt   mk_gen&   s    !%-c             se   d d l  m }  m } |  d „  ƒ } t ‡  f d †  ƒ } | d d	 i d
 d 6| d 6| d 6ƒ ‰  ˆ  S(   Niÿÿÿÿ(   R   t   ABCMetac         s   s	   d  Vd  S(   N(    (   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyt	   __await__b   s    c            sN   |  ˆ  k rJ x; t  | ƒ D]* } d | j k r | j d r? t SPq q Wn  t S(   NR1   (   R   R   R   R   (   R   R   t   B(   t	   Awaitable(    s,   lib/python2.7/site-packages/backports_abc.pyR!   f   s    R3   R$   R1   R!   (    (    (   R'   R   R0   R%   (   R   R0   R1   R!   (    (   R3   s,   lib/python2.7/site-packages/backports_abc.pyt   mk_awaitable_   s    c              s3   d d l  m ‰ d t f ‡  ‡ f d †  ƒ  Y‰  ˆ  S(   Niÿÿÿÿ(   R   t	   Coroutinec              sP   e  Z d Z ˆ d  „  ƒ Z ˆ d d d „ ƒ Z d „  Z e ‡  f d †  ƒ Z RS(   c         S   s
   t  ‚ d S(   sk   Send a value into the coroutine.
            Return next yielded value or raise StopIteration.
            N(   R   (   R   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyR   €   s    c         S   sU   | d k r- | d k r! | ‚ n  | ƒ  } n  | d k	 rK | j | ƒ } n  | ‚ d S(   so   Raise an exception in the coroutine.
            Return next yielded value or raise StopIteration.
            N(   R   R   (   R   R   R   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyR   ‡   s    	c         S   s;   y |  j  t ƒ Wn t t f k
 r* n Xt d ƒ ‚ d S(   s2   Raise GeneratorExit inside coroutine.
            s   coroutine ignored GeneratorExitN(   R   R   R   R   (   R   (    (    s,   lib/python2.7/site-packages/backports_abc.pyR   ”   s
    c            sY   |  ˆ  k rU t  | ƒ } x6 d D]. } x% | D] } | | j k r, Pq, q, Wt Sq Wt St S(   NR1   R   R   R   (   R1   R   R   R   (   R   R   R   R   (   R   R   R   R   R   (   R5   (    s,   lib/python2.7/site-packages/backports_abc.pyR!   ž   s    (    N(	   R"   R#   R$   R   R   R   R   R%   R!   (    (   R5   R   (    s,   lib/python2.7/site-packages/backports_abc.pyR5   }   s   	
(   R'   R   R3   (    (    (   R5   R   s,   lib/python2.7/site-packages/backports_abc.pyt   mk_coroutinez   s    .(   t   isawaitablec         C   s   t  |  t ƒ S(   N(   t
   isinstanceR3   (   t   obj(    (    s,   lib/python2.7/site-packages/backports_abc.pyR7   Ã   s    c         C   s]   t  t d <t _  t t d <t _ t t d <t _ |  rY d d l } t t d <| _ n  d S(   sm   
    Main entry point for patching the ``collections.abc`` and ``inspect``
    standard library modules.
    s   collections.abc.Generators   collections.abc.Coroutines   collections.abc.AwaitableiÿÿÿÿNs   inspect.isawaitable(   R   t   PATCHEDR*   R5   R3   t   inspectR7   (   t   patch_inspectR;   (    (    s,   lib/python2.7/site-packages/backports_abc.pyt   patchÍ   s    (   t   __doc__t   collections.abcR'   R*   t   ImportErrort   collectionsR   R   R/   R4   R6   R   R   R3   R5   R;   R7   R:   R   R=   (    (    (    s,   lib/python2.7/site-packages/backports_abc.pyt   <module>   s6   			9		7