OArepo module for tracking and updating references in Invenio records
Project description
OArepo references
OArepo module for tracking and updating references in Invenio records
Installation
To use this module in your Invenio application, run the following in your virtual environment:
pip install oarepo-references
Prerequisites
This module expects a canonical_url field present on your Record model. This field
should contain a full canonical url reference to the Record instance, e.g.
class Record(FilesRecord):
@property
def canonical_url(self):
return url_for('invenio_records_rest.recid_item',
pid_value=self['pid'], _external=True)
Types of reference
This module considers the following two types of reference that can occur the referencing objects:
Reference by link
Reference to another object is represented in the referencing
object's metadata as a canonical_url of the referenced object, e.g:
{
...
"links": {
"attachments": "https://example.org/objects/M249/attachments",
"self": "https://example.org/objects/M249",
"works": "https://example.org/objects/M249/works"
}
}
Inlined reference
The actual metadata content of the referenced object are inlined into the referencing object's metadata, e.g:
{
...
"stylePeriod": {
"id": 123,
"level": 1,
"links": {…},
"path": "/novovek-moderni-doba",
"slug": "novovek-moderni-doba",
"startYear": 1789,
"title": […],
"tooltip": ""
}
}
In the example above, the complete metadata of a certain Taxonomic record
are inlined into the stylePeriod field of the referencing object.
Usage
To enable reference tracking on your data model objects, you will need to do the following:
- Tell Marshmallow, which fields of your marshmallow schema contain references
by link by inheriting
ReferenceByLinkFieldMixin:
class URLReferenceField(ReferenceByLinkFieldMixin, URL):
"""URL reference marshmallow field."""
- If your Marshmallow Scheme holds inlined references, you
will need to define a custom nested schema for inlined reference
contents, that implements
ref_urlthat returns an URL to be used as a reference to the object and inherits fromInlineReferenceMixin, like this:
class InlinedReferenceSchema(InlineReferenceMixin, Schema):
"""Inlined reference schema."""
class Meta:
unknown = INCLUDE
def ref_url(self, data):
return data.get('links').get('self')
def ref_uuid(self, data):
return data.get('id', None)
- Use the reference-enabled field in your Marshmallow schema:
class ExampleReferencesSchema(Schema):
"""Reference to other objects schema."""
link = URLReferenceField()
inlined = Nested(InlinedReferenceSchema)
- Inherit your Record model from the
ReferenceEnabledRecordMixinandMarshmallowValidatedRecordMixin. Doing so, will add support for automatic Record updates whenever some reference contained in Record metadata changes:
class ExampleRecord(MarshmallowValidatedRecordMixin,
ReferenceEnabledRecordMixin,
Record):
"""References enabled example record class."""
MARSHMALLOW_SCHEMA = ExampleReferencesSchema
VALIDATE_MARSHMALLOW = True
VALIDATE_PATCH = True
@property
def canonical_url(self):
return url_for('invenio_records_rest.recid_item',
pid_value=self['pid'], _external=True)
Signals
This module will register the following signal handlers on the Invenio Records signals that handle managing of reference records whenever a Record changes:
| Invenio Records signal | Registered signal handler | Description |
|---|---|---|
| after_record_insert | create_references_record | Finds all references to other objects in a Record and creates RecordReference entries for each reference |
| after_record_update | update_references_record | Updates all RecordReferences that refer to the updated object and reindexes all referring Records |
| after_record_delete | delete_references_record | Deletes all RecordReferences referring to the deleted Record |
Module API
You can access all the API functions this module exposes through the current_references proxy.
For more info, see api.py.
Tasks
An asynchronous (Celery) tasks could be launched in a group on all objects referring to a certain Record like this:
from oarepo_references.utils import run_task_on_referrers
run_task_on_referrers(referred,
task.s(),
success_task.s(),
error_task.s())
Further documentation is available on https://oarepo-references.readthedocs.io/
.. Copyright (C) 2019 Miroslav Bauer, CESNET.
oarepo-references is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more
details.
Changes
Version 0.1.0 (released TBD)
- Initial public release.
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-references-1.12.0.tar.gz.
File metadata
- Download URL: oarepo-references-1.12.0.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3370daf59b6f4916bdbcf853310959600a00082c0d4f52528768ceea105b8067
|
|
| MD5 |
3e97ad4870d5a546cf3248524bcd8071
|
|
| BLAKE2b-256 |
373dc88523f50330c1226f474ed87a958da5a7268b6cfbd8f32623d50ae1402c
|
File details
Details for the file oarepo_references-1.12.0-py2.py3-none-any.whl.
File metadata
- Download URL: oarepo_references-1.12.0-py2.py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/3.10.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
524f5a4217fe49d5a0b716875ab4b424ffe83c417ed91e75c6abab9dbb49bce3
|
|
| MD5 |
6c56bddf90eccb610278182750824c75
|
|
| BLAKE2b-256 |
6b1b5e7370d7ce828111c079265ed5f3a61c3e83ddaa4dd19ed83374ed4b7393
|