
On 2014年01月07日 21:25, Sheldon wrote:
On 01/07/2014 05:43 PM, lvroyce@linux.vnet.ibm.com wrote:
From: Royce Lv <lvroyce@linux.vnet.ibm.com>
Add json schema to validate mandatory param of target_type, also update controller.py.
Signed-off-by: Royce Lv <lvroyce@linux.vnet.ibm.com> --- src/kimchi/API.json | 10 ++++++++++ src/kimchi/control/storageserver.py | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+)
diff --git a/src/kimchi/API.json b/src/kimchi/API.json index e135ebb..9c5bb23 100644 --- a/src/kimchi/API.json +++ b/src/kimchi/API.json @@ -218,6 +218,16 @@ } } }, + "storagetargets_get_list": { + "type": "object", + "properties": { + "target_type": { + "description": "List storage servers of given type", + "type": "string", + "pattern": "^netfs$" + } + } + }, "template_update": { "type": "object", "properties": { diff --git a/src/kimchi/control/storageserver.py b/src/kimchi/control/storageserver.py index 0d4cb05..fbaf898 100644 --- a/src/kimchi/control/storageserver.py +++ b/src/kimchi/control/storageserver.py @@ -21,6 +21,9 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
from kimchi.control.base import Collection, Resource +from kimchi.control.utils import parse_param, validate_params +from kimchi.control.utils import get_class_name, model_fn +import kimchi.template
class StorageServers(Collection): @@ -36,3 +39,25 @@ class StorageServer(Resource): @property def data(self): return self.info + + def _cp_dispatch(self, vpath): + if vpath: + subcollection = vpath.pop(0) + if subcollection == 'storagetargets': + # incoming text, from URL, is not unicode, need decode + return StorageTargets(self.model, self.ident.decode("utf-8")) + +class StorageTargets(Collection): + def __init__(self, model, server): + super(StorageTargets, self).__init__(model) + self.server = server + self.resource_args = [self.server, ] + self.model_args = [self.server, ] + + def get(self): + res_list = [] + params = parse_param() + validate_params(params, self, 'get_list') I'm really wonder why not just one entry to get the get query params and validate it?
you have get and validate in father class once _get_resources Here you get and validate it in child class.
why not in father:
@cherrypy.expose def index(self, *args): method = validate_method(('GET', 'POST')) if method == 'GET': params = parse_param() validate_params(params, self, 'get_list') try: return self.get(params) I reload this method because we don't want a get_list, then iterate each element because targets can be fetched at a time. But I think your suggestion is valuable, and I'm working on split the get() method in controller to adjust these scenerios so that we don't need to regularly reload class without need of writing get for Resource.
+ get_list = getattr(self.model, model_fn(self, 'get_list')) + res_list = get_list(*self.model_args, **params) + return kimchi.template.render(get_class_name(self), res_list)