def delete_dataverse(self, identifier): """Delete dataverse by alias or id. Deletes the dataverse whose ID is given: DELETE http://$SERVER/api/dataverses/$id?key=$apiKey Parameters ---------- identifier : string Can either be a dataverse id (long) or a dataverse alias (more robust). Returns ------- requests.Response Response object of requerst library. """ query_str = '/dataverses/{0}'.format(identifier) resp = self.make_delete_request(query_str) if resp.status_code == 401: raise UnauthorizedError( 'Delete Dataverse {0} unauthorized.'.format(identifier)) elif resp.status_code == 404: raise DataverseNotFoundError( 'Dataverse {0} was not found.'.format(identifier)) elif resp.status_code != 200: raise OperationFailedError( 'Dataverse {0} could not be deleted.'.format(identifier)) elif resp.status_code == 200: print('{0} Dataverse has been deleted.'.format(identifier)) else: print('{0} Dataverse could not be deleted.'.format(identifier)) return resp
def delete_dataverse(self, identifier, auth=True): """Delete dataverse by alias or id. HTTP Request: .. code-block:: bash DELETE http://$SERVER/api/dataverses/$id Status Code: 200: Dataverse deleted Parameters ---------- identifier : string Can either be a dataverse id (long) or a dataverse alias (more robust). Returns ------- requests.Response Response object of requests library. """ query_str = '/dataverses/{0}'.format(identifier) resp = self.delete_request(query_str, auth) if resp.status_code == 401: error_msg = resp.json()['message'] raise ApiAuthorizationError( 'ERROR: HTTP 401 - Delete Dataverse {0} unauthorized. ' 'MSG: {1}'.format(identifier, error_msg)) elif resp.status_code == 404: error_msg = resp.json()['message'] raise DataverseNotFoundError( 'ERROR: HTTP 404 - Dataverse {0} was not found. MSG: {1}' ''.format(identifier, error_msg)) elif resp.status_code == 403: error_msg = resp.json()['message'] raise DataverseNotEmptyError( 'ERROR: HTTP 403 - Dataverse {0} not empty. MSG: {1}'.format( identifier, error_msg)) elif resp.status_code != 200: error_msg = resp.json()['message'] raise OperationFailedError( 'ERROR: HTTP {0} - Dataverse {1} could not be deleted. MSG: ' '{2}'.format(resp.status_code, identifier, error_msg)) elif resp.status_code == 200: print('Dataverse {} deleted.'.format(identifier)) return resp
def publish_dataverse(self, identifier, auth=True): """Publish a dataverse. Publish the Dataverse pointed by identifier, which can either by the dataverse alias or its numerical id. HTTP Request: .. code-block:: bash POST http://$SERVER/api/dataverses/$identifier/actions/:publish Status Code: 200: Dataverse published Parameters ---------- identifier : string Can either be a dataverse id (long) or a dataverse alias (more robust). auth : bool True if api authorization is necessary. Defaults to ``False``. Returns ------- requests.Response Response object of requests library. """ query_str = '/dataverses/{0}/actions/:publish'.format(identifier) resp = self.post_request(query_str, auth=auth) if resp.status_code == 401: error_msg = resp.json()['message'] raise ApiAuthorizationError( 'ERROR: HTTP 401 - Publish Dataverse {0} unauthorized. ' 'MSG: {1}'.format(identifier, error_msg)) elif resp.status_code == 404: error_msg = resp.json()['message'] raise DataverseNotFoundError( 'ERROR: HTTP 404 - Dataverse {} was not found. MSG: {1}' ''.format(identifier, error_msg)) elif resp.status_code != 200: error_msg = resp.json()['message'] raise OperationFailedError( 'ERROR: HTTP {0} - Dataverse {1} could not be published. MSG: ' '{2}'.format(resp.status_code, identifier, error_msg)) elif resp.status_code == 200: print('Dataverse {} published.'.format(identifier)) return resp
def create_dataverse(self, identifier, json, parent=':root'): """Create a dataverse. Generates a new dataverse under $id. Expects a JSON content describing the dataverse, as in the example below. If $id is omitted, a root dataverse is created. $id can either be a dataverse id (long) or a dataverse alias (more robust). POST http://$SERVER/api/dataverses/$id?key=$apiKey Download the JSON example file and modified to create dataverses to suit your needs. The fields name, alias, and dataverseContacts are required. http://guides.dataverse.org/en/latest/ _downloads/dataverse-complete.json Parameters ---------- identifier : string Can either be a dataverse id (long) or a dataverse alias (more robust). json : string JSON-formatted string for upload. parent : string Parent dataverse if existing. Default is `:root`. Returns ------- requests.Response Response object of requerst library. """ if not parent: print('No parent dataverse passed.') query_str = '/dataverses/{0}'.format(parent) resp = self.make_post_request(query_str, json) if resp.status_code == 404: raise DataverseNotFoundError( 'Dataverse {0} was not found.'.format(parent)) elif resp.status_code != 201: raise OperationFailedError( '{0} Dataverse could not be created.'.format(identifier)) else: print('{0} Dataverse has been created.'.format(identifier)) return resp
def create_dataset(self, dataverse, metadata, auth=True): """Add dataset to a dataverse. `Dataverse Documentation <http://guides.dataverse.org/en/latest/api/native-api.html#create-a-dataset-in-a-dataverse>`_ HTTP Request: .. code-block:: bash POST http://$SERVER/api/dataverses/$dataverse/datasets --upload-file FILENAME Add new dataset with curl: .. code-block:: bash curl -H "X-Dataverse-key: $API_TOKEN" -X POST $SERVER_URL/api/dataverses/$DV_ALIAS/datasets --upload-file tests/data/dataset_min.json Import dataset with existing persistend identifier with curl: .. code-block:: bash curl -H "X-Dataverse-key: $API_TOKEN" -X POST $SERVER_URL/api/dataverses/$DV_ALIAS/datasets/:import?pid=$PERSISTENT_IDENTIFIER&release=yes --upload-file tests/data/dataset_min.json To create a dataset, you must create a JSON file containing all the metadata you want such as example file: `dataset-finch1.json <http://guides.dataverse.org/en/latest/_downloads/dataset-finch1.json>`_. Then, you must decide which dataverse to create the dataset in and target that datavese with either the "alias" of the dataverse (e.g. "root" or the database id of the dataverse (e.g. "1"). The initial version state will be set to DRAFT: Status Code: 201: dataset created Parameters ---------- dataverse : string "alias" of the dataverse (e.g. ``root``) or the database id of the dataverse (e.g. ``1``) metadata : string Metadata of the Dataset as a json-formatted string (e. g. `dataset-finch1.json <http://guides.dataverse.org/en/latest/_downloads/dataset-finch1.json>`_) Returns ------- requests.Response Response object of requests library. Todo ------- Link Dataset finch1.json """ query_str = '/dataverses/{0}/datasets'.format(dataverse) resp = self.post_request(query_str, metadata, auth) if resp.status_code == 404: error_msg = resp.json()['message'] raise DataverseNotFoundError( 'ERROR: HTTP 404 - Dataverse {0} was not found. MSG: {1}' ''.format(dataverse, error_msg)) elif resp.status_code == 401: error_msg = resp.json()['message'] raise ApiAuthorizationError( 'ERROR: HTTP 401 - Delete Dataset unauthorized. MSG: ' ''.format(error_msg)) elif resp.status_code == 201: identifier = resp.json()['data']['persistentId'] print('Dataset {} created.'.format(identifier)) return resp
def create_dataverse(self, identifier, metadata, auth=True, parent=':root'): """Create a dataverse. Generates a new dataverse under identifier. Expects a JSON content describing the dataverse. HTTP Request: .. code-block:: bash POST http://$SERVER/api/dataverses/$id Download the `dataverse.json <http://guides.dataverse.org/en/latest/ _downloads/dataverse-complete.json>`_ example file and modify to create dataverses to suit your needs. The fields name, alias, and dataverseContacts are required. Status Codes: 200: dataverse created 201: dataverse created Parameters ---------- identifier : string Can either be a dataverse id (long) or a dataverse alias (more robust). If identifier is omitted, a root dataverse is created. metadata : string Metadata of the Dataverse as a json-formatted string. auth : bool True if api authorization is necessary. Defaults to ``True``. parent : string Parent dataverse, if existing, to which the Dataverse gets attached to. Defaults to ``:root``. Returns ------- requests.Response Response object of requests library. """ if not parent: raise DataverseNotFoundError( 'Dataverse {} not found. No parent dataverse passed to ' '`create_dataverse()`.'.format(identifier)) query_str = '/dataverses/{0}'.format(parent) resp = self.post_request(query_str, metadata, auth) if resp.status_code == 404: error_msg = resp.json()['message'] raise DataverseNotFoundError( 'ERROR: HTTP 404 - Dataverse {0} was not found. MSG: '.format( parent, error_msg)) elif resp.status_code != 200 and resp.status_code != 201: error_msg = resp.json()['message'] raise OperationFailedError( 'ERROR: HTTP {0} - Dataverse {1} could not be created. ' 'MSG: {2}'.format(resp.status_code, identifier, error_msg)) else: print('Dataverse {0} created.'.format(identifier)) return resp