{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using DaRUS via API\n", "\n", "This notebook gives an introduction how DaRUS can be accessed by Application Programming Interfaces (APIs). This can be helpful when the work with DaRUS shall be automated. It further allows to connect other programms / scripts with the data repository.\n", "\n", "We will see two ways of working with the APIs, one using [curl](https://curl.se/), and the other using a Python libray called [pyDataverse](https://github.com/gdcc/pyDataverse)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparation\n", "\n", "Assuming that curl is already installed on the system, we need some environment variables for later usage. If you don't have an [API token](https://guides.dataverse.org/en/latest/api/auth.html) so far you can create one by clicking on your account name in the navbar (after login to DemoDaRUS / DaRUS), then select \"API Token\" from the dropdown menu. In this tab, click \"Create Token\". It is a common mistake that the server you use and the API token do not match, so be aware that you pick the right API token for the DaRUS instance you work with.\n", "\n", "We set these variables also in python, and since pyDataverse is not part of this Jupyter installation, it has to be installed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "curl" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "env: SERVER_URL=https://demodarus.izus.uni-stuttgart.de\n", "env: API_TOKEN=bef831ab-2e12-453b-9d2d-1f23e8880d24\n" ] } ], "source": [ "# for production use https://darus.uni-stuttgart.de\n", "%env SERVER_URL=https://demodarus.izus.uni-stuttgart.de\n", "# the API token represents your login (password), so keep it secret\n", "%env API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pyDataverse" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "SERVER_URL=\"https://demodarus.izus.uni-stuttgart.de\"\n", "API_TOKEN=\"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting pyDataverse\n", " Downloading pyDataverse-0.3.1-py3-none-any.whl (32 kB)\n", "Requirement already satisfied: jsonschema>=3.2.0 in /opt/conda/lib/python3.9/site-packages (from pyDataverse) (4.2.1)\n", "Requirement already satisfied: requests>=2.12.0 in /opt/conda/lib/python3.9/site-packages (from pyDataverse) (2.26.0)\n", "Requirement already satisfied: attrs>=17.4.0 in /opt/conda/lib/python3.9/site-packages (from jsonschema>=3.2.0->pyDataverse) (21.2.0)\n", "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /opt/conda/lib/python3.9/site-packages (from jsonschema>=3.2.0->pyDataverse) (0.18.0)\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.9/site-packages (from requests>=2.12.0->pyDataverse) (2.0.0)\n", "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.9/site-packages (from requests>=2.12.0->pyDataverse) (3.1)\n", "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.9/site-packages (from requests>=2.12.0->pyDataverse) (2021.10.8)\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.9/site-packages (from requests>=2.12.0->pyDataverse) (1.26.7)\n", "Installing collected packages: pyDataverse\n", "Successfully installed pyDataverse-0.3.1\n" ] } ], "source": [ "! pip install pyDataverse" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating new datasets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Option 1: Based on a simple example json file\n", "The Dataverse documentation provides a simple json file that can serve as a basis for creating datasets via the API. You can download the file with " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2022-05-30 07:53:04-- https://guides.dataverse.org/en/5.5/_downloads/fc56af1c414df69fd4721ce3629f0c03/dataset-finch1.json\n", "Resolving guides.dataverse.org (guides.dataverse.org)... 18.213.227.1\n", "Connecting to guides.dataverse.org (guides.dataverse.org)|18.213.227.1|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 2346 (2.3K) [application/json]\n", "Saving to: ‘dataset-finch1.json’\n", "\n", "dataset-finch1.json 100%[===================>] 2.29K --.-KB/s in 0s \n", "\n", "2022-05-30 07:53:05 (359 MB/s) - ‘dataset-finch1.json’ saved [2346/2346]\n", "\n" ] } ], "source": [ "! wget https://guides.dataverse.org/en/5.5/_downloads/fc56af1c414df69fd4721ce3629f0c03/dataset-finch1.json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "inspect it with an editior, and change it as you like. For automation you can use, e.g. [jq](https://stedolan.github.io/jq/), for bash or the json-library in Python. \n", "If your data is ready, upload it to the server. For that, you need the dataverse id where the dataset should reside in. You can easily obtain it within the URL of the dataverse.\n", "\n", "![smile](data:image/png;base64,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ArWK43wfO07tBPA/A1d6w1+qAjOfpFcaWvgI6NkGLq4bmrIHXO4AA0+GbMqu5KcpZLPA+xl9UxrouwU617ze6vs4fQCS1FX8Bjg4BEZzlL3e4t0dzb39e6be3w94J3Kp4TVovgAAD4tpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOmlwdGNFeHQ9Imh0dHA6Ly9pcHRjLm9yZy9zdGQvSXB0YzR4bXBFeHQvMjAwOC0wMi0yOS8iCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDowZjY0YjVhOC1mYjRmLTQ5ZmMtODQ5NC1mNjg1YjQ3MGI2M2YiCiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MWRlZThkODAtZTI5OC00MDU0LWFiNzQtYjM1YzM0NDlkMmJmIgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjMwOGMyZjEtZGNiOC00YjQzLTk5ODUtZTBjMmQ2NWYxM2QwIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzcxMDAzMTUyMDIxMjkiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yMiIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjZjYTEzZjktOGEyNy00ZGJjLWI3ZDktMGFiMzhjMWE2MTE2IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iKzAxOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHBsdXM6SW1hZ2VTdXBwbGllcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlU3VwcGxpZXI+CiAgIDxwbHVzOkltYWdlQ3JlYXRvcj4KICAgIDxyZGY6U2VxLz4KICAgPC9wbHVzOkltYWdlQ3JlYXRvcj4KICAgPHBsdXM6Q29weXJpZ2h0T3duZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpDb3B5cmlnaHRPd25lcj4KICAgPHBsdXM6TGljZW5zb3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpMaWNlbnNvcj4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PmkUkNoAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQflCxAWBQ9Y93AJAAAgAElEQVR42uzdZXwU1xoH4HdWs9lkd+NG3A0IJDgEd3crLgVarL2lFLcKBVpocXeKuxPBJUACMYiQEPeVZH1n7odJNpuEBFraEuj73P64K6NnZrP/PefMGUIilUGdKIqq9i9CCCGEEKKx3hqkKIpSq9UZmZlyuVytVmORIYQQQgjpEXXUS+mDVHxCgrOTk62NNY/HwyJDCKH6RmxnZ/hUlJODZYLQv4ZVR5Ci/32dkens5OTq4oyFhRBC9T9IIYT+ZYw63qPjVGmprIGDPZYUQghhkEII/bksRccpnU7HZrP/9hXfCI/A0kcIIQxSCH3KWQqv2kMIIQxSCKG/kqX0KQrjFEIIfVxBCjueI1QvshSmKIQQ+hhhkELo38d6z/lzcnLS0tOLi8W5ebk5ObkAYGdna2tja24ucnF2tnu/KuiSEvHFS5dz83IBwNbGtmeP7mZmIjxmCKH/uNoq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)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "curl" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"status\":\"OK\",\"data\":{\"id\":8038,\"persistentId\":\"doi:10.15770/darus-1315\"}}" ] }, { "name": "stderr", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 2380 100 75 100 2305 83 2567 --:--:-- --:--:-- --:--:-- 2650\n" ] } ], "source": [ "%%bash\n", "export PARENT=fokus_hod\n", "curl -H \"X-Dataverse-key:$API_TOKEN\" -H \"Content-Type: application/json\" -X POST \"$SERVER_URL/api/dataverses/$PARENT/datasets\" --upload-file dataset-finch1.json\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pyDataverse" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset with pid 'doi:10.15770/darus-1316' created.\n" ] }, { "data": { "text/plain": [ "{'status': 'OK',\n", " 'data': {'id': 8039, 'persistentId': 'doi:10.15770/darus-1316'}}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pyDataverse.api import NativeApi\n", "dataset_example = open(\"dataset-finch1.json\").read()\n", "PARENT=\"fokus_hod\"\n", "api = NativeApi(SERVER_URL, API_TOKEN)\n", "resp = api.create_dataset(PARENT, dataset_example)\n", "resp.json()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset with pid 'doi:10.15770/darus-1317' created.\n" ] }, { "data": { "text/plain": [ "{'status': 'OK',\n", " 'data': {'id': 8040, 'persistentId': 'doi:10.15770/darus-1317'}}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# an example of changing the title programmatically\n", "import json\n", "metadata = json.load(open(\"dataset-finch1.json\"))\n", "fields = metadata[\"datasetVersion\"][\"metadataBlocks\"][\"citation\"][\"fields\"]\n", "for field in fields:\n", " if field[\"typeName\"] == 'title':\n", " field[\"value\"] = 'The title of a dataset should be as specific as possible'\n", " break\n", "resp = api.create_dataset(PARENT, json.dumps(metadata))\n", "resp.json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Option 2: Based on an already existing dataset\n", "If there is already a well described dataset you want to base on, it's possible to start from there. Download the json-representative, manipulate it and create a new dataset as done above." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "curl" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 1614 100 1614 0 0 24437 0 --:--:-- --:--:-- --:--:-- 24830\n" ] } ], "source": [ "%%bash\n", "export PERSISTENT_IDENTIFIER=doi:10.15770/darus-1312\n", "curl -H \"X-Dataverse-key:$API_TOKEN\" -H \"Content-Type: application/json\" \"$SERVER_URL/api/datasets/:persistentId/?persistentId=$PERSISTENT_IDENTIFIER\" | json_pp > \"existing_dataset.json\" " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract the \"latestVersion\" element from the downloaded json file, rename it to \"datasetVersion\", and delete every child element except \"license\", \"metadataBlocks\" and \"termsOfUse\". **Note**, the contact email has been removed during export. Since it is a required metadata field for every dataset, you have to add it again within the citation metadata block inside the contact field.\n", "\n", "```json\n", "\"datasetContactEmail\" : {\n", " \"multiple\" : false,\n", " \"typeClass\" : \"primitive\",\n", " \"typeName\" : \"datasetContactEmail\",\n", " \"value\" : \"your-email@example.com\"\n", "}\n", "```" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\"status\":\"OK\",\"data\":{\"id\":8041,\"persistentId\":\"doi:10.15770/darus-1318\"}}" ] }, { "name": "stderr", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 3284 100 75 100 3209 69 2982 0:00:01 0:00:01 --:--:-- 3054\n" ] } ], "source": [ "%%bash\n", "export PARENT=fokus_hod\n", "curl -H \"X-Dataverse-key:$API_TOKEN\" -X POST \"$SERVER_URL/api/dataverses/$PARENT/datasets\" --upload-file existing_dataset.json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pyDataverse" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset with pid 'doi:10.15770/darus-1319' created.\n" ] }, { "data": { "text/plain": [ "{'status': 'OK',\n", " 'data': {'id': 8042, 'persistentId': 'doi:10.15770/darus-1319'}}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import json\n", "metadata = json.load(open(\"existing_dataset.json\"))\n", "latestVersion = metadata[\"data\"][\"latestVersion\"]\n", "new_metadata = {\"datasetVersion\": \n", " {\"license\": latestVersion[\"license\"],\n", " \"metadataBlocks\": latestVersion[\"metadataBlocks\"],\n", " \"termsOfUse\": latestVersion[\"termsOfUse\"]}}\n", "fields = new_metadata[\"datasetVersion\"][\"metadataBlocks\"][\"citation\"][\"fields\"]\n", "for field in fields:\n", " if field[\"typeName\"] == 'datasetContact':\n", " field[\"value\"][0][\"datasetContactEmail\"] = {\n", " \"multiple\" : False,\n", " \"typeClass\" : \"primitive\",\n", " \"typeName\" : \"datasetContactEmail\",\n", " \"value\" : \"your-email@example.com\"}\n", " elif field[\"typeName\"] == 'title':\n", " field[\"value\"] = 'Example dataset for joint simulation and experimental data created with pyDataverse'\n", " \n", "resp = api.create_dataset(PARENT, json.dumps(new_metadata))\n", "resp.json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Add metadata\n", "\n", "It is also possible to add or update the metadata of an existing dataset. This can be useful when several people are working on a dataset. Maybe one person is creating the dataset in the web interface using a template, another person might want to add specific metadata based on log file information programatically. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The json file you need has a simpler structure than the full representation of a dataset. Add only the fields you want to add to the dataset, e.g.,\n", "```json\n", "{\"fields\": [\n", " {\"typeName\" : \"processSoftware\",\n", " \"value\" : [\n", " {\"processSoftwareName\" : {\n", " \"typeName\" : \"processSoftwareName\",\n", " \"value\" : \"Aquisition software X\"}\n", " }]\n", " }]\n", "}\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "curl" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%bash\n", "export PERSISTENT_IDENTIFIER=doi:10.15770/darus-XXXX\n", "curl -H \"X-Dataverse-key: $API_TOKEN\" -X PUT $SERVER_URL/api/datasets/:persistentId/editMetadata/?persistentId=$PERSISTENT_IDENTIFIER --upload-file dataset-edit-metadata-sample.json" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pyDataverse" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", "additional_metadata = {\"fields\": [\n", " {\"typeName\" : \"processSoftware\",\n", " \"value\" : [\n", " {\"processSoftwareName\" : {\n", " \"typeName\" : \"processSoftwareName\",\n", " \"value\" : \"Simulation software X\"}\n", " }]\n", " }]\n", "}\n", "PID=\"doi:10.15770/darus-XXXX\"\n", "resp = api.edit_dataset_metadata(PID, json.dumps(additional_metadata))\n", "resp.json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Upload files\n", "\n", "Finally, lets add data to a dataset. The demonstrated way may not work for files larger than 10 GB. If you have problems get in touch with the DaRUS-team.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "curl" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%%bash\n", "\n", "export PERSISTENT_ID=doi:10.15770/darus-xxxx\n", "export FILENAME=simulation.dat\n", "curl -H \"X-Dataverse-key:$API_TOKEN\" -X POST -F \"file=@$FILENAME\" -F 'jsonData={\"description\":\"Simulation raw data of a random process using the os.urandom function in Python\",\"directoryLabel\":\"data/\",\"categories\":[\"Simulation\"], \"restrict\":\"false\"}' \"$SERVER_URL/api/datasets/:persistentId/add?persistentId=$PERSISTENT_ID\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pyDataverse" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", "PID = \"doi:10.15770/darus-xxxx\"\n", "filename=\"random-structure.png\"\n", "metadata = {\"description\": \"By jaacker on Pixabay\", \"restrict\": False}\n", "resp = api.upload_datafile(PID, filename, json_str=json.dumps(metadata), is_pid=True)\n", "resp.json()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# pyDataverse does not sent the correct MIME type, so let Dataverse redetect it with the dataFile id from the last output\n", "resp = api.redetect_file_type(identifier='7609', is_pid=False, dry_run=False)\n", "resp.json()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Further reading\n", "The topics and examples in this tutorial are only a tip of the iceberg of what you can do with Dataverse's APIs. You should be familar now how they work in principle and can further study the [official documentation](https://guides.dataverse.org/en/5.5/api/index.html). Make sure, that the current version of the documentation matches the version of DaRUS. You can see the current version in the footer on the right on each DaRUS page.\n", "\n", "Beside further API calls, there is also a list of other [client libraries](https://guides.dataverse.org/en/5.5/api/client-libraries.html) that might be of interest for you." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" } }, "nbformat": 4, "nbformat_minor": 4 }