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

1from django.db import models 

2from django.utils.translation import gettext_lazy as _ 

3 

4from apis_core.generic.utils.rdf_namespace import CRM 

5 

6######################### 

7# Abstract base classes # 

8######################### 

9 

10 

11# These abstract base classes are named after 

12# CIDOC CRM entities, but we are *NOT*(!) 

13# trying to implement CIDOC CRM in Django. 

14 

15 

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 ) 

32 

33 class Meta: 

34 abstract = True 

35 verbose_name = _("person") 

36 verbose_name_plural = _("persons") 

37 ordering = ["surname", "forename"] 

38 

39 def __str__(self): 

40 return f"{self.forename} {self.surname}" 

41 

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 } 

48 

49 @classmethod 

50 def get_rdf_types(cls): 

51 return [CRM.E21_Person] 

52 

53 

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 """ 

59 

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 ) 

72 

73 class Meta: 

74 abstract = True 

75 verbose_name = _("place") 

76 verbose_name_plural = _("places") 

77 ordering = ["label"] 

78 

79 def __str__(self): 

80 return self.label 

81 

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 } 

89 

90 @classmethod 

91 def get_rdf_types(cls): 

92 return [CRM.E53_Place] 

93 

94 @classmethod 

95 def create_from_string(cls, string): 

96 return cls.objects.create(label=string) 

97 

98 

99class E74_Group(models.Model): 

100 label = models.CharField( 

101 blank=True, default="", max_length=4096, verbose_name=_("label") 

102 ) 

103 

104 class Meta: 

105 abstract = True 

106 verbose_name = _("group") 

107 verbose_name_plural = _("groups") 

108 ordering = ["label"] 

109 

110 def __str__(self): 

111 return self.label 

112 

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 } 

119 

120 @classmethod 

121 def get_rdf_types(cls): 

122 return [CRM.E74_Group] 

123 

124 @classmethod 

125 def create_from_string(cls, string): 

126 return cls.objects.create(label=string) 

127 

128 

129class SimpleLabelModel(models.Model): 

130 label = models.CharField( 

131 blank=True, default="", max_length=4096, verbose_name=_("label") 

132 ) 

133 

134 class Meta: 

135 abstract = True 

136 ordering = ["label"] 

137 

138 def __str__(self): 

139 return self.label 

140 

141 @classmethod 

142 def create_from_string(cls, string): 

143 return cls.objects.create(label=string)