Files
d4c-datapkg-statistical/experiments/zenodo/upload.ipynb
T

19 KiB

Playing in Zenodo Sandbox

ACCESS_TOKEN=yourkey
In [39]:
import pprint
import json

from dotenv import dotenv_values
import requests

config = dotenv_values(".env")
In [23]:
access_token = config['ACCESS_TOKEN']
In [31]:
data = {
    "metadata": {
        "title": "My first upload",
        "upload_type": "poster",
        "description": "This is my first upload",
        "creators": [
            {"name": "Doe, John", "affiliation": "Zenodo"}
        ]
    }
}
In [36]:
headers = {"Content-Type": "application/json"}
params = {
    "access_token": access_token
}
r = requests.post('https://sandbox.zenodo.org/api/deposit/depositions',
                 data=json.dumps(data),
                 params=params,
                 headers=headers)
In [37]:
print(r.status_code)
201
In [ ]:
# I need the id of the upload to publish
print(r.json())
{'created': '2025-07-07T16:20:19.283543+00:00', 'modified': '2025-07-07T16:20:19.376843+00:00', 'id': 283543, 'conceptrecid': '283542', 'metadata': {'title': 'My first upload', 'publication_date': '2025-07-07', 'description': 'This is my first upload', 'access_right': 'open', 'creators': [{'name': 'Doe, John', 'affiliation': 'Zenodo'}], 'license': 'cc-by-4.0', 'imprint_publisher': 'Zenodo', 'upload_type': 'poster', 'prereserve_doi': {'doi': '10.5281/zenodo.283543', 'recid': 283543}}, 'title': 'My first upload', 'links': {'self': 'https://sandbox.zenodo.org/api/deposit/depositions/283543', 'html': 'https://sandbox.zenodo.org/deposit/283543', 'badge': 'https://sandbox.zenodo.org/badge/doi/.svg', 'files': 'https://sandbox.zenodo.org/api/deposit/depositions/283543/files', 'bucket': 'https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca', 'latest_draft': 'https://sandbox.zenodo.org/api/deposit/depositions/283543', 'latest_draft_html': 'https://sandbox.zenodo.org/deposit/283543', 'publish': 'https://sandbox.zenodo.org/api/deposit/depositions/283543/actions/publish', 'edit': 'https://sandbox.zenodo.org/api/deposit/depositions/283543/actions/edit', 'discard': 'https://sandbox.zenodo.org/api/deposit/depositions/283543/actions/discard', 'newversion': 'https://sandbox.zenodo.org/api/deposit/depositions/283543/actions/newversion'}, 'record_id': 283543, 'owner': 45472, 'files': [], 'state': 'unsubmitted', 'submitted': False}
In [51]:
bucket_url = r.json()["links"]["bucket"]
In [52]:
bucket_url
Out [52]:
'https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca'
In [55]:
filename = "43100024.parquet"
with open(f"/data/tables/output/en/{filename}", "rb") as fp:
    r = requests.put(f"{bucket_url}/{filename}",
                     data=fp,
                     params=params)
https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca/43100024.parquet
In [ ]:
# The version link is for this specific version
r.json()
{'created': '2025-07-07T16:28:23.225641+00:00',
 'updated': '2025-07-07T16:29:20.759483+00:00',
 'version_id': 'fd809f90-47bd-4248-9489-7cb72c3a5e69',
 'key': '43100024.parquet',
 'size': 184126112,
 'mimetype': 'application/octet-stream',
 'checksum': 'md5:4b5503868cb364b34883aa81560b86df',
 'is_head': True,
 'delete_marker': False,
 'links': {'self': 'https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca/43100024.parquet',
  'version': 'https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca/43100024.parquet?version_id=fd809f90-47bd-4248-9489-7cb72c3a5e69',
  'uploads': 'https://sandbox.zenodo.org/api/files/42ffdb14-7d46-4e5a-b71b-0ccb6ebff3ca/43100024.parquet?uploads=1'}}
In [ ]:
# Publish the upload
id = "283543"
r = requests.post(f"https://sandbox.zenodo.org/api/deposit/depositions/{id}/actions/publish",
                  params=params)
In [61]:
r.status_code
Out [61]:
202
In [62]:
# Create a new version
r = requests.post(f"https://sandbox.zenodo.org/api/deposit/depositions/{id}/actions/newversion",
                  params=params)
