From 8021505b531ba4c022ab89f8a2bd59bf8af3c1fc Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Tue, 16 Jan 2007 05:28:25 +0000 Subject: 0-9 request/response framing for python git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@496593 13f79535-47bb-0310-9956-ffa450edef68 --- python/qpid/message.py | 63 ++++++++++++++++++-------------------------------- 1 file changed, 22 insertions(+), 41 deletions(-) (limited to 'python/qpid/message.py') 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) -- cgit v1.2.1