summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-03-06 13:00:58 +0000
committerRafael H. Schloming <rhs@apache.org>2008-03-06 13:00:58 +0000
commite9e915775bdb77b6483c48f111be3299b94f592b (patch)
treef0a4e10d87e810982223985ed26d2024bbe6509f /python
parentb7c474ea80fce5d53236aeea9f74c9107da0152d (diff)
downloadqpid-python-e9e915775bdb77b6483c48f111be3299b94f592b.tar.gz
added codec for sequence_set; added id to Message; RangeSet -> RangedSet; added RangedSet.add(lower, upper)
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@634255 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rwxr-xr-xpython/hello-010-world16
-rw-r--r--python/qpid/codec010.py18
-rw-r--r--python/qpid/datatypes.py36
-rw-r--r--python/qpid/session.py7
-rwxr-xr-xpython/server0103
-rw-r--r--python/tests/datatypes.py6
6 files changed, 57 insertions, 29 deletions
diff --git a/python/hello-010-world b/python/hello-010-world
index 2b762b1296..5ae42c2ac1 100755
--- a/python/hello-010-world
+++ b/python/hello-010-world
@@ -4,7 +4,7 @@ import sys, logging
from qpid.connection010 import Connection
from qpid.spec010 import load
from qpid.util import connect
-from qpid.datatypes import Message
+from qpid.datatypes import Message, RangedSet
if "-v" in sys.argv:
level = logging.DEBUG
@@ -27,10 +27,16 @@ ssn.message_transfer("is", None, None, Message("more testing..."))
ssn.message_transfer("a")
ssn.message_transfer("test")
-print ssn.incoming("this").get()
-print ssn.incoming("is").get()
-print ssn.incoming("a").get()
-print ssn.incoming("test").get()
+m1 = ssn.incoming("this").get()
+print m1
+m2 = ssn.incoming("is").get()
+print m2
+m3 = ssn.incoming("a").get()
+print m3
+m4 = ssn.incoming("test").get()
+print m4
+
+ssn.message_accept(RangedSet(m1.id, m2.id, m3.id, m4.id))
print ssn.queue_query("testing")
diff --git a/python/qpid/codec010.py b/python/qpid/codec010.py
index 2dcba4e917..f6539ffcee 100644
--- a/python/qpid/codec010.py
+++ b/python/qpid/codec010.py
@@ -18,6 +18,7 @@
#
from packer import Packer
+from datatypes import RangedSet
class Codec(Packer):
@@ -123,6 +124,23 @@ class Codec(Packer):
self.write_uint16(len(b))
self.write(b)
+ def read_sequence_set(self):
+ result = RangedSet()
+ size = self.read_uint16()
+ nranges = size/8
+ while nranges > 0:
+ lower = self.read_sequence_no()
+ upper = self.read_sequence_no()
+ result.add(lower, upper)
+ nranges -= 1
+ return result
+ def write_sequence_set(self, ss):
+ size = 8*len(ss.ranges)
+ self.write_uint16(size)
+ for range in ss.ranges:
+ self.write_sequence_no(range.lower)
+ self.write_sequence_no(range.upper)
+
def read_vbin32(self):
return self.read(self.read_uint32())
def write_vbin32(self, b):
diff --git a/python/qpid/datatypes.py b/python/qpid/datatypes.py
index efd1fdd4ff..7158e0d75e 100644
--- a/python/qpid/datatypes.py
+++ b/python/qpid/datatypes.py
@@ -42,20 +42,26 @@ class Message:
self.headers = args[:-1]
else:
self.headers = None
+ self.id = None
def __repr__(self):
args = []
if self.headers:
- args.extend(self.headers)
+ args.extend(map(repr, self.headers))
if self.body:
- args.append(self.body)
- return "Message(%s)" % ", ".join(map(repr, args))
+ args.append(repr(self.body))
+ if self.id is not None:
+ args.append("id=%s" % self.id)
+ return "Message(%s)" % ", ".join(args)
class Range:
- def __init__(self, lower, upper):
+ def __init__(self, lower, upper = None):
self.lower = lower
- self.upper = upper
+ if upper is None:
+ self.upper = lower
+ else:
+ self.upper = upper
def __contains__(self, n):
return self.lower <= n and n <= self.upper
@@ -69,16 +75,15 @@ class Range:
def span(self, r):
return Range(min(self.lower, r.lower), max(self.upper, r.upper))
- def __str__(self):
- return "Range(%s, %s)" % (self.lower, self.upper)
-
def __repr__(self):
- return str(self)
+ return "Range(%s, %s)" % (self.lower, self.upper)
-class RangeSet:
+class RangedSet:
- def __init__(self):
+ def __init__(self, *args):
self.ranges = []
+ for n in args:
+ self.add(n)
def __contains__(self, n):
for r in self.ranges:
@@ -100,14 +105,11 @@ class RangeSet:
idx += 1
self.ranges.append(range)
- def add(self, n):
- self.add_range(Range(n, n))
-
- def __str__(self):
- return "RangeSet(%s)" % str(self.ranges)
+ def add(self, lower, upper = None):
+ self.add_range(Range(lower, upper))
def __repr__(self):
- return str(self)
+ return "RangedSet(%s)" % str(self.ranges)
class Future:
def __init__(self, initial=None):
diff --git a/python/qpid/session.py b/python/qpid/session.py
index 334902bbf3..7702a19251 100644
--- a/python/qpid/session.py
+++ b/python/qpid/session.py
@@ -19,7 +19,7 @@
from threading import Event, RLock
from invoker import Invoker
-from datatypes import RangeSet, Struct, Future
+from datatypes import RangedSet, Struct, Future
from codec010 import StringCodec
from assembler import Segment
from queue import Queue
@@ -170,7 +170,7 @@ class Receiver:
self.session = session
self.next_id = None
self.next_offset = None
- self._completed = RangeSet()
+ self._completed = RangedSet()
def received(self, seg):
if self.next_id == None or self.next_offset == None:
@@ -220,8 +220,6 @@ class Sender:
else:
idx += 1
-from queue import Queue, Closed, Empty
-
class Delegate:
def __init__(self, session):
@@ -238,6 +236,7 @@ class Client(Delegate):
def message_transfer(self, cmd, headers, body):
m = Message(body)
m.headers = headers
+ m.id = cmd.id
messages = self.session.incoming(cmd.destination)
messages.put(m)
msg.debug("RECV: %s", m)
diff --git a/python/server010 b/python/server010
index 6d89ee5ea0..ee47731a60 100755
--- a/python/server010
+++ b/python/server010
@@ -33,6 +33,9 @@ class SessionDelegate(Client):
m.header = header
self.session.message_transfer(cmd.destination, cmd.accept_mode, cmd.acquire_mode, m)
+ def message_accept(self, messages):
+ print "ACCEPT %s" % messages
+
server = Server()
for s in listen("0.0.0.0", spec.port):
diff --git a/python/tests/datatypes.py b/python/tests/datatypes.py
index cafd53c89f..e22e250f61 100644
--- a/python/tests/datatypes.py
+++ b/python/tests/datatypes.py
@@ -20,7 +20,7 @@
from unittest import TestCase
from qpid.datatypes import *
-class RangeSetTest(TestCase):
+class RangedSetTest(TestCase):
def check(self, ranges):
posts = []
@@ -39,7 +39,7 @@ class RangeSetTest(TestCase):
idx += 2
def test(self):
- rs = RangeSet()
+ rs = RangedSet()
self.check(rs.ranges)
@@ -85,7 +85,7 @@ class RangeSetTest(TestCase):
rs.add(-3)
self.check(rs.ranges)
- rs.add_range(Range(1, 20))
+ rs.add(1, 20)
assert 21 not in rs
assert 20 in rs
self.check(rs.ranges)