node renaming

This commit is contained in:
dave 2019-05-07 19:44:20 -07:00
parent 980e4b7d90
commit f10bacfa16
3 changed files with 27 additions and 8 deletions

View File

@ -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))

View File

@ -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

View File

@ -13,7 +13,7 @@
<form action="/node_edit" method="post" class="pure-form pure-form-stacked">
<fieldset>
<fieldset class="pure-group pure-u-1">
<input name="fqdn" type="text" class="pure-input-1" placeholder="FQDN" value="{{ node.fqdn or '' }}" />
<input name="name" type="text" class="pure-input-1" placeholder="FQDN" value="{{ node.fqdn or '' }}" />
<textarea name="body" class="pure-input-1" placeholder="Body" rows="15">{{ node and node.body or '' }}</textarea>
</fieldset>
<!-- <div class="pure-u-1">
@ -29,6 +29,7 @@
</select>
</div>
<div class="pure-u-1">
<input type="hidden" name="fqdn" value="{{ node.fqdn or '' }}"/>
<input type="submit" class="pure-button pure-button-primary" name="op" value="{% if node %}Edit{% else %}Create{% endif %}" />
</div>
</fieldset>