Skip to main content

zenodo-mock

A local, credential-free stand-in for the Zenodo API, so a full publish round-trip can run on a dev VM or in CI without a Zenodo token.

Stdlib only — no runtime dependencies.

Install

pip install zenodo-mock

Run

zenodo-mock --port 8766
# Deposit API:  http://127.0.0.1:8766/api/deposit/depositions

(Or python -m zenodo_mock --port 8766.)

The deposit API always runs. Pass --source-outputs <dir> to also serve a fixed pre-staged read record (the fetch/consume demo); omit it to run deposit-only, which is all a bare VM needs. Uploaded deposit files land under --storage-dir.

Publish round-trip (no token)

Point any Zenodo publisher at the mock. For example, marinerg-data:

marinerg-data publish <bundle> --zenodo-url http://127.0.0.1:8766/api --skip-ckan
# → mints a DOI (10.5072/zenodo.<id>), uploads files, and the record becomes
#   resolvable at /api/records/<id>. --new-version works too.

The DOI is pre-reserved on the draft and returned in metadata.prereserve_doi, as Zenodo's deposit API does — so a publisher can record the identifier before it takes the step it cannot undo.

Use it from a test

from zenodo_mock.testing import spawn

def test_publish_round_trip(tmp_path):
    with spawn(tmp_path / "deposits") as base_url:
        publish_against(f"{base_url}/api")

spawn runs the mock in a subprocess on a kernel-chosen port, waits for it to be serving, and tears it down — so concurrent suites cannot collide, and no caller has to reimplement the readiness wait. Add zenodo-mock to your dev dependency group.

What it implements

The subset of the Zenodo deposit API a publisher drives: create deposition, bucket upload, delete file, set metadata, publish (mints a DOI and registers a resolvable record), and new-version. State is in-memory. Not a faithful Zenodo — just enough for the round-trip.

Provenance

Extracted from marinerg-i/data-access-service (infra/zenodo_mock/) when that repo was archived, so the mock could be reused independently of the catalogue.

tests/test_server.py covers the deposit store, tests/test_http.py the HTTP layer over it, and tests/test_spawn.py the subprocess helper. The mock is also driven by the suites of marinerg-data and ckanext-marinerg, which is what proves their encodings of the Zenodo API and this one agree.

Licence

AGPL-3.0-or-later. See LICENSE.

Release files for zenodo-mock 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zenodo-mock 0.1.1
File Size Uploaded
zenodo_mock-0.1.1.tar.gz 25.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for zenodo-mock 0.1.1
File Interpreter ABI Platform
zenodo_mock-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 47.7 kB

Release files / zenodo_mock-0.1.1.tar.gz

Download URL zenodo_mock-0.1.1.tar.gz
Size 25.7 kB
Tags Source
SHA-256 checksum
How to use checksums
34942382f6f1a9dd941645c275e6399f73c8154aefb38acd4dd5dc7fb71491e6
BLAKE2b-256 checksum
How to use checksums
2e7fccbfb8c8e1935c71cf0d0ec0a567ac670ff6611d7b7271523e87e842dab5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / zenodo_mock-0.1.1-py3-none-any.whl

Download URL zenodo_mock-0.1.1-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e710a21c4217bebdbf4508758bf58dd93eb7bc9a1917ca71da93313bc920c4a0
BLAKE2b-256 checksum
How to use checksums
9e8225ed87ad5e5c817da1d147ffc2530a3a805536b1a719295f90e6be73c076
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page