ó
å™xTc           @   s÷   d  d l  m Z d Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z y@ d  d l m Z d e f d „  ƒ  YZ	 d e
 f d „  ƒ  YZ Wn6 e k
 r¨ ‚  n# e k
 rÊ d	 „  Z	 d
 „  Z n Xd „  Z d „  Z e d k ró e ƒ  n  d S(   iÿÿÿÿ(   t   divisioni@œ  N(   t   SimpleXMLRPCServert   external_xmlrpc_serverc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s#   | |  _  t j |  | d d ƒd  S(   Nt   logRequestsi    (   t   cctbx_interfaceR   t   __init__(   t   selft   addrR   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR      s    	c         C   sh   |  j  j s d Sd } t |  j  | d  ƒ } t | ƒ sC d | GHn! | | Œ  } | d  k rd d } n  | S(   Niÿÿÿÿs   %s is not a callable object!(   R   t   enable_xmlrpct   getattrt   Nonet   callable(   R   t   methodt   paramst   resultt   func(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt	   _dispatch   s    	(   t   __name__t
   __module__R   R   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR      s   	t   external_xmlrpc_interfacec           B   sw   e  Z e e d  „ Z d „  Z d d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d	 „  Z d
 „  Z RS(   c         C   s‚   t  |  _ d  |  _ d  |  _ | |  _ t j t j	 j
 d d ƒ ƒ |  _ | |  _ g  |  _ |  j ƒ  |  j ƒ  | r~ |  j ƒ  n  d  S(   Nt   CCTBX_XMLRPC_TIMEOUTt   250(   t   TrueR   R
   t   xmlrpc_servert   cctbx_servert   verboset   stringt   atoit   ost   environt   gett   timeoutt
   program_idt   supported_modulest   setup_modulest   setup_servert   start_server(   R   R    t
   auto_startR   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR   $   s    				!		

c         C   s   d  S(   N(    (   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR"   1   s    c         C   sN   | d  k	 r |  j j | ƒ n+ | d  k	 rJ t | ƒ } |  j j | ƒ n  d  S(   N(   R
   R!   t   appendt
   __import__(   R   t   module_objectt   module_path(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt
   add_module4   s
    c         C   sÆ   t  j j d |  j t ƒ } | d  k	 rj t | ƒ |  _ t d |  j f |  ƒ |  _	 |  j
 rj d | GHqj n  t  j j d d  ƒ } | d  k	 rÂ d | } t j d | ƒ |  _ |  j
 rÂ d | GHqÂ n  d  S(   Ns   CCTBX_%s_PORTs	   127.0.0.1s   Listening on port %st   CCTBX_XMLRPC_PORTs   http://localhost:%s/RPC2t   uris'   Connecting to XML-RPC server on port %s(   R   R   R   R    t   DEFAULT_PORTR
   t   intt   portR   R   R   t	   xmlrpclibt   ServerProxyR   (   R   R/   t
   cctbx_portR,   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR#   ;   s    	
	c         C   s/   |  j  d  k	 r+ d |  j GH|  j  j ƒ  n  d  S(   Ns!   XML-RPC server started on port %d(   R   R
   R/   t   serve_forever(   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR$   J   s    c         C   s<   d d  l  } | j d |  j ƒ } | j d ƒ | j ƒ  d  S(   Niÿÿÿÿt   targeti   (   t	   threadingt   ThreadR$   t	   setDaemont   start(   R   R5   t   t(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   start_server_in_separate_threadO   s    c         C   s)   |  j  d  k	 r% |  j  j j | ƒ n  d  S(   N(   R   R
   t   sockett
   settimeout(   R   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   set_socket_timeoutU   s    c         G   s#   |  j  d  k	 r |  j  j ƒ  n  t S(   N(   R   R
   t   handle_requestR   (   R   t   args(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   timeout_funcY   s    c         C   s   t  S(   N(   R   (   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   is_alive^   s    c         C   s/   d GHt  j j ƒ  t j t j ƒ  t j ƒ d  S(   Nt   quitting(   t   syst   stdoutt   flushR   t   killt   getpidt   signalt   SIGKILL(   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   quitc   s    c         C   s4   x- |  j  D]" } t | | ƒ r
 t | | ƒ Sq
 Wd  S(   N(   R!   t   hasattrR	   R
   (   R   t   nameR(   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   __getattr__h   s    N(   R   R   R   t   FalseR   R"   R
   R*   R#   R$   R:   R=   R@   RA   RJ   RM   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR   #   s   								c          O   s   t  d ƒ ‚ d  S(   Ns2   SimpleXMLRPCServer not available on this platform.(   t	   Exception(   R?   t   kwds(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyR   q   s    c          O   s   t  d ƒ ‚ d  S(   Ns2   SimpleXMLRPCServer not available on this platform.(   RO   (   R?   RP   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   external_cctbx_interfacet   s    c          C   sR   d t  f d „  ƒ  Y}  t d d t d t ƒ} |  ƒ  } | j | ƒ | j ƒ  d  S(   Nt   test_modulec           B   s   e  Z d  „  Z RS(   c         S   s   d GHt  j j ƒ  t S(   Ns   hello, world!(   RC   RD   RE   R   (   R   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt	   echo_testy   s    (   R   R   RS   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyRR   x   s   t   TESTR%   R   (   t   objectR   RN   R*   R$   (   RR   t   test_serverR(   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyRV   w   s    		c          C   sa   t  d d t d t ƒ}  |  j d ƒ d d  l } d d  l } |  j | ƒ | j d |  j ƒ d  S(   Nt   COOTR%   R   g{®Gáz„?iÿÿÿÿiÈ   (	   R   RN   R   R=   t   coott   gobjectR*   t   timeout_addR@   (   t   serverRX   RY   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   coot_server…   s    		t   __main__(   t
   __future__R    R-   R   RC   R   RH   R0   R   R   RU   R   t   KeyboardInterruptt   ImportErrorRQ   RV   R\   R   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/xmlrpc_server_example.pyt   <module>   s    	0K			
