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")
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'])), ))
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)
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)
class Record1(Record, SystemFieldsMixin): relations = RelationsField(language=PKRelation( key='language', attrs=['iso'], record_cls=Language, value_check=dict(information=dict(ethnicity='English')), ))
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'])), ), )
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), )
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
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, ), )
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'), )
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'), ])
class Record1(Record, SystemFieldsMixin): relations = RelationsField(language=PKRelation(key='language', attrs=['iso'], record_cls=Language), )
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, },
class Record1(Record, SystemFieldsMixin): relations = RelationsField(array_of_objects=PKListRelation( key='array_of_objects', attrs=['iso'], record_cls=Language, relation_field='language'), )
class Record1(Record, SystemFieldsMixin): relations = RelationsField(languages=PKListRelation( key='languages', attrs=['iso', 'information.ethnicity'], record_cls=Language), )
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")
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), },