QPID-5830: [Python client] Unable to create bindings on already existing broker objects using addressing
diff --git a/qpid/messaging/driver.py b/qpid/messaging/driver.py
index aaff7fd..2e27fdb 100644
--- a/qpid/messaging/driver.py
+++ b/qpid/messaging/driver.py
@@ -959,7 +959,7 @@
       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 @@
           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 @@
     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 @@
     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)