Skip to main content

OARepo RDM

Runtime extensions for integrating custom metadata models with Invenio RDM.

Overview

This package provides a set of runtime patches that enable the RDM service to work seamlessly with different metadata models. It extends the standard Invenio RDM functionality by:

  • Patching RDM service methods (search, search_drafts, scan, read) to search and operate across multiple models
  • Delegating PID-based method calls to specialized per-model services
  • Modifying the PID context of RDMRecord/RDMDraft to return specialized record instances on resolve
  • Enabling registration of custom services/resources in place of default RDM ones

This package depends on OARepo patches to invenio_rdm_records that provide the infrastructure for registering custom service/resource implementations.

Installation

pip install oarepo-rdm

Requirements

  • Python 3.13+
  • Invenio 14.x
  • oarepo-runtime >= 2.0.0dev5
  • oarepo-model >= 0.1.0dev17

Key Features

1. Multi-Model Service Integration

Source: oarepo_rdm/ext.py, oarepo_rdm/services/

The package patches RDM service methods to enable unified operations across multiple metadata models:

# The patched service can search across all registered models
results = rdm_service.search(identity=identity)

# PID-based operations are delegated to model-specific services
record = rdm_service.read(identity=identity, id_=record_id)

Patched methods:

  • search - Searches across all registered models
  • search_drafts - Searches draft records across models
  • scan - Scans records across models
  • read - Delegates to specialized service based on record PID

2. Specialized Record Resolution

Source: oarepo_rdm/records/

The PID context is patched so that resolving a PID returns an instance of the specialized record class rather than the generic RDM record:

# Resolving a PID returns the model-specific record class
record = pid.resolve()  # Returns MyCustomRecord instance

This ensures that model-specific behavior and fields are available when working with resolved records.

3. Custom Service and Resource Registration

Source: oarepo_rdm/model/presets/rdm/

The package provides infrastructure for registering custom services and resources for specific metadata models:

  • Records: Custom record and draft implementations (records/)
  • Resources: Custom resource configurations (resources/)
  • Services: Custom service implementations (services/)

4. RDM Metadata Presets

Source: oarepo_rdm/model/presets/rdm_metadata/

Pre-configured RDM metadata elements and schemas:

  • rdm_elements.yaml - Reusable RDM metadata field definitions
  • rdm.yaml - Complete RDM metadata schema preset

These presets provide a starting point for creating RDM-compatible custom models.

5. OAI-PMH Integration

Source: oarepo_rdm/oai/

Full OAI-PMH support with percolator-based set management:

from oarepo_rdm.oai import OAIPMHPresets

# Configure OAI-PMH for your model
presets = OAIPMHPresets(serializer=datacite_serializer, config=oai_config)

Components:

6. PID System Fields

Source: oarepo_rdm/records/systemfields/pid.py

Enhanced PID system fields that integrate with the multi-model architecture:

from oarepo_rdm.records.systemfields import OARepoPIDField


class MyRecord(RDMRecord):
    pid = OARepoPIDField()

7. Unified Permission Policy

Source: Configuration via RDM_PERMISSION_POLICY

For performance reasons, permissions for search and scan operations are evaluated at the RDM records level, not on the specialized-service layer. This means that the permissions defined for the RDM records service apply to all requests, regardless of which specialized service is handling the request.

Important: All models must use the same permission policy, configured via the RDM_PERMISSION_POLICY configuration variable.

# In your configuration
RDM_PERMISSION_POLICY = MyUnifiedPermissionPolicy

8. Response Handlers

Source: oarepo_rdm/resources/records/response_handlers.py

Custom response handlers for RDM resources that properly handle multi-model scenarios.

9. Internationalization Support

Source: oarepo_rdm/i18n/

Full i18n support with translations for Czech and English:

  • Message catalogs for UI elements
  • Webpack integration for frontend translations
  • Semantic UI translation bundles

Development

Setup

# Clone repository
git clone https://github.com/oarepo/oarepo-rdm.git
cd oarepo-rdm

