ó
h¢hKc           @   s°   d  Z  d d l Z d d l Z d d l Z d d l Td d l m Z d d l m Z d d l	 m
 Z
 d d l m Z e e ƒ Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d S(   s<   
Contains classes for basic HTTP transport implementations.
iÿÿÿÿN(   t   *(   t   Unskin(   t   urlparse(   t	   CookieJar(   t	   getLoggert   HttpTransportc           B   sk   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z i  d
 „ Z RS(   s„   
    HTTP transport using urllib2.  Provided basic http transport
    that provides for cookies, proxies but no authentication.
    c         K   sE   t  j |  ƒ t |  j ƒ j | ƒ t ƒ  |  _ i  |  _ d |  _	 d S(   s~  
        @param kwargs: Keyword arguments.
            - B{proxy} - An http proxy to be specified on requests.
                 The proxy is defined as {protocol:proxy,}
                    - type: I{dict}
                    - default: {}
            - B{timeout} - Set the url open timeout (seconds).
                    - type: I{float}
                    - default: 90
        N(
   t	   Transportt   __init__R   t   optionst   updateR   t	   cookiejart   proxyt   Nonet	   urlopener(   t   selft   kwargs(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR   '   s
    	c         C   sƒ   yH | j  } t j d | ƒ t j | ƒ } |  j j |  _ |  j | ƒ SWn4 t j k
 r~ } t	 t
 | ƒ | j | j ƒ ‚ n Xd  S(   Ns   opening (%s)(   t   urlt   logt   debugt   u2t   RequestR   R   t   u2opent	   HTTPErrort   TransportErrort   strt   codet   fp(   R   t   requestR   t	   u2requestt   e(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyt   open8   s    	c   	      C   s  d  } | j } | j } | j } y¥ t j | | | ƒ } |  j | ƒ |  j j |  _ | j j	 | j ƒ t
 j d | ƒ |  j | ƒ } |  j | | ƒ t d | j j | j ƒ  ƒ } t
 j d | ƒ WnI t j k
 r} | j d k ró d  } qt | j | j | j ƒ ‚ n X| S(   Ns   sending:
%siÈ   s   received:
%siÊ   iÌ   (   iÊ   iÌ   (   R   R   t   messaget   headersR   R   t
   addcookiesR   R   R	   R   R   R   t
   getcookiest   Replyt   dictt   readR   R   R   t   msgR   (	   R   R   t   resultR   R&   R    R   R   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyt   sendB   s&    				c         C   s   |  j  j | ƒ d S(   s–   
        Add cookies in the cookiejar to the request.
        @param u2request: A urllib2 request.
        @rtype: u2request: urllib2.Requet.
        N(   R
   t   add_cookie_header(   R   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR!   X   s    c         C   s   |  j  j | | ƒ d S(   s–   
        Add cookies in the request to the cookiejar.
        @param u2request: A urllib2 request.
        @rtype: u2request: urllib2.Requet.
        N(   R
   t   extract_cookies(   R   R   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR"   `   s    c         C   s[   |  j  j } |  j ƒ  } |  j ƒ  d k  rD t j | ƒ | j | ƒ S| j | d | ƒSd S(   sÃ   
        Open a connection.
        @param u2request: A urllib2 request.
        @type u2request: urllib2.Requet.
        @return: The opened file-like urllib2 object.
        @rtype: fp
        gÍÌÌÌÌÌ@t   timeoutN(   R   R+   t   u2openert   u2vert   sockett   setdefaulttimeoutR   (   R   R   t   tmR   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR   h   s    c         C   s-   |  j  d k r" t j |  j ƒ  Œ  S|  j  Sd S(   sg   
        Create a urllib opener.
        @return: An opener.
        @rtype: I{OpenerDirector}
        N(   R   R   R   t   build_openert
   u2handlers(   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR,   x   s    c         C   s#   g  } | j  t j |  j ƒ ƒ | S(   s—   
        Get a collection of urllib handlers.
        @return: A list of handlers to be installed in the opener.
        @rtype: [Handler,...]
        (   t   appendR   t   ProxyHandlerR   (   R   t   handlers(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR2   ƒ   s    c         C   sZ   y2 t  j j d d ƒ } t d j | ƒ ƒ } | SWn! t k
 rU } t j | ƒ d SXd S(   s}   
        Get the major/minor version of the urllib2 lib.
        @return: The urllib2 version.
        @rtype: float
        t   .i   i    N(   R   t   __version__t   splitt   floatt   joint	   ExceptionR   t	   exception(   R   t   partt   nR   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR-   �   s    c         C   s;   |  j  ƒ  } t |  j ƒ } t | j ƒ } | j | ƒ | S(   N(   t	   __class__R   R   R	   (   R   t   memot   clonet   pt   cp(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyt   __deepcopy__›   s
    (   t   __name__t
   __module__t   __doc__R   R   R(   R!   R"   R   R,   R2   R-   RD   (    (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR   !   s   		
						
	t   HttpAuthenticatedc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sõ   
    Provides basic http authentication for servers that don't follow
    the specified challenge / response model.  This implementation
    appends the I{Authorization} http header with base64 encoded
    credentials on every http request.
    c         C   s   |  j  | ƒ t j |  | ƒ S(   N(   t   addcredentialsR   R   (   R   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR   «   s    c         C   s   |  j  | ƒ t j |  | ƒ S(   N(   RI   R   R(   (   R   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyR(   ¯   s    c         C   sR   |  j  ƒ  } d  | k rN t j d j | ƒ ƒ } d | d  } | | j d <n  d  S(   Nt   :s   Basic %siÿÿÿÿt   Authorization(   t   credentialsR   t   base64t   encodestringR:   R    (   R   R   RL   t   encodedt   basic(    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyRI   ³   s
    c         C   s   |  j  j |  j  j f S(   N(   R   t   usernamet   password(   R   (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyRL   º   s    (   RE   RF   RG   R   R(   RI   RL   (    (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyRH   £   s
   			(   RG   t   urllib2R   RM   R.   t   suds.transportt   suds.propertiesR   R   t	   cookielibR   t   loggingR   RE   R   R   R   RH   (    (    (    sM   /opt/xtal/ccp4-6.5-linux32/lib/python2.7/site-packages/suds/transport/http.pyt   <module>   s   
‚