Skip to main content

"A model builder plugin to reference relations"

Project description

Relations plugin for model builder

Relation data type

The relation data type marks part of the metadata that will be filled with a related object.

Example usage - part of dataset model:

primary-article:
    type:  relation
    name:  article
    model: article
    keys: ['metadata.title', 'metadata.authors']

The element "primary-article" will be connected to the article record. The record class and properties will be taken from the "article" model that is registered in "oarepo_models" entrypoint.

When returned to the user/serialized to ES, it will take the title and author fields from the related model and copy them into the primary-article field.

It will automatically generate the following schema:

will generate:

// schema
{
    "primary-article": {
        "type": "object",
        "properties": {
            "id": {"type": "string"},
            "@v": {"type": "string"},
            "title": {},     // copied from registered article model
            "authors": {}    // copied from registered article model
        }
    }
}
class Record:
    # ...
    relations = MultiRelationsField(
        article=PIDRelation(                # "name" from above
            "...primary-article",           # path inside the dataset model
            "keys": ['metadata.title', 'metadata.authors'],   # copied keys
            pid_field: Article.pid          # resolved model name and PID field
        )
    )

All arguments:

primary-article:
    type: relation
    name: ...
    model: ...
    keys: [...]
    model-class:
    relation-classes:
        list: PIDListRelation
        nested: PIDNestedListRelation
        single: PIDRelation
    relation-class:
    relation-args:
        attrs: []
        keys: []
        _value_key_suffix: id
        _clear_empty: true
        cache_key:
        value_check:
        pid_field: model-class.pid
    imports:
    - import: invenio_records_resources.records.system_fields.relations.PIDRelation
      alias: PIDRelation
Field Description
name Relation name, will be used as param name inside RelationsField
model Name of the referenced model - from oarepo.models entrypoint or passed on commandline via --include parameter
keys Array of paths or dicts. If item is a path, that path will be copied from the referenced model. If it is dict it must contain the whole model definition.
model-class Class representing the related model
relation-classes If the field is not an array and not nested inside an array, "single" is used. If the field is an array "list" is used. If the field is inside an array field, "nested" is used
relation-class can be used to override relation-classes
relation-args A dictionary of arguments that will be passes to the relation class
imports You can define your own imports/aliases here. The defaults are thise for list, nested and single relation classes

Internal relations

Sometimes it you might want to reference part of your document for indexing purposes etc. and not split the document into two records. For these, internal relations can be used:

properties:
    metadata:
        properties:
            obj{}:
                ^id: anchor-obj
                test: keyword
                id: keyword

On object/array item, define the "id" field containing your "symbolic" name of the target of the relation. Then the definition of the relation will look like:

properties:
    metadata:
        properties:
            internal-ref:
                type: relation
                model: "#anchor-obj"
                keys: [id, test]

Supported relations

See referrer.yaml for a list of supported relations.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oarepo-model-builder-relations-4.0.10.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

oarepo_model_builder_relations-4.0.10-py2.py3-none-any.whl (15.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file oarepo-model-builder-relations-4.0.10.tar.gz.

File metadata

File hashes

Hashes for oarepo-model-builder-relations-4.0.10.tar.gz
Algorithm Hash digest
SHA256 d639fac07b5ca5ae23dc602fcee12d155d8924cec1785548395ed3625babceed
MD5 f1ad1b2375447c199c24748e77954624
BLAKE2b-256 c84bf7bbfe74473a034812ab0580a0b637b38aaa0d3d04c99620c43a52687cbc

See more details on using hashes here.

File details

Details for the file oarepo_model_builder_relations-4.0.10-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for oarepo_model_builder_relations-4.0.10-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 85568dbc01b7954364c0899e47fb051f073906bef4d9f111e44d93e1f3e2f4d6
MD5 5d4776f81ca0bdd2ab95ed3bcbd99ded
BLAKE2b-256 e0037fdf5eb3a0026d23fee11a5c483e89b165f2ed96158f18de599b3de2b27c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page