X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateSite.py;h=8ffbac4fdab000a9a85f62128f0c7672ca267f73;hb=b56805d9306204eb657ce284b8df6dc23d7fd812;hp=8a47cd3ddf6bc0336237a88894633bea26826c95;hpb=f7ce7ce813d4c44502629820a3583f32a99a98f7;p=plcapi.git diff --git a/PLC/Methods/UpdateSite.py b/PLC/Methods/UpdateSite.py index 8a47cd3..8ffbac4 100644 --- a/PLC/Methods/UpdateSite.py +++ b/PLC/Methods/UpdateSite.py @@ -1,13 +1,16 @@ -# $Id$ -# $URL$ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Sites import Site, Sites from PLC.Auth import Auth -related_fields = Site.related_fields.keys() -can_update = lambda (field, value): field in \ +from PLC.TagTypes import TagTypes +from PLC.SiteTags import SiteTags +from PLC.Methods.AddSiteTag import AddSiteTag +from PLC.Methods.UpdateSiteTag import UpdateSiteTag + +related_fields = list(Site.related_fields.keys()) +can_update = lambda field_value: field_value[0] in \ ['name', 'abbreviated_name', 'login_base', 'is_public', 'latitude', 'longitude', 'url', 'max_slices', 'max_slivers', 'enabled', 'ext_consortium_id'] + \ @@ -26,7 +29,7 @@ class UpdateSite(Method): roles = ['admin', 'pi'] - site_fields = dict(filter(can_update, Site.fields.items() + Site.related_fields.items())) + site_fields = dict(list(filter(can_update, list(Site.fields.items()) + list(Site.related_fields.items())))) accepts = [ Auth(), @@ -38,16 +41,16 @@ class UpdateSite(Method): returns = Parameter(int, '1 if successful') def call(self, auth, site_id_or_login_base, site_fields): - site_fields = dict(filter(can_update, site_fields.items())) + site_fields = dict(list(filter(can_update, list(site_fields.items())))) # Get site information sites = Sites(self.api, [site_id_or_login_base]) if not sites: - raise PLCInvalidArgument, "No such site" + raise PLCInvalidArgument("No such site") site = sites[0] if site['peer_id'] is not None: - raise PLCInvalidArgument, "Not a local site" + raise PLCInvalidArgument("Not a local site") # Authenticated function assert self.caller is not None @@ -56,7 +59,7 @@ class UpdateSite(Method): # member of the site. if 'admin' not in self.caller['roles']: if site['site_id'] not in self.caller['site_ids']: - raise PLCPermissionDenied, "Not allowed to modify specified site" + raise PLCPermissionDenied("Not allowed to modify specified site") # Remove admin only fields for key in 'max_slices', 'max_slivers', 'login_base': @@ -76,6 +79,21 @@ class UpdateSite(Method): # Logging variables self.event_objects = {'Site': [site['site_id']]} self.message = 'Site %d updated: %s' % \ - (site['site_id'], ", ".join(site_fields.keys())) + (site['site_id'], ", ".join(list(site_fields.keys()))) + + # Update Site HRN if login_base changed + if 'login_base' in site_fields: + root_auth = self.api.config.PLC_HRN_ROOT + tagname = 'hrn' + tagvalue = '.'.join([root_auth, site['login_base']]) + # check if the tagtype instance exists + tag_types = TagTypes(self.api,{'tagname':tagname}) + if tag_types: + site_tags=SiteTags(self.api,{'tagname':tagname,'site_id':site['site_id']}) + if not site_tags: + AddSiteTag(self.api).__call__(auth,int(site['site_id']),tagname,tagvalue) + else: + UpdateSiteTag(self.api).__call__(auth,site_tags[0]['site_tag_id'],tagvalue) + return 1