diff options
author | Pavel Moravec <pmoravec@apache.org> | 2014-06-18 13:20:44 +0000 |
---|---|---|
committer | Pavel Moravec <pmoravec@apache.org> | 2014-06-18 13:20:44 +0000 |
commit | fcb7dd8e03a32474acf4e59e90b5de35cd21178b (patch) | |
tree | 9a91543062785533650edc26612a91609366962f /python | |
parent | 192742ada1386af87047662cb4a7f3d414984738 (diff) | |
download | qpid-python-fcb7dd8e03a32474acf4e59e90b5de35cd21178b.tar.gz |
QPID-5830: [Python client] Unable to create bindings on already existing broker objects using addressing
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1603448 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python')
-rw-r--r-- | python/qpid/messaging/driver.py | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/python/qpid/messaging/driver.py b/python/qpid/messaging/driver.py index aaff7fd2cb..2e27fdb421 100644 --- a/python/qpid/messaging/driver.py +++ b/python/qpid/messaging/driver.py @@ -959,7 +959,7 @@ class Engine: err = None if type is None: if declare: - err = self.declare(sst, lnk, action) + err = self.declare(sst, lnk, action, True) else: err = NotFound(text="no such %s: %s" % (requested_type or "queue", lnk.name)) else: @@ -967,9 +967,11 @@ class Engine: expected = lnk.options.get("node", {}).get("type") if expected and type != expected: if declare: - err = self.declare(sst, lnk, action) + err = self.declare(sst, lnk, action, True) else: err = AssertionFailed(text="expected %s, got %s" % (expected, type)) + if "node" in lnk.options and "x-bindings" in lnk.options["node"]: + err = self.declare(sst, lnk, action, False) if err is None: action(type, subtype) @@ -1015,7 +1017,7 @@ class Engine: sst.write_query(ExchangeQuery(name), do_result) sst.write_query(QueueQuery(name), do_action) - def declare(self, sst, lnk, action): + def declare(self, sst, lnk, action, create_node): name = lnk.name props = lnk.options.get("node", {}) durable = props.get("durable", DURABLE_DEFAULT) @@ -1023,29 +1025,32 @@ class Engine: declare = props.get("x-declare", {}) if type == "topic": - cmd = ExchangeDeclare(exchange=name, durable=durable) + cmd = ExchangeDeclare(exchange=name, durable=durable) if create_node else None bindings = get_bindings(props, exchange=name) elif type == "queue": - cmd = QueueDeclare(queue=name, durable=durable) + cmd = QueueDeclare(queue=name, durable=durable) if create_node else None bindings = get_bindings(props, queue=name) else: raise ValueError(type) - sst.apply_overrides(cmd, declare) - - if type == "topic": - if cmd.type is None: - cmd.type = "topic" - subtype = cmd.type + if cmd is not None: + sst.apply_overrides(cmd, declare) + if type == "topic": + if cmd.type is None: + cmd.type = "topic" + subtype = cmd.type + else: + subtype = None + cmds = [cmd] else: - subtype = None + cmds = [] - cmds = [cmd] cmds.extend(bindings) def declared(): - self.address_cache[name] = (type, subtype) - action(type, subtype) + if create_node: + self.address_cache[name] = (type, subtype) + action(type, subtype) sst.write_cmds(cmds, declared) |