./run.sh venv

Running Tests

./run.sh test

The test suite includes:

  • RDM CRUD operations (test_rdm_crud.py)
  • Search functionality (test_search.py, test_search_drafts.py)
  • PID resolution (test_pid.py)
  • OAI-PMH integration (test_oai.py)
  • Resource endpoints (test_resources.py)
  • Service tasks (test_service_tasks.py)
  • Secret links (test_secret_links.py)
  • Runtime model behavior (test_runtime_model.py)

Entry Points

The package registers several Invenio entry points:

[project.entry-points."invenio_config.module"]
oarepo_rdm = "oarepo_rdm.initial_config"

[project.entry-points."invenio_base.apps"]
invenio_rdm_records = "invenio_rdm_records.ext:InvenioRDMRecords"
oarepo_rdm = "oarepo_rdm.ext:OARepoRDM"

[project.entry-points."invenio_base.api_apps"]
invenio_rdm_records = "invenio_rdm_records.ext:InvenioRDMRecords"
oarepo_rdm = "oarepo_rdm.ext:OARepoRDM"

[project.entry-points."invenio_base.api_blueprints"]
invenio_rdm_records = "invenio_rdm_records.views:create_records_bp"
# ... and more RDM blueprints

[project.entry-points."invenio_base.finalize_app"]
invenio_rdm_records = "invenio_rdm_records.ext:finalize_app"
oarepo_rdm = "oarepo_rdm.ext:finalize_app"

[project.entry-points."invenio_search.index_templates"]
oarepo_rdm_oai = "oarepo_rdm.oai.index_templates"

[project.entry-points."invenio_search.mappings"]
oarepo_rdm_oai = "oarepo_rdm.oai.mappings"

[project.entry-points."oarepo.cli.search.init"]
install_percollators = "oarepo_rdm.oai.percolator:init_percolators"

License

Copyright (c) 2020-2025 CESNET z.s.p.o.

OARepo RDM is free software; you can redistribute it and/or modify it under the terms of the MIT License. See LICENSE file for more details.

Links

Acknowledgments

This project builds upon Invenio RDM and is developed as part of the OARepo ecosystem.

Metadata

Release files for oarepo-rdm 8.6.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 oarepo-rdm 8.6.1
File Size Uploaded
oarepo_rdm-8.6.1.tar.gz 59.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oarepo-rdm 8.6.1
File Interpreter ABI Platform
oarepo_rdm-8.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 188.7 kB

Release files / oarepo_rdm-8.6.1.tar.gz

Download URL oarepo_rdm-8.6.1.tar.gz
Size 59.4 kB
Tags Source
SHA-256 checksum
How to use checksums
266bd6dec16d142a3b4b85a27b71d3759652e1ff8f552a358cc2b688b6c13952
BLAKE2b-256 checksum
How to use checksums
acde57f4267c88e01f52f1eeca29d663cb6da02756bf8e8402a9c1a032f151cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / oarepo_rdm-8.6.1-py3-none-any.whl

Download URL oarepo_rdm-8.6.1-py3-none-any.whl
Size 129.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fd110d6394b8cf903f19d58b138cc242e55d2b0d287ccdd1c16bb6dd8b11dc71
BLAKE2b-256 checksum
How to use checksums
697de06cb48acf15a685bb7a75a86af4a75ee588eef3d39cf457715f48726961
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

8.6.2

2 release files

This release

8.6.1 This release

2 release files

8.6.0

2 release files

8.5.1

2 release files

8.5.0

2 release files

8.4.1

2 release files

8.4.0

2 release files

8.3.2

2 release files

8.3.1

2 release files

8.3.0

2 release files

8.2.0

2 release files

8.1.0

2 release files

8.0.0

2 release files

7.2.1

2 release files

7.2.0

2 release files

7.1.0

2 release files

7.0.1

2 release files

7.0.0

2 release files

6.0.0

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.4.0

2 release files

3.3.0

2 release files

3.2.0

2 release files

3.1.4

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.0.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.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