|  | @@ -844,10 +844,12 @@ if not hasattr(_OrderedDict, 'move_to_end'):
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  else:  # pragma: no cover
 |  |  else:  # pragma: no cover
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    class OrderedDict(object):  # noqa
 |  | 
 | 
											
												
													
														|  | 
 |  | +    class OrderedDict(_OrderedDict):  # noqa
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          def _LRUkey(self):
 |  |          def _LRUkey(self):
 | 
											
												
													
														|  | -            return self._OrderedDict__root.next.key
 |  | 
 | 
											
												
													
														|  | 
 |  | +            # return value of od.keys does not support __next__,
 | 
											
												
													
														|  | 
 |  | +            # but this version will also not create a copy of the list.
 | 
											
												
													
														|  | 
 |  | +            return next(iter(self.keys()))
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  class Evictable(object):
 |  |  class Evictable(object):
 | 
											
										
											
												
													
														|  | @@ -873,6 +875,7 @@ class Evictable(object):
 | 
											
												
													
														|  |              raise IndexError()
 |  |              raise IndexError()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +@python_2_unicode_compatible
 | 
											
												
													
														|  |  class Messagebuffer(Evictable):
 |  |  class Messagebuffer(Evictable):
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      Empty = Empty
 |  |      Empty = Empty
 | 
											
										
											
												
													
														|  | @@ -934,20 +937,23 @@ class Messagebuffer(Evictable):
 | 
											
												
													
														|  |  Sequence.register(Messagebuffer)
 |  |  Sequence.register(Messagebuffer)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +@python_2_unicode_compatible
 | 
											
												
													
														|  |  class BufferMapping(OrderedDict, Evictable):
 |  |  class BufferMapping(OrderedDict, Evictable):
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      Buffer = Messagebuffer
 |  |      Buffer = Messagebuffer
 | 
											
												
													
														|  |      Empty = Empty
 |  |      Empty = Empty
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      maxsize = None
 |  |      maxsize = None
 | 
											
												
													
														|  | 
 |  | +    total = 0
 | 
											
												
													
														|  | 
 |  | +    bufmaxsize = None
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def __init__(self, maxsize, iterable=None, bufmaxsize=1000):
 |  |      def __init__(self, maxsize, iterable=None, bufmaxsize=1000):
 | 
											
												
													
														|  | 
 |  | +        super(BufferMapping, self).__init__()
 | 
											
												
													
														|  |          self.maxsize = maxsize
 |  |          self.maxsize = maxsize
 | 
											
												
													
														|  |          self.bufmaxsize = 1000
 |  |          self.bufmaxsize = 1000
 | 
											
												
													
														|  | -        super(BufferMapping, self).__init__()
 |  | 
 | 
											
												
													
														|  |          if iterable:
 |  |          if iterable:
 | 
											
												
													
														|  |              self.update(iterable)
 |  |              self.update(iterable)
 | 
											
												
													
														|  | -        self.total = sum(len(buf) for buf in values(self))
 |  | 
 | 
											
												
													
														|  | 
 |  | +        self.total = sum(len(buf) for buf in items(self))
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def pop(self, key, *default):
 |  |      def pop(self, key, *default):
 | 
											
												
													
														|  |          item, throw = None, False
 |  |          item, throw = None, False
 |