node renaming
This commit is contained in:
parent
980e4b7d90
commit
f10bacfa16
|
@ -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))
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue