X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FUpdateSite.py;h=6a33c5e224691e147e392b3894fadc499b1f1f1e;hb=365ed09cdb23aefe44225870ec733b0e1dc6392b;hp=0e570f2e371aa74000d7fe5b8a3a0f254efba06d;hpb=a37a6d2be8acf14bd2b133f1db24fe4b8367908c;p=plcapi.git diff --git a/PLC/Methods/UpdateSite.py b/PLC/Methods/UpdateSite.py index 0e570f2..6a33c5e 100644 --- a/PLC/Methods/UpdateSite.py +++ b/PLC/Methods/UpdateSite.py @@ -4,10 +4,12 @@ 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 \ ['name', 'abbreviated_name', 'login_base', 'is_public', 'latitude', 'longitude', 'url', - 'max_slices', 'max_slivers'] + 'max_slices', 'max_slivers', 'enabled', 'ext_consortium_id'] + \ + related_fields class UpdateSite(Method): """ @@ -22,7 +24,7 @@ class UpdateSite(Method): roles = ['admin', 'pi'] - site_fields = dict(filter(can_update, Site.fields.items())) + site_fields = dict(filter(can_update, Site.fields.items() + Site.related_fields.items())) accepts = [ Auth(), @@ -40,9 +42,11 @@ class UpdateSite(Method): sites = Sites(self.api, [site_id_or_login_base]) if not sites: raise PLCInvalidArgument, "No such site" - site = sites[0] + if site['peer_id'] is not None: + raise PLCInvalidArgument, "Not a local site" + # Authenticated function assert self.caller is not None @@ -54,10 +58,22 @@ class UpdateSite(Method): # Remove admin only fields for key in 'max_slices', 'max_slivers', 'login_base': - del site_fields[key] + if key in site_fields: + del site_fields[key] + # Make requested associations + for field in related_fields: + if field in site_fields: + site.associate(auth, field, site_fields[field]) + site_fields.pop(field) + site.update(site_fields) + site.update_last_updated(False) site.sync() - self.object_ids = [site['site_id']] + + # Logging variables + self.event_objects = {'Site': [site['site_id']]} + self.message = 'Site %d updated: %s' % \ + (site['site_id'], ", ".join(site_fields.keys())) return 1