summaryrefslogtreecommitdiff
path: root/python/qpid/message.py
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-03-16 20:26:11 +0000
committerAlan Conway <aconway@apache.org>2007-03-16 20:26:11 +0000
commit55a530448b4107edcb3bb8543b562c7208080995 (patch)
tree23be2798e546f641ff4652f7255c090a39cd3010 /python/qpid/message.py
parentf3cb9466b4b969747f97ab6716964179db96f124 (diff)
downloadqpid-python-55a530448b4107edcb3bb8543b562c7208080995.tar.gz
Merged revisions 496593 via svnmerge from
https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9 ........ r496593 | rhs | 2007-01-16 00:28:25 -0500 (Tue, 16 Jan 2007) | 1 line 0-9 request/response framing for python ........ git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@519129 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid/message.py')
-rw-r--r--python/qpid/message.py63
1 files changed, 22 insertions, 41 deletions
diff --git a/python/qpid/message.py b/python/qpid/message.py
index 914b878147..29c8654937 100644
--- a/python/qpid/message.py
+++ b/python/qpid/message.py
@@ -16,22 +16,19 @@
# specific language governing permissions and limitations
# under the License.
#
+from connection import Method, Request
from sets import Set
class Message:
- COMMON_FIELDS = Set(("content", "method", "fields"))
-
- def __init__(self, method, fields, content = None):
- self.method = method
- self.fields = fields
+ def __init__(self, channel, frame, content = None):
+ self.channel = channel
+ self.frame = frame
+ self.method = frame.method_type
self.content = content
def __len__(self):
- l = len(self.fields)
- if self.method.content:
- l += 1
- return len(self.fields)
+ return len(self.frame.args)
def _idx(self, idx):
if idx < 0: idx += len(self)
@@ -40,45 +37,29 @@ class Message:
return idx
def __getitem__(self, idx):
- idx = self._idx(idx)
- if idx == len(self.fields):
- return self.content
- else:
- return self.fields[idx]
-
- def __setitem__(self, idx, value):
- idx = self._idx(idx)
- if idx == len(self.fields):
- self.content = value
- else:
- self.fields[idx] = value
+ return self.frame.args[idx]
- def _slot(self, attr):
- if attr in Message.COMMON_FIELDS:
- env = self.__dict__
- key = attr
+ def __getattr__(self, attr):
+ fields = self.method.fields.byname
+ if fields.has_key(attr):
+ f = fields[attr]
+ result = self[self.method.fields.index(f)]
else:
- env = self.fields
- try:
- field = self.method.fields.bypyname[attr]
- key = self.method.fields.index(field)
- except KeyError:
+ for r in self.method.responses:
+ if attr == r.name:
+ result = lambda *args, **kwargs: \
+ self.channel.respond(Method(r, r.arguments(*args, **kwargs)),
+ self.frame)
+ break
+ else:
raise AttributeError(attr)
- return env, key
-
- def __getattr__(self, attr):
- env, key = self._slot(attr)
- return env[key]
-
- def __setattr__(self, attr, value):
- env, key = self._slot(attr)
- env[attr] = value
+ return result
STR = "%s %s content = %s"
REPR = STR.replace("%s", "%r")
def __str__(self):
- return Message.STR % (self.method, self.fields, self.content)
+ return Message.STR % (self.method, self.frame.args, self.content)
def __repr__(self):
- return Message.REPR % (self.method, self.fields, self.content)
+ return Message.REPR % (self.method, self.frame.args, self.content)