diff --git a/wsme/protocols/restxml.py b/wsme/protocols/restxml.py
index 29bdb81..88b0b6a 100644
--- a/wsme/protocols/restxml.py
+++ b/wsme/protocols/restxml.py
@@ -3,10 +3,7 @@ import datetime
from six import u
import six
-try:
- import xml.etree.ElementTree as et
-except ImportError:
- import cElementTree as et
+import xml.etree.ElementTree as et
from simplegeneric import generic
diff --git a/wsme/root.py b/wsme/root.py
index 4b98d98..100b7ba 100644
--- a/wsme/root.py
+++ b/wsme/root.py
@@ -28,6 +28,23 @@ html_body = u("""
""")
+def default_prepare_response_body(request, results):
+ r = None
+ sep = None
+ for value in results:
+ if sep is None:
+ if isinstance(value, six.text_type):
+ sep = u('\n')
+ r = u('')
+ else:
+ sep = b('\n')
+ r = b('')
+ else:
+ r += sep
+ r += value
+ return r
+
+
class DummyTransaction:
def commit(self):
pass
@@ -166,22 +183,6 @@ class WSRoot(object):
return protocol.encode_error(context, infos)
def _handle_request(self, request):
- def default_prepare_response_body(request, results):
- r = None
- sep = None
- for value in results:
- if sep is None:
- if isinstance(value, six.text_type):
- sep = u('\n')
- r = u('')
- else:
- sep = b('\n')
- r = b('')
- else:
- r += sep
- r += value
- return r
-
res = webob.Response()
res_content_type = None
diff --git a/wsme/tests/test_restxml.py b/wsme/tests/test_restxml.py
index 4b3a976..b30f2bd 100644
--- a/wsme/tests/test_restxml.py
+++ b/wsme/tests/test_restxml.py
@@ -149,6 +149,17 @@ class TestRestXML(wsme.tests.protocol.ProtocolTestCase):
test
""")
+ def test_encode_sample_params(self):
+ lang, content = self.root.protocols[0].encode_sample_params(
+ [('a', int, 2)], True)
+ assert lang == 'xml', lang
+ assert content == b('\n 2\n'), content
+
+ def test_encode_sample_result(self):
+ lang, content = self.root.protocols[0].encode_sample_result(int, 2, True)
+ assert lang == 'xml', lang
+ assert content == b('2'), content
+
def test_nil_fromxml(self):
for dt in (
str, [int], {int: str}, bool,
@@ -158,6 +169,7 @@ class TestRestXML(wsme.tests.protocol.ProtocolTestCase):
def test_nil_toxml(self):
for dt in (
+ wsme.types.bytes,
[int], {int: str}, bool,
datetime.date, datetime.time, datetime.datetime):
x = et.tostring(toxml(dt, 'value', None))
diff --git a/wsme/tests/test_root.py b/wsme/tests/test_root.py
index 9c3e8b4..da53780 100644
--- a/wsme/tests/test_root.py
+++ b/wsme/tests/test_root.py
@@ -3,6 +3,9 @@
import unittest
from wsme import WSRoot
+from wsme.root import default_prepare_response_body
+
+from six import b, u
class TestRoot(unittest.TestCase):
@@ -13,3 +16,26 @@ class TestRoot(unittest.TestCase):
txn = root.begin()
txn.abort()
+
+ def test_default_prepare_response_body(self):
+ default_prepare_response_body(None, [b('a')]) == b('a')
+ default_prepare_response_body(None, [b('a'), b('b')]) == b('a\nb')
+ default_prepare_response_body(None, [u('a')]) == u('a')
+ default_prepare_response_body(None, [u('a'), u('b')]) == u('a\nb')
+
+ def test_protocol_selection_error(self):
+ import wsme.protocols
+
+ class P(wsme.protocols.Protocol):
+ def accept(self, r):
+ raise Exception('test')
+
+ root = WSRoot()
+ root.addprotocol(P())
+
+ from webob import Request
+ req = Request.blank('/test?check=a&check=b&name=Bob')
+ res = root._handle_request(req)
+ assert res.status_int == 500
+ assert res.content_type == 'text/plain'
+ assert res.text == u('Error while selecting protocol: test'), req.text