;
าโ"Ic               @   sW  d  d d g Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 m Z d d l m Z m Z m Z m Z d d l m Z m Z d Z e j   Z d	 Z d	 g Z e e d
  o d
 Z e d
 g 7Z n e j d k o d Z e d g 7Z n d   Z d   Z Gd   d e  Z d d d  Z  e j d k o d( d  Z" n d d l m# Z# d( d  Z" Gd   d e  Z$ d   Z% e j d k o  Gd   d e  Z& d   Z' n d Z( d Z) d Z* d Z+ d   Z, d    Z- Gd!   d" e  Z. d#   Z/ d$   Z0 Gd%   d& e  Z1 d'   Z2 d S()   u   Clientu   Listeneru   Pipei    N(   u   current_processu   AuthenticationError(   u   get_temp_diru   Finalizeu	   sub_debugu   debug(   u	   duplicateu   closei    u   AF_INETu   AF_UNIXu   win32u   AF_PIPEc             C   s}   |  d k o d S|  d k o t  j d d d t    S|  d k o' t  j d d	 t j   t t  f  St d
   d S(   u?   
    Return an arbitrary free address for the given family
    u   AF_INETu	   localhosti    u   AF_UNIXu   prefixu	   listener-u   diru   AF_PIPEu   \\.\pipe\pyc-%d-%d-u   unrecognized familyN(   u	   localhosti    (   u   tempfileu   mktempu   get_temp_diru   osu   getpidu   nextu   _mmap_counteru
   ValueError(   u   family(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   arbitrary_address0   s    c             C   sl   t  |   t k o d St  |   t k o |  j d  o d St  |   t k o d St d |    d S(   u]   
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    u   AF_INETu   \\u   AF_PIPEu   AF_UNIXu   address type of %r unrecognizedN(   u   typeu   tupleu   stru
   startswithu
   ValueError(   u   address(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   address_type?   s    #c             B   sY   |  Ee  Z d  Z d d d d d  Z d   Z d   Z e d    Z e d    Z	 d S(   u   
    Returns a listener object.

    This is a wrapper for a bound socket which is 'listening' for
    connections, or for a Windows named pipe.
    i   c             C   sง   | p | o t  |  p t } | p
 t |  } | d k o t | |  |  _ n t | | |  |  _ | d  k	 o! t | t  o t	 d   n | |  _
 d  S(   Nu   AF_PIPEu   authkey should be a byte string(   u   address_typeu   default_familyu   arbitrary_addressu   PipeListeneru	   _listeneru   SocketListeneru   Noneu
   isinstanceu   bytesu	   TypeErroru   _authkey(   u   selfu   addressu   familyu   backlogu   authkey(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   __init__Y   s    c             C   sA   |  j  j   } |  j o$ t | |  j  t | |  j  n | S(   uz   
        Accept a connection on the bound socket or named pipe of `self`.

        Returns a `Connection` object.
        (   u	   _listeneru   acceptu   _authkeyu   deliver_challengeu   answer_challenge(   u   selfu   c(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   accepth   s
    
c             C   s   |  j  j   S(   uA   
        Close the bound socket or named pipe of `self`.
        (   u	   _listeneru   close(   u   self(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   closet   s    c             C   s
   |  j  j S(    (   u	   _listeneru   _address(   u   self(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   <lambda>z   s    c             C   s
   |  j  j S(    (   u	   _listeneru   _last_accepted(   u   self(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   <lambda>{   s    N(
   u   __name__u
   __module__u   __doc__u   Noneu   __init__u   acceptu   closeu   propertyu   addressu   last_accepted(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   ListenerR   s   
		c             C   s   | p
 t  |   } | d k o t |   } n t |   } | d k	 o! t | t  o t d   n | d k	 o t | |  t | |  n | S(   u=   
    Returns a connection to the address of a `Listener`
    u   AF_PIPEu   authkey should be a byte stringN(	   u   address_typeu
   PipeClientu   SocketClientu   Noneu
   isinstanceu   bytesu	   TypeErroru   answer_challengeu   deliver_challenge(   u   addressu   familyu   authkeyu   c(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   Client~   s    c             C   sณ   |  of t  j   \ } } t j t j | j     } t j t j | j     } | j   | j   n= t j   \ } } t j | d d } t j | d d } | | f S(   uL   
        Returns pair of connection objects at either end of a pipe
        u   writableu   readableF(
   u   socketu
   socketpairu   _multiprocessingu
   Connectionu   osu   dupu   filenou   closeu   pipeu   False(   u   duplexu   s1u   s2u   c1u   c2u   fd1u   fd2(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   Pipe   s    
i   (   u   win32c             C   sm  t  d  } |  o* t j } t j t j B} t t } } n  t j } t j } d t } } t j | | t j t j	 Bt j
 Bd | | t j t j  } t j | | d t j t j d t j  } t j | t j	 d d  y t j | t j  WnE t k
 o9 } z# | j d t j k o   n WYd d } ~ Xn Xt j | d |  }	 t j | d |  }
 |	 |
 f S(   uL   
        Returns pair of connection objects at either end of a pipe
        u   AF_PIPEi    i   Nu   writableu   readable(   u   arbitrary_addressu   win32u   PIPE_ACCESS_DUPLEXu   GENERIC_READu   GENERIC_WRITEu   BUFSIZEu   PIPE_ACCESS_INBOUNDu   CreateNamedPipeu   PIPE_TYPE_MESSAGEu   PIPE_READMODE_MESSAGEu	   PIPE_WAITu   NMPWAIT_WAIT_FOREVERu   NULLu
   CreateFileu   OPEN_EXISTINGu   SetNamedPipeHandleStateu   Noneu   ConnectNamedPipeu   WindowsErroru   argsu   ERROR_PIPE_CONNECTEDu   _multiprocessingu   PipeConnection(   u   duplexu   addressu   openmodeu   accessu   obsizeu   ibsizeu   h1u   h2u   eu   c1u   c2(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   Pipeฉ   s2    			$c             B   s2   |  Ee  Z d  Z d d  Z d   Z d   Z d S(   uO   
    Representation of a socket which is bound to an address and listening
    i   c             C   sก   t  j  t t  |   |  _ |  j j |  |  j j |  |  j j   |  _ | |  _ d  |  _	 | d k o( t
 |  t j d | f d d |  _ n
 d  |  _ d  S(   Nu   AF_UNIXu   argsu   exitpriorityi    (   u   socketu   getattru   _socketu   bindu   listenu   getsocknameu   _addressu   _familyu   Noneu   _last_acceptedu   Finalizeu   osu   unlinku   _unlink(   u   selfu   addressu   familyu   backlog(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   __init__ื   s    		%c             C   sG   |  j  j   \ } |  _ t | j    } t j |  } | j   | S(   N(   u   _socketu   acceptu   _last_acceptedu	   duplicateu   filenou   _multiprocessingu
   Connectionu   close(   u   selfu   su   fdu   conn(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   acceptๆ   s
    
c             C   s/   |  j  j   |  j d  k	 o |  j   n d  S(   N(   u   _socketu   closeu   _unlinku   None(   u   self(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   closeํ   s    N(   u   __name__u
   __module__u   __doc__u   __init__u   acceptu   close(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   SocketListenerำ   s   
	u   SocketListenerc             C   sำ   t  |   } t j t t |   } x} y | j |   Wnb t j k
 oS } z= | j d t j k o t d |     n t	 j
 d  WYd d } ~ Xq' XPq'   t | j    } t j |  } | j   | S(   uO   
    Return a connection object connected to the socket given by `address`
    i    u   failed to connect to address %sg{ฎGแz?N(   u   address_typeu   socketu   getattru   connectu   erroru   argsu   errnou   ECONNREFUSEDu   debugu   timeu   sleepu	   duplicateu   filenou   _multiprocessingu
   Connectionu   close(   u   addressu   familyu   su   eu   fdu   conn(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   SocketClient๓   s     !
c             B   s8   |  Ee  Z d  Z d d  Z d   Z e d    Z d S(   u0   
        Representation of a named pipe
        c          	   C   s    | |  _  t j | t j t j t j Bt j Bt j t t t j	 t j
  } | g |  _ d  |  _ t d |  j   t |  t j d |  j |  j  f d d |  _ d  S(   Nu    listener created with address=%ru   argsu   exitpriorityi    (   u   _addressu   win32u   CreateNamedPipeu   PIPE_ACCESS_DUPLEXu   PIPE_TYPE_MESSAGEu   PIPE_READMODE_MESSAGEu	   PIPE_WAITu   PIPE_UNLIMITED_INSTANCESu   BUFSIZEu   NMPWAIT_WAIT_FOREVERu   NULLu   _handle_queueu   Noneu   _last_acceptedu	   sub_debugu   Finalizeu   PipeListeneru   _finalize_pipe_listeneru   close(   u   selfu   addressu   backlogu   handle(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   __init__  s    			c             C   sา   t  j |  j t  j t  j t  j Bt  j Bt  j t t t  j	 t  j
  } |  j j |  |  j j d  } y t  j | t  j
  WnE t k
 o9 } z# | j d t  j k o   n WYd  d  } ~ Xn Xt j |  S(   Ni    (   u   win32u   CreateNamedPipeu   _addressu   PIPE_ACCESS_DUPLEXu   PIPE_TYPE_MESSAGEu   PIPE_READMODE_MESSAGEu	   PIPE_WAITu   PIPE_UNLIMITED_INSTANCESu   BUFSIZEu   NMPWAIT_WAIT_FOREVERu   NULLu   _handle_queueu   appendu   popu   ConnectNamedPipeu   WindowsErroru   argsu   ERROR_PIPE_CONNECTEDu   _multiprocessingu   PipeConnection(   u   selfu	   newhandleu   handleu   e(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   accept)  s    c             C   s,   t  d |  x |  D] } t |  q Wd  S(   Nu    closing listener with address=%r(   u	   sub_debugu   close(   u   queueu   addressu   handle(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   _finalize_pipe_listener:  s     N(   u   __name__u
   __module__u   __doc__u   Noneu   __init__u   acceptu   staticmethodu   _finalize_pipe_listener(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   PipeListener  s   
	u   PipeListenerc             C   sษ   x  yH t  j |  d  t  j |  t  j t  j Bd t  j t  j d t  j  } WnN t k
 oB } z, | j d t  j	 t  j
 f k o   n WYd d } ~ Xq XPq   t  j | t  j d d  t j |  S(   uU   
        Return a connection object connected to the pipe given by `address`
        i่  i    N(   u   win32u   WaitNamedPipeu
   CreateFileu   GENERIC_READu   GENERIC_WRITEu   NULLu   OPEN_EXISTINGu   WindowsErroru   argsu   ERROR_SEM_TIMEOUTu   ERROR_PIPE_BUSYu   SetNamedPipeHandleStateu   PIPE_READMODE_MESSAGEu   Noneu   _multiprocessingu   PipeConnection(   u   addressu   hu   e(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu
   PipeClient@  s    "i   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#c             C   s   d d  l  } t j t  } |  j t |  | j | |  j   } |  j d  } | | k o |  j t	  n |  j t
  t d   d  S(   Ni    i   u   digest received was wrong(   u   hmacu   osu   urandomu   MESSAGE_LENGTHu
   send_bytesu	   CHALLENGEu   newu   digestu
   recv_bytesu   WELCOMEu   FAILUREu   AuthenticationError(   u
   connectionu   authkeyu   hmacu   messageu   digestu   response(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   deliver_challengec  s    c             C   s   d d  l  } |  j d  } | t t  d   } | j | |  j   } |  j |  |  j d  } | t k o t d   n d  S(   Ni    i   u   digest sent was rejected(	   u   hmacu
   recv_bytesu   lenu	   CHALLENGEu   newu   digestu
   send_bytesu   WELCOMEu   AuthenticationError(   u
   connectionu   authkeyu   hmacu   messageu   digestu   response(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   answer_challengep  s    c             B   s)   |  Ee  Z d    Z d   Z d   Z d S(   c             C   sO   | |  _  | |  _ | |  _ x- d D]% } t | |  } t |  | |  q" Wd  S(   Nu   filenou   closeu   pollu
   recv_bytesu
   send_bytes(   u   filenou   closeu   pollu
   recv_bytesu
   send_bytes(   u   _connu   _dumpsu   _loadsu   getattru   setattr(   u   selfu   connu   dumpsu   loadsu   attru   obj(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   __init__  s    			 c             C   s#   |  j  |  } |  j j |  d  S(   N(   u   _dumpsu   _connu
   send_bytes(   u   selfu   obju   s(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   send  s    c             C   s   |  j  j   } |  j |  S(   N(   u   _connu
   recv_bytesu   _loads(   u   selfu   s(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   recv  s    N(   u   __name__u
   __module__u   __init__u   sendu   recv(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   ConnectionWrapper  s   
		u   ConnectionWrapperc             C   s%   t  j |  f d  d  d  d  j d  S(   Ni   u   utf8(   u	   xmlrpclibu   dumpsu   Noneu   encode(   u   obj(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu
   _xml_dumps  s    c             C   s%   t  j |  j d   \ \ } } | S(   Nu   utf8(   u	   xmlrpclibu   loadsu   decode(   u   su   obju   method(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu
   _xml_loads  s    !c             B   s   |  Ee  Z d    Z d S(   c             C   s.   d d  l  j a t j |   } t | t t  S(   Ni    (   u   xmlrpc.clientu   clientu	   xmlrpclibu   Listeneru   acceptu   ConnectionWrapperu
   _xml_dumpsu
   _xml_loads(   u   selfu   obj(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   accept  s    N(   u   __name__u
   __module__u   accept(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   XmlListener  s   
u   XmlListenerc              O   s(   d d  l  j a t t |  |   t t  S(   Ni    (   u   xmlrpc.clientu   clientu	   xmlrpclibu   ConnectionWrapperu   Clientu
   _xml_dumpsu
   _xml_loads(   u   argsu   kwds(    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu	   XmlClient  s    T(3   u   __all__u   osu   sysu   socketu   errnou   timeu   tempfileu	   itertoolsu   _multiprocessingu   multiprocessingu   current_processu   AuthenticationErroru   multiprocessing.utilu   get_temp_diru   Finalizeu	   sub_debugu   debugu   multiprocessing.forkingu	   duplicateu   closeu   BUFSIZEu   countu   _mmap_counteru   default_familyu   familiesu   hasattru   platformu   arbitrary_addressu   address_typeu   objectu   Listeneru   Noneu   Clientu   Trueu   Pipeu   win32u   SocketListeneru   SocketClientu   PipeListeneru
   PipeClientu   MESSAGE_LENGTHu	   CHALLENGEu   WELCOMEu   FAILUREu   deliver_challengeu   answer_challengeu   ConnectionWrapperu
   _xml_dumpsu
   _xml_loadsu   XmlListeneru	   XmlClient(    (    (    u7   /mit/python/lib/python3.0/multiprocessing/connection.pyu   <module>	   sZ   "			,* 	.				