diff options
| author | Alan Conway <aconway@apache.org> | 2007-03-16 20:26:11 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2007-03-16 20:26:11 +0000 |
| commit | 55a530448b4107edcb3bb8543b562c7208080995 (patch) | |
| tree | 23be2798e546f641ff4652f7255c090a39cd3010 /python/qpid/message.py | |
| parent | f3cb9466b4b969747f97ab6716964179db96f124 (diff) | |
| download | qpid-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.py | 63 |
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) |
