No project description provided
Project description
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/RDMDraftto 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 modelssearch_drafts- Searches draft records across modelsscan- Scans records across modelsread- 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 definitionsrdm.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:
- Percolator-based OAI set filtering (
percolator.py) - DataCite and Dublin Core serializers (
serializer.py) - OpenSearch index templates for OAI (
index_templates/) - OAI percolator mappings (
mappings/)
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
- Documentation: https://github.com/oarepo/oarepo-rdm
- PyPI: https://pypi.org/project/oarepo-rdm/
- Issues: https://github.com/oarepo/oarepo-rdm/issues
- OARepo Project: https://github.com/oarepo
Acknowledgments
This project builds upon Invenio RDM and is developed as part of the OARepo ecosystem.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oarepo_rdm-1.0.0.dev36.tar.gz.
File metadata
- Download URL: oarepo_rdm-1.0.0.dev36.tar.gz
- Upload date:
- Size: 39.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73a51734ab68822036e2f11192a99aa7ab6391807d941d1fc078a99b428068a7
|
|
| MD5 |
e7bb0f21f6faa70a3f173549cb3ad543
|
|
| BLAKE2b-256 |
bfaf7ebb9942d40ecab24f9998a7bf1e8f5a0c3813e572c9fa51310b0ee69a86
|
File details
Details for the file oarepo_rdm-1.0.0.dev36-py3-none-any.whl.
File metadata
- Download URL: oarepo_rdm-1.0.0.dev36-py3-none-any.whl
- Upload date:
- Size: 77.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d848942cbe9d005753c3a93157de0fdd2d851e59588d74df18407223021aad1e
|
|
| MD5 |
54aed81e7f6794453bf99f05ad469a82
|
|
| BLAKE2b-256 |
aa22dcec03350e2226b6f3b072a72e938427512919bdd1dc419f302c53ff3d38
|