Coverage for apis_core/apis_entities/serializers.py: 41%
32 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-06-25 10:00 +0000
1from rdflib import Literal, URIRef
2from rdflib.namespace import GEO, RDF, RDFS
3from rest_framework import serializers
5from apis_core.generic.serializers import (
6 GenericHyperlinkedIdentityField,
7 GenericModelCidocSerializer,
8)
9from apis_core.generic.utils.rdf_namespace import APPELLATION, CRM
12class MinimalEntitySerializer(serializers.Serializer):
13 uri = GenericHyperlinkedIdentityField(
14 view_name="apis_core:generic:genericmodelapi-detail"
15 )
16 name = serializers.SerializerMethodField(method_name="get_name")
18 def get_name(self, object) -> str:
19 return str(object)
22class E21_PersonCidocSerializer(GenericModelCidocSerializer):
23 def to_representation(self, instance):
24 g = super().to_representation(instance)
26 if hasattr(instance, "forename"):
27 forename_uri = URIRef(APPELLATION[f"forename_{instance.id}"])
28 g.add(
29 (
30 forename_uri,
31 RDF.type,
32 CRM.E33_E41_Linguistic_Appellation,
33 )
34 )
35 g.add(
36 (
37 self.appellation_uri,
38 CRM.P106_is_composed_of,
39 forename_uri,
40 )
41 )
42 g.add((forename_uri, RDFS.label, Literal(instance.forename)))
44 if hasattr(instance, "surname"):
45 surname_uri = URIRef(APPELLATION[f"surname_{instance.id}"])
46 g.add(
47 (
48 surname_uri,
49 RDF.type,
50 CRM.E33_E41_Linguistic_Appellation,
51 )
52 )
53 g.add(
54 (
55 self.appellation_uri,
56 CRM.P106_is_composed_of,
57 surname_uri,
58 )
59 )
60 g.add((surname_uri, RDFS.label, Literal(instance.surname)))
62 return g
65class E53_PlaceCidocSerializer(GenericModelCidocSerializer):
66 def to_representation(self, instance):
67 g = super().to_representation(instance)
69 if instance.latitude is not None and instance.longitude is not None:
70 literal_text = f"Point ( {instance.longitude:+} {instance.latitude:+} )"
71 literal = Literal(literal_text, datatype=GEO.wktLiteral)
72 g.add((self.instance_uri, CRM.P168_place_is_defined_by, literal))
73 return g