summaryrefslogtreecommitdiff
path: root/python/qpid
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-07-24 14:08:32 +0000
committerGordon Sim <gsim@apache.org>2007-07-24 14:08:32 +0000
commit9f120205e0d7a0b2666b9fd21a5296db07e32fd8 (patch)
treeb263ca1fa1863eca341d370dc5dd29ef97bc91bd /python/qpid
parent6aa2316d7712a709e9782919afd2a14cfaafc7a9 (diff)
downloadqpid-python-9f120205e0d7a0b2666b9fd21a5296db07e32fd8.tar.gz
Some initial 0-10 support including placeholders for new domains, use of execution layer for synchronising methods with no explicit responses and a new set of tests (mainly just copies of the 0-9 ones, but these will be altered as 0-10 support progresses).
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559055 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid')
-rw-r--r--python/qpid/codec.py30
-rw-r--r--python/qpid/peer.py13
-rw-r--r--python/qpid/spec.py10
-rw-r--r--python/qpid/testlib.py6
4 files changed, 46 insertions, 13 deletions
diff --git a/python/qpid/codec.py b/python/qpid/codec.py
index b615a0f6ed..02b924b6b8 100644
--- a/python/qpid/codec.py
+++ b/python/qpid/codec.py
@@ -258,17 +258,9 @@ class Codec:
codec = Codec(enc)
if tbl:
for key, value in tbl.items():
- # Field names MUST start with a letter, '$' or '#' and may
- # continue with letters, '$' or '#', digits, or underlines, to
- # a maximum length of 128 characters.
-
if len(key) > 128:
raise ValueError("field table key too long: '%s'" % key)
- m = Codec.KEY_CHECK.match(key)
- if m == None or m.end() != len(key):
- raise ValueError("invalid field table key: '%s'" % key)
-
codec.encode_shortstr(key)
if isinstance(value, basestring):
codec.write("S")
@@ -338,3 +330,25 @@ class Codec:
return self.decode_longstr()
else:
return ReferenceId(self.decode_longstr())
+
+ # new domains for 0-10:
+
+ def encode_uuid(self, s):
+ self.encode_longstr(s)
+
+ def decode_uuid(self):
+ return self.decode_longstr()
+
+ def encode_rfc1982_long(self, s):
+ self.encode_long(s)
+
+ def decode_rfc1982_long(self):
+ return self.decode_long()
+
+ #Not done yet
+ def encode_rfc1982_long_set(self, s):
+ self.encode_short(0)
+
+ def decode_rfc1982_long_set(self):
+ self.decode_short()
+ return 0;
diff --git a/python/qpid/peer.py b/python/qpid/peer.py
index 9880eea19b..d7ae85e345 100644
--- a/python/qpid/peer.py
+++ b/python/qpid/peer.py
@@ -189,7 +189,9 @@ class Channel:
self.completion = ExecutionCompletion()
# Use reliable framing if version == 0-9.
- self.reliable = (spec.major == 0 and spec.minor == 9)
+ # (also for 0-10 while transitioning...)
+ self.reliable = (spec.major == 0 and (spec.minor == 9 or spec.minor == 10))
+ self.use_execution_layer = (spec.major == 0 and spec.minor == 10)
self.synchronous = True
def close(self, reason):
@@ -199,6 +201,7 @@ class Channel:
self.reason = reason
self.incoming.close()
self.responses.close()
+ self.completion.close()
def write(self, frame, content = None):
if self.closed:
@@ -261,6 +264,11 @@ class Channel:
self.request(frame, self.queue_response, content)
if not frame.method.responses:
+ if self.use_execution_layer and type.klass.name != "execution":
+ self.execution_flush()
+ self.completion.wait()
+ if self.closed:
+ raise Closed(self.reason)
return None
try:
resp = self.responses.get()
@@ -353,6 +361,9 @@ class ExecutionCompletion:
if method.klass.name != "execution":
self.command_id = self.sequence.next()
+ def close(self):
+ self.completed.set()
+
def complete(self, mark):
self.mark = mark
self.completed.set()
diff --git a/python/qpid/spec.py b/python/qpid/spec.py
index 88faedd825..c537401164 100644
--- a/python/qpid/spec.py
+++ b/python/qpid/spec.py
@@ -237,7 +237,11 @@ class Method(Metadata):
"long": 0,
"longlong": 0,
"timestamp": 0,
- "content": None}
+ "content": None,
+ "uuid": "",
+ "rfc1982_long": 0,
+ "rfc1982_long_set": 0
+ }
def define_method(self, name):
g = {Method.METHOD: self}
@@ -306,7 +310,9 @@ def load(specfile, *errata):
for root in [spec_root] + map(lambda x: mllib.xml_parse(x)["amqp"], errata):
# constants
for nd in root.query["constant"]:
- const = Constant(spec, pythonize(nd["@name"]), int(nd["@value"]),
+ val = nd["@value"]
+ if val.startswith("0x"): continue
+ const = Constant(spec, pythonize(nd["@name"]), int(val),
nd["@class"], get_docs(nd))
try:
spec.constants.add(const)
diff --git a/python/qpid/testlib.py b/python/qpid/testlib.py
index 4467a1f4cd..2c22c04199 100644
--- a/python/qpid/testlib.py
+++ b/python/qpid/testlib.py
@@ -125,6 +125,8 @@ Options:
self.tests=findmodules("tests")
if self.use08spec():
self.tests+=findmodules("tests_0-8")
+ elif self.spec.major == 0 and self.spec.minor == 10:
+ self.tests+=findmodules("tests_0-10")
else:
self.tests+=findmodules("tests_0-9")
@@ -214,10 +216,10 @@ class TestBase(unittest.TestCase):
def exchange_declare(self, channel=None, ticket=0, exchange='',
type='', passive=False, durable=False,
- auto_delete=False, internal=False, nowait=False,
+ auto_delete=False,
arguments={}):
channel = channel or self.channel
- reply = channel.exchange_declare(ticket, exchange, type, passive, durable, auto_delete, internal, nowait, arguments)
+ reply = channel.exchange_declare(ticket=ticket, exchange=exchange, type=type, passive=passive,durable=durable, auto_delete=auto_delete, arguments=arguments)
self.exchanges.append((channel,exchange))
return reply