
1oQc           @   sX  d  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 d d l	 m
 Z
 m Z m Z d d l m Z d d l m Z d d l m Z m Z d d l m Z d d	 l m Z m Z d d
 l m Z y d d l m Z Wn d   Z n Xd d l Z d d l m Z d d l Z d d l m Z d d l  m! Z! m" Z" m# Z# m$ Z$ y d d l% m& Z& Wn d   Z& n Xe j' Z' e j( d d !d d d d d f d d !k  rd Z) d   Z' n  d e f d     YZ* d e f d     YZ+ d e f d     YZ, d e f d     YZ- d  f  d!     YZ. d" f  d#     YZ/ d$ e f d%     YZ0 d& e f d'     YZ1 d( e2 d)  Z3 d* f  d+     YZ4 e4   Z4 d, f  d-     YZ5 d. e. e5 f d/     YZ6 d0 e f d1     YZ7 d2 e f d3     YZ8 d d4 l9 m: Z: m; Z; d5   Z< e< e: _< d6   Z= e= e: _= d7   Z> e> e j? j@ _> d S(8   s   $Id$iN(   t   isfile(   t   joint   stript   split(   t   UserDict(   t   StringIO(   t   TimeoutSockett   TimeoutError(   t   urlparse(   t   HTTPConnectiont   HTTPSConnection(   t	   Exception(   t
   _get_idstrc         C   s.   t  |   } | d k  r& d t |  Sd | S(   s   Python 2.3.x generates a FutureWarning for negative IDs, so
        we use a different prefix character to ensure uniqueness, and
        call abs() to avoid the warning.i    s   x%xs   o%x(   t   idt   abs(   t   pyobjt   x(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   #   s    (   t   Node(   t   Canonicalize(   t   SCHEMAt   SOAPt   XMLNSt   ZSI_SCHEMA_URI(   t
   SplitQNamec         C   st   |  j  d  } t |  d k r4 | j d d  n6 t |  d k rf | d d k rj | j   qj n d St |  S(   s/  SplitQName(qname) -> (string, string)

           Split Qualified Name into a tuple of len 2, consisting
           of the prefix and the local name.

           (prefix, localName)

           Special Cases:
               xmlns -- (localName, 'xmlns')
               None -- (None, localName)
        t   :i   i    i   t   xmlnsN(   R   t   lent   insertt   Nonet   reverset   tuple(   t   qnamet   l(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   7   s    i    i   i   t   finals   ./c         C   s9   | j  t  t k r) t j |  | d  St j |  |  S(   Ni   (   t
   startswitht   tokent   Truet   urllibt   basejoin(   t   baset   url(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR&   W   s    t   NamespaceErrorc           B   s   e  Z d  Z RS(   s#   Used to indicate a Namespace Error.(   t   __name__t
   __module__t   __doc__(    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR)   ]   s   t   RecursionErrorc           B   s   e  Z d  Z RS(   s+   Used to indicate a HTTP redirect recursion.(   R*   R+   R,   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR-   a   s   t
   ParseErrorc           B   s   e  Z d  Z RS(   s%   Used to indicate a XML parsing error.(   R*   R+   R,   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR.   e   s   t   DOMExceptionc           B   s   e  Z d  Z RS(   s*   Used to indicate a problem processing DOM.(   R*   R+   R,   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR/   i   s   t   Basec           B   s   e  Z d  Z e  d  Z RS(   s%   Base class for instance level Loggingc         C   s,   t  j d | |  j t |   f  |  _ d  S(   Ns	   %s-%s(%s)(   t   loggingt	   getLoggert	   __class__R   t   logger(   t   selft   module(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   __init__o   s    (   R*   R+   R,   R7   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR0   m   s   t   HTTPResponsec           B   s   e  Z d  Z d   Z RS(   s5   Captures the information in an HTTP response message.c         C   sG   | j  |  _  | j |  _ | j |  _ | j   p3 d  |  _ | j   d  S(   N(   t   statust   reasont   msgt   headerst   readR   t   bodyt   close(   R5   t   response(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7   v   s
    (   R*   R+   R,   R7   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR8   s   s   t   TimeoutHTTPc           B   s&   e  Z d  Z d d d  Z d   Z RS(   s=   A custom http connection object that supports socket timeout.i   c         C   s    t  j |  | |  | |  _ d  S(   N(   R	   R7   t   timeout(   R5   t   hostt   portRB   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7      s    c         C   s2   t  |  j  |  _ |  j j |  j |  j f  d  S(   N(   R   RB   t   sockt   connectRC   RD   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRF      s    N(   R*   R+   R,   R   R7   RF   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRA   ~   s   t   TimeoutHTTPSc           B   s&   e  Z d  Z d d d  Z d   Z RS(   s  A custom https object that supports socket timeout. Note that this
       is not really complete. The builtin SSL support in the Python socket
       module requires a real socket (type) to be passed in to be hooked to
       SSL. That means our fake socket won't work and our timeout hacks are
       bypassed for send and recv calls. Since our hack _is_ in place at
       connect() time, it should at least provide some timeout protection.i   c         K   s)   t  j |  t |  | |  | |  _ d  S(   N(   R
   R7   t   strRB   (   R5   RC   RD   RB   t   kwargs(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7      s    c         C   st   t  |  j  } | j |  j |  j f  t | j d | j  } t j | |  j	 |  j
  } t j | |  |  _ d  S(   Nt   _sock(   R   RB   RF   RC   RD   t   getattrRE   t   sockett   sslt   key_filet	   cert_filet   httplibt
   FakeSocket(   R5   RE   t   realsockRM   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRF      s
    N(   R*   R+   R,   R   R7   RF   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRG      s   i   c         C   s  t  |   \ } } } } } } | d k r7 t j |   S| rP d | | f } n  | ri d | | f } n  | r d | | f } n  | d k r&y d d l }	 WnA t k
 r t t d  s t d	   n  t | d |  }
 q8X|	 j
 j   } | j |  |	 j j | d
 | }
 |
 j d  n t | d |  }
 |
 j d |  |
 j d d  |
 j   d } x7 |
 j   } | j d k rPn  t j |
 _ d |
 _ qk| j } | d k rP| d k  rP| j j d  } | d k	 rA| j   | d k	 r| | k rt d   n  | d k r'i  } n  d | | <t | | |  St |   n  | d k oe| d k  swt |   n  t | j     } | j   | S(   sl   A minimal urlopen replacement hack that supports timeouts for http.
       Note that this supports GET only.t   httpt   httpss   %s;%ss   %s?%ss   %s#%siNRM   s   no built-in SSL Supportt   ssl_contexti   t   GETt
   ConnectionR?   id   i,  i  t   locations#   Circular HTTP redirection detected.i   (   RS   RT   (!   R   R%   t   urlopent   M2Cryptot   ImportErrort   hasattrRL   t   RuntimeErrorRG   R   t   SSLt   Contextt   set_session_timeoutt   httpslibR
   t   set_debuglevelRA   t
   putrequestt	   putheadert
   endheaderst   getresponseR9   RP   t   _CS_REQ_SENTt   _HTTPConnection__statet   _HTTPConnection__responseR;   t	   getheaderR?   R-   R8   R   R=   (   R(   RB   t	   redirectst   schemeRC   t   patht   paramst   queryt   fragRZ   t   connt   ctxR@   R9   RX   R>   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRY      sb    
	
	

t   DOMc           B   s  e  Z d  Z e Z d Z d Z d Z d Z e e f Z	 e e f Z
 e Z e Z i d e 6d e 6Z d Z d Z e e f Z d	   Z d
   Z d   Z d   Z d Z d Z d Z d Z d Z d Z e e e f Z e e e f Z e Z e Z i e e 6e e 6e e 6Z x$ e j    D] \ Z! Z" e! e e" <qWd   Z# d   Z$ d Z% e% f Z& e% Z' d Z( d Z) d Z* e( f Z+ e) f Z, e* f Z- e( Z. e) Z/ e* Z0 d Z1 e1 f Z2 e1 Z3 i d e% 6Z4 d   Z5 d   Z6 d   Z7 d   Z8 d   Z9 d   Z: d  Z; d6 d!  Z= d6 e> d"  Z? e> d#  Z@ d6 d6 d6 d$ d%  ZA d6 d&  ZB d6 d'  ZC d6 e> d(  ZD d)   ZE d6 d*  ZF d+   ZG d,   ZH d-   ZI d.   ZJ d/ d0  ZK d1   ZL d/ eM d7  d2  ZN d6 d3  ZO d4   ZP d5   ZQ RS(8   s  The DOM singleton defines a number of XML related constants and
       provides a number of utility methods for DOM related tasks. It
       also provides some basic abstractions so that the rest of the
       package need not care about actual DOM implementation in use.s)   http://schemas.xmlsoap.org/soap/envelope/s)   http://schemas.xmlsoap.org/soap/encoding/s'   http://www.w3.org/2001/06/soap-envelopes'   http://www.w3.org/2001/06/soap-encodings   1.1s   1.2s*   http://schemas.xmlsoap.org/soap/actor/nexts2   http://www.w3.org/2001/06/soap-envelope/actor/nextc         C   s6   |  j  j |  } | d k	 r" | St d |   d S(   s3   Return the SOAP version related to an envelope uri.s!   Unsupported SOAP envelope uri: %sN(   t   _soap_uri_mappingt   getR   t
   ValueError(   R5   t   urit   value(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   SOAPUriToVersion  s
    c         C   sR   d t  t | d  d  } t |  | d  } | d k	 r> | St d |   d S(   sp   Return the appropriate SOAP envelope uri for a given
           human-friendly SOAP version string (e.g. '1.1').s   NS_SOAP_ENV_%st   .t   _s   Unsupported SOAP version: %sN(   R   R   RK   R   Rv   (   R5   t   versiont   attrnameRx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetSOAPEnvUri
  s    c         C   sR   d t  t | d  d  } t |  | d  } | d k	 r> | St d |   d S(   sp   Return the appropriate SOAP encoding uri for a given
           human-friendly SOAP version string (e.g. '1.1').s   NS_SOAP_ENC_%sRz   R{   s   Unsupported SOAP version: %sN(   R   R   RK   R   Rv   (   R5   R|   R}   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetSOAPEncUri  s    c         C   sR   d t  t | d  d  } t |  | d  } | d k	 r> | St d |   d S(   so   Return the right special next-actor uri for a given
           human-friendly SOAP version string (e.g. '1.1').s   SOAP_ACTOR_NEXT_%sRz   R{   s   Unsupported SOAP version: %sN(   R   R   RK   R   Rv   (   R5   R|   R}   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetSOAPActorNextUri   s    s    http://www.w3.org/1999/XMLSchemas)   http://www.w3.org/1999/XMLSchema-instances#   http://www.w3.org/2000/10/XMLSchemas,   http://www.w3.org/2000/10/XMLSchema-instances    http://www.w3.org/2001/XMLSchemas)   http://www.w3.org/2001/XMLSchema-instancec         C   s   |  j  j |  S(   sj   Return the appropriate matching XML Schema instance uri for
           the given XML Schema namespace uri.(   t   _xsd_uri_mappingRu   (   R5   Rw   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   InstanceUriForSchemaUriD  s    c         C   s   |  j  j |  S(   st   Return the appropriate matching XML Schema namespace uri for
           the given XML Schema instance namespace uri.(   R   Ru   (   R5   Rw   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   SchemaUriForInstanceUriI  s    s    http://schemas.xmlsoap.org/wsdl/s%   http://schemas.xmlsoap.org/wsdl/soap/s%   http://schemas.xmlsoap.org/wsdl/http/s%   http://schemas.xmlsoap.org/wsdl/mime/s$   http://schemas.xmlsoap.org/soap/httpc         C   s6   |  j  j |  } | d k	 r" | St d |   d S(   s8   Return the WSDL version related to a WSDL namespace uri.s!   Unsupported SOAP envelope uri: %sN(   t   _wsdl_uri_mappingRu   R   Rv   (   R5   Rw   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   WSDLUriToVersiong  s
    c         C   sR   d t  t | d  d  } t |  | d   } | d  k	 r> | St d |   d  S(   Ns
   NS_WSDL_%sRz   R{   s   Unsupported WSDL version: %s(   R   R   RK   R   Rv   (   R5   R|   t   attrRx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt
   GetWSDLUrip  s    c         C   sR   d t  t | d  d  } t |  | d   } | d  k	 r> | St d |   d  S(   Ns   NS_SOAP_BINDING_%sRz   R{   s   Unsupported WSDL version: %s(   R   R   RK   R   Rv   (   R5   R|   R   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetWSDLSoapBindingUriy  s    c         C   sR   d t  t | d  d  } t |  | d   } | d  k	 r> | St d |   d  S(   Ns   NS_HTTP_BINDING_%sRz   R{   s   Unsupported WSDL version: %s(   R   R   RK   R   Rv   (   R5   R|   R   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetWSDLHttpBindingUri  s    c         C   sR   d t  t | d  d  } t |  | d   } | d  k	 r> | St d |   d  S(   Ns   NS_MIME_BINDING_%sRz   R{   s   Unsupported WSDL version: %s(   R   R   RK   R   Rv   (   R5   R|   R   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetWSDLMimeBindingUri  s    c         C   sR   d t  t | d  d  } t |  | d   } | d  k	 r> | St d |   d  S(   Ns   NS_SOAP_HTTP_%sRz   R{   s   Unsupported WSDL version: %s(   R   R   RK   R   Rv   (   R5   R|   R   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   GetWSDLHttpTransportUri  s    s   http://www.w3.org/2000/xmlns/c         C   sD   | j  | j k r d S| j | k oC | d k pC |  j | j |  S(   sf   Return true if the given node is an element with the given
           name and optional namespace uri.i    N(   t   nodeTypet   ELEMENT_NODEt	   localNameR   t
   nsUriMatcht   namespaceURI(   R5   t   nodet   namet   nsuri(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt	   isElement  s    c         C   s   |  j  } | j } x` | j D]U } | j | k r | j | k sL | d k rq | d k sj | | j |  rq | Sq q W| t k	 r | St |   d S(   st   Return the first child of node with a matching name and
           namespace uri, or the default if one is provided.N(	   R   R   t
   childNodesR   R   R   R   R   t   KeyError(   R5   R   R   R   t   defaultt   nsmatchR   t   child(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt
   getElement  s    		c         C   sq   |  j  } | j } x< | j D]1 } | j | k r | | d  | k rM | Sq q W| t k	 ra | St t   d S(   s8   Return the first child of node matching an id reference.R   N(   t   getAttrR   R   R   R   R   R   (   R5   R   R   R   t   attrgetR   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getElementById  s    		i   c   	      C   s   | d k	 r | j } i  } n  | j j d d  } | d k	 rO | | | j <n  | d k sg | | k r | d } | j } x? | j D]1 } | j | k r |  j d | | | |  q q Wn  | S(   s   Create an id -> element mapping of those elements within a
           document that define an id attribute. The depth of the search
           may be controlled by using the (1-based) depth argument.R   i   N(	   R   t   documentElementt   _attrsRu   Rx   R   R   R   t   getMappingById(	   R5   t   documentt   deptht   elementt   mappingt   levelR   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    		
	#c         C   s   |  j  } g  } | j } xl | j D]a } | j | k r" | j | k sR | d k r | d k sp | | j |  r | j |  q q" q" W| S(   sz   Return a sequence of the child elements of the given node that
           match the given name and optional namespace uri.N(   R   R   R   R   R   R   R   t   append(   R5   R   R   R   R   t   resultR   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getElements  s    		c         C   s3   | d k r# | j |  r t St S| j | |  S(   s   Return true if element has attribute with the given name and
           optional nsuri. If nsuri is not specified, returns true if an
           attribute exists with the given name with any namespace.N(   R   t   hasAttributeR$   t   Falset   hasAttributeNS(   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   hasAttr  s
    c         C   s   | d k rn | j j | d  } | d k r x; | j j   D]' } | d | k r= | j | } Pq= q= Wq n | j j | | f d  } | d k	 r | j S| t k	 r | Sd S(   s   Return the value of the attribute named 'name' with the
           optional nsuri, or the default if one is specified. If
           nsuri is not specified, an attribute that matches the
           given name will be returned regardless of namespace.i   t    N(   R   R   Ru   t   _attrsNSt   keysRx   R   (   R5   R   R   R   R   R   t   item(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s7   i  } x* | j  j   D] \ } } | j | | <q W| S(   s.   Return a Collection of all attributes
        (   R   t   itemsRx   (   R5   R   t   attrst   kt   v(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getAttrs  s    c         C   s   g  } xK | j  D]@ } | j } | | j k s= | | j k r | j | j  q q Wt | d  } | d k r~ t |  } n  | S(   s   Return the text value of an xml element node. Leading and trailing
           whitespace is stripped from the value unless the preserve_ws flag
           is passed with a true value.R   N(	   R   R   t	   TEXT_NODEt   CDATA_SECTION_NODER   t	   nodeValueR   R   R   (   R5   R   t   preserve_wsR   R   t   nodetypeRx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getElementText	  s    	c         C   s   |  j  | f } | j } | j } | } x | d k rI t d |   n  | j | k rg | j } q* n  | j j | d  } | d k	 r | j	 St
 | d  r t d |   n  | j } | j | k r* t j r |  j |  St d |   q* q* d S(   s7   Find a namespace uri given a prefix and a context node.s   Value for prefix %s not found.t   __imported__N(   t   NS_XMLNSt   DOCUMENT_NODER   R   R/   R   t
   parentNodeR   Ru   Rx   R\   Rs   t   looseNamespacest   findTargetNS(   R5   t   prefixR   t   attrkeyR   R   t	   orig_nodeR   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   findNamespaceURI  s(    					c         C   s   |  j  d f } | j } | j } x | j | k rB | j } q$ n  | j j | d  } | d k	 rj | j St	 | d  r t
 d   n  | j } | j | k r$ t
 d   q$ q$ d S(   s<   Return the current default namespace uri for the given node.R   R   s#   Cannot determine default namespace.N(   R   R   R   R   R   R   Ru   R   Rx   R\   R/   (   R5   R   R   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   findDefaultNS0  s    				c         C   s   |  j  } |  j d f } | j } | j } xm | j | k rK | j } q- n  | | d d d } | d k	 rp | S| j } | j | k r- t d   q- q- d S(   s;   Return the defined target namespace uri for the given node.R   t   targetNamespaceR   s"   Cannot determine target namespace.N(   R   R   R   R   R   R   R   R/   (   R5   R   R   R   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   B  s    					c         C   s   |  j  | d d d } | d k r( d S| j d d  } t |  d k re |  j | d |  } n |  j |  } | | d f S(   s   Return (namespaceURI, name) for a type attribue of the given
           element, or None if the element does not have a type attribute.t   typeR   R   i   i   i    N(   R   R   R   R   R   R   (   R5   R   t   typeattrt   partsR   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt
   getTypeRefS  s    i    c         C   st   | j  } | | j | j f k r0 t d   n  | | j k rH d } n  | j |  } |  j | |  d | _ | S(   s:   Implements (well enough for our purposes) DOM node import.s    Illegal node type for importNodei    i   (   R   R   t   DOCUMENT_TYPE_NODER/   t   ENTITY_REFERENCE_NODEt	   cloneNodet   _setOwnerDocR   (   R5   R   R   t   deepR   t   clone(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt
   importNode`  s    			c         C   s1   | | _  x! | j D] } |  j | |  q Wd  S(   N(   t   ownerDocumentR   R   (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   l  s    	c         C   s   | | k s* t  |  | k r. | | k r. d S| r | d k	 r t  |  | k rY | p_ | f } | d d k rx | p | d  } x1 | D]& } | | k s | d  | k r d Sq Wn  d S(   s6   Return a true value if two namespace uri values match.i   it   /i    N(   R   R   (   R5   Rx   t   wantedt   strictt   ttR   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   q  s    *! c         C   s%   t  j j j   } | j | | |  S(   s*   Create a new writable DOM document object.(   t   xmlt   domt   minidomt   getDOMImplementationt   createDocument(   R5   R   R   t   doctypet   impl(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   }  s    c         C   s   t  j j j |  S(   sW   Load an xml file from a file-like object and return a DOM
           document instance.(   R   R   R   t   parse(   R5   t   data(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   loadDocument  s    c         C   s   t  |  t k r$ t | d  } n t |  } y |  j |  } Wn7 t k
 r| } | j   t d | f | j   n X| j   | S(   s6   Load an xml file from a URL and return a DOM document.t   rs   Failed to load document %s(	   R    R$   t   openRY   R   R   R?   R.   t   args(   R5   R(   t   fileR   t   ex(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   loadFromURL  s    

N(    (R   R*   R+   R,   R   R   t   NS_SOAP_ENV_1_1t   NS_SOAP_ENC_1_1t   NS_SOAP_ENV_1_2t   NS_SOAP_ENC_1_2t   NS_SOAP_ENV_ALLt   NS_SOAP_ENC_ALLt   NS_SOAP_ENVt   NS_SOAP_ENCRt   t   SOAP_ACTOR_NEXT_1_1t   SOAP_ACTOR_NEXT_1_2t   SOAP_ACTOR_NEXT_ALLRy   R~   R   R   t	   NS_XSD_99t	   NS_XSI_99t	   NS_XSD_00t	   NS_XSI_00t	   NS_XSD_01t	   NS_XSI_01t
   NS_XSD_ALLt
   NS_XSI_ALLt   NS_XSDt   NS_XSIR   R   t   keyRx   R   R   t   NS_WSDL_1_1t   NS_WSDL_ALLt   NS_WSDLt   NS_SOAP_BINDING_1_1t   NS_HTTP_BINDING_1_1t   NS_MIME_BINDING_1_1t   NS_SOAP_BINDING_ALLt   NS_HTTP_BINDING_ALLt   NS_MIME_BINDING_ALLt   NS_SOAP_BINDINGt   NS_HTTP_BINDINGt   NS_MIME_BINDINGt   NS_SOAP_HTTP_1_1t   NS_SOAP_HTTP_ALLt   NS_SOAP_HTTPR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRs      s   
					
							
											

							t   MessageInterfacec           B   s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z e j	 d d  Z
 d   Z d	   Z d
   Z d   Z d   Z d   Z RS(   s   Higher Level Interface, delegates to DOM singleton, must
    be subclassed and implement all methods that throw NotImplementedError.
    c         C   sL   d |  _ t |  t j k r? | d k	 r? t j |  |  _ n	 | |  _ d S(   s]   Constructor, May be extended, do not override.
            sw -- soapWriter instance
        N(   R   t   swR   t   weakreft   ReferenceTypet   ref(   R5   R  (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7     s    	!c         G   s   |  j    j | |  d  S(   N(   R  t   AddCallback(   R5   t   funct   arglist(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s   |  j    j |  S(   N(   R  t   Known(   R5   t   obj(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s   |  j    j |  S(   N(   R  t   Forget(   R5   R  (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s   t  d   d S(   s?   canonicalize the underlying DOM, and return as string.
        R   N(   t   NotImplementedError(   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   canonicalize  s    t   Envelopec         C   s   t  d   d S(   s   create Document
        R   N(   R  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s   t  d   d S(   sX   create and append element(namespaceURI,localName), and return
        the node.
        R   N(   R  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   createAppendElement  s    c         C   s   t  d   d  S(   NR   (   R  (   R5   t   qualifiedName(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s   t  d   d  S(   NR   (   R  (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   resolvePrefix  s    c         C   s   t  d   d S(   s6   set attribute (namespaceURI, localName)=value
        R   N(   R  (   R5   R   R   Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   setAttributeNS  s    c         C   s   t  d   d S(   s9   set attribute xsi:type=(namespaceURI, localName)
        R   N(   R  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   setAttributeType  s    c         C   s   t  d   d S(   s:   set namespace attribute xmlns:prefix=namespaceURI
        R   N(   R  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   setNamespaceAttribute  s    (   R*   R+   R,   R7   R  R  R  R  R   t   ENVR   R  R   R  R  R  R   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s   	
									t   ElementProxyc           B   sF  e  Z d  Z d Z d Z d Z d Z d Z d Z d Z	 e
 j Z e
 j Z e Z e j Z e j Z e j Z e j Z i e e 6e e	 6Z i e e 6e e 6e e 6e e 6e e 6Z d1 Z d1 Z d1 d  Z  d	   Z! d1 d
  Z" d1 d1 d  Z# d1 d  Z$ d   Z% d   Z& d   Z' d   Z( d   Z) d   Z* d   Z+ d   Z, d   Z- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d1 d  Z6 d   Z7 d    Z8 d!   Z9 d"   Z: d#   Z; d$   Z< d1 d%  Z= d1 d&  Z> d'   Z? d(   Z@ d)   ZA d*   ZB d+   ZC d,   ZD d-   ZE d.   ZF d/   ZG d0   ZH RS(2   s   
    s   SOAP-ENVs   SOAP-ENCt   ZSIt   xsdt   xsiR   R   c         C   s   d |  _  t j |  |  t j |   t |  _ d |  _ t |  t	 j
 t	 j f k rf |  j |  n* t | t  r | j   |  _ n	 | |  _ |  j j   |  _ |  j j |  j  d S(   s0   Initialize.
           sw -- SoapWriter
        i    N(   t   _indxR  R7   R0   Rs   t   _domR   R   R   t   typest
   StringTypet   UnicodeTypet   loadFromStringt
   isinstanceR"  t   _getNodet   standard_nst   copyt   processorNsst   updatet   reserved_ns(   R5   R  t   message(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7     s    				c         C   s
   |  j    S(   N(   t   toString(   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   __str__
  s    c            sw   d d l  m } | s7 | j j   j d   j } n | j j   j d | } | j |  } t   f d   |  S(   s0   expression -- XPath compiled expression
        i(   t   XPathR0  c            s   t    j |   S(   N(   R"  R  (   R   (   R5   (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   <lambda>  s    (   t   Ft.XmlR6  R_   R   R0  t   evaluatet   map(   R5   t
   expressionR0  R6  t   contextt   nodes(    (   R5   s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR9    s    !c         C   sw   | p |  j  } | p |  j } t } | rQ |  j rQ |  j j |  j | |  } n  | ss t d |  j | f   n  d S(   si   
            namespaceURI -- namespace of element
            localName -- local name of element
        s%   unexpected node type %s, expecting %sN(   R   R   R   R   R'  R   R)   (   R5   R   R   t   check(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt	   checkNode  s    c         C   s   | r3 t  | t  r' | j   |  _ q | |  _ n |  j r |  j j |  j |  j |  j d d  } | s t	 d |  j |  j f   n  | |  _ n |  j
 |  j d |  j d d  |  j   d  S(   NR   s   cant find element (%s, %s)R   R   (   R,  R"  R-  R   R'  R   R   R   R   R)   R   R?  (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   setNode)  s    	'c         C   s   |  j  S(   N(   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR-  =  s    c         C   s   |  j  j |  j d d  S(   NR   (   R'  R   R   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _getElements@  s    c         C   s   |  j  j p |  j  S(   N(   R   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _getOwnerDocumentC  s    c         C   sZ   xS |  j  d 7_  d |  j  } y |  j j | |  j    Wq t k
 rR } Pq Xq | S(   s   I guess we need to resolve all potential prefixes
        because when the current node is attached it copies the
        namespaces into the parent node.
        i   s   ns%d(   R&  R'  R   R-  R/   (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _getUniquePrefixF  s    c         C   s   y8 | r7 | j  | j k r7 | |  j j |  k r7 d SWn t k
 rM } n X| t j k rd |  j S| j  t	 j k r x^ | j
 j   D]. } | j t j k r | | j k r | j Sq W| j r |  j | j |  Sn  t d |   d S(   s{   
        Keyword arguments:
            node -- DOM Element Node
            nsuri -- namespace of attribute value
        s    namespaceURI "%s" is not definedN(   R   R   R'  R   R   R/   R   t   XMLt   _xml_prefixR   t
   attributest   valuesR   t   BASERx   R   R   t
   _getPrefixR)   (   R5   R   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRI  T  s     	c         C   s/   | d k r t d   n  |  j j |  d S(   sI   
        Keyword arguments:
            node -- DOM Element Node
        s   node is NoneN(   R   t	   TypeErrorR   t   appendChild(   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _appendChildl  s    c         C   s   |  j  j | |  d S(   s}   
        Keyword arguments:
            child -- DOM Element Node to insert
            refChild -- DOM Element Node
        N(   R   t   insertBefore(   R5   t   newChildt   refChild(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _insertBeforeu  s    c         C   s   |  j  j | | |  d S(   s   
        Keyword arguments:
            namespaceURI -- namespace of attribute
            qualifiedName -- qualified name of new attribute value
            value -- value of attribute
        N(   R   R  (   R5   R   R  Rx   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   _setAttributeNS}  s    c         C   s   t  S(   s6   check to see if this is a soap:fault message.
        (   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   isFault  s    c         C   sU   y |  j  d |  j d |  } Wn/ t k
 rP } |  j   } |  j | |  n X| S(   NR   R   (   RI  R   R)   RC  R   (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt	   getPrefix  s    c         C   s
   |  j    S(   N(   RB  (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getDocument  s    c         C   s   | |  _  d  S(   N(   R   (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   setDocument  s    c         C   sP   |  j  j t |   } |  j  j | d d  } |  j |  } |  j |  d  S(   NR   (   R'  R   R   R   R   R   RL  (   R5   t	   xmlStringt   docR   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   importFromString  s    c         C   s=   t  | t  r | j   } n  |  j j |  j   | d d S(   NR   i   (   R,  R"  R-  R'  R   RB  (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s   |  j  j t |   |  _ d  S(   N(   R'  R   R   R   (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR+    s    c         C   s   t  |  j  S(   N(   R   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s
   |  j    S(   N(   R  (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR4    s    c         C   s  |  j  } | |  j | k r/ d | | f } nR | | k oF d k n rj |  j j d d d  |  _ d St d |  j |   |  j j d | d | d |  } | j d |  _ xI |  j j   D]8 \ } } |  j	 d |  j
 d	 d |  j | f d
 |  q Wd S(   sS   If specified must be a SOAP envelope, else may contruct an empty document.
        s   %s:%sNs'   only support creation of document in %sR   R   R   i    R   R  Rx   (   t   _soap_env_prefixR2  R   R'  R   R   R   R   R   RQ  t   _xmlns_nsurit   _xmlns_prefix(   R5   R   R   R   R   R  R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    	!c         C   s"   |  j  j |  j   d | d | S(   NR   R   (   R'  R   R-  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   sn   |  j  j d | |  | } | r> d |  j |  | f } n  |  j |  j  } |  j |  j d | |  d S(   s   set xsi:type
        Keyword arguments:
            namespaceURI -- namespace of attribute value
            localName -- name of new attribute value

        s   setAttributeType: (%s,%s)s   %s:%ss   %s:typeN(   R4   t   debugRS  t
   _xsi_nsuriRQ  (   R5   R   R   Rx   t
   xsi_prefix(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s%   |  j    } | j | | |  } d  S(   N(   RB  t   createAttributeNS(   R5   t	   namespaceR   Rx   R   t   attrNode(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR_    s    c         C   s   d } | rN y |  j |  } WqN t k
 rJ } d } |  j | |  qN Xn  | } | rm d | | f } n  |  j | | |  d S(   s   
        Keyword arguments:
            namespaceURI -- namespace of attribute to create, None is for
                attributes in no namespace.
            localName -- local name of new attribute
            value -- value of new attribute
        t   ns2s   %s:%sN(   R   RS  R   R   RQ  (   R5   R   R   Rx   R   R   R  (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s   |  j  t j d | |  d S(   ss   
        Keyword arguments:
            prefix -- xmlns prefix
            namespaceURI -- value of prefix
        s   xmlns:%sN(   RQ  R   RH  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s.   |  j    } | j | |  } t |  j |  S(   s   
        Keyword arguments:
            namespace -- namespace of element to create
            qname -- qualified name of new element
        (   RB  t   createElementNSR"  R  (   R5   R`  R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRc    s    c         C   s;   |  j  | | d d } | j   } |  j | j    d S(   s  Create a new element (namespaceURI,name), append it
           to current node, then set it to be the current node.
        Keyword arguments:
            namespaceURI -- namespace of element to create
            localName -- local name of new element
            prefix -- if namespaceURI is not defined, declare prefix.  defaults
                to 'ns1' if left unspecified.
        R   N(   R  R   R-  t   _setNode(   R5   R   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   createAppendSetElement	  s    	c         C   s   t  } | } | rc y |  j |  } Wn t } | p@ |  j   } n X| rc d | | f } qc n  |  j | |  } | r | j t j d | |  n  |  j d | j	    | S(   s  Create a new element (namespaceURI,name), append it
           to current node, and return the newly created node.
        Keyword arguments:
            namespaceURI -- namespace of element to create
            localName -- local name of new element
            prefix -- if namespaceURI is not defined, declare prefix.  defaults
                to 'ns1' if left unspecified.
        s   %s:%ss   xmlns:%sR   (
   R   RS  R$   RC  Rc  RQ  R   RH  RL  R-  (   R5   R   R   R   t   declareR  R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    	c         C   sf   | } |  j  |  } | r. d | | f } n  |  j | |  } |  j d | j   d | j    | S(   Ns   %s:%sRN  RO  (   RS  Rc  RP  R-  (   R5   R   R   RO  R  R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   createInsertBefore/  s    "c         C   s;   |  j  j |  j | | d d } | r7 t |  j |  Sd S(   s   
        Keyword arguments:
            namespaceURI -- namespace of element
            localName -- local name of element
        R   N(   R'  R   R   R   R"  R  (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   8  s    !c         C   s2   |  j  | |  r. |  j j | |  } | j Sd S(   s   
        Keyword arguments:
            namespaceURI -- namespace of attribute
            localName -- local name of attribute
        N(   R   R   t   getAttributeNodeNSRx   R   (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getAttributeValueC  s    c         C   s   |  j  j |  j d t S(   NR   (   R'  R   R   R$   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getValueN  s    c         C   s)   |  j  |  } |  j d | j    | S(   NR   (   t   createTextNodeRL  R-  (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   createAppendTextNodeT  s    c         C   s+   |  j    } | j |  } t |  j |  S(   N(   RB  Rk  R"  R  (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRk  Y  s    c         C   sW   t  |  } |  j   } t |  d k r@ |  j j |  t f S|  j j | d |  S(   Ni   i    (   R   R-  R   R'  R   Rx   R   (   R5   R  R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR   a  s
    c         C   s   |  j    } |  j j | |  S(   N(   R-  R'  R   (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR  h  s    c         C   s   |  j  S(   N(   t   _soap_env_nsuri(   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   getSOAPEnvURIl  s    c         C   s   |  j  S(   N(   R   (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   isEmptyo  s    N(I   R*   R+   R,   RY  t   _soap_enc_prefixt   _zsi_prefixt   _xsd_prefixt   _xsi_prefixRE  R[  R   R!  Rm  t   ENCt   _soap_enc_nsuriR   t
   _zsi_nsuriR   t   XSD3t
   _xsd_nsurit   XSI3R]  R   RD  t
   _xml_nsuriRH  RZ  R.  R2  R   R   R   R7   R5  R9  R?  R@  R-  RA  RB  RC  RI  RL  RP  RQ  RR  RS  RT  RU  RX  R   R+  R  R4  R   R   R  R_  R  R   Rc  Re  R  Rg  R   Ri  Rj  Rl  Rk  R   R  Rn  Ro  (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR"    s   						

																									
										t
   Collectionc           B   sP   e  Z d  Z d   Z d d  Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s7   Helper class for maintaining ordered named collections.c         C   s   | j  S(   N(   R   (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7  u  s    c         C   s>   t  j |   t j |  |  _ g  |  _ | p4 |  j |  _ d  S(   N(   R   R7   R  R  t   parentt   listR   t   _func(   R5   R|  R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7   w  s    	c         C   sC   t  j t  j t  j t  j f } t | |  r8 |  j | S|  j | S(   N(   R(  t   IntTypet   LongTypet	   FloatTypet   ComplexTypeR,  R}  R   (   R5   R   t   NumberTypes(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   __getitem__}  s    c         C   s3   t  j |   | _ |  j j |  | |  j | <d  S(   N(   R  R  R|  R}  R   R   (   R5   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   __setitem__  s    c            s   t    f d     j  S(   Nc            s     j  |   S(   N(   R~  (   t   i(   R5   (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7    s    (   R:  R}  (   R5   (    (   R5   s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c            s   t    f d     j  S(   Nc            s     j  |   |  f S(   N(   R~  (   R  (   R5   (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7    s    (   R:  R}  (   R5   (    (   R5   s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s   |  j  S(   N(   R}  (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRG    s    N(   R*   R+   R,   R   R   R7   R  R  R   R   RG  (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR{  s  s   					t   CollectionNSc           B   sY   e  Z d  Z d   Z d	 d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z RS(
   s7   Helper class for maintaining ordered named collections.c         C   s   | j  S(   N(   R   (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7    s    c         C   sG   t  j |   t j |  |  _ d  |  _ g  |  _ | p= |  j |  _	 d  S(   N(
   R   R7   R  R  R|  R   R   R}  R   R~  (   R5   R|  R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7     s
    		c         C   sq   |  j    j |  _ t | t j  r/ |  j | S|  j |  rY | \ } } |  j | | S|  j |  j    j | S(   N(   R|  R   R,  R(  R  R}  t   _CollectionNS__isSequenceR   (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   sq   t  j |   | _ |  j j |  t | d |  j   j  } | |  j k r\ i  |  j | <n  | |  j | | <d  S(   NR   (   R  R  R|  R}  R   RK   R   R   (   R5   R   R   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    c         C   s.   t  |  t j t j f k o- t |  d k S(   Ni   (   R   R(  t	   TupleTypet   ListTypeR   (   R5   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   __isSequence  s    c            sS   g  } xF   j  j   D]5  | j t    f d     j   j     q W| S(   Nc            s      j  |   f S(   N(   R~  (   R  (   R5   t   tns(    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7    s    (   R   R   R   R:  RG  (   R5   R   (    (   R5   R  s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    3c            s   t    f d     j  S(   Nc            s     j  |   |  f S(   N(   R~  (   R  (   R5   (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR7    s    (   R:  R}  (   R5   (    (   R5   s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR     s    c         C   s   |  j  S(   N(   R}  (   R5   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyRG    s    N(   R*   R+   R,   R   R   R7   R  R  R  R   R   RG  (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s   							(   t   PullDOMt   START_ELEMENTc         C   sg   t  |  d  s g  |  _ n  |  j j | p- d | f  |  j j |  j j    | pY d |  j | <d  S(   Nt   _xmlns_attrsR   R   (   R\   R  R   t   _ns_contextst   _current_contextR/  (   R5   R   Rw   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   startPrefixMapping  s
    c         C   s;  d } t  |  d d   } | d  k	 rZ x' | D] \ } } | | j | | f <q+ Wg  |  _ n  | \ } }	 | r | d  k r |  j | }
 |
 r |
 d |	 } q |	 } n  |  j r |  j j | |  } q|  j | |  } n0 |  j r |  j j |	  } n |  j d  |	  } x | j	   D] \ } } | \ } } | | k r| d k rQ| } n
 d | } |  j j
 | |  } | j |  nt | r|  j | }
 |
 r|
 d | } n | } |  j j
 | |  } | j |  n |  j j |  } | j |  | | _ qWt | f d  g |  j d <|  j d |  _ |  j |  d  S(   Ns   http://www.w3.org/2000/xmlns/R  R   R   s   xmlns:i   (   RK   R   R   R  R  R   Rc  t   buildDocumentt   createElementR   R_  t   setAttributeNodeNSt   createAttributet   setAttributeNodeRx   R  t	   lastEventt   push(   R5   R   t   tagNameR   t	   xmlns_urit   xmlns_attrst   anameRx   Rw   t	   localnameR   R   t   a_urit   a_localnameR   R   (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   startElementNS  sP    				
c         C   s  |  j  j |  r$ t j j j } n t j j j } |  j t j j j	 j
 k rh| j |  j |  j  } x |  j j   D] } | j | j | j | j  t j j j | j  \ } } | d k r | j | j |  } n6 | r | j | j |  } n | j | j | j  } | j | _ qv W| rx< |  j D]. }	 t j j j |	 | |  }
 | j |
  q0WqnK|  j t j j j	 j k r| j   } | rx< |  j D]. }	 t j j j |	 | |  }
 | j |
  qWqn|  j t j j j	 j k r| j |  j  } n|  j t j j j	 j k r7| j |  j  } n||  j t j j j	 j k rm| j  |  j! |  j  } nF|  j t j j j	 j" k r| j# |  j  } n|  j t j j j	 j$ k r| j% |  j |  j  } t& | _ |  j | _ n|  j t j j j	 j' k r|  j  | k	 st(  t j j j } | j) j* |  j+ |  j, |  j-  } | | _  | rg  | j. _/ g  | j0 _/ xy |  j0 j/ D]k } t j j j1 | j | j, | j-  } | | _  | j0 j/ j2 |  t3 | d  r|| j4 | | |  q|q|Wx |  j. j/ D] } t j j j5 | j | j, | j- | j6  } | j7 | _7 | j8 | _8 | j9 | _9 | | _  | j. j/ j2 |  t3 | d  r| j4 | | |  qqWqn t j j: d t; |     t3 |  d  r|  j4 | |  |  n  | S(   s{   
        Clone a node and give it the new owner document.
        Called by Node.cloneNode and Document.importNode
        R   t   _call_user_data_handlers   Cannot clone node %s(<   R   t
   isSameNodeR   R   t   UserDataHandlert   NODE_CLONEDt   NODE_IMPORTEDR   R   R   R   Rc  R   t   nodeNameRF  RG  R  Rx   t   _nssplitRh  t	   specifiedR   t   _clone_nodeRK  t   DOCUMENT_FRAGMENT_NODEt   createDocumentFragmentR   Rk  R   R   t   createCDATASectiont   PROCESSING_INSTRUCTION_NODEt   createProcessingInstructiont   targett   COMMENT_NODEt   createCommentt   ATTRIBUTE_NODER_  R$   R   t   AssertionErrort   implementationt   createDocumentTypeR   t   publicIdt   systemIdt   entitiest   _seqt	   notationst   NotationR   R\   R  t   Entityt   notationNamet   actualEncodingt   encodingR|   t   NotSupportedErrt   repr(   R   R   t   newOwnerDocumentt	   operationR   R   R   t   tagt   aR   t   ct   nt   notationt   et   entity(    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyR    s    			$		 (A   t   identt   sysR(  RP   R%   RL   R  t   os.pathR    t   stringR   R   R   R   t	   cStringIOR   R   R   R   R	   R
   t
   exceptionsR   R#  R   t   xml.dom.minidomR   t   xml.domR   R1   t   c14nR   t
   NamespacesR   R   R   R   t   xml.dom.extR   R&   t   version_infoR#   R)   R-   R.   R/   R0   R8   RA   RG   R   RY   Rs   R  R"  R{  R  t   xml.dom.pulldomR  R  R  R  R  R   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/wstools/Utility.pyt   <module>   sn   	"	,F 	= 0			9		W