diff options
| author | Gordon Sim <gsim@apache.org> | 2014-02-24 21:46:52 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-02-24 21:46:52 +0000 |
| commit | b5b8bb224d62fe8cdf529e8cc1f3819e8e571962 (patch) | |
| tree | ccfa2b1eba94970995bb469fce262f8e5b89201c /qpid/python | |
| parent | 195d3d12d5fd998cc3cbd8780055e58b55bf5a42 (diff) | |
| download | qpid-python-b5b8bb224d62fe8cdf529e8cc1f3819e8e571962.tar.gz | |
QPID-5557: allow disambiguation of node type
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1571459 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/python')
| -rw-r--r-- | qpid/python/qpid/messaging/driver.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/qpid/python/qpid/messaging/driver.py b/qpid/python/qpid/messaging/driver.py index 43c42273ea..aaff7fd2cb 100644 --- a/qpid/python/qpid/messaging/driver.py +++ b/qpid/python/qpid/messaging/driver.py @@ -954,18 +954,22 @@ class Engine: def resolve_declare(self, sst, lnk, dir, action): declare = lnk.options.get("create") in ("always", dir) assrt = lnk.options.get("assert") in ("always", dir) + requested_type = lnk.options.get("node", {}).get("type") def do_resolved(type, subtype): err = None if type is None: if declare: err = self.declare(sst, lnk, action) else: - err = NotFound(text="no such queue: %s" % lnk.name) + err = NotFound(text="no such %s: %s" % (requested_type or "queue", lnk.name)) else: if assrt: expected = lnk.options.get("node", {}).get("type") if expected and type != expected: - err = AssertionFailed(text="expected %s, got %s" % (expected, type)) + if declare: + err = self.declare(sst, lnk, action) + else: + err = AssertionFailed(text="expected %s, got %s" % (expected, type)) if err is None: action(type, subtype) @@ -975,10 +979,10 @@ class Engine: del self._attachments[tgt] tgt.closed = True return - self.resolve(sst, lnk.name, do_resolved, force=declare) + self.resolve(sst, lnk.name, do_resolved, node_type=requested_type, force=declare) - def resolve(self, sst, name, action, force=False): - if not force: + def resolve(self, sst, name, action, force=False, node_type=None): + if not force and not node_type: try: type, subtype = self.address_cache[name] action(type, subtype) @@ -992,10 +996,17 @@ class Engine: def do_action(r): do_result(r) er, qr = args - if er.not_found and not qr.queue: + if node_type == "topic" and not er.not_found: + type, subtype = "topic", er.type + elif node_type == "queue" and qr.queue: + type, subtype = "queue", None + elif er.not_found and not qr.queue: type, subtype = None, None elif qr.queue: - type, subtype = "queue", None + if node_type == "topic" and force: + type, subtype = None, None + else: + type, subtype = "queue", None else: type, subtype = "topic", er.type if type is not None: |
