QPID-8631: fill-in the Python 2 types that are missing in Python 3
diff --git a/mllib/dom.py b/mllib/dom.py
index 49ba0d0..0012d66 100644
--- a/mllib/dom.py
+++ b/mllib/dom.py
@@ -26,6 +26,11 @@
 from __future__ import generators
 from __future__ import nested_scopes
 
+try:
+  basestring
+except NameError:
+  basestring = str
+
 import mllib.transforms
 
 try:
diff --git a/qpid/codec.py b/qpid/codec.py
index 4ee38ef..f302955 100644
--- a/qpid/codec.py
+++ b/qpid/codec.py
@@ -34,6 +34,21 @@
 from .reference import ReferenceId
 from logging import getLogger
 
+try:
+  basestring
+except:
+  basestring = bytes
+
+try:
+  unicode
+except NameError:
+  unicode = str
+
+try:
+  long
+except NameError:
+  long = int
+
 log = getLogger("qpid.codec")
 
 class EOF(Exception):
diff --git a/qpid/management.py b/qpid/management.py
index 1f11535..3cd9376 100644
--- a/qpid/management.py
+++ b/qpid/management.py
@@ -39,6 +39,10 @@
 from .codec010    import StringCodec as Codec
 from threading    import Lock, Condition
 
+try:
+  long
+except NameError:
+  long = int
 
 class SequenceManager:
   """ Manage sequence numbers for asynchronous method calls """
diff --git a/qpid/managementdata.py b/qpid/managementdata.py
index 514dd6f..4092b5d 100644
--- a/qpid/managementdata.py
+++ b/qpid/managementdata.py
@@ -41,6 +41,11 @@
 from qpid.connection import Connection
 from qpid.util       import connect
 
+try:
+  long
+except NameError:
+  long = int
+
 class Broker:
   def __init__ (self, text):
     rex = re.compile(r"""
diff --git a/qpid/messaging/driver.py b/qpid/messaging/driver.py
index ae2d4e6..223f001 100644
--- a/qpid/messaging/driver.py
+++ b/qpid/messaging/driver.py
@@ -37,6 +37,16 @@
 from qpid.validator import And, Context, List, Map, Types, Values
 from threading import Condition, Thread
 
+try:
+  basestring
+except NameError:
+  basestring = str
+
+try:
+  long
+except NameError:
+  long = int
+
 log = getLogger("qpid.messaging")
 rawlog = getLogger("qpid.messaging.io.raw")
 opslog = getLogger("qpid.messaging.io.ops")
diff --git a/qpid/messaging/endpoints.py b/qpid/messaging/endpoints.py
index 95db77e..1ab663f 100644
--- a/qpid/messaging/endpoints.py
+++ b/qpid/messaging/endpoints.py
@@ -41,6 +41,11 @@
 from qpid.util import default, URL
 from threading import Thread, RLock
 
+try:
+  basestring
+except NameError:
+  basestring = str
+
 log = getLogger("qpid.messaging")
 
 static = staticmethod
diff --git a/qpid/messaging/message.py b/qpid/messaging/message.py
index 3891665..e29fe04 100644
--- a/qpid/messaging/message.py
+++ b/qpid/messaging/message.py
@@ -21,6 +21,16 @@
 from qpid.codec010 import StringCodec
 from qpid.ops import PRIMITIVE
 
+try:
+  unicode
+except NameError:
+  unicode = str
+
+try:
+  buffer
+except NameError:
+  buffer = memoryview
+
 def codec(name):
   type = PRIMITIVE[name]
 
@@ -44,7 +54,7 @@
   unicode: "text/plain; charset=utf8",
   unicode: "text/plain",
   buffer: None,
-  str: None,
+  bytes: None,
   None.__class__: None
   }
 
diff --git a/qpid/peer.py b/qpid/peer.py
index 290ff3f..82dcac4 100644
--- a/qpid/peer.py
+++ b/qpid/peer.py
@@ -38,6 +38,16 @@
 from .exceptions import Closed, Timeout, ContentError
 from logging import getLogger
 
+try:
+  basestring
+except NameError:
+  basestring = str
+
+try:
+  buffer
+except NameError:
+  buffer = memoryview
+
 log = getLogger("qpid.peer")
 
 class Sequence:
@@ -273,7 +283,7 @@
       if not isinstance(content.body, (basestring, buffer)):
         # The 0-8..0-91 client does not support the messages bodies apart from string/buffer - fail early
         # if other type
-        raise ContentError("Content body must be string or buffer, not a %s" % type(content.body))
+        raise ContentError("Content body must be bytes or buffer, not a %s" % type(content.body))
       frame_max = self.client.tune_params['frame_max'] - self.client.conn.AMQP_HEADER_SIZE
       for chunk in (content.body[i:i + frame_max] for i in range(0, len(content.body), frame_max)):
         self.write(Body(chunk))
diff --git a/qpid/tests/codec010.py b/qpid/tests/codec010.py
index 7f22b89..80d7137 100644
--- a/qpid/tests/codec010.py
+++ b/qpid/tests/codec010.py
@@ -25,6 +25,16 @@
 from qpid.datatypes import timestamp, uuid4
 from qpid.ops import PRIMITIVE
 
+try:
+  long
+except NameError:
+  long = int
+
+try:
+  buffer
+except NameError:
+  buffer = memoryview
+
 class CodecTest(TestCase):
 
   def check(self, type, value, compare=True):
diff --git a/qpid/tests/messaging/address.py b/qpid/tests/messaging/address.py
index c1860ab..2730e55 100644
--- a/qpid/tests/messaging/address.py
+++ b/qpid/tests/messaging/address.py
@@ -26,6 +26,11 @@
 from qpid.harness import Skipped
 from qpid.tests.parser import ParserBase
 
+try:
+  basestring
+except NameError:
+  basestring = str
+
 def indent(st):
   return "  " + st.replace("\n", "\n  ")