ó
þ£Sc           @   s   d  Z  d Z d d l m Z d d l Z d d l Z d d l m Z d d l m	 Z	 m
 Z
 d d l m Z d d l Z d d
 d	 „  ƒ  YZ d S(   sR   Parse web services description language to get SOAP methods.

Rudimentary support.s/   $Id: WSDL.py 1467 2008-05-16 23:32:51Z warnes $iÿÿÿÿ(   t   __version__N(   t   Error(   t	   SOAPProxyt   SOAPAddress(   t   Configt   Proxyc           B   s5   e  Z d  Z e d „ Z d „  Z d „  Z d „  Z RS(   sª  WSDL Proxy.
    
    SOAPProxy wrapper that parses method names, namespaces, soap actions from
    the web service description language (WSDL) file passed into the
    constructor.  The WSDL reference can be passed in as a stream, an url, a
    file name, or a string.

    Loads info into self.methods, a dictionary with methodname keys and values
    of WSDLTools.SOAPCallinfo.

    For example,
    
        url = 'http://www.xmethods.org/sd/2001/TemperatureService.wsdl'
        wsdl = WSDL.Proxy(url)
        print len(wsdl.methods)          # 1
        print wsdl.methods.keys()        # getTemp


    See WSDLTools.SOAPCallinfo for more info on each method's attributes.
    c         K   s  t  j j ƒ  } d  |  _ |  j d  k rÌ t | d ƒ rÌ d G| GHy | j | ƒ |  _ WqÌ t j j	 j
 k
 rÈ } t j d | j j d | j j ƒ j | ƒ } | j ƒ  } t d | d j | ƒ f ‚ qÌ Xn  |  j d  k rjy  t | ƒ | j | ƒ |  _ Wqjt t f k
 rqjt j j	 j
 k
 rf} t j | ƒ } | j ƒ  } t d | d j | ƒ f ‚ qjXn  |  j d  k r.yF t j d | j j d | j j ƒ j | ƒ } | j | | ƒ |  _ Wq.t t f k
 rØq.t j j	 j
 k
 r*} t j | ƒ } | j ƒ  } t d | d j | ƒ f ‚ q.Xn  |  j d  k rdd d  l }	 | j t | ƒ ƒ |  _ n  i  |  _ |  j j d }
 |
 j d } |
 j } | j  ƒ  } | j! ƒ  } x9 | j" D]. } t  j j# | | j ƒ } | |  j | j$ <qµWt% d	 d
 | | |  _& d  S(   Nt   reads   stream:t   key_filet	   cert_files%   Unable to parse WSDL file at %s: 
	%ss   	iÿÿÿÿi    s!   http://localhost/dummy.webservicet   config('   t   wstoolst	   WSDLToolst
   WSDLReadert   Nonet   wsdlt   hasattrt   loadFromStreamt   xmlt   parserst   expatt
   ExpatErrort   urllibt	   URLopenert   SSLR   R   t   opent	   readlinesR   t   joint   filet   loadFromFilet   IOErrort   OSErrort   urlopent   StringIOt   loadFromStringt   strt   methodst   servicest   portst   namet
   getBindingt   getPortTypet
   operationst   callInfoFromWSDLt
   methodNameR   t	   soapproxy(   t   selft
   wsdlsourceR	   t   kwt   readert   et	   newstreamt   buft   streamR    t   servicet   portR&   t   bindingt   portTypet	   operationt   callinfo(    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyt   __init__%   s^    		-	
 - 			c         C   s4   d } x' |  j  j ƒ  D] } | t | ƒ 7} q W| S(   Nt    (   R#   t   valuesR"   (   R-   t   st   method(    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyt   __str__g   s    c         C   sn   |  j  j | ƒ s t | ‚ n  |  j  | } t | j ƒ |  j _ | j |  j _ | j |  j _	 |  j j
 | ƒ S(   sq   Set up environment then let parent class handle call.

        Raises AttributeError is method name is not found.(   R#   t   has_keyt   AttributeErrorR   t   locationR,   t   proxyt	   namespacet
   soapActiont
   soapactiont   __getattr__(   R-   R&   R:   (    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyRH   m   s     c         C   sÐ   xÉ |  j  j ƒ  D]¸ } |  j  | } d G| j d ƒ GHH| j } x< t t | ƒ ƒ D]( } | | } d | | j | j f GHqR WH| j } x< t t | ƒ ƒ D]( } | | } d | | j | j f GHq› WHq Wd  S(   Ns   Method Name:i   s      In #%d: %s  (%s)s      Out #%d: %s  (%s)(	   R#   t   keyst   ljustt   inparamst   ranget   lenR&   t   typet	   outparams(   R-   t   keyR?   t   inpst   parmt   detailst   outps(    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyt   show_methodsz   s    	
	
(   t   __name__t
   __module__t   __doc__R   R;   R@   RH   RU   (    (    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyR      s
   B		(    (   RX   t   identt   versionR    R
   R   t   ErrorsR   t   ClientR   R   R   R   R   (    (    (    s/   /usr/lib/python2.7/dist-packages/SOAPpy/WSDL.pyt   <module>   s   