コード例 #1
0
class CommonFieldsMixin:
    """Common system fields between records and drafts."""

    versions_model_cls = models.RDMVersionsState
    parent_record_cls = RDMParent

    schema = ConstantField(
       '$schema', 'local://records/record-v2.0.0.json')

    dumper = ElasticsearchDumper(
        extensions=[
            EDTFDumperExt('metadata.publication_date'),
            EDTFListDumperExt("metadata.dates", "date"),
            RelationDumperExt('relations'),
        ]
    )

    relations = RelationsField(
        languages=PIDListRelation(
            'metadata.languages',
            attrs=['id', 'title'],
            pid_field=Vocabulary.pid.with_type_ctx('languages')
        ),
    )

    bucket_id = ModelField(dump=False)

    bucket = ModelField(dump=False)

    access = RecordAccessField()

    is_published = PIDStatusCheckField(status=PIDStatus.REGISTERED, dump=True)

    pids = DictField("pids")
コード例 #2
0
 class Record3(Record, SystemFieldsMixin):
     relations = RelationsField(languages=PKListRelation(
         key='languages',
         attrs=['iso', 'information.ethnicity'],
         record_cls=Language,
         value_check=dict(wrong_value=dict(ethnicity=['English'])),
     ))
コード例 #3
0
ファイル: api.py プロジェクト: chokribr/invenio-rdm-records
class BibliographicRecord(Record):
    """Bibliographic Record API."""

    model_cls = models.RecordMetadata

    index = IndexField('rdmrecords-records-record-v1.0.0',
                       search_alias='rdmrecords-records')

    dumper = ElasticsearchDumper(extensions=[
        EDTFDumperExt('metadata.publication_date'),
        RelationDumperExt('relations'),
    ])

    relations = RelationsField(languages=PIDListRelation(
        'metadata.languages', attrs=['metadata'], pid_field=Language.pid), )

    files = FilesField(
        store=False,
        file_cls=RecordFile,
        # Don't create
        create=False,
        # Don't delete, we'll manage in the service
        delete=False,
    )
    bucket_id = ModelField(dump=False)
    bucket = ModelField(dump=False)
コード例 #4
0
ファイル: api.py プロジェクト: astrowq/invenio-rdm-records
class CommonFieldsMixin:
    """Common system fields between records and drafts."""

    versions_model_cls = models.RDMVersionsState
    parent_record_cls = RDMParent

    schema = ConstantField(
       '$schema', 'http://localhost/schemas/records/record-v2.0.0.json')

    dumper = ElasticsearchDumper(
        extensions=[
            EDTFDumperExt('metadata.publication_date'),
            EDTFListDumperExt("metadata.dates", "date"),
            RelationDumperExt('relations'),
        ]
    )

    relations = RelationsField(
        languages=PIDListRelation(
            'metadata.languages',
            attrs=['id', 'title'],
            pid_field=Vocabulary.pid.with_type_ctx('languages')
        ),
    )

    bucket_id = ModelField(dump=False)

    bucket = ModelField(dump=False)

    access = RecordAccessField()

    # We redefine the property as we extend the `PIDStatusCheckField` to dump
    # the property in ES in order to be available for aggregation
    is_published = IsPublishedField(status=PIDStatus.REGISTERED)
コード例 #5
0
 class Record1(Record, SystemFieldsMixin):
     relations = RelationsField(language=PKRelation(
         key='language',
         attrs=['iso'],
         record_cls=Language,
         value_check=dict(information=dict(ethnicity='English')),
     ))
コード例 #6
0
 class Record3(Record, SystemFieldsMixin):
     relations = RelationsField(
         nested_array_of_objects=PKNestedListRelation(
             key='nested_array_of_objects',
             attrs=['iso'],
             record_cls=Language,
             relation_field='languages',
             value_check=dict(wrong_value=dict(ethnicity=['English'])),
         ), )
コード例 #7
0
 class Record1(Record, SystemFieldsMixin):
     relations = RelationsField(
         deep_single=PKRelation(key='metadata.deep.language',
                                record_cls=Language),
         deep_list=PKListRelation(key='metadata.deep.languages',
                                  record_cls=Language),
         deep_sibling=PKRelation(key='metadata.deep.dark.language',
                                 record_cls=Language),
     )
