From af45b1803c7667f416036c061f3fcf5822c09e5f Mon Sep 17 00:00:00 2001 From: Birger Schacht Date: Wed, 21 Feb 2024 11:54:21 +0100 Subject: [PATCH] fix: add ampel to detail views and fix strings in relation and dates --- .../details/detail_court.py | 3 +- .../details/detail_event.py | 3 +- .../details/detail_institution.py | 3 +- .../details/detail_person.py | 3 +- .../details/detail_place.py | 3 +- viecpro_typesense_detail/details/utils.py | 29 +++++++++++++++---- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/viecpro_typesense_detail/details/detail_court.py b/viecpro_typesense_detail/details/detail_court.py index 111911f..5b5612a 100644 --- a/viecpro_typesense_detail/details/detail_court.py +++ b/viecpro_typesense_detail/details/detail_court.py @@ -1,4 +1,4 @@ -from .utils import F, C +from .utils import F, C, ampel from apis_core.apis_entities.models import Institution from typing import Dict, Any, List, TypeVar from apis_core.apis_relations.models import AbstractRelation @@ -130,6 +130,7 @@ def main(offset:int=0) -> Dict[str, Any]: res = parse_court_relations(instance, res) # NOTE: sources contain the bibtex json directly, they could be parsed to a) conform to the naming scheme and b) get rid of uneccessary data res["sources"] = get_references_for_instance(instance) + res["ampel"] = ampel(instance) results.append(res) diff --git a/viecpro_typesense_detail/details/detail_event.py b/viecpro_typesense_detail/details/detail_event.py index aaa7696..3c762ba 100644 --- a/viecpro_typesense_detail/details/detail_event.py +++ b/viecpro_typesense_detail/details/detail_event.py @@ -1,4 +1,4 @@ -from .utils import F, C +from .utils import F, C, ampel from typing import Dict, Any, List from apis_core.apis_entities.models import Event from apis_core.apis_relations.models import AbstractRelation @@ -86,6 +86,7 @@ def main(offset: int = 0) -> Dict[str, Any]: res = parse_event_relations(instance, res) # NOTE: sources contain the bibtex json directly, they could be parsed to a) conform to the naming scheme and b) get rid of uneccessary data res["sources"] = get_references_for_instance(instance) + res["ampel"] = ampel(instance) results.append(res) diff --git a/viecpro_typesense_detail/details/detail_institution.py b/viecpro_typesense_detail/details/detail_institution.py index 14d28c9..246f8f2 100644 --- a/viecpro_typesense_detail/details/detail_institution.py +++ b/viecpro_typesense_detail/details/detail_institution.py @@ -1,4 +1,4 @@ -from .utils import F, C +from .utils import F, C, ampel from typing import Dict, Any, List from apis_core.apis_entities.models import Institution from apis_core.apis_relations.models import AbstractRelation, InstitutionInstitution @@ -90,6 +90,7 @@ def main(offset: int = 0) -> Dict[str, Any]: res = parse_institution_relations(instance, res) # NOTE: sources contain the bibtex json directly, they could be parsed to a) conform to the naming scheme and b) get rid of uneccessary data res["sources"] = get_references_for_instance(instance) + res["ampel"] = ampel(instance) results.append(res) diff --git a/viecpro_typesense_detail/details/detail_person.py b/viecpro_typesense_detail/details/detail_person.py index 6ad204d..ae4c0bd 100644 --- a/viecpro_typesense_detail/details/detail_person.py +++ b/viecpro_typesense_detail/details/detail_person.py @@ -1,4 +1,4 @@ -from .utils import F, C, format_and_orient_relation, to_rel +from .utils import F, C, format_and_orient_relation, to_rel, ampel from apis_core.apis_entities.models import Person from apis_core.apis_relations.models import PersonInstitution from typing import List, Dict, Any @@ -212,6 +212,7 @@ def main(offset:int=0): res["id"] = f"detail_{model._meta.model_name}_{instance.id}" # type: ignore res["object_id"] = str(instance.id) # type: ignore res["model"] = model.__name__ + res["ampel"] = ampel(instance) results.append(res) return {"schema": schema, "results": results} diff --git a/viecpro_typesense_detail/details/detail_place.py b/viecpro_typesense_detail/details/detail_place.py index 36a37dd..f254936 100644 --- a/viecpro_typesense_detail/details/detail_place.py +++ b/viecpro_typesense_detail/details/detail_place.py @@ -1,4 +1,4 @@ -from .utils import F, C, format_and_orient_relation +from .utils import F, C, format_and_orient_relation, ampel from apis_core.apis_entities.models import Place from dataclasses import dataclass, asdict, field from typing import Dict, Any, List @@ -92,6 +92,7 @@ def main(offset:int=0) -> Dict[str, Any]: res["id"] = f"detail_{model._meta.model_name}_{instance.id}" res["object_id"] = str(instance.id) res["model"] = model.__name__ + res["ampel"] = ampel(instance) results.append(res) return {"schema":schema, "results":results} diff --git a/viecpro_typesense_detail/details/utils.py b/viecpro_typesense_detail/details/utils.py index f4d3652..ddd0103 100644 --- a/viecpro_typesense_detail/details/utils.py +++ b/viecpro_typesense_detail/details/utils.py @@ -5,6 +5,19 @@ from apis_bibsonomy.models import Reference # type: ignore from apis_core.apis_relations.models import AbstractRelation import json +import re + +REG_SKL = re.compile(r"\<.*?\>") +REG_EKL = re.compile(r"\[.*?\]") +REG_GKL = re.compile(r"\{.*?\}") + + +def fixstring(string): + string = str(string) + string = re.sub(REG_SKL, "", string) + string = re.sub(REG_EKL, "", string) + string = re.sub(REG_GKL, "", string) + return string @dataclass @@ -69,8 +82,8 @@ def to_rel(l: Label) -> Dict[str, Any]: """ return { "name": l.label, - "start_date": l.start_date_written or "", - "end_date": l.end_date_written or "", + "start_date": fixstring(l.start_date_written) or "", + "end_date": fixstring(l.end_date_written) or "", } @@ -99,10 +112,10 @@ def format_and_orient_relation( } return { - "relation_type": relation_type, + "relation_type": fixstring(relation_type), "target": target, - "start_date": rel.start_date_written or "", - "end_date": rel.end_date_written or "", + "start_date": fixstring(rel.start_date_written) or "", + "end_date": fixstring(rel.end_date_written) or "", } @@ -123,3 +136,9 @@ def get_references_for_instance(instance: Any) -> List[Dict[str, Any]]: } for r in references ] + + +def ampel(instance: Any) -> str: + if ampel := getattr(instance, "ampel", False): + return ampel.status + return ""