;ò jBAc@sdZdkZdkZdkZdkZdkZdkZdkZdkZ dkl Z l Z l Z dk l Z dklZdklZlZdklZdklZlZdklZyd klZWnd „ZnXd efd „ƒYZd fd„ƒYZdefd„ƒYZdefd„ƒYZded„Zdfd„ƒYZdefd„ƒYZeƒZde fd„ƒYZ de fd„ƒYZ!dk"l#Z#l$Z$no(d„Z%e%e#_%d „Z&e&e#_&nnod!„Z'e'e i(i)_'ndS("s9$Id: Utility.py,v 1.15 2004/04/29 01:40:49 boverhof Exp $N(sjoinsstripssplit(sUserDict(sStringIO(s TimeoutSockets TimeoutError(surlparse(sHTTPConnectionsHTTPSConnection(s Exception(s SplitQNamecCs~|idƒ}t|ƒdjo|idtƒn;t|ƒdjo#|ddjo|iƒqpndSt|ƒSdS(sFSplitQName(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) s:iiisxmlnsN(sqnamessplitslslensinsertsNonesreversestuple(sqnamesl((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys SplitQNames sRecursionErrorcBstZdZRS(s+Used to indicate a HTTP redirect recursion.(s__name__s __module__s__doc__(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysRecursionError1s s HTTPResponsecBstZdZd„ZRS(s5Captures the information in an HTTP response message.cCsH|i|_|i|_|i|_|iƒpt|_|i ƒdS(N( sresponsesstatussselfsreasonsmsgsheaderssreadsNonesbodysclose(sselfsresponse((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys__init__8s    (s__name__s __module__s__doc__s__init__(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys HTTPResponse5s s TimeoutHTTPcBs&tZdZedd„Zd„ZRS(s=A custom http connection object that supports socket timeout.icCs ti|||ƒ||_dS(N(sHTTPConnections__init__sselfshostsportstimeout(sselfshostsportstimeout((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys__init__AscCs2t|iƒ|_|ii|i|ifƒdS(N(s TimeoutSocketsselfstimeoutssocksconnectshostsport(sself((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysconnectEs(s__name__s __module__s__doc__sNones__init__sconnect(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys TimeoutHTTP?s s TimeoutHTTPScBs&tZdZedd„Zd„ZRS(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.icKs)ti|t|ƒ||||_dS(N(sHTTPSConnections__init__sselfsstrshostsportskwargsstimeout(sselfshostsportstimeoutskwargs((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys__init__QscCstt|iƒ}|i|i|ifƒt|id|iƒ}t i ||i |i ƒ}t i||ƒ|_dS(Ns_sock(s TimeoutSocketsselfstimeoutssocksconnectshostsportsgetattrsrealsockssocketssslskey_files cert_fileshttplibs FakeSocket(sselfssockssslsrealsock((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysconnectUs (s__name__s __module__s__doc__sNones__init__sconnect(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys TimeoutHTTPSJs icCsœt|ƒ\}} } }}} |ddfj oti |ƒSn|od| |f} n|od| |f} n| od| | f} n|djogt t dƒot | t |ƒ}qdk}|iiƒ}|i|ƒ|ii| d|ƒ}nt| t |ƒ}|id | ƒ|id d ƒ|iƒt } xBno:|iƒ} | id joPnti|_ t |_!qTW| i}|djo |djo›| i"i#dƒ}|t j ol| i%ƒ|t j o |i'|ƒot(dƒ‚n|t jo h}nd ||e:e:e:d$d%„Z?e:d&„Z@e:d'„ZAe:e<d(„ZBd)„ZCe:d*„ZDd+„ZEd,„ZFd-„ZGd.„ZHd/d0„ZId1„ZJd/eKfƒd2„ZLe:d3„ZMd4„ZNd5„ZORS(6sThe 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-encodings1.1s1.2s*http://schemas.xmlsoap.org/soap/actor/nexts2http://www.w3.org/2001/06/soap-envelope/actor/nextcCs;|ii|ƒ}|tj o|Sntd|ƒ‚dS(s3Return the SOAP version related to an envelope uri.s!Unsupported SOAP envelope uri: %sN(sselfs_soap_uri_mappingsgetsurisvaluesNones ValueError(sselfsurisvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysSOAPUriToVersionµs  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(spReturn the appropriate SOAP envelope uri for a given human-friendly SOAP version string (e.g. '1.1').sNS_SOAP_ENV_%ss.s_sUnsupported SOAP version: %sN( sjoinssplitsversionsattrnamesgetattrsselfsNonesvalues ValueError(sselfsversionsvaluesattrname((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys GetSOAPEnvUri¾s  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(spReturn the appropriate SOAP encoding uri for a given human-friendly SOAP version string (e.g. '1.1').sNS_SOAP_ENC_%ss.s_sUnsupported SOAP version: %sN( sjoinssplitsversionsattrnamesgetattrsselfsNonesvalues ValueError(sselfsversionsvaluesattrname((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys GetSOAPEncUriÉs  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(soReturn the right special next-actor uri for a given human-friendly SOAP version string (e.g. '1.1').sSOAP_ACTOR_NEXT_%ss.s_sUnsupported SOAP version: %sN( sjoinssplitsversionsattrnamesgetattrsselfsNonesvalues ValueError(sselfsversionsvaluesattrname((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysGetSOAPActorNextUriÔ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-instancecCs|ii|ƒSdS(sjReturn the appropriate matching XML Schema instance uri for the given XML Schema namespace uri.N(sselfs_xsd_uri_mappingsgetsuri(sselfsuri((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysInstanceUriForSchemaUriûscCs|ii|ƒSdS(stReturn the appropriate matching XML Schema namespace uri for the given XML Schema instance namespace uri.N(sselfs_xsd_uri_mappingsgetsuri(sselfsuri((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysSchemaUriForInstanceUriss 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/httpcCs;|ii|ƒ}|tj o|Sntd|ƒ‚dS(s8Return the WSDL version related to a WSDL namespace uri.s!Unsupported SOAP envelope uri: %sN(sselfs_wsdl_uri_mappingsgetsurisvaluesNones ValueError(sselfsurisvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysWSDLUriToVersion!s  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(Ns NS_WSDL_%ss.s_sUnsupported WSDL version: %s( sjoinssplitsversionsattrsgetattrsselfsNonesvalues ValueError(sselfsversionsattrsvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys GetWSDLUri*s  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(NsNS_SOAP_BINDING_%ss.s_sUnsupported WSDL version: %s( sjoinssplitsversionsattrsgetattrsselfsNonesvalues ValueError(sselfsversionsattrsvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysGetWSDLSoapBindingUri3s  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(NsNS_HTTP_BINDING_%ss.s_sUnsupported WSDL version: %s( sjoinssplitsversionsattrsgetattrsselfsNonesvalues ValueError(sselfsversionsattrsvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysGetWSDLHttpBindingUri<s  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(NsNS_MIME_BINDING_%ss.s_sUnsupported WSDL version: %s( sjoinssplitsversionsattrsgetattrsselfsNonesvalues ValueError(sselfsversionsattrsvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysGetWSDLMimeBindingUriEs  cCsWdtt|dƒdƒ}t||tƒ}|tj o|Sntd|ƒ‚dS(NsNS_SOAP_HTTP_%ss.s_sUnsupported WSDL version: %s( sjoinssplitsversionsattrsgetattrsselfsNonesvalues ValueError(sselfsversionsattrsvalue((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysGetWSDLHttpTransportUriNs  shttp://www.w3.org/2000/xmlns/cCsO|i|ijodSn|i|jo |tjp|i|i |ƒSdS(sfReturn true if the given node is an element with the given name and optional namespace uri.iN( snodesnodeTypes ELEMENT_NODEs localNamesnamesnsurisNonesselfs nsUriMatchs namespaceURI(sselfsnodesnamesnsuri((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys isElement]scCs¡|i}|i}xj|iD]_}|i|joI|i|jp |t jo|t jp||i |ƒo|Sq{qqW|tj o|Snt|‚dS(stReturn the first child of node with a matching name and namespace uri, or the default if one is provided.N(sselfs nsUriMatchsnsmatchsnodes ELEMENT_NODEs childNodesschildsnodeTypes localNamesnamesNonesnsuris namespaceURIsdefaultsjoinsKeyError(sselfsnodesnamesnsurisdefaultsnsmatchs ELEMENT_NODEschild((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys getElementes   = cCsz|i}|i}xC|iD]8}|i|jo"||dƒ|jo|SqTqqW|t j o|Snt t ‚dS(s8Return the first child of node matching an id reference.sidN( sselfsgetAttrsattrgetsnodes ELEMENT_NODEs childNodesschildsnodeTypesidsdefaultsjoinsKeyErrorsname(sselfsnodesidsdefaultsattrgets ELEMENT_NODEschild((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysgetElementByIdts    ic CsÍ|tj o|i}h}n|iidtƒ}|tj o|||i 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.sidiN(sdocumentsNonesdocumentElementselementsmappings_attrssgetsattrsvaluesdepthslevels ELEMENT_NODEs childNodesschildsnodeTypesselfsgetMappingById( sselfsdocumentsdepthselementsmappingslevelsattrs ELEMENT_NODEschild((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysgetMappingById€s       %cCs–|i}g}|i}xs|iD]h}|i|joR|i |jp |t jo|t jp||i |ƒo|i|ƒqŠq"q"W|SdS(szReturn a sequence of the child elements of the given node that match the given name and optional namespace uri.N(sselfs nsUriMatchsnsmatchsresultsnodes ELEMENT_NODEs childNodesschildsnodeTypes localNamesnamesNonesnsuris namespaceURIsappend(sselfsnodesnamesnsurisnsmatchs ELEMENT_NODEsresultschild((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys getElements“s   =cCsA|tjo |i|ƒotSntSn|i||ƒSdS(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(snsurisNonesnodes hasAttributesnamesTruesFalseshasAttributeNS(sselfsnodesnamesnsuri((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pyshasAttr s  cCsÄ|tjog|ii|tƒ}|tjoAx>|iiƒD])}|d|jo|i|}Pq?q?Wqn|ii||ftƒ}|tj o |i Sn|t j o|SndSdS(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.isN( snsurisNonesnodes_attrssgetsnamesresults_attrsNSskeyssitemsvaluesdefaultsjoin(sselfsnodesnamesnsurisdefaultsitemsresult((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysgetAttrªs      cCs;h}x*|iiƒD]\}}|i||s   (Ps__name__s __module__s__doc__sNS_SOAP_ENV_1_1sNS_SOAP_ENC_1_1sNS_SOAP_ENV_1_2sNS_SOAP_ENC_1_2sNS_SOAP_ENV_ALLsNS_SOAP_ENC_ALLs NS_SOAP_ENVs NS_SOAP_ENCs_soap_uri_mappingsSOAP_ACTOR_NEXT_1_1sSOAP_ACTOR_NEXT_1_2sSOAP_ACTOR_NEXT_ALLsSOAPUriToVersions GetSOAPEnvUris GetSOAPEncUrisGetSOAPActorNextUris NS_XSD_99s NS_XSI_99s NS_XSD_00s NS_XSI_00s NS_XSD_01s NS_XSI_01s NS_XSD_ALLs NS_XSI_ALLsNS_XSDsNS_XSIs_xsd_uri_mappingsitemsskeysvaluesInstanceUriForSchemaUrisSchemaUriForInstanceUris NS_WSDL_1_1s NS_WSDL_ALLsNS_WSDLsNS_SOAP_BINDING_1_1sNS_HTTP_BINDING_1_1sNS_MIME_BINDING_1_1sNS_SOAP_BINDING_ALLsNS_HTTP_BINDING_ALLsNS_MIME_BINDING_ALLsNS_SOAP_BINDINGsNS_HTTP_BINDINGsNS_MIME_BINDINGsNS_SOAP_HTTP_1_1sNS_SOAP_HTTP_ALLs NS_SOAP_HTTPs_wsdl_uri_mappingsWSDLUriToVersions GetWSDLUrisGetWSDLSoapBindingUrisGetWSDLHttpBindingUrisGetWSDLMimeBindingUrisGetWSDLHttpTransportUrisNS_XMLNSsNones isElementsjoins getElementsgetElementByIdsgetMappingByIds getElementsshasAttrsgetAttrsgetAttrssgetElementTextsfindNamespaceURIs findDefaultNSs findTargetNSs getTypeRefs importNodes _setOwnerDocstypes nsUriMatchscreateDocuments loadDocuments loadFromURL(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysDOM˜s–     !                    s DOMExceptioncBstZRS(N(s__name__s __module__(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys DOMExceptionFss CollectioncBsPtZdZd„Zed„Zd„Zd„Zd„Zd„Z d„Z RS(s7Helper class for maintaining ordered named collections.cCs|iS(N(sksname(sselfsk((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysNscCs?ti|ƒti|ƒ|_g|_|p|i|_ dS(N( sUserDicts__init__sselfsweakrefsrefsparentslistskeysdefaults_func(sselfsparentskey((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys__init__Os  cCs7t|ƒtdƒjo|i|Sn|i|SdS(Ni(stypeskeysselfslistsdata(sselfskey((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys __getitem__UscCs3ti|ƒ|_|ii|ƒ||i|`s(smapsselfslist(sself((sselfsM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pyskeys_scst‡d†ˆiƒSdS(Ncsˆi|ƒ|fS(N(sselfs_funcsi(si(sself(sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pyscs(smapsselfslist(sself((sselfsM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysitemsbscCs |iSdS(N(sselfslist(sself((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysvalueses( s__name__s __module__s__doc__sdefaultsNones__init__s __getitem__s __setitem__skeyssitemssvalues(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys CollectionLs       s CollectionNScBsYtZdZd„Zed„Zd„Zd„Zd„Zd„Z d„Z d„Z RS( s7Helper class for maintaining ordered named collections.cCs|iS(N(sksname(sselfsk((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pyskscCsHti|ƒti|ƒ|_t|_g|_|p|i |_ dS(N( sUserDicts__init__sselfsweakrefsrefsparentsNonestargetNamespaceslistskeysdefaults_func(sselfsparentskey((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys__init__ls    cCs‚|iƒi|_t|ƒtijo|i|Sn0|i|ƒo|\}}|i ||Sn|i |iƒi|SdS(N( sselfsparentstargetNamespacestypeskeystypessIntTypeslists_CollectionNS__isSequencesnsurisnamesdata(sselfskeysnamesnsuri((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys __getitem__ss cCswti|ƒ|_|ii|ƒt|d|iƒiƒ}|i i |ƒ oh|i |Šs(skeyssselfsdatastnssappendsmapsvalues(sselfskeysstns((sselfstnssM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pyskeys‡s 0cst‡d†ˆiƒSdS(Ncsˆi|ƒ|fS(N(sselfs_funcsi(si(sself(sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysŽs(smapsselfslist(sself((sselfsM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysitemsscCs |iSdS(N(sselfslist(sself((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pysvaluess( s__name__s __module__s__doc__sdefaultsNones__init__s __getitem__s __setitem__s_CollectionNS__isSequenceskeyssitemssvalues(((sM/mnt/gmirror/ports/net/py-soappy/work/SOAPpy-0.11.6/SOAPpy/wstools/Utility.pys CollectionNSis       (sPullDOMs START_ELEMENTicCslt|dƒ o g|_n|ii|pd|fƒ|ii|iiƒƒ|pd|i|