コード例 #8
0
 def __new__(mcs, name, bases, attrs):
     """Create and return a new class with `.relations`-attribute."""
     cls = super().__new__(mcs, name, bases, attrs)
     relations = RelationsField(
         wholes=PIDLOMRelation(
             source="LOMv1.0",
             value="ispartof",
             pid_field=cls.pid,
             cache_key="lom-wholes",
         ),
         parts=PIDLOMRelation(
             source="LOMv1.0",
             value="haspart",
             pid_field=cls.pid,
             cache_key="lom-parts",
         ),
     )
     relations.__set_name__(cls, "relations")
     cls.relations = relations
     return cls
コード例 #9
0
 class Record1(Record, SystemFieldsMixin):
     # end result should be
     # {
     #   nested_languages: [
     #       [en, fr],
     #       [es, fr],
     #   ]
     # }
     relations = RelationsField(nested_languages=PKNestedListRelation(
         key='nested_languages',
         attrs=['iso'],
         record_cls=Language,
     ), )
コード例 #10
0
 class Record1(Record, SystemFieldsMixin):
     # end result should be
     # {
     #   nested_array: [
     #       {languages: [en, fr]},
     #       {languages: [en, es]}
     #   ]
     # }
     relations = RelationsField(
         nested_array_of_objects=PKNestedListRelation(
             key='nested_array_of_objects',
             attrs=['iso'],
             record_cls=Language,
             relation_field='languages'), )
コード例 #11
0
class Record(RecordBase):
    """Example bibliographic record API."""

    model_cls = models.RecordMetadata
    schema = ConstantField('$schema', 'local://records/record-v1.0.0.json')
    index = IndexField('records-record-v1.0.0', search_alias='records')
    pid = PIDField('id', provider=RecordIdProviderV2)

    # Definitions of relationships from a bibliographic record to the
    # generic vocabularies.
    relations = RelationsField(languages=PIDListRelation(
        'metadata.languages',
        keys=['id', 'title'],
        pid_field=Vocabulary.pid.with_type_ctx('languages')), )

    dumper = ElasticsearchDumper(extensions=[
        RelationDumperExt('relations'),
    ])
コード例 #12
0
 class Record1(Record, SystemFieldsMixin):
     relations = RelationsField(language=PKRelation(key='language',
                                                    attrs=['iso'],
                                                    record_cls=Language), )
コード例 #13
0
from invenio_records.dumpers import ElasticsearchDumper
from invenio_records.dumpers.relations import RelationDumperExt
from invenio_records.systemfields import RelationsField
from invenio_records_resources.factories.factory import RecordTypeFactory
from invenio_records_resources.records.systemfields import PIDListRelation

from ...records.pidprovider import PIDProviderFactory
from ...records.systemfields import BaseVocabularyPIDFieldContext
from ...services.permissions import PermissionPolicy
from ..affiliations.api import Affiliation
from .config import NamesSearchOptions, service_components
from .schema import NameSchema

name_relations = RelationsField(affiliations=PIDListRelation(
    'affiliations',
    keys=['name'],
    pid_field=Affiliation.pid,
    cache_key='affiliations',
))

