From 32d22e5288692327250d4c7fe799e4112fb23bb9 Mon Sep 17 00:00:00 2001 From: Birger Schacht Date: Tue, 20 Feb 2024 14:20:57 +0100 Subject: [PATCH] fix: add functions and institutions to person documents Closes: #15 --- viecpro_typesense/collections.py | 5 +++-- viecpro_typesense/fields.py | 11 +++++++++-- viecpro_typesense/handlers.py | 10 +++++----- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/viecpro_typesense/collections.py b/viecpro_typesense/collections.py index 1d6a444d..cbdac39c 100644 --- a/viecpro_typesense/collections.py +++ b/viecpro_typesense/collections.py @@ -1,7 +1,7 @@ from .handlers import GenericDocIDHandler from viecpro_typesense import Collection, StaticField, CollectionConfig, O from copy import deepcopy -from .fields import StringField, FullNameField, TitlesNestedObjectField, RelationTypeHierarchyHandler, WrittenDateField, BibtexShortTitleHandler, BibtexTitleHandler, BibtexTypeHandler, RelatedReferenceDocField, ObjectIDField, DateObjectDateField, LabelsNestedObjectField, KindField, SourceField, TargetField, HofstaatsinhaberField, MainOwnerField +from .fields import StringField, FullNameField, TitlesNestedObjectField, RelationTypeHierarchyHandler, WrittenDateField, BibtexShortTitleHandler, BibtexTitleHandler, BibtexTypeHandler, RelatedReferenceDocField, ObjectIDField, DateObjectDateField, LabelsNestedObjectField, KindField, SourceField, TargetField, HofstaatsinhaberField, MainOwnerField, FunctionsArrayField, PersonInstitutionArrayField from apis_bibsonomy.models import Reference from apis_core.apis_relations.models import AbstractRelation from apis_core.apis_entities.models import AbstractEntity, Institution, Person, Place, Event, Work @@ -99,7 +99,8 @@ def create_entity_collections(): "fullname": FullNameField(("name", "first_name"), options=O(sort=True)), "gender": StringField("gender", options=O(facet=True, optional=True, type="string")), "titles": TitlesNestedObjectField("id", pass_instance=True), - # "functions": FunctionsArrayField("id", pass_instance=True),# TODO: need to remove need to pass field param to field with pass_instance. id won't be accessed here, its a dummy + "functions": FunctionsArrayField("id", pass_instance=True, options=O(facet=True)),# TODO: need to remove need to pass field param to field with pass_instance. id won't be accessed here, its a dummy + "institutions": PersonInstitutionArrayField("id", pass_instance=True, options=O(facet=True)), } base_fields.update(per_fields) detail_fields = get_entity_specific_detail_fields( diff --git a/viecpro_typesense/fields.py b/viecpro_typesense/fields.py index 7d791459..dde6ba32 100644 --- a/viecpro_typesense/fields.py +++ b/viecpro_typesense/fields.py @@ -40,8 +40,15 @@ class Config: class FunctionsArrayField(Field): - handler = ParseFunctionsHandler - options = O(type="object", optional=True) + class Config: + handler = ParseFunctionsHandler + options = O(type="string[]", optional=True) + + +class PersonInstitutionArrayField(Field): + class Config: + handler = ParsePersonInstitutionHandler + options = O(type="string[]", optional=True) class SourceField(Field): diff --git a/viecpro_typesense/handlers.py b/viecpro_typesense/handlers.py index 4d743fff..06ad87a2 100644 --- a/viecpro_typesense/handlers.py +++ b/viecpro_typesense/handlers.py @@ -98,11 +98,11 @@ def func(x): return [ class ParseFunctionsHandler(Handler): - def func(x): return [ - {"name": f.name, "object_id": str( - f.id), "model": "PersonInstitutionRelation"} - for f in x.institution_relationtype_set.all() - ] + def func(x): return [f.name for f in x.institution_relationtype_set.all()] + + +class ParsePersonInstitutionHandler(Handler): + def func(x): return [f.name for f in x.personinstitution_set.all()] class GenericDocIDHandler(Handler):