From f10bacfa166714b564cd205fe78c2c425469a872 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 7 May 2019 19:44:20 -0700 Subject: [PATCH] node renaming --- nodepupper/daemon.py | 22 +++++++++++++++------- nodepupper/nodeops.py | 10 ++++++++++ templates/node_edit.html | 3 ++- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/nodepupper/daemon.py b/nodepupper/daemon.py index 86e8fd5..1d2feca 100644 --- a/nodepupper/daemon.py +++ b/nodepupper/daemon.py @@ -89,18 +89,26 @@ class AppWeb(object): return ret @cherrypy.expose - def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None): - if op in ("Edit", "Create") and body and fqdn: + def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None, name=None): + if op in ("Edit", "Create") and body and name: with self.nodes.db.transaction() as c: - obj = c.root.nodes[fqdn] if fqdn in c.root.nodes else NObject(fqdn, body) + if name and fqdn: # existing node + obj = c.root.nodes[fqdn] + if name != fqdn: + self.nodes.rename(c, obj, name) + else: # new node + if name in c.root.nodes: + raise Exception("node already exists") + obj = NObject(name, body) + obj.body = body obj.parents.clear() parent = parent or [] - for name in [parent] if isinstance(parent, str) else parent: - obj.parents.append(c.root.nodes[name]) - c.root.nodes[fqdn] = obj + for pname in [parent] if isinstance(parent, str) else parent: + obj.parents.append(c.root.nodes[pname]) + c.root.nodes[name] = obj - raise cherrypy.HTTPRedirect("node/{}".format(fqdn), 302) + raise cherrypy.HTTPRedirect("node/{}".format(name), 302) with self.nodes.db.transaction() as c: return self.render("node_edit.html", node=c.root.nodes.get(node, None)) diff --git a/nodepupper/nodeops.py b/nodepupper/nodeops.py index c18b52f..01fb063 100644 --- a/nodepupper/nodeops.py +++ b/nodepupper/nodeops.py @@ -56,3 +56,13 @@ class NodeOps(object): c.root.nodes = BTrees.OOBTree.BTree() if "classes" not in c.root(): c.root.classes = BTrees.OOBTree.BTree() + + def rename(self, c, node, newname): + # check new name isnt taken + if newname in c.root.nodes: + raise Exception(f"{newname} already exists") + + # move in root + del c.root.nodes[node.fqdn] + node.fqdn = newname + c.root.nodes[node.fqdn] = node diff --git a/templates/node_edit.html b/templates/node_edit.html index e0548e7..524e2c8 100644 --- a/templates/node_edit.html +++ b/templates/node_edit.html @@ -13,7 +13,7 @@
- +