api rename classes
This commit is contained in:
parent
581f0ca353
commit
019f8a5e32
|
@ -95,7 +95,7 @@ class AppWeb(object):
|
||||||
if name and fqdn: # existing node
|
if name and fqdn: # existing node
|
||||||
obj = c.root.nodes[fqdn]
|
obj = c.root.nodes[fqdn]
|
||||||
if name != fqdn:
|
if name != fqdn:
|
||||||
self.nodes.rename(c, obj, name)
|
self.nodes.rename_node(c, obj, name)
|
||||||
else: # new node
|
else: # new node
|
||||||
if name in c.root.nodes:
|
if name in c.root.nodes:
|
||||||
raise Exception("node already exists")
|
raise Exception("node already exists")
|
||||||
|
@ -162,32 +162,41 @@ class NodesApi(object):
|
||||||
self.nodes = nodedb
|
self.nodes = nodedb
|
||||||
|
|
||||||
def GET(self, node=None):
|
def GET(self, node=None):
|
||||||
|
cherrypy.response.headers["Content-type"] = "text/plain"
|
||||||
with self.nodes.db.transaction() as c:
|
with self.nodes.db.transaction() as c:
|
||||||
if not node:
|
if not node:
|
||||||
yield yamldump({"nodes": list(c.root.nodes.keys())})
|
return yamldump({"nodes": list(c.root.nodes.keys())})
|
||||||
return
|
|
||||||
|
|
||||||
node = c.root.nodes[node]
|
node = c.root.nodes[node]
|
||||||
output = {
|
output = {
|
||||||
|
"fqdn": node.fqdn,
|
||||||
"body": yaml.load(node.body),
|
"body": yaml.load(node.body),
|
||||||
"parents": node.parent_names(),
|
"parents": node.parent_names(),
|
||||||
"classes": {clsname: yaml.load(clsa.conf) for clsname, clsa in node.classes.items()}
|
"classes": {clsname: yaml.load(clsa.conf) for clsname, clsa in node.classes.items()}
|
||||||
}
|
}
|
||||||
yield yamldump(output)
|
return yamldump(output)
|
||||||
|
|
||||||
def PUT(self, node):
|
def PUT(self, node):
|
||||||
nodeyaml = yaml.load(cherrypy.request.body.read().decode('utf-8'))
|
nodeyaml = yaml.load(cherrypy.request.body.read().decode('utf-8'))
|
||||||
with self.nodes.db.transaction() as c:
|
with self.nodes.db.transaction() as c:
|
||||||
|
# load node
|
||||||
newnode = c.root.nodes.get(node)
|
newnode = c.root.nodes.get(node)
|
||||||
|
# do renaming if required
|
||||||
|
if newnode and nodeyaml["fqdn"] != newnode.fqdn:
|
||||||
|
self.nodes.rename_node(c, newnode, nodeyaml["fqdn"])
|
||||||
|
# create node if one wasn't found
|
||||||
if not newnode:
|
if not newnode:
|
||||||
newnode = c.root.nodes[node] = NObject(node, "{}")
|
newnode = c.root.nodes[node] = NObject(node, "{}")
|
||||||
newnode.body = yamldump(nodeyaml["body"])
|
# restore class links
|
||||||
newnode.classes.clear()
|
newnode.classes.clear()
|
||||||
for clsname, clsbody in nodeyaml["classes"].items():
|
for clsname, clsbody in nodeyaml["classes"].items():
|
||||||
newnode.classes[clsname] = NClassAttachment(c.root.classes[clsname], yamldump(clsbody))
|
newnode.classes[clsname] = NClassAttachment(c.root.classes[clsname], yamldump(clsbody))
|
||||||
|
# restore parent links
|
||||||
newnode.parents.clear()
|
newnode.parents.clear()
|
||||||
for parent in nodeyaml["parents"]:
|
for parent in nodeyaml["parents"]:
|
||||||
newnode.parents.append(c.root.nodes[parent])
|
newnode.parents.append(c.root.nodes[parent])
|
||||||
|
# update body
|
||||||
|
newnode.body = yamldump(nodeyaml["body"])
|
||||||
|
|
||||||
def DELETE(self, node):
|
def DELETE(self, node):
|
||||||
with self.nodes.db.transaction() as c:
|
with self.nodes.db.transaction() as c:
|
||||||
|
|
|
@ -57,7 +57,7 @@ class NodeOps(object):
|
||||||
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):
|
def rename_node(self, c, node, newname):
|
||||||
# check new name isnt taken
|
# check new name isnt taken
|
||||||
if newname in c.root.nodes:
|
if newname in c.root.nodes:
|
||||||
raise Exception(f"{newname} already exists")
|
raise Exception(f"{newname} already exists")
|
||||||
|
|
Loading…
Reference in New Issue