def _get_vmfs_datastore(self, params): """Get the VMFS datastore from the given system_id and id.""" node = self._get_node_or_permission_error( params, permission=self._meta.edit_permission) vmfs_datastore_id = params.get("vmfs_datastore_id") try: vbd = node.virtualblockdevice_set.get(id=vmfs_datastore_id) except ObjectDoesNotExist: raise HandlerDoesNotExistError(vmfs_datastore_id) if not vbd.filesystem_group: raise HandlerDoesNotExistError(vmfs_datastore_id) return vbd.filesystem_group
def get_script(self, params): id = params.get("id") revision = params.get("revision") script = self.get_object(params) if not script: raise HandlerDoesNotExistError( f"Script with id({id}) does not exist!") if revision: for rev in script.script.previous_versions(): if rev.id == revision: return rev.data raise HandlerDoesNotExistError( f"Unable to find revision {revision} for {script.name}.") else: return script.script.data
def test_on_listen_returns_None_if_unknown_action(self): handler = self.make_nodes_handler() mock_listen = self.patch(handler, "listen") mock_listen.side_effect = HandlerDoesNotExistError() self.assertIsNone( handler.on_listen(sentinel.channel, factory.make_name("action"), sentinel.pk))
def get_object(self, params): """Only allow getting keys owned by the user.""" obj = super(SSHKeyHandler, self).get_object(params) if obj.user != self.user: raise HandlerDoesNotExistError(params[self._meta.pk]) else: return obj
def update(self, params): """Update a config value.""" if not self.user.is_superuser: raise HandlerPermissionError() if "name" not in params: raise HandlerPKError("Missing name in params") if "value" not in params: raise HandlerValidationError("Missing value in params") name = params["name"] value = params["value"] try: form = get_config_form(name, {name: value}) except ValidationError: raise HandlerDoesNotExistError(name) if form.is_valid(): try: request = HttpRequest() request.user = self.user form.save(ENDPOINT.UI, request) except ValidationError as e: self._fix_validation_error(name, e.error_dict) raise HandlerValidationError(e.error_dict) return self._include_choice( {"name": name, "value": Config.objects.get_config(name)} ) else: self._fix_validation_error(name, form.errors) raise HandlerValidationError(form.errors)
def get_object(self, params, permission=None): """Only allow getting keys owned by the user.""" obj = super().get_object(params, permission=permission) if obj.user != self.user: raise HandlerDoesNotExistError(params[self._meta.pk]) else: return obj
def test_on_listen_returns_None_if_obj_no_longer_exists(self): user = factory.make_User() handler = EventHandler(user, {}) mock_listen = self.patch(handler, "listen") mock_listen.return_value = HandlerDoesNotExistError() self.assertIsNone( handler.on_listen(sentinel.channel, sentinel.action, random.randint(1, 1000)))
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(NodeHandler, self).get_object(params) if self.user.is_superuser: return obj.as_self() if obj.owner is None or obj.owner == self.user: return obj.as_self() raise HandlerDoesNotExistError(params[self._meta.pk])
def get(self, params): """Get a config value.""" if "name" not in params: raise HandlerPKError("Missing name in params") name = params["name"] if name not in get_config_keys(self.user): raise HandlerDoesNotExistError(name) self.cache["loaded_pks"].update({name}) return self.dehydrate_configs([name])[0]
def test_on_listen_calls_listen(self): handler = self.make_nodes_handler() pk = factory.make_name("system_id") mock_listen = self.patch(handler, "listen") mock_listen.side_effect = HandlerDoesNotExistError() handler.on_listen(sentinel.channel, sentinel.action, pk) self.assertThat( mock_listen, MockCalledOnceWith(sentinel.channel, sentinel.action, pk))
def get_node(self, params): """Get node object from params""" if "node_id" not in params: raise HandlerPKError("Missing node_id in params") node_id = params["node_id"] try: node = Node.objects.get(id=node_id) except Node.DoesNotExist: raise HandlerDoesNotExistError(node_id) return node
def get(self, params): """Get a config value.""" if "name" not in params: raise HandlerPKError("Missing name in params") name = params["name"] if name not in CONFIG_ITEMS: raise HandlerDoesNotExistError(name) self.cache["loaded_pks"].update({name}) return self._include_choice( {"name": name, "value": Config.objects.get_config(name)} )
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(NodeHandler, self).get_object(params) can_access_node = (self.user.is_superuser or obj.owner == self.user or (obj.owner is None and obj.pool is not None and ResourcePool.objects.user_can_access_pool( self.user, obj.pool))) if can_access_node: return obj.as_self() raise HandlerDoesNotExistError(params[self._meta.pk])
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(UserHandler, self).get_object(params) if self.user.is_superuser: # Super user can get any user. return obj elif obj == self.user: # Standard user can only get self. return obj else: raise HandlerDoesNotExistError(params[self._meta.pk])
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(NodeHandler, self).get_object(params) # Get the object and update update the script_result_cache. self._refresh_script_result_cache(obj.get_latest_script_results) if self.user.is_superuser: return obj.as_self() if obj.owner is None or obj.owner == self.user: return obj.as_self() raise HandlerDoesNotExistError(params[self._meta.pk])
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(NodeHandler, self).get_object(params) # Get the object and update update the script_result_cache. self._refresh_script_result_cache(obj.get_latest_script_results) can_access_node = (self.user.is_superuser or obj.owner == self.user or (obj.owner is None and obj.pool is not None and ResourcePool.objects.user_can_access_pool( self.user, obj.pool))) if can_access_node: return obj.as_self() raise HandlerDoesNotExistError(params[self._meta.pk])
def get_node(self, params): """Get node object from params.""" if "system_id" not in params: raise HandlerPKError("Missing system_id in params") system_id = params["system_id"] if system_id in self.cache["system_ids"]: return self.cache["system_ids"][system_id] try: node = Node.objects.get(system_id=params["system_id"]) except Node.DoesNotExist: raise HandlerDoesNotExistError(params["system_id"]) self.cache["system_ids"][system_id] = node return node
def get_object(self, params): """Get object by using the `pk` in `params`.""" obj = super(DeviceHandler, self).get_object(params) if reload_object(self.user).is_superuser or obj.owner == self.user: return obj raise HandlerDoesNotExistError(params[self._meta.pk])