node renaming
This commit is contained in:
parent
980e4b7d90
commit
f10bacfa16
|
@ -89,18 +89,26 @@ class AppWeb(object):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@cherrypy.expose
|
@cherrypy.expose
|
||||||
def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None):
|
def node_edit(self, node=None, op=None, body=None, fqdn=None, parent=None, name=None):
|
||||||
if op in ("Edit", "Create") and body and fqdn:
|
if op in ("Edit", "Create") and body and name:
|
||||||
with self.nodes.db.transaction() as c:
|
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.body = body
|
||||||
obj.parents.clear()
|
obj.parents.clear()
|
||||||
parent = parent or []
|
parent = parent or []
|
||||||
for name in [parent] if isinstance(parent, str) else parent:
|
for pname in [parent] if isinstance(parent, str) else parent:
|
||||||
obj.parents.append(c.root.nodes[name])
|
obj.parents.append(c.root.nodes[pname])
|
||||||
c.root.nodes[fqdn] = obj
|
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:
|
with self.nodes.db.transaction() as c:
|
||||||
return self.render("node_edit.html", node=c.root.nodes.get(node, None))
|
return self.render("node_edit.html", node=c.root.nodes.get(node, None))
|
||||||
|
|
||||||
|
|
|
@ -56,3 +56,13 @@ class NodeOps(object):
|
||||||
c.root.nodes = BTrees.OOBTree.BTree()
|
c.root.nodes = BTrees.OOBTree.BTree()
|
||||||
if "classes" not in c.root():
|
if "classes" not in c.root():
|
||||||
c.root.classes = BTrees.OOBTree.BTree()
|
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
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<form action="/node_edit" method="post" class="pure-form pure-form-stacked">
|
<form action="/node_edit" method="post" class="pure-form pure-form-stacked">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<fieldset class="pure-group pure-u-1">
|
<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>
|
<textarea name="body" class="pure-input-1" placeholder="Body" rows="15">{{ node and node.body or '' }}</textarea>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<!-- <div class="pure-u-1">
|
<!-- <div class="pure-u-1">
|
||||||
|
@ -29,6 +29,7 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="pure-u-1">
|
<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 %}" />
|
<input type="submit" class="pure-button pure-button-primary" name="op" value="{% if node %}Edit{% else %}Create{% endif %}" />
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
Loading…
Reference in New Issue