Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

rpclib-2.6.0 commits #122

Merged
merged 30 commits into from

1 participant

Burak Arslan
Burak Arslan
Owner

HttpRpc now supports parsing POST Requests, thanks to werkzeug, among many other fixes and small improvements.

plq and others added some commits
Burak Arslan plq latest WS-I test results aa3365c
Burak Arslan plq add mandatory unsignedinteger type 2e61fb8
Burak Arslan plq fix backwards-incompatible validator argument in XmlObject c73e047
Burak Arslan plq utf8 -> UTF-8 8a07943
Burak Arslan plq not-so-important refactoring 58a282a
Burak Arslan plq avoid inheritance hierarchies for simpleTypes. 50faf38
Burak Arslan plq make static files directory that the twisted wrapper publishes dynamic 1ec6af5
Burak Arslan plq use werkzeug to parse HTTP POST data. 41c7e72
Burak Arslan plq remove now needless empty input check. 882f358
Burak Arslan plq ByteArray is now effectively a primitive. e119d7d
Burak Arslan plq version and changelog update. 34f45ba
Burak Arslan plq separated call handle and method context generation. 8daa470
Burak Arslan plq Merge branch 'http-post' d27779f
Burak Arslan plq changelog update 194b927
Burak Arslan plq pep8 tweaks 6e7c9d4
Burak Arslan plq instead of initializing every known instance property as None, Comple…
…xModel default ctor now deletes data from class properties and sets only what it's passed to as **kwargs.
14a66ec
Burak Arslan plq fix old class definition in sqlalchemy example. 5300b81
Burak Arslan plq move logic in context dtor to event handler. 875baab
Burak Arslan plq add method_request_string to XmlObject logger.debug line. 84aab05
Burak Arslan Add werkzeug to requirements in README.rst 5c5bceb
Burak Arslan plq handle missing Content-Type header #119 c013c34
Burak Arslan plq lowercase encoding name. #119 9371104
Burak Arslan plq readme update, fix funny typo :) 17a323f
Burak Arslan plq add RequestNotAllowed error. #119 7b85907
Burak Arslan plq have rpclib return the relevant HTTP error on RequestNotAllowed excep…
…tion. #119
1f90db8
Burak Arslan plq handle incorrect soap request for http transport. #119 990f74a
Burak Arslan plq implement _force_own_namespace 11ce8de
Burak Arslan plq fix race condition in wsgi server wsdl request. bc983b4
Burak Arslan plq changelog update. e86ed0c
Burak Arslan plq readme update 9a0e28e
Burak Arslan plq merged commit 72ebdd9 into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 15, 2012
  1. Burak Arslan

    latest WS-I test results

    plq authored
Commits on Jan 17, 2012
  1. Burak Arslan

    add mandatory unsignedinteger type

    plq authored
Commits on Jan 24, 2012
  1. Burak Arslan
Commits on Jan 25, 2012
  1. Burak Arslan

    utf8 -> UTF-8

    plq authored
Commits on Jan 27, 2012
  1. Burak Arslan

    not-so-important refactoring

    plq authored
Commits on Jan 28, 2012
  1. Burak Arslan
Commits on Jan 29, 2012
  1. Burak Arslan
  2. Burak Arslan
  3. Burak Arslan
  4. Burak Arslan
Commits on Jan 30, 2012
  1. Burak Arslan

    version and changelog update.

    plq authored
  2. Burak Arslan
  3. Burak Arslan

    Merge branch 'http-post'

    plq authored
Commits on Feb 12, 2012
  1. Burak Arslan

    changelog update

    plq authored
  2. Burak Arslan

    pep8 tweaks

    plq authored
  3. Burak Arslan

    instead of initializing every known instance property as None, Comple…

    plq authored
    …xModel default ctor now deletes data from class properties and sets only what it's passed to as **kwargs.
  4. Burak Arslan
  5. Burak Arslan
  6. Burak Arslan
  7. Burak Arslan

    Add werkzeug to requirements in README.rst

    Burak Arslan authored plq committed
  8. Burak Arslan
  9. Burak Arslan

    lowercase encoding name. #119

    plq authored
  10. Burak Arslan

    readme update, fix funny typo :)

    plq authored
  11. Burak Arslan

    add RequestNotAllowed error. #119

    plq authored
  12. Burak Arslan
  13. Burak Arslan
  14. Burak Arslan

    implement _force_own_namespace

    plq authored
  15. Burak Arslan
  16. Burak Arslan

    changelog update.

    plq authored
  17. Burak Arslan

    readme update

    plq authored
