def send_handle_delete_request(self, **args): ''' Send a HTTP DELETE request to the handle server to delete either an entire handle or to some specified values from a handle record, using the requests module. :param handle: The handle. :param indices: Optional. A list of indices to delete. Defaults to None (i.e. the entire handle is deleted.). The list can contain integers or strings. :return: The server's response. ''' # Check if we have write access at all: if not self.__has_write_access: raise HandleAuthenticationError(msg=self.__no_auth_message) # Check args: mandatory_args = ['handle'] optional_args = ['indices', 'op'] util.add_missing_optional_args_with_value_none(args, optional_args) util.check_presence_of_mandatory_args(args, mandatory_args) handle = args['handle'] indices = args['indices'] op = args['op'] # Make necessary values: url = self.make_handle_URL(handle, indices) if indices is not None and len(indices) > 0: LOGGER.debug('__send_handle_delete_request: Deleting values '+str(indices)+' from handle '+handle+'.') else: LOGGER.debug('__send_handle_delete_request: Deleting handle '+handle+'.') LOGGER.debug('DELETE Request to '+url) head = self.__get_headers('DELETE') veri = self.__HTTPS_verify # Make request: resp = None if self.__authentication_method == self.__auth_methods['user_pw']: resp = self.__session.delete(url, headers=head, verify=veri) elif self.__authentication_method == self.__auth_methods['cert']: resp = self.__session.delete(url, headers=head, verify=veri, cert=self.__cert_object) self.__log_request_response_to_file( logger=REQUESTLOGGER, op='DELETE', handle=handle, url=url, headers=head, verify=veri, resp=resp ) # Check response for authentication issues: if hsresponses.not_authenticated(resp): raise HandleAuthenticationError( operation=op, handle=handle, response=resp, username=self.__username ) return resp
def send_handle_put_request(self, **args): ''' Send a HTTP PUT request to the handle server to write either an entire handle or to some specified values to an handle record, using the requests module. :param handle: The handle. :param list_of_entries: A list of handle record entries to be written, in the format [{"index":xyz, "type":"xyz", "data":"xyz"}] or similar. :param indices: Optional. A list of indices to delete. Defaults to None (i.e. the entire handle is deleted.). The list can contain integers or strings. :param overwrite: Optional. Whether the handle should be overwritten if it exists already. :return: The server's response. ''' # Check if we have write access at all: if not self.__has_write_access: raise HandleAuthenticationError(msg=self.__no_auth_message) # Check args: mandatory_args = ['handle', 'list_of_entries'] optional_args = ['indices', 'op', 'overwrite'] util.add_missing_optional_args_with_value_none(args, optional_args) util.check_presence_of_mandatory_args(args, mandatory_args) handle = args['handle'] list_of_entries = args['list_of_entries'] indices = args['indices'] op = args['op'] overwrite = args['overwrite'] or False # Overwrite by index: if indices is not None: message = 'Writing handle values by index is not implemented'+\ ' yet because the way the indices are interpreted by the'+\ ' Handle Server may be modified soon. The entire handle'+\ ' record has to be overwritten.' raise NotImplementedError(message) # TODO FIXME: As soon as the Handle System uses the correct indices # for overwriting, this may be implemented. # In HSv8 beta, the HS uses ?index=3 for overwriting index:4. If the # library used this and then the behaviour is changed, it would lead # to corrupt handle records, so we wait until the issue is fixed by # the Handle System. # Make necessary values: url = self.make_handle_URL(handle, overwrite=overwrite) LOGGER.debug('PUT Request to '+url) payload = json.dumps({'values':list_of_entries}) LOGGER.debug('PUT Request payload: '+payload) head = self.__get_headers('PUT') veri = self.__HTTPS_verify # Make request: resp = None if self.__authentication_method == self.__auth_methods['user_pw']: resp = self.__session.put(url, data=payload, headers=head, verify=veri) elif self.__authentication_method == self.__auth_methods['cert']: resp = self.__session.put(url, data=payload, headers=head, verify=veri, cert=self.__cert_object) self.__log_request_response_to_file( logger=REQUESTLOGGER, op='PUT', handle=handle, url=url, headers=head, verify=veri, resp=resp, payload=payload) # Check response for authentication issues: if hsresponses.not_authenticated(resp): raise HandleAuthenticationError( operation=op, handle=handle, response=resp, username=self.__username ) return resp, payload