コード例 #1
0
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
    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
コード例 #6
0
    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