ó
ç™xTc           @   s  d  d l  m Z d  d l m 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 Z d  d l Z d e j f d „  ƒ  YZ d Z e j d k rÏ d Z n  d	 e f d
 „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   division(   t   adopt_init_argsNt   TimeoutTransportc           B   s    e  Z e j d  „ Z d „  Z RS(   c         O   s#   t  j j |  | | Ž | |  _ d  S(   N(   t	   xmlrpclibt	   Transportt   __init__t   timeout(   t   selfR   t   argst   kwargs(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   G   s    c         C   sn   |  j  r' | |  j  d k r' |  j  d S|  j | ƒ \ } |  _ } | t j | d |  j ƒf |  _  |  j  d S(   Ni    i   R   (   t   _connectiont   get_host_infot   _extra_headerst   httplibt   HTTPConnectionR   (   R   t   hostt   chostt   x509(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   make_connectionK   s    (   t   __name__t
   __module__t   sockett   _GLOBAL_DEFAULT_TIMEOUTR   R   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   F   s   g      @t   win32g      ð?t   ServerProxyc           B   se   e  Z d d d  d  d  e e d „ Z d „  Z e d „ Z d „  Z	 e	 Z
 d „  Z d „  Z d „  Z RS(	   i    c	         C   sú   g  |  _  d d  l }	 |	 j | ƒ \ }
 } |
 d	 k rB t d ‚ n  |	 j | ƒ \ |  _ |  _ |  j sr d |  _ n  | d  k r· |
 d k rŸ t j	 d | ƒ } q· t
 d | d | ƒ } n  | |  _ | |  _ | |  _ | |  _ d |  _ g  |  _ | |  _ d  S(
   Niÿÿÿÿt   httpt   httpss   unsupported XML-RPC protocols   /RPC2t   use_datetimeR   i    (   R   R   (   t   _pendingt   urllibt	   splittypet   IOErrort	   splithostt   _ServerProxy__hostt   _ServerProxy__handlert   NoneR   t   SafeTransportR   t   _ServerProxy__transportt   _ServerProxy__encodingt   _ServerProxy__verboset   _ServerProxy__allow_nonet	   _timeoutst   _errorst   raise_errors(   R   t   urit	   transportt   encodingt   verboset
   allow_noneR   R   R+   R   t   type(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   Y   s(    								c         C   s    |  j  j | | f ƒ |  j ƒ  S(   N(   R   t   appendt   flush_requests(   R   t
   methodnamet   params(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt	   __requestw   s    c         C   sT  t  j  ƒ  } d  } xt |  j ƒ d k r"|  j j d ƒ \ } } yn t j | | d |  j d |  j ƒ} |  j	 j
 |  j |  j | d |  j ƒ} t | ƒ d k r¯ | d } n  Wq t k
 rÆ ‚  q t k
 r} t | ƒ }	 t | d ƒ rQ| j d k rQ|  j j d | | f ƒ t  j d t  j ƒ  ƒ }
 |  j j d |
 |	 f ƒ PqQn  d |	 k rtd GH|  j d 7_ qt | ƒ j d ƒ r–g  |  _ Pqd t | ƒ k rµg  |  _ Pqd t | ƒ t | ƒ d j g  | D] } t | ƒ ^ q×ƒ f }	 |  j st j |	 IJqt |	 ƒ ‚ q Xq Wt  j  ƒ  } | rPt j j d | | ƒ n  | S(   Ni    R.   R0   R/   i   t   errnoi    i6   i=   ih   io   iF'  iM'  s   %H:%M:%Ss   %s -- %ss	   timed outs    XMLRPC timeout, ignoring requests   <ProtocolError s   exceptions.SystemExits'   XMLRPC error: %s
Method: %s
Params: %s
s   , s   flush_requests: %.3fs
(   i    i6   i=   ih   io   iF'  iM'  (    t   timeR#   t   lenR   t   popR   t   dumpsR&   R(   R%   t   requestR!   R"   R'   t   KeyboardInterruptt	   Exceptiont   strt   hasattrR7   t   insertt   strftimet	   localtimeR*   R2   R)   t
   startswitht   joinR+   t   syst   stderrt   RuntimeErrort   write(   R   t   show_timingst   t1t   resultR4   R5   R<   t   responset   et   msgt   tt   pt   t2(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR3   {   sV    				>	c         C   s   d |  j  |  j f S(   Ns   <ServerProxy for %s%s>(   R!   R"   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   __repr__¯   s    c         C   s   t  j |  j | ƒ S(   N(   R   t   _Methodt   _ServerProxy__request(   R   t   name(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   __getattr__º   s    c         C   s   |  j  S(   N(   R)   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   number_of_timeout_errors¾   s    c         C   s   |  j  S(   N(   R*   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   get_error_messagesÁ   s    N(   R   R   R#   t   default_timeoutt   TrueR   RU   t   FalseR3   RS   t   __str__RW   RX   RY   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   X   s   			4			t   external_program_threadc           B   s)   e  Z d e d  „ Z d „  Z d „  Z RS(   c         C   sK   t  |  t ƒ  ƒ |  j d  k r. t j |  _ n  t j j |  ƒ t	 |  _
 d  S(   N(   R   t   localst   logR#   RF   t   stdoutt	   threadingt   ThreadR   R[   t   _alive(   R   t   command_argst
   program_idR`   t   intercept_output(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   Æ   s
    c      	   C   sä   |  j  r9 t j d |  j d t j d t j d t ƒ } n t j d |  j d t ƒ } x€ t rÖ | j ƒ  d  k	 rs Pn t j	 d ƒ |  j  rW | j
 j ƒ  } | d  k	 rÓ | d k rÓ |  j j | ƒ |  j j ƒ  qÓ qW qW Wt |  _ d  S(   NR   Ra   RG   t   shellg      à?t    (   Rg   t
   subprocesst   PopenRe   t   PIPER[   t   pollR#   R8   t   sleepRa   t   readlineR`   RI   t   flushR\   Rd   (   R   RQ   t   output(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   runÎ   s    			c         C   s   |  j  S(   N(   Rd   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   is_aliveá   s    N(   R   R   R#   R[   R   Rr   Rs   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR^   Å   s   	t   external_program_serverc           B   sh   e  Z d d g Z e d d e d „ Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z RS(   iAœ  iˆŸ  i°³  i—·  c         C   sT   t  |  t ƒ  ƒ t | t ƒ s4 t | t ƒ s4 t ‚ d  |  _ d  |  _ |  j	 ƒ  d  S(   N(
   R   R_   t
   isinstancet   listt   tuplet   AssertionErrorR#   t   _processt   _servert   initialize_server(   R   Re   Rf   R   t   cache_requestst
   local_portR`   Rg   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR   ç   s
    $		c      	   C   sˆ  |  j  d  k r„|  j d  k r„g  } x@ |  j D]5 \ } } | j g  t | | ƒ D] } | ^ qP ƒ q. Wt t j ƒ  t | ƒ d ƒ } | | |  _	 d t
 j |  j ƒ } t |  j	 ƒ t j | <|  j d  k	 rè t |  j ƒ t j d <n  |  j d  k	 rt |  j ƒ t j d <n  t d |  j d |  j d |  j d |  j ƒ |  _  |  j  j ƒ  |  j r_t } n	 t j } | d	 d
 |  j	 ƒ |  _ n  d  S(   Ni   s   CCTBX_%s_PORTt   CCTBX_XMLRPC_TIMEOUTt   CCTBX_XMLRPC_PORTRe   Rf   R`   Rg   R,   s   http://127.0.0.1:%d/RPC2(   Ry   R#   Rz   t   port_rangest   extendt   ranget   intt   randomR9   t   _portt   stringt   upperRf   R?   t   ost   environR   R}   R^   Re   R`   Rg   t   startR|   R   R   (   R   t   valid_portsRŠ   t   endt   nt   it   prog_port_envt   proxy_class(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR{   ï   s.    - 							c         O   s3   |  j  s t S|  j d  k	 r/ |  j j | | Ž  Sd  S(   N(   R|   R\   Rz   R#   R3   (   R   R   t   kwds(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyR3   	  s    	c         C   s    d  |  _ d  |  _ |  j ƒ  d  S(   N(   R#   Ry   Rz   R{   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   restart  s    		c         C   su   |  j  d  k s |  j d  k r" t Sy |  j j ƒ  } Wn% t k
 rK ‚  n& t k
 r\ t SX| d  k rm t St Sd  S(   N(   Ry   R#   Rz   R\   Rs   R=   R>   R[   (   R   t   status(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyRs     s    c         C   s   |  j  S(   N(   R…   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   get_port#  s    c         O   s   t  S(   N(   R[   (   R   R   R‘   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   _ignore&  s    c         C   s9   |  j  d  k s |  j d  k r% |  j St |  j | ƒ Sd  S(   N(   Ry   R#   Rz   R•   t   getattr(   R   RV   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyRW   )  s    (   iAœ  iˆŸ  (   i°³  i—·  N(   R   R   R€   R\   R#   R   R{   R3   R’   Rs   R”   R•   RW   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyRt   ä   s   							(   t
   __future__R    t   libtbxR   R   R   R   Rj   Rb   R8   R†   R„   Rˆ   RF   R   R   RZ   t   platformt   objectR   Rc   R^   Rt   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_utils.pyt   <module>   s$   8	m