In [64]:
r.status_code
Out [64]:
201
In [65]:
r.json()
Out [65]:
{'created': '2025-07-07T16:41:03.554066+00:00',
 'modified': '2025-07-07T16:41:03.709857+00:00',
 'id': 283548,
 'conceptrecid': '283542',
 'conceptdoi': '10.5072/zenodo.283542',
 'metadata': {'title': 'My first upload',
  'description': 'This is my first upload',
  'access_right': 'open',
  'creators': [{'name': 'Doe, John', 'affiliation': 'Zenodo'}],
  'license': 'cc-by-4.0',
  'imprint_publisher': 'Zenodo',
  'upload_type': 'poster',
  'prereserve_doi': {'doi': '10.5281/zenodo.283548', 'recid': 283548}},
 'title': 'My first upload',
 'links': {'self': 'https://sandbox.zenodo.org/api/deposit/depositions/283548',
  'html': 'https://sandbox.zenodo.org/deposit/283548',
  'badge': 'https://sandbox.zenodo.org/badge/doi/.svg',
  'files': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/files',
  'bucket': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5',
  'latest_draft': 'https://sandbox.zenodo.org/api/deposit/depositions/283548',
  'latest_draft_html': 'https://sandbox.zenodo.org/deposit/283548',
  'publish': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/publish',
  'edit': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/edit',
  'discard': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/discard',
  'newversion': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/newversion'},
 'record_id': 283548,
 'owner': 45472,
 'files': [{'id': 'e17e0ee2-713c-41f4-8473-bb20e261f262',
   'filename': '43100024.parquet',
   'filesize': 184126112,
   'checksum': '4b5503868cb364b34883aa81560b86df',
   'links': {'self': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/files/e17e0ee2-713c-41f4-8473-bb20e261f262',
    'download': 'https://sandbox.zenodo.org/api/records/283548/draft/files/43100024.parquet/content'}}],
 'state': 'unsubmitted',
 'submitted': False}
In [72]:
# Need the "id" to publish the new version
id = "283548"
In [66]:
bucket_url = r.json()["links"]["bucket"]
In [67]:
bucket_url
Out [67]:
'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5'
In [68]:
# Add a different file
filename = "12100136.parquet"
with open(f"/data/tables/output/en/{filename}", "rb") as fp:
    r = requests.put(f"{bucket_url}/43100024.parquet",
                     data=fp,
                     params=params)
In [ ]:
201
In [71]:
r.json()
Out [71]:
{'created': '2025-07-07T18:20:35.453877+00:00',
 'updated': '2025-07-07T18:24:47.259818+00:00',
 'version_id': '20745124-2e18-4062-b1cb-43571916e3a3',
 'key': '43100024.parquet',
 'size': 186230461,
 'mimetype': 'application/octet-stream',
 'checksum': 'md5:ab89ee1b1f09834f78f8ad1b46e97659',
 'is_head': True,
 'delete_marker': False,
 'links': {'self': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5/43100024.parquet',
  'version': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5/43100024.parquet?version_id=20745124-2e18-4062-b1cb-43571916e3a3',
  'uploads': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5/43100024.parquet?uploads=1'}}
In [ ]:
# Need to add the metadata.publication_date
# Date of publication in ISO8601 format (YYYY-MM-DD). Defaults to current date.
data = {
    "metadata": {
        "publication_date": "2025-07-14",
        "upload_type": "dataset",
        "title": "My second upload",
        "creators": [{"name": "Diego Ripley"}]
    }
}
r = requests.put(f"https://sandbox.zenodo.org/api/deposit/depositions/{id}",
                 params=params,
                 data=json.dumps(data))
print(r.json())
{'created': '2025-07-07T16:41:03.554066+00:00', 'modified': '2025-07-07T18:40:21.806148+00:00', 'id': 283548, 'conceptrecid': '283542', 'conceptdoi': '10.5072/zenodo.283542', 'metadata': {'title': 'My second upload', 'publication_date': '2025-06-14', 'access_right': 'open', 'creators': [{'name': 'Diego Ripley', 'affiliation': None}], 'license': 'cc-zero', 'imprint_publisher': 'Zenodo', 'upload_type': 'dataset', 'prereserve_doi': {'doi': '10.5281/zenodo.283548', 'recid': 283548}}, 'title': 'My second upload', 'links': {'self': 'https://sandbox.zenodo.org/api/deposit/depositions/283548', 'html': 'https://sandbox.zenodo.org/deposit/283548', 'badge': 'https://sandbox.zenodo.org/badge/doi/.svg', 'files': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/files', 'bucket': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5', 'latest_draft': 'https://sandbox.zenodo.org/api/deposit/depositions/283548', 'latest_draft_html': 'https://sandbox.zenodo.org/deposit/283548', 'publish': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/publish', 'edit': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/edit', 'discard': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/discard', 'newversion': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/newversion'}, 'record_id': 283548, 'owner': 45472, 'files': [{'id': '97507810-a355-416e-8f6c-679c9dc1d564', 'filename': '43100024.parquet', 'filesize': 186230461, 'checksum': 'ab89ee1b1f09834f78f8ad1b46e97659', 'links': {'self': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/files/97507810-a355-416e-8f6c-679c9dc1d564', 'download': 'https://sandbox.zenodo.org/api/records/283548/draft/files/43100024.parquet/content'}}], 'state': 'unsubmitted', 'submitted': False}
In [83]:
r = requests.post(f"https://sandbox.zenodo.org/api/deposit/depositions/{id}/actions/publish",
                  params=params)
In [84]:
r.json()
Out [84]:
{'created': '2025-07-07T18:40:25.191132+00:00',
 'modified': '2025-07-07T18:40:25.367499+00:00',
 'id': 283548,
 'conceptrecid': '283542',
 'doi': '10.5072/zenodo.283548',
 'conceptdoi': '10.5072/zenodo.283542',
 'doi_url': 'https://doi.org/10.5072/zenodo.283548',
 'metadata': {'title': 'My second upload',
  'doi': '10.5072/zenodo.283548',
  'publication_date': '2025-06-14',
  'access_right': 'open',
  'creators': [{'name': 'Diego Ripley', 'affiliation': None}],
  'license': 'cc-zero',
  'imprint_publisher': 'Zenodo',
  'upload_type': 'dataset',
  'prereserve_doi': {'doi': '10.5281/zenodo.283548', 'recid': 283548}},
 'title': 'My second upload',
 'links': {'self': 'https://sandbox.zenodo.org/api/records/283548',
  'html': 'https://sandbox.zenodo.org/records/283548',
  'doi': 'https://doi.org/10.5072/zenodo.283548',
  'parent_doi': 'https://doi.org/10.5072/zenodo.283542',
  'badge': 'https://sandbox.zenodo.org/badge/doi/10.5072%2Fzenodo.283548.svg',
  'conceptbadge': 'https://sandbox.zenodo.org/badge/doi/10.5072%2Fzenodo.283542.svg',
  'files': 'https://sandbox.zenodo.org/api/records/283548/files',
  'bucket': 'https://sandbox.zenodo.org/api/files/522c1cea-4970-40cd-9e78-7f15303205d5',
  'latest_draft': 'https://sandbox.zenodo.org/api/deposit/depositions/283548',
  'latest_draft_html': 'https://sandbox.zenodo.org/deposit/283548',
  'publish': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/publish',
  'edit': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/edit',
  'discard': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/discard',
  'newversion': 'https://sandbox.zenodo.org/api/deposit/depositions/283548/actions/newversion',
  'record': 'https://sandbox.zenodo.org/api/records/283548',
  'record_html': 'https://sandbox.zenodo.org/record/283548',
  'latest': 'https://sandbox.zenodo.org/api/records/283548/versions/latest',
  'latest_html': 'https://sandbox.zenodo.org/records/283548/latest'},
 'record_id': 283548,
 'owner': 45472,
 'files': [{'id': '97507810-a355-416e-8f6c-679c9dc1d564',
   'filename': '43100024.parquet',
   'filesize': 186230461,
   'checksum': 'ab89ee1b1f09834f78f8ad1b46e97659',
   'links': {'self': 'https://sandbox.zenodo.org/api/records/283548/files/97507810-a355-416e-8f6c-679c9dc1d564',
    'download': 'https://sandbox.zenodo.org/api/records/283548/draft/files/43100024.parquet/content'}}],
 'state': 'done',
 'submitted': True}
In [ ]: