Server IP : 127.0.0.2 / Your IP : 3.143.213.242 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/python2.7/dist-packages/ZSI/ |
Upload File : |
# $Header$ '''ZSI: Zolera Soap Infrastructure. Copyright 2001, Zolera Systems, Inc. All Rights Reserved. ''' _copyright = """ZSI: Zolera Soap Infrastructure. Copyright 2001, Zolera Systems, Inc. All Rights Reserved. Copyright 2002-2003, Rich Salz. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. Portions are also: Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from the U.S. Dept. of Energy). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: (1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. (2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, U.S. Dept. of Energy nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. You are under no obligation whatsoever to provide any bug fixes, patches, or upgrades to the features, functionality or performance of the source code ("Enhancements") to anyone; however, if you choose to make your Enhancements available either publicly, or directly to Lawrence Berkeley National Laboratory, without imposing a separate written license agreement for such Enhancements, then you hereby grant the following license: a non-exclusive, royalty-free perpetual license to install, use, modify, prepare derivative works, incorporate into other computer software, distribute, and sublicense such Enhancements or derivative works thereof, in binary and source code form. For wstools also: Zope Public License (ZPL) Version 2.0 ----------------------------------------------- This software is Copyright (c) Zope Corporation (tm) and Contributors. All rights reserved. This license has been certified as open source. It has also been designated as GPL compatible by the Free Software Foundation (FSF). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions in source code must retain the above copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name Zope Corporation (tm) must not be used to endorse or promote products derived from this software without prior written permission from Zope Corporation. 4. The right to distribute this software or to use it for any purpose does not give you the right to use Servicemarks (sm) or Trademarks (tm) of Zope Corporation. Use of them is covered in a separate agreement (see http://www.zope.com/Marks). 5. If any files are modified, you must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. Disclaimer THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ZOPE CORPORATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This software consists of contributions made by Zope Corporation and many individuals on behalf of Zope Corporation. Specific attributions are listed in the accompanying credits file. """ ## ## Stuff imported from elsewhere. from xml.dom import Node as _Node import types as _types ## ## Public constants. from ZSI.wstools.Namespaces import ZSI_SCHEMA_URI UNICODE_ENCODING = 'utf-8' ## ## Not public constants. _inttypes = [ _types.IntType, _types.LongType ] _floattypes = [ _types.FloatType ] _seqtypes = [ _types.TupleType, _types.ListType ] _stringtypes = [ _types.StringType, _types.UnicodeType ] ## ## Low-level DOM oriented utilities; useful for typecode implementors. _attrs = lambda E: (E.attributes and E.attributes.values()) or [] _children = lambda E: E.childNodes or [] _child_elements = lambda E: [ n for n in (E.childNodes or []) if n.nodeType == _Node.ELEMENT_NODE ] ## ## Stuff imported from elsewhere. from ZSI.wstools.Namespaces import SOAP as _SOAP, SCHEMA as _SCHEMA, XMLNS as _XMLNS ## ## Low-level DOM oriented utilities; useful for typecode implementors. _find_arraytype = lambda E: E.getAttributeNS(_SOAP.ENC, "arrayType") _find_encstyle = lambda E: E.getAttributeNS(_SOAP.ENV, "encodingStyle") try: from xml.dom import EMPTY_NAMESPACE _empty_nsuri_list = [ EMPTY_NAMESPACE ] #if '' not in _empty_nsuri_list: __empty_nsuri_list.append('') #if None not in _empty_nsuri_list: __empty_nsuri_list.append(None) except: _empty_nsuri_list = [ None, '' ] def _find_attr(E, attr): for nsuri in _empty_nsuri_list: try: v = E.getAttributeNS(nsuri, attr) if v: return v except: pass return None def _find_attrNS(E, namespaceURI, localName): '''namespaceURI localName ''' try: v = E.getAttributeNS(namespaceURI, localName) if v: return v except: pass return None def _find_attrNodeNS(E, namespaceURI, localName): '''Must grab the attribute Node to distinquish between an unspecified attribute(None) and one set to empty string(""). namespaceURI localName ''' attr = E.getAttributeNodeNS(namespaceURI, localName) if attr is None: return None try: return attr.value except: pass return E.getAttributeNS(namespaceURI, localName) _find_href = lambda E: _find_attr(E, "href") _find_xsi_attr = lambda E, attr: \ E.getAttributeNS(_SCHEMA.XSI3, attr) \ or E.getAttributeNS(_SCHEMA.XSI1, attr) \ or E.getAttributeNS(_SCHEMA.XSI2, attr) _find_type = lambda E: _find_xsi_attr(E, "type") _find_xmlns_prefix = lambda E, attr: E.getAttributeNS(_XMLNS.BASE, attr) _find_default_namespace = lambda E: E.getAttributeNS(_XMLNS.BASE, None) #_textprotect = lambda s: s.replace('&', '&').replace('<', '<') _get_element_nsuri_name = lambda E: (E.namespaceURI, E.localName) _is_element = lambda E: E.nodeType == _Node.ELEMENT_NODE def _resolve_prefix(celt, prefix): '''resolve prefix to a namespaceURI. If None or empty str, return default namespace or None. Parameters: celt -- element node prefix -- xmlns:prefix, or empty str or None ''' namespace = None while _is_element(celt): if prefix: namespaceURI = _find_xmlns_prefix(celt, prefix) else: namespaceURI = _find_default_namespace(celt) if namespaceURI: break celt = celt.parentNode else: if prefix: raise EvaluateException, 'cant resolve xmlns:%s' %prefix return namespaceURI def _valid_encoding(elt): '''Does this node have a valid encoding? ''' enc = _find_encstyle(elt) if not enc or enc == _SOAP.ENC: return 1 for e in enc.split(): if e.startswith(_SOAP.ENC): # XXX Is this correct? Once we find a Sec5 compatible # XXX encoding, should we check that all the rest are from # XXX that same base? Perhaps. But since the if test above # XXX will surely get 99% of the cases, leave it for now. return 1 return 0 def _backtrace(elt, dom): '''Return a "backtrace" from the given element to the DOM root, in XPath syntax. ''' s = '' while elt != dom: name, parent = elt.nodeName, elt.parentNode if parent is None: break matches = [ c for c in _child_elements(parent) if c.nodeName == name ] if len(matches) == 1: s = '/' + name + s else: i = matches.index(elt) + 1 s = ('/%s[%d]' % (name, i)) + s elt = parent return s def _get_idstr(pyobj): '''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.''' x = id(pyobj) if x < 0: return 'x%x' % abs(x) return 'o%x' % x def _get_postvalue_from_absoluteURI(url): """Bug [ 1513000 ] POST Request-URI not limited to "abs_path" Request-URI = "*" | absoluteURI | abs_path | authority Not a complete solution, but it seems to work with all known implementations. ValueError thrown if bad uri. """ cache = _get_postvalue_from_absoluteURI.cache path = cache.get(url, '') if not path: scheme,authpath = url.split('://') s = authpath.split('/', 1) if len(s) == 2: path = '/%s' %s[1] if len(cache) > _get_postvalue_from_absoluteURI.MAXLEN:cache.clear() cache[url] = path return path _get_postvalue_from_absoluteURI.cache = {} _get_postvalue_from_absoluteURI.MAXLEN = 20 ## ## Exception classes. class ZSIException(Exception): '''Base class for all ZSI exceptions. ''' pass class ParseException(ZSIException): '''Exception raised during parsing. ''' def __init__(self, str, inheader, elt=None, dom=None): Exception.__init__(self) self.str, self.inheader, self.trace = str, inheader, None if elt and dom: self.trace = _backtrace(elt, dom) def __str__(self): if self.trace: return self.str + '\n[Element trace: ' + self.trace + ']' return self.str def __repr__(self): return "<%s.ParseException %s>" % (__name__, _get_idstr(self)) class EvaluateException(ZSIException): '''Exception raised during data evaluation (serialization). ''' def __init__(self, str, trace=None): Exception.__init__(self) self.str, self.trace = str, trace def __str__(self): if self.trace: return self.str + '\n[Element trace: ' + self.trace + ']' return self.str def __repr__(self): return "<%s.EvaluateException %s>" % (__name__, _get_idstr(self)) class FaultException(ZSIException): '''Exception raised when a fault is received. ''' def __init__(self, fault): self.fault = fault def __str__(self): return str(self.fault) def __repr__(self): return "<%s.FaultException %s>" % (__name__, _get_idstr(self)) class WSActionException(ZSIException): '''Exception raised when WS-Address Action Header is incorrectly specified when received by client or server. ''' pass ## ## Importing the rest of ZSI. import version def Version(): return version.Version from writer import SoapWriter from parse import ParsedSoap from fault import Fault, \ FaultFromActor, FaultFromException, FaultFromFaultMessage, \ FaultFromNotUnderstood, FaultFromZSIException import TC TC.RegisterType(TC.String, minOccurs=0, nillable=False) TC.RegisterType(TC.URI, minOccurs=0, nillable=False) TC.RegisterType(TC.Base64String, minOccurs=0, nillable=False) TC.RegisterType(TC.HexBinaryString, minOccurs=0, nillable=False) #TC.RegisterType(TC.Integer) #TC.RegisterType(TC.Decimal) for pyclass in (TC.IunsignedByte, TC.IunsignedShort, TC.IunsignedInt, TC.IunsignedLong, TC.Ibyte, TC.Ishort, TC.Iint, TC.Ilong, TC.InegativeInteger, TC.InonPositiveInteger, TC.InonNegativeInteger, TC.IpositiveInteger, TC.Iinteger, TC.FPfloat, TC.FPdouble, ): TC.RegisterType(pyclass, minOccurs=0, nillable=False) TC.RegisterType(TC.Boolean, minOccurs=0, nillable=False) TC.RegisterType(TC.Duration, minOccurs=0, nillable=False) TC.RegisterType(TC.gDateTime, minOccurs=0, nillable=False) TC.RegisterType(TC.gDate, minOccurs=0, nillable=False) TC.RegisterType(TC.gYearMonth, minOccurs=0, nillable=False) TC.RegisterType(TC.gYear, minOccurs=0, nillable=False) TC.RegisterType(TC.gMonthDay, minOccurs=0, nillable=False) TC.RegisterType(TC.gDay, minOccurs=0, nillable=False) TC.RegisterType(TC.gTime, minOccurs=0, nillable=False) TC.RegisterType(TC.Apache.Map, minOccurs=0, nillable=False) ## ## Register Wrappers for builtin types. ## TC.AnyElement wraps builtins so element name information can be saved ## import schema for i in [int,float,str,tuple,list,unicode]: schema._GetPyobjWrapper.RegisterBuiltin(i) ## Load up Wrappers for builtin types schema.RegisterAnyElement() #try: # from ServiceProxy import * #except: # pass if __name__ == '__main__': print _copyright