record_type = RecordTypeFactory(
    "Name",
    # Data layer
    pid_field_kwargs={
        "create":
        False,
        "provider":
        PIDProviderFactory.create(pid_type='names',
                                  base_cls=RecordIdProviderV2),
        "context_cls":
        BaseVocabularyPIDFieldContext,
    },
コード例 #14
0
 class Record1(Record, SystemFieldsMixin):
     relations = RelationsField(array_of_objects=PKListRelation(
         key='array_of_objects',
         attrs=['iso'],
         record_cls=Language,
         relation_field='language'), )
コード例 #15
0
 class Record1(Record, SystemFieldsMixin):
     relations = RelationsField(languages=PKListRelation(
         key='languages',
         attrs=['iso', 'information.ethnicity'],
         record_cls=Language), )
コード例 #16
0
class CommonFieldsMixin:
    """Common system fields between records and drafts."""

    versions_model_cls = models.RDMVersionsState
    parent_record_cls = RDMParent

    schema = ConstantField(
       '$schema', 'local://records/record-v5.0.0.json')

    dumper = ElasticsearchDumper(
        extensions=[
            EDTFDumperExt('metadata.publication_date'),
            EDTFListDumperExt("metadata.dates", "date"),
            RelationDumperExt('relations'),
        ]
    )

    relations = RelationsField(
        creator_affiliations=PIDNestedListRelation(
            'metadata.creators',
            relation_field='affiliations',
            keys=['name'],
            pid_field=Affiliation.pid,
            cache_key='affiliations',
        ),
        contributor_affiliations=PIDNestedListRelation(
            'metadata.contributors',
            relation_field='affiliations',
            keys=['name'],
            pid_field=Affiliation.pid,
            cache_key='affiliations',
        ),
        languages=PIDListRelation(
            'metadata.languages',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('languages'),
            cache_key='languages',
        ),
        resource_type=PIDRelation(
            'metadata.resource_type',
            keys=['title', 'props.type', 'props.subtype'],
            pid_field=Vocabulary.pid.with_type_ctx('resourcetypes'),
            cache_key='resource_type',
            value_check=dict(tags=['depositable']),
        ),
        subjects=PIDListRelation(
            'metadata.subjects',
            keys=['subject', 'scheme'],
            pid_field=Subject.pid,
            cache_key='subjects',
        ),
        licenses=PIDListRelation(
            'metadata.rights',
            keys=['title', 'description',
                  'icon', 'props.url', 'props.scheme'],
            pid_field=Vocabulary.pid.with_type_ctx('licenses'),
            cache_key='licenses',
        ),
        related_identifiers=PIDListRelation(
            'metadata.related_identifiers',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('resourcetypes'),
            cache_key='resource_type',
            relation_field='resource_type',
            value_check=dict(tags=['linkable']),
        ),
        title_types=PIDListRelation(
            'metadata.additional_titles',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('titletypes'),
            cache_key='title_type',
            relation_field='type',
        ),
        title_languages=PIDListRelation(
            'metadata.additional_titles',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('languages'),
            cache_key='languages',
            relation_field='lang',
        ),
        creators_role=PIDListRelation(
            'metadata.creators',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('creatorsroles'),
            cache_key='role',
            relation_field='role'
        ),
        contributors_role=PIDListRelation(
            'metadata.contributors',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('contributorsroles'),
            cache_key='role',
            relation_field='role'
        ),
        description_type=PIDListRelation(
            'metadata.additional_descriptions',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('descriptiontypes'),
            cache_key='description_type',
            relation_field='type',
        ),
        description_languages=PIDListRelation(
            'metadata.additional_descriptions',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('languages'),
            cache_key='languages',
            relation_field='lang',
        ),
        date_types=PIDListRelation(
            'metadata.dates',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('datetypes'),
            cache_key='date_types',
            relation_field='type',
        ),
        relation_types=PIDListRelation(
            'metadata.related_identifiers',
            keys=['title'],
            pid_field=Vocabulary.pid.with_type_ctx('relationtypes'),
            cache_key='relation_types',
            relation_field='relation_type',
        ),
    )

    bucket_id = ModelField(dump=False)

    bucket = ModelField(dump=False)

    access = RecordAccessField()

    is_published = PIDStatusCheckField(status=PIDStatus.REGISTERED, dump=True)

    pids = DictField("pids")
コード例 #17
0
from invenio_db import db
from invenio_records.dumpers import ElasticsearchDumper
from invenio_records.dumpers.relations import RelationDumperExt
from invenio_records.systemfields import RelationsField
from invenio_records_resources.factories.factory import RecordTypeFactory
from invenio_records_resources.records.systemfields import ModelPIDField, \
    PIDRelation

from ...services.permissions import PermissionPolicy
from ..funders.api import Funder
from .config import AwardsSearchOptions, service_components
from .schema import AwardSchema

award_relations = RelationsField(funders=PIDRelation(
    'funder',
    keys=['name'],
    pid_field=Funder.pid,
    cache_key='funder',
))

record_type = RecordTypeFactory(
    "Award",
    # Data layer
    pid_field_cls=ModelPIDField,
    pid_field_kwargs={
        "model_field_name": "pid",
    },
    model_cls_attrs={
        # cannot set to nullable=False because it would fail at
        # service level when create({}), see records-resources.
        "pid": db.Column(db.String, unique=True),
    },