This page is out of date. Refresh to see the latest.
9 CHANGELOG.rst
View
@@ -2,6 +2,15 @@
Changelog
=========
+rpclib-2.6.0-beta
+-----------------
+ * HttpRpc now parses POST/PUT/PATCH bodies, can accept file uploads.
+ Uses werkzeug to do that, which is now a soft dependency.
+ * ByteArray now child of SimpleModel. It's now possible to customize it simply
+ by calling it.
+ * Fix race condition in wsgi server wsdl request.
+ * Full change log: https://github.com/arskom/rpclib/pull/122
+
rpclib-2.5.2-beta
-----------------
* Misc. fixes.
5 README.rst
View
@@ -57,7 +57,10 @@ that Rpclib supports:
:class:`rpclib.client.zeromq.ZeroMQClient` and
:class:`rpclib.server.zeromq.ZeroMQServer`.
* A Wsgi server of your choice to wrap :class:`rpclib.server.wsgi.WsgiApplication`.
-* `Werkzeug <http://werkzeug.pocoo.org/>` is needed for :class:`rpclib.protocol.http.HttpSoap`.
+* `Werkzeug <http://werkzeug.pocoo.org/>` is needed for :class:`rpclib.protocol.http.HttpRpc`.
+
+You are advised to add these as requirements to your own projects, as these are
+only "soft" dependencies of rpclib, thus not handled in its setup script.
Installing
==========
8 examples/user_manager/server_sqlalchemy.py
View
@@ -76,7 +76,7 @@ class User(TableModel, DeclarativeBase):
# this is the same as the above user object. Use this method of declaring
# objects for tables that have to be defined elsewhere.
-class AlternativeUser(TableSerializer, DeclarativeBase):
+class AlternativeUser(TableModel, DeclarativeBase):
__namespace__ = 'rpclib.examples.user_manager'
__table__ = User.__table__
@@ -108,16 +108,12 @@ class UserDefinedContext(object):
def __init__(self):
self.session = Session()
- def __del__(self):
- self.session.close()
-
def _on_method_call(ctx):
ctx.udc = UserDefinedContext()
def _on_method_return_object(ctx):
- # we don't do this in UserDefinedContext.__del__ simply to be able to alert
- # the client in case the commit fails.
ctx.udc.session.commit()
+ ctx.udc.session.close()
application = Application([UserManagerService], 'rpclib.examples.user_manager',
interface=Wsdl11(), in_protocol=Soap11(), out_protocol=Soap11())
2  src/rpclib/__init__.py
View
@@ -17,7 +17,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
#
-__version__ = '2.5.2-beta'
+__version__ = '2.6.0-beta'
from rpclib._base import TransportContext
from rpclib._base import EventContext
6 src/rpclib/decorator.py
View
@@ -158,11 +158,13 @@ def explain_method(*args, **kwargs):
_no_ctx = kparams.get('_no_ctx', True)
_udp = kparams.get('_udp', None)
+ _faults = None
if ('_faults' in kparams) and ('_throws' in kparams):
raise ValueError("only one of '_throws ' and '_faults' arguments"
"should be given, as they're synonyms.")
- _faults = kparams.get('_faults', None)
- if _faults is None:
+ elif '_faults' in kparams:
+ _faults = kparams.get('_faults', None)
+ elif '_throws' in kparams:
_faults = kparams.get('_throws', None)
_in_message_name = kparams.get('_in_message_name', function_name)
9 src/rpclib/error.py
View
@@ -8,12 +8,17 @@ def __init__(self, faultstring="Requested resource not found"):
class RequestTooLongError(Fault):
"""Raised when the request is too long."""
- def __init__(self, faultstring):
+ def __init__(self, faultstring=""):
Fault.__init__(self, 'Client.RequestTooLong', faultstring)
+class RequestNotAllowed(Fault):
+ """Raised when the request is incomplete."""
+ def __init__(self, faultstring=""):
+ Fault.__init__(self, 'Client.RequestNotAllowed', faultstring)
+
class ArgumentError(Fault):
"""Raised when there is a general problem with input data."""
- def __init__(self, faultstring):
+ def __init__(self, faultstring=""):
Fault.__init__(self, 'Client.ArgumentError', faultstring)
class ValidationError(Fault):
4 src/rpclib/interface/_base.py
View
@@ -145,7 +145,9 @@ def populate_interface(self, types=None):
# populate types
for s in self.services:
- logger.debug("populating '%s.%s (%s) ' types..." % (s.__module__, s.__name__, s.get_service_key()))
+ logger.debug("populating '%s.%s (%s) ' types..." % (s.__module__,
+ s.__name__, s.get_service_key()))
+
for method in s.public_methods.values():
if method.in_header is None:
method.in_header = s.__in_header__
3  src/rpclib/interface/xml_schema/model/_base.py
View
@@ -33,8 +33,7 @@ def simple_get_restriction_tag(interface, cls):
restriction.set('base', cls.__base_type__.get_type_name_ns(interface))
for v in cls.Attributes.values:
- enumeration = etree.SubElement(restriction,
- '{%s}enumeration' % _ns_xsd)
+ enumeration = etree.SubElement(restriction, '{%s}enumeration' % _ns_xsd)
enumeration.set('value', str(v))
return restriction
14 src/rpclib/model/_base.py
View
@@ -95,6 +95,8 @@ class Annotations(object):
class Empty(object):
pass
+ _force_own_namespace = set()
+
@staticmethod
def is_default(cls):
return True
@@ -136,6 +138,9 @@ def resolve_namespace(cls, default_ns):
if cls.__namespace__ is None:
cls.__namespace__ = cls.__module__
+ for c in cls._force_own_namespace:
+ c.__namespace__ = cls.__namespace__
+
@classmethod
def get_type_name(cls):
"""Returns the class name unless the __type_name__ attribute is defined.
@@ -234,6 +239,7 @@ def validate_native(cls, value):
"""Override this method to do your own input validation on the native
value. This is called after converting the incoming string to the
native python value."""
+
return True
class Null(ModelBase):
@@ -267,7 +273,11 @@ def __new__(cls, **kwargs):
retval = cls.customize( ** kwargs)
if not retval.is_default(retval):
- retval.__base_type__ = cls
+ if hasattr(cls, '_is_clone_of'):
+ retval.__base_type__ = cls._is_clone_of
+ else:
+ retval.__base_type__ = cls
+
retval.__type_name__ = kwargs.get("type_name", ModelBase.Empty)
return retval
@@ -278,7 +288,7 @@ def is_default(cls):
@staticmethod
def validate_string(cls, value):
- return ( ModelBase.validate_string(cls, value)
+ return ( ModelBase.validate_string(cls, value)
and (len(cls.Attributes.values) == 0 or
value in cls.Attributes.values)
)
3  src/rpclib/model/binary.py
View
@@ -29,9 +29,10 @@
from rpclib.model import nillable_string
from rpclib.model import nillable_iterable
from rpclib.model import ModelBase
+from rpclib.model import SimpleModel
-class ByteArray(ModelBase):
+class ByteArray(SimpleModel):
"""Handles anything other than ascii or unicode-encoded data. Every protocol
has a different way to handle arbitrary data. E.g. xml-based protocols
encode this as base64, while HttpRpc just hands it over.
10 src/rpclib/model/complex.py
View
@@ -151,11 +151,17 @@ class ComplexModelBase(ModelBase):
from.
"""
- def __init__(self, ** kwargs):
+ def __init__(self, **kwargs):
super(ComplexModelBase, self).__init__()
for k in self.get_flat_type_info(self.__class__).keys():
- setattr(self, k, kwargs.get(k, None))
+ try:
+ delattr(self, k)
+ except:
+ pass
+
+ for k,v in kwargs.items():
+ setattr(self, k, v)
def __len__(self):
return len(self._type_info)
1  src/rpclib/model/primitive.py
View
@@ -554,3 +554,4 @@ class Mandatory(object):
String = String(type_name="mandatory_string", min_occurs=1, nillable=False, min_len=1)
Integer = Integer(type_name="mandatory_integer", min_occurs=1, nillable=False)
+ UnsignedInteger = UnsignedInteger(type_name="mandatory_unsigned_integer", min_occurs=1, nillable=False)
33 src/rpclib/protocol/_base.py
View
@@ -34,11 +34,13 @@
from rpclib.const.http import HTTP_400
from rpclib.const.http import HTTP_404
+from rpclib.const.http import HTTP_405
from rpclib.const.http import HTTP_413
from rpclib.const.http import HTTP_500
from rpclib.error import ResourceNotFoundError
from rpclib.error import RequestTooLongError
+from rpclib.error import RequestNotAllowed
from rpclib.error import Fault
class ProtocolBase(object):
@@ -142,19 +144,9 @@ def set_method_descriptor(self, ctx):
raise ResourceNotFoundError('Method %r not found.' % name)
def generate_method_contexts(self, ctx):
- """Method to be overriden to perform any sort of custom matching between
- the method_request_string and the methods. Returns a list of contexts.
- Can return multiple contexts if a method_request_string matches more
- than one function. (This is called the fanout mode.)
- """
-
- name = ctx.method_request_string
- if not name.startswith("{"):
- name = '{%s}%s' % (self.app.interface.get_tns(), name)
-
- call_handles = self.app.interface.service_method_map.get(name, [])
+ call_handles = self.get_call_handles(ctx)
if len(call_handles) == 0:
- raise ResourceNotFoundError('Method %r not found.' % name)
+ raise ResourceNotFoundError('Method %r not found.' % ctx.method_request_string)
retval = []
for sc, d in call_handles:
@@ -169,11 +161,28 @@ def generate_method_contexts(self, ctx):
return retval
+ def get_call_handles(self, ctx):
+ """Method to be overriden to perform any sort of custom method mapping
+ using any data in the method context. Returns a list of contexts.
+ Can return multiple contexts if a method_request_string matches more
+ than one function. (This is called the fanout mode.)
+ """
+
+ name = ctx.method_request_string
+ if not name.startswith("{"):
+ name = '{%s}%s' % (self.app.interface.get_tns(), name)
+
+ call_handles = self.app.interface.service_method_map.get(name, [])
+
+ return call_handles
+
def fault_to_http_response_code(self, fault):
if isinstance(fault, RequestTooLongError):
return HTTP_413
if isinstance(fault, ResourceNotFoundError):
return HTTP_404
+ if isinstance(fault, RequestNotAllowed):
+ return HTTP_405
if isinstance(fault, Fault) and (fault.faultcode.startswith('Client.')
or fault.faultcode == 'Client'):
return HTTP_400
76 src/rpclib/protocol/http.py
View
@@ -30,10 +30,20 @@
from urllib.parse import parse_qs
from rpclib.error import ValidationError
-from rpclib.model.complex import Array
+from rpclib.model.binary import ByteArray
from rpclib.model.fault import Fault
from rpclib.protocol import ProtocolBase
+from werkzeug.formparser import parse_form_data
+
+STREAM_READ_BLOCK_SIZE = 16384
+
+def yield_stream(istr):
+ data = istr.read(STREAM_READ_BLOCK_SIZE)
+ while len(data) > 0:
+ yield data
+ data = istr.read(STREAM_READ_BLOCK_SIZE)
+
def _get_http_headers(req_env):
retval = {}
@@ -68,11 +78,36 @@ def create_in_document(self, ctx, in_string_encoding=None):
def decompose_incoming_envelope(self, ctx):
ctx.method_request_string = '{%s}%s' % (self.app.interface.get_tns(),
ctx.in_document['PATH_INFO'].split('/')[-1])
+
logger.debug("\033[92mMethod name: %r\033[0m" % ctx.method_request_string)
ctx.in_header_doc = _get_http_headers(ctx.in_document)
ctx.in_body_doc = parse_qs(ctx.in_document['QUERY_STRING'])
+ if ctx.transport.req_env['REQUEST_METHOD'].lower() in ('post', 'put', 'patch'):
+ stream, form, files = parse_form_data(ctx.transport.req_env)
+
+ for k, v in form.lists():
+ val = ctx.in_body_doc.get(k, [])
+ val.extend(v)
+ ctx.in_body_doc[k] = val
+
+ for k, v in files.items():
+ val = ctx.in_body_doc.get(k, [])
+ val.append(yield_stream(v.stream))
+ ctx.in_body_doc[k] = val
+
+ # FIXME: some proper variable matching is needed here.
+ k2 = k + "_name"
+ val = ctx.in_body_doc.get(k2, [])
+ val.append(v.filename)
+ ctx.in_body_doc[k2] = val
+
+ k2 = k + "_type"
+ val = ctx.in_body_doc.get(k2, [])
+ val.append(v.headers.get('Content-Type','application/octet-stream'))
+ ctx.in_body_doc[k2] = val
+
logger.debug('\theader : %r' % (ctx.in_header_doc))
logger.debug('\tbody : %r' % (ctx.in_body_doc))
@@ -101,7 +136,16 @@ def dict_to_object(self, doc, inst_class):
if (self.validator is self.SOFT_VALIDATION and not
member.type.validate_string(member.type, v2)):
raise ValidationError(v2)
- native_v2 = member.type.from_string(v2)
+
+ if member.type is ByteArray or \
+ getattr(member.type, '_is_clone_of', None) is ByteArray:
+ if isinstance(v2, str) or isinstance(v2, unicode):
+ native_v2 = member.type.from_string(v2)
+ else:
+ native_v2 = v2
+ else:
+ native_v2 = member.type.from_string(v2)
+
if (self.validator is self.SOFT_VALIDATION and not
member.type.validate_native(member.type, native_v2)):
raise ValidationError(v2)
@@ -148,11 +192,6 @@ def dict_to_object(self, doc, inst_class):
logger.debug("\tset default %r(%r) = %r" %
(member.path, pkey, value))
- try:
- print inst.qo.vehicles
- except Exception,e:
- print e
-
if self.validator is self.SOFT_VALIDATION:
sti = simple_type_info.values()
sti.sort(key=lambda x: (len(x.path), x.path))
@@ -199,21 +238,10 @@ def deserialize(self, ctx, message):
self.event_manager.fire_event('before_deserialize', ctx)
- if len(ctx.in_header_doc) > 0:
- ctx.in_header = self.dict_to_object(ctx.in_header_doc,
+ ctx.in_header = self.dict_to_object(ctx.in_header_doc,
ctx.descriptor.in_header)
- else:
- ctx.in_header = [None] * len(
- ctx.descriptor.in_header.get_flat_type_info(
- ctx.descriptor.in_message))
-
- if ctx.in_body_doc is not None:
- ctx.in_object = self.dict_to_object(ctx.in_body_doc,
+ ctx.in_object = self.dict_to_object(ctx.in_body_doc,
ctx.descriptor.in_message)
- else:
- ctx.in_object = [None] * len(
- ctx.descriptor.in_message.get_flat_type_info(
- ctx.descriptor.in_message))
self.event_manager.fire_event('after_deserialize', ctx)
@@ -244,3 +272,11 @@ def serialize(self, ctx, message):
def create_out_string(self, ctx, out_string_encoding='utf8'):
ctx.out_string = ctx.out_document
+
+ def get_call_handles(self, ctx):
+ retval = super(HttpRpc, self).get_call_handles(ctx)
+
+ if len(retval) == 0:
+ pass
+
+ return retval
23 src/rpclib/protocol/soap/soap11.py
View
@@ -27,19 +27,20 @@
import cgi
import rpclib.const.xml_ns as ns
-from rpclib.const.ansi_color import LIGHT_GREEN
-from rpclib.const.ansi_color import LIGHT_RED
-from rpclib.const.ansi_color import END_COLOR
from lxml import etree
from lxml.etree import XMLSyntaxError
+from rpclib.const.http import HTTP_405
from rpclib.const.http import HTTP_500
+from rpclib.const.ansi_color import LIGHT_GREEN
+from rpclib.const.ansi_color import LIGHT_RED
+from rpclib.const.ansi_color import END_COLOR
+from rpclib.error import RequestNotAllowed
+from rpclib.model.fault import Fault
from rpclib.protocol.xml import XmlObject
from rpclib.protocol.soap.mime import collapse_swa
-from rpclib.model.fault import Fault
-
def _from_soap(in_envelope_xml, xmlids=None):
'''Parses the xml string into the header and payload.'''
@@ -145,7 +146,17 @@ def wrapped(self):
def create_in_document(self, ctx, charset=None):
if ctx.transport.type == 'wsgi':
- content_type = cgi.parse_header(ctx.transport.req_env.get("CONTENT_TYPE"))
+ # according to the soap via http standard, soap requests must only
+ # work with proper POST requests.
+ content_type = ctx.transport.req_env.get("CONTENT_TYPE")
+ http_verb = ctx.transport.req_env['REQUEST_METHOD'].upper()
+ if content_type is None or http_verb != "POST":
+ ctx.transport.resp_code = HTTP_405
+ raise RequestNotAllowed(
+ "You must issue a POST request with the Content-Type "
+ "header properly set.")
+
+ content_type = cgi.parse_header(content_type)
collapse_swa(content_type, ctx.in_string)
ctx.in_document = _parse_xml_string(ctx.in_string, charset)
9 src/rpclib/protocol/xml/_base.py
View
@@ -114,8 +114,7 @@ def set_validator(self, validator):
self.validate_document = self.__validate_lxml
self.validator = self.SCHEMA_VALIDATION
- elif validator is self.SOFT_VALIDATION or \
- validator is ProtocolBase.SOFT_VALIDATION:
+ elif validator == 'soft' or validator is self.SOFT_VALIDATION:
self.validator = self.SOFT_VALIDATION
elif validator is None:
@@ -149,8 +148,8 @@ def validate_body(self, ctx, message):
line_header = LIGHT_RED + "Response:" + END_COLOR
finally:
if self.log_messages:
- logger.debug("%s %s" % (line_header,
- etree.tostring(ctx.in_document, pretty_print=True)))
+ logger.debug("%s %s" % (line_header, ctx.method_request_string))
+ logger.debug(etree.tostring(ctx.in_document, pretty_print=True))
def create_in_document(self, ctx, charset=None):
"""Uses the iterable of string fragments in ``ctx.in_string`` to set
@@ -174,7 +173,7 @@ def create_out_string(self, ctx, charset=None):
"""Sets an iterable of string fragments to ctx.out_string"""
if charset is None:
- charset = 'utf8'
+ charset = 'UTF-8'
ctx.out_string = [etree.tostring(ctx.out_document,
xml_declaration=self.xml_declaration, encoding=charset)]
21 src/rpclib/server/wsgi.py
View
@@ -24,6 +24,8 @@
import cgi
+from threading import Lock
+
from rpclib import TransportContext
from rpclib import MethodContext
@@ -66,14 +68,19 @@ def _wsgi_input_to_iterable(http_env):
yield data
+
def reconstruct_wsgi_request(http_env):
"""Reconstruct http payload using information in the http header."""
# fyi, here's what the parse_header function returns:
# >>> import cgi; cgi.parse_header("text/xml; charset=utf-8")
# ('text/xml', {'charset': 'utf-8'})
- content_type = cgi.parse_header(http_env.get("CONTENT_TYPE"))
- charset = content_type[1].get('charset', 'utf-8')
+ content_type = http_env.get("CONTENT_TYPE")
+ if content_type is None:
+ charset = 'utf-8'
+ else:
+ content_type = cgi.parse_header(content_type)
+ charset = content_type[1].get('charset', 'utf-8')
return _wsgi_input_to_iterable(http_env), charset
@@ -166,6 +173,7 @@ def __init__(self, app):
"GET": self.handle_rpc,
"POST": self.handle_rpc,
}
+ self._mtx_build_interface_document = Lock()
def __call__(self, req_env, start_response, wsgi_url=None):
'''This method conforms to the WSGI spec for callable wsgi applications
@@ -210,8 +218,13 @@ def __handle_wsdl_request(self, req_env, start_response, url):
try:
ctx.transport.wsdl = self.app.interface.get_interface_document()
if ctx.transport.wsdl is None:
- self.app.interface.build_interface_document(url)
- ctx.transport.wsdl = self.app.interface.get_interface_document()
+ self._mtx_build_interface_document.acquire()
+
+ if ctx.transport.wsdl is None:
+ self.app.interface.build_interface_document(url)
+ ctx.transport.wsdl = self.app.interface.get_interface_document()
+
+ self._mtx_build_interface_document.release()
assert ctx.transport.wsdl != None
192 src/rpclib/test/interop/wsi-report-rpclib.xml
View
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="wsi-test-tools/common/xsl/report.xsl" type="text/xsl" ?>
-<report name="WS-I Basic Profile Conformance Report." timestamp="2011-12-10T14:06:06.639"
+<report name="WS-I Basic Profile Conformance Report." timestamp="2012-01-16T00:24:35.343"
xmlns="http://www.ws-i.org/testing/2004/07/report/"
xmlns:wsi-report="http://www.ws-i.org/testing/2004/07/report/"
xmlns:wsi-log="http://www.ws-i.org/testing/2003/03/log/"
@@ -141,37 +141,37 @@
<assertionResult id="SSBP2403" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerInHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerOutHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}OutHeader">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerInHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerOutHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}OutHeader">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerInHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}InHeader">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerOutHeaderMsg">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerOutHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}InHeader">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerInHeaderMsg">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
@@ -445,535 +445,535 @@
<assertionResult id="BP2014" result="notApplicable">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_enum">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_durationResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_doubleResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}documented_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}non_nillable">
+ <entry type="message" referenceID="{rpclib.test.interop.server}python_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}huge_numberResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string">
+ <entry type="message" referenceID="{rpclib.test.interop.server}python_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}huge_number">
+ <entry type="message" referenceID="{rpclib.test.interop.server}do_something_elseResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_anyResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_data">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}test_emptyResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}test_empty">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachmentResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_dataResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}long_string">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetimeResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}multi_param">
+ <entry type="message" referenceID="{rpclib.test.interop.server}non_nillableResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_data">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}python_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}long_stringResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_referenceResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_enum">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_duration">
+ <entry type="message" referenceID="{rpclib.test.interop.server}non_nillable">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}documented_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_enumResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_doubleResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}multi_paramResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}test_emptyResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_enumResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_dataResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}documented_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}custom_messages">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_anyResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}getCustomMessagesMsgOut">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dict">
+ <entry type="message" referenceID="{rpclib.test.interop.server}huge_numberResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}multi_paramResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_stringResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachmentResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_class">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_floatResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}long_stringResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}getCustomMessagesMsgOut">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetime">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}custom_messages">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dictResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}soap_exception">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_durationResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_complex_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}documented_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}python_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}Fault">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}soap_exceptionResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_double">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_reference">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dict">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}complex_returnResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_reference">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_classResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_class_with_self_referenceResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetime">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}do_something_elseResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}huge_number">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_stringResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}do_something_else">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_dataResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}complex_return">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_in_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}complex_return">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_booleanResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_classResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_nested_class_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}send_out_header">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}long_string">
+ <entry type="message" referenceID="{rpclib.test.interop.server}test_empty">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}non_nillableResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_other_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_booleanResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}Fault">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integer_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_double">
+ <entry type="message" referenceID="{rpclib.test.interop.server}multi_param">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_arrayResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_integerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}soap_exceptionResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_string_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_data">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_date_time_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_any_as_dictResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}do_something_else">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_datetimeResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_class_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_integerResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_array_in_array">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_floatResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_extension_class">
+ <entry type="message" referenceID="{rpclib.test.interop.server}return_binary_dataResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_complex_headerResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_attachment">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}return_invalid_data">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_float_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}echo_boolean_arrayResponse">
+ <entry type="message" referenceID="{rpclib.test.interop.server}complex_returnResponse">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}soap_exception">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_simple_boolean_array">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
</assertionResult>
</entry>
- <entry type="message" referenceID="{rpclib.test.interop.server}send_out_header">
+ <entry type="message" referenceID="{rpclib.test.interop.server}echo_duration">
<assertionResult id="BP2115" result="passed">
</assertionResult>
<assertionResult id="BP2116" result="passed">
6 src/rpclib/util/wsgi_wrapper.py
View
@@ -30,15 +30,15 @@
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
-def run_twisted(apps, port, with_static_file_server=True):
+def run_twisted(apps, port, static_dir='.'):
"""Twisted wrapper for the rpclib.server.wsgi.Application
Takes a list of tuples containing application, url pairs, and a port to
to listen to.
"""
- static_dir = os.path.abspath(".")
- if with_static_file_server:
+ if static_dir != None:
+ static_dir = os.path.abspath(static_dir)
logging.info("registering static folder %r on /" % static_dir)
root = twisted.web.static.File(static_dir)
else:
Something went wrong with that request. Please try again.