diff options
| author | Gordon Sim <gsim@apache.org> | 2007-07-24 14:08:32 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2007-07-24 14:08:32 +0000 |
| commit | 9f120205e0d7a0b2666b9fd21a5296db07e32fd8 (patch) | |
| tree | b263ca1fa1863eca341d370dc5dd29ef97bc91bd /python/qpid | |
| parent | 6aa2316d7712a709e9782919afd2a14cfaafc7a9 (diff) | |
| download | qpid-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.py | 30 | ||||
| -rw-r--r-- | python/qpid/peer.py | 13 | ||||
| -rw-r--r-- | python/qpid/spec.py | 10 | ||||
| -rw-r--r-- | python/qpid/testlib.py | 6 |
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 |
