From c7f9d8c20309e49a355f2af0f3c88a5099a42c7a Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Fri, 14 Sep 2012 15:01:43 -0400 Subject: [PATCH] implement DeleteRole() --- PLC/Methods/DeleteRole.py | 9 +++------ PLC/Methods/GetRoles.py | 3 ++- PLC/NovaObject.py | 17 ++++++++++++----- PLC/Roles.py | 11 +++++++---- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/PLC/Methods/DeleteRole.py b/PLC/Methods/DeleteRole.py index aac0913..0f59888 100644 --- a/PLC/Methods/DeleteRole.py +++ b/PLC/Methods/DeleteRole.py @@ -19,20 +19,17 @@ class DeleteRole(Method): accepts = [ Auth(), - Mixed(Role.fields['role_id'], - Role.fields['name']) + Role.fields['id'] ] returns = Parameter(int, '1 if successful') - def call(self, auth, role_id_or_name): - roles = Roles(self.api, [role_id_or_name]) + def call(self, auth, role_id): + roles = Roles(self.api, role_id) if not roles: raise PLCInvalidArgument, "No such role" role = roles[0] - role.delete() - self.event_objects = {'Role': [role['role_id']]} return 1 diff --git a/PLC/Methods/GetRoles.py b/PLC/Methods/GetRoles.py index d664fcd..769922b 100644 --- a/PLC/Methods/GetRoles.py +++ b/PLC/Methods/GetRoles.py @@ -19,4 +19,5 @@ class GetRoles(Method): returns = [Role.fields] def call(self, auth): - return Roles(self.api) + roles = Roles(self.api) + return roles.dicts() diff --git a/PLC/NovaObject.py b/PLC/NovaObject.py index 8a20927..382d69f 100644 --- a/PLC/NovaObject.py +++ b/PLC/NovaObject.py @@ -1,12 +1,19 @@ class NovaObject: - # Set this to a dict of the valid fields of this object and their - # types. Not all fields (e.g., joined fields) may be updated via - # sync(). - @staticmethod + @staticmethod def object_to_dict(object, fields): d = {} for field in fields: if hasattr(object, field): d[field] = getattr(object, field) - return d + return d + + +class NovaObjects(list): + fields = {} + + def dicts(self): + result = [] + for obj in self: + result.append(NovaObject.object_to_dict(obj, self.fields)) + return result diff --git a/PLC/Roles.py b/PLC/Roles.py index 365c66f..dde6bbf 100644 --- a/PLC/Roles.py +++ b/PLC/Roles.py @@ -1,7 +1,7 @@ from types import StringTypes from PLC.Faults import * from PLC.Parameter import Parameter -from PLC.NovaObject import NovaObject +from PLC.NovaObject import NovaObject, NovaObjects class Role: """ @@ -14,14 +14,15 @@ class Role: 'name': Parameter(str, "Role", max = 100), } -class Roles(list): +class Roles(NovaObjects): + fields = Role.fields def __init__(self, api, role_filter={}): self.api = api if not role_filter: roles = self.api.client_shell.keystone.roles.findall() elif isinstance(role_filter, StringTypes): - [roles] = self.api.client_shell.keystone.roles.find(id=role_filter) + roles = [self.api.client_shell.keystone.roles.find(id=role_filter)] elif isinstance(role_filter, (list, tuple, set)): roles = self.api.client_shell.keystone.roles.findall() roles = [role for role in roles if role.id in rile_filter] @@ -29,4 +30,6 @@ class Roles(list): raise PLCInvalidArgument, "Wrong role filter %r"%role_filter for role in roles: - self.append(NovaObject.object_to_dict(role, Role.fields)) + #self.append(NovaObject.object_to_dict(role, Role.fields)) + self.append(role) + -- 2.43.0