Coverage for apis_core/apis_entities/abc.py: 89%
71 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 django.db import models
2from django.utils.translation import gettext_lazy as _
4from apis_core.generic.utils.rdf_namespace import CRM
6#########################
7# Abstract base classes #
8#########################
11# These abstract base classes are named after
12# CIDOC CRM entities, but we are *NOT*(!)
13# trying to implement CIDOC CRM in Django.
16class E21_Person(models.Model):
17 forename = models.CharField(
18 blank=True, default="", max_length=4096, verbose_name=_("forename")
19 )
20 surname = models.CharField(
21 blank=True, default="", max_length=4096, verbose_name=_("surname")
22 )
23 gender = models.CharField(
24 blank=True, default="", max_length=4096, verbose_name=_("gender")
25 )
26 date_of_birth = models.DateField(
27 blank=True, null=True, verbose_name=_("date of birth")
28 )
29 date_of_death = models.DateField(
30 blank=True, null=True, verbose_name=_("date of death")
31 )
33 class Meta:
34 abstract = True
35 verbose_name = _("person")
36 verbose_name_plural = _("persons")
37 ordering = ["surname", "forename"]
39 def __str__(self):
40 return f"{self.forename} {self.surname}"
42 @classmethod
43 def rdf_configs(cls):
44 return {
45 "https://d-nb.info/*|/.*.rdf": "E21_PersonFromDNB.toml",
46 "http://www.wikidata.org/*|/.*.rdf": "E21_PersonFromWikidata.toml",
47 }
49 @classmethod
50 def get_rdf_types(cls):
51 return [CRM.E21_Person]
54class E53_Place(models.Model):
55 """
56 The feature_code field refers to the geonames feature codes, as
57 listed on https://www.geonames.org/export/codes.html
58 """
60 label = models.CharField(
61 blank=True, default="", max_length=4096, verbose_name=_("label")
62 )
63 latitude = models.FloatField(blank=True, null=True, verbose_name=_("latitude"))
64 longitude = models.FloatField(blank=True, null=True, verbose_name=_("longitude"))
65 feature_code = models.CharField(
66 blank=True,
67 default="",
68 max_length=16,
69 verbose_name=_("feature code"),
70 help_text='<a href="https://www.geonames.org/export/codes.html">Geonames Feature Code List</a>',
71 )
73 class Meta:
74 abstract = True
75 verbose_name = _("place")
76 verbose_name_plural = _("places")
77 ordering = ["label"]
79 def __str__(self):
80 return self.label
82 @classmethod
83 def rdf_configs(cls):
84 return {
85 "https://d-nb.info/*|/.*.rdf": "E53_PlaceFromDNB.toml",
86 "https://sws.geonames.org/*|/.*.rdf*": "E53_PlaceFromGeonames.toml",
87 "http://www.wikidata.org/*|/.*.rdf": "E53_PlaceFromWikidata.toml",
88 }
90 @classmethod
91 def get_rdf_types(cls):
92 return [CRM.E53_Place]
94 @classmethod
95 def create_from_string(cls, string):
96 return cls.objects.create(label=string)
99class E74_Group(models.Model):
100 label = models.CharField(
101 blank=True, default="", max_length=4096, verbose_name=_("label")
102 )
104 class Meta:
105 abstract = True
106 verbose_name = _("group")
107 verbose_name_plural = _("groups")
108 ordering = ["label"]
110 def __str__(self):
111 return self.label
113 @classmethod
114 def rdf_configs(cls):
115 return {
116 "https://d-nb.info/*|/.*.rdf": "E74_GroupFromDNB.toml",
117 "http://www.wikidata.org/*|/.*.rdf": "E74_GroupFromWikidata.toml",
118 }
120 @classmethod
121 def get_rdf_types(cls):
122 return [CRM.E74_Group]
124 @classmethod
125 def create_from_string(cls, string):
126 return cls.objects.create(label=string)
129class SimpleLabelModel(models.Model):
130 label = models.CharField(
131 blank=True, default="", max_length=4096, verbose_name=_("label")
132 )
134 class Meta:
135 abstract = True
136 ordering = ["label"]
138 def __str__(self):
139 return self.label
141 @classmethod
142 def create_from_string(cls, string):
143 return cls.objects.create(label=string)