From: Mark Huang Date: Wed, 7 Feb 2007 05:57:52 +0000 (+0000) Subject: merge changes from head X-Git-Tag: planetlab-4_0-rc1~2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=b2e98f7a85d2589217303aeeff292b995aba47a8;p=plcapi.git merge changes from head --- diff --git a/PLC/Methods/GetPCUs.py b/PLC/Methods/GetPCUs.py index 28d50d6f..32800703 100644 --- a/PLC/Methods/GetPCUs.py +++ b/PLC/Methods/GetPCUs.py @@ -51,10 +51,22 @@ class GetPCUs(Method): if pcu_filter is None: pcu_filter = valid_pcu_ids + # Must query at least slice_id (see below) + if return_fields is not None and 'pcu_id' not in return_fields: + return_fields.append('pcu_id') + added_fields = True + else: + added_fields = False + pcus = PCUs(self.api, pcu_filter, return_fields) # Filter out PCUs that are not viewable if not (isinstance(self.caller, Person) and 'admin' in self.caller['roles']): pcus = filter(lambda pcu: pcu['pcu_id'] in valid_pcu_ids, pcus) + # Remove pcu_id if not specified + if added_fields: + for pcu in pcus: + del pcu['pcu_id'] + return pcus diff --git a/PLC/Methods/GetPersons.py b/PLC/Methods/GetPersons.py index 458fdacd..e48db7be 100644 --- a/PLC/Methods/GetPersons.py +++ b/PLC/Methods/GetPersons.py @@ -60,6 +60,14 @@ class GetPersons(Method): else: return_fields = self.return_fields.keys() + # Must query at least person_id, site_ids, and role_ids (see + # Person.can_view() and below). + if return_fields is not None: + added_fields = set(['person_id', 'site_ids', 'role_ids']).difference(return_fields) + return_fields += added_fields + else: + added_fields = [] + persons = Persons(self.api, person_filter, return_fields) # Filter out accounts that are not viewable @@ -67,4 +75,10 @@ class GetPersons(Method): 'admin' not in self.caller['roles']: persons = filter(self.caller.can_view, persons) + # Remove added fields if not specified + if added_fields: + for person in persons: + for field in added_fields: + del person[field] + return persons diff --git a/PLC/Methods/GetSliceAttributes.py b/PLC/Methods/GetSliceAttributes.py index d7636615..80fc3440 100644 --- a/PLC/Methods/GetSliceAttributes.py +++ b/PLC/Methods/GetSliceAttributes.py @@ -3,6 +3,7 @@ from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Filter import Filter from PLC.SliceAttributes import SliceAttribute, SliceAttributes +from PLC.Persons import Person, Persons from PLC.Sites import Site, Sites from PLC.Slices import Slice, Slices from PLC.Auth import Auth @@ -23,7 +24,7 @@ class GetSliceAttributes(Method): attributes of any slice or sliver. """ - roles = ['admin', 'pi', 'user'] + roles = ['admin', 'pi', 'user', 'node'] accepts = [ Auth(), @@ -38,7 +39,8 @@ class GetSliceAttributes(Method): def call(self, auth, slice_attribute_filter = None, return_fields = None): # If we are not admin, make sure to only return our own slice # and sliver attributes. - if 'admin' not in self.caller['roles']: + if isinstance(self.caller, Person) and \ + 'admin' not in self.caller['roles']: # Get slices that we are able to view valid_slice_ids = self.caller['slice_ids'] if 'pi' in self.caller['roles'] and self.caller['site_ids']: @@ -61,12 +63,25 @@ class GetSliceAttributes(Method): if slice_attribute_filter is None: slice_attribute_filter = valid_slice_attribute_ids + # Must query at least slice_attribute_id (see below) + if return_fields is not None and 'slice_attribute_id' not in return_fields: + return_fields.append('slice_attribute_id') + added_fields = True + else: + added_fields = False + slice_attributes = SliceAttributes(self.api, slice_attribute_filter, return_fields) # Filter out slice attributes that are not viewable - if 'admin' not in self.caller['roles']: + if isinstance(self.caller, Person) and \ + 'admin' not in self.caller['roles']: slice_attributes = filter(lambda slice_attribute: \ slice_attribute['slice_attribute_id'] in valid_slice_attribute_ids, slice_attributes) + # Remove slice_attribute_id if not specified + if added_fields: + for slice_attribute in slice_attributes: + del slice_attribute['slice_attribute_id'] + return slice_attributes diff --git a/PLC/Methods/GetSlices.py b/PLC/Methods/GetSlices.py index 9bd90173..b2ddfde1 100644 --- a/PLC/Methods/GetSlices.py +++ b/PLC/Methods/GetSlices.py @@ -31,7 +31,6 @@ class GetSlices(Method): ] returns = [Slice.fields] - def call(self, auth, slice_filter = None, return_fields = None): # If we are not admin, make sure to return only viewable @@ -51,6 +50,13 @@ class GetSlices(Method): if slice_filter is None: slice_filter = valid_slice_ids + # Must query at least slice_id (see below) + if return_fields is not None and 'slice_id' not in return_fields: + return_fields.append('slice_id') + added_fields = True + else: + added_fields = False + slices = Slices(self.api, slice_filter, return_fields) # Filter out slices that are not viewable @@ -58,4 +64,9 @@ class GetSlices(Method): 'admin' not in self.caller['roles']: slices = filter(lambda slice: slice['slice_id'] in valid_slice_ids, slices) + # Remove slice_id if not specified + if added_fields: + for slice in slices: + del slice['slice_id'] + return slices