2
0
mirror of https://github.com/xcat2/confluent.git synced 2025-03-20 10:27:45 +00:00

Add the attributes interface to messages for input checking

This commit is contained in:
Jarrod Johnson 2013-11-03 10:12:50 -05:00
parent ada6302c2d
commit 4ba42558b1
2 changed files with 35 additions and 9 deletions

View File

@ -14,6 +14,7 @@ import eventlet
import json
import os
import string
import traceback
import time
import urlparse
import eventlet.wsgi
@ -228,6 +229,7 @@ def resourcehandler(env, start_response):
yield "404 - Request path not recognized"
return
except exc.InvalidArgumentException:
traceback.print_exc()
start_response('400 Bad Request', headers)
yield '400 - Bad Request'
return

View File

@ -36,39 +36,63 @@ class ConfluentMessage(object):
snippet += '<input type="checkbox" name="restexplorerhonorkey" '
snippet += 'value="%s">' % (key)
return snippet
def get_input_message(path, operation, inputdata, nodes=None):
if 'power/state' in path and operation != 'retrieve':
return InputPowerMessage(path, nodes, inputdata)
elif path.startswith('attributes/') and operation != 'retrieve':
return InputAttributes(path, nodes, inputdata)
elif inputdata:
raise exc.InvalidArgumentException()
valid_powerstates = set([
'on',
'off',
'reset',
'boot',
])
class InputAttributes(ConfluentMessage):
def __init__(self, path, nodes, inputdata):
self.nodeattribs = {}
nestedmode = False
if not inputdata:
raise exc.InvalidArgumentException
for node in nodes:
if node in inputdata:
nestedmode = True
self.nodeattribs[node] = inputdata[node]
if nestedmode:
for key in inputdata:
if key not in nodes:
raise exc.InvalidArgumentException
else:
for node in nodes:
self.nodeattribs[node] = inputdata
class InputPowerMessage(ConfluentMessage):
valid_powerstates = set([
'on',
'off',
'reset',
'boot',
])
def __init__(self, path, nodes, inputdata):
self.powerbynode = {}
if not inputdata:
raise exc.InvalidArgumentException()
if ('powerstate' not in inputdata):
if 'powerstate' not in inputdata:
#assume we have nested information
for key in nodes:
if key not in inputdata:
raise exc.InvalidArgumentException()
datum = inputdata[key]
if ('powerstate' not in datum or
datum['powerstate'] not in valid_powerstates):
datum['powerstate'] not in self.valid_powerstates):
raise exc.InvalidArgumentException()
self.powerbynode[key] = datum['powerstate']
else: # we have a powerstate argument not by node
datum = inputdata
if ('powerstate' not in datum or
datum['powerstate'] not in valid_powerstates):
datum['powerstate'] not in self.valid_powerstates):
raise exc.InvalidArgumentException()
for node in nodes:
self.powerbynode[node] = datum['powerstate']