Skip to content

Commit ca6c3b2

Browse files
committed
Merge pull request #1916 from stevenyoungs/grampsid-types
2 parents 608d6e4 + 5eb7324 commit ca6c3b2

File tree

2 files changed

+90
-36
lines changed

2 files changed

+90
-36
lines changed

gramps/gen/db/generic.py

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,15 @@
7777
NoteHandle,
7878
TagHandle,
7979
TableObjectType,
80+
PersonGrampsID,
81+
EventGrampsID,
82+
FamilyGrampsID,
83+
PlaceGrampsID,
84+
SourceGrampsID,
85+
RepositoryGrampsID,
86+
CitationGrampsID,
87+
MediaGrampsID,
88+
NoteGrampsID,
8089
)
8190
from ..updatecallback import UpdateCallback
8291
from ..utils.callback import Callback
@@ -1156,7 +1165,7 @@ def _find_next_gramps_id(self, prefix, map_index, obj_key):
11561165
map_index += 1
11571166
return (map_index, index)
11581167

1159-
def find_next_person_gramps_id(self):
1168+
def find_next_person_gramps_id(self) -> PersonGrampsID:
11601169
"""
11611170
Return the next available GRAMPS' ID for a Person object based off the
11621171
person ID prefix.
@@ -1166,7 +1175,7 @@ def find_next_person_gramps_id(self):
11661175
)
11671176
return gid
11681177

1169-
def find_next_place_gramps_id(self):
1178+
def find_next_place_gramps_id(self) -> PlaceGrampsID:
11701179
"""
11711180
Return the next available GRAMPS' ID for a Place object based off the
11721181
place ID prefix.
@@ -1176,7 +1185,7 @@ def find_next_place_gramps_id(self):
11761185
)
11771186
return gid
11781187

1179-
def find_next_event_gramps_id(self):
1188+
def find_next_event_gramps_id(self) -> EventGrampsID:
11801189
"""
11811190
Return the next available GRAMPS' ID for a Event object based off the
11821191
event ID prefix.
@@ -1186,7 +1195,7 @@ def find_next_event_gramps_id(self):
11861195
)
11871196
return gid
11881197

1189-
def find_next_media_gramps_id(self):
1198+
def find_next_media_gramps_id(self) -> MediaGrampsID:
11901199
"""
11911200
Return the next available GRAMPS' ID for a Media object based
11921201
off the media object ID prefix.
@@ -1196,7 +1205,7 @@ def find_next_media_gramps_id(self):
11961205
)
11971206
return gid
11981207

1199-
def find_next_citation_gramps_id(self):
1208+
def find_next_citation_gramps_id(self) -> CitationGrampsID:
12001209
"""
12011210
Return the next available GRAMPS' ID for a Citation object based off the
12021211
citation ID prefix.
@@ -1206,7 +1215,7 @@ def find_next_citation_gramps_id(self):
12061215
)
12071216
return gid
12081217

1209-
def find_next_source_gramps_id(self):
1218+
def find_next_source_gramps_id(self) -> SourceGrampsID:
12101219
"""
12111220
Return the next available GRAMPS' ID for a Source object based off the
12121221
source ID prefix.
@@ -1216,7 +1225,7 @@ def find_next_source_gramps_id(self):
12161225
)
12171226
return gid
12181227

1219-
def find_next_family_gramps_id(self):
1228+
def find_next_family_gramps_id(self) -> FamilyGrampsID:
12201229
"""
12211230
Return the next available GRAMPS' ID for a Family object based off the
12221231
family ID prefix.
@@ -1226,7 +1235,7 @@ def find_next_family_gramps_id(self):
12261235
)
12271236
return gid
12281237

1229-
def find_next_repository_gramps_id(self):
1238+
def find_next_repository_gramps_id(self) -> RepositoryGrampsID:
12301239
"""
12311240
Return the next available GRAMPS' ID for a Respository object based
12321241
off the repository ID prefix.
@@ -1236,7 +1245,7 @@ def find_next_repository_gramps_id(self):
12361245
)
12371246
return gid
12381247

1239-
def find_next_note_gramps_id(self):
1248+
def find_next_note_gramps_id(self) -> NoteGrampsID:
12401249
"""
12411250
Return the next available GRAMPS' ID for a Note object based off the
12421251
note ID prefix.
@@ -1449,39 +1458,41 @@ def get_tag_from_handle(self, handle: TagHandle) -> Tag:
14491458
#
14501459
################################################################
14511460

1452-
def get_person_from_gramps_id(self, gramps_id) -> Person:
1461+
def get_person_from_gramps_id(self, gramps_id: PersonGrampsID) -> Person:
14531462
data = self._get_raw_person_from_id_data(gramps_id)
14541463
return self.serializer.data_to_object(data, Person)
14551464

1456-
def get_family_from_gramps_id(self, gramps_id) -> Family:
1465+
def get_family_from_gramps_id(self, gramps_id: FamilyGrampsID) -> Family:
14571466
data = self._get_raw_family_from_id_data(gramps_id)
14581467
return self.serializer.data_to_object(data, Family)
14591468

1460-
def get_citation_from_gramps_id(self, gramps_id) -> Citation:
1469+
def get_citation_from_gramps_id(self, gramps_id: CitationGrampsID) -> Citation:
14611470
data = self._get_raw_citation_from_id_data(gramps_id)
14621471
return self.serializer.data_to_object(data, Citation)
14631472

1464-
def get_source_from_gramps_id(self, gramps_id) -> Source:
1473+
def get_source_from_gramps_id(self, gramps_id: SourceGrampsID) -> Source:
14651474
data = self._get_raw_source_from_id_data(gramps_id)
14661475
return self.serializer.data_to_object(data, Source)
14671476

1468-
def get_event_from_gramps_id(self, gramps_id) -> Event:
1477+
def get_event_from_gramps_id(self, gramps_id: EventGrampsID) -> Event:
14691478
data = self._get_raw_event_from_id_data(gramps_id)
14701479
return self.serializer.data_to_object(data, Event)
14711480

1472-
def get_media_from_gramps_id(self, gramps_id) -> Media:
1481+
def get_media_from_gramps_id(self, gramps_id: MediaGrampsID) -> Media:
14731482
data = self._get_raw_media_from_id_data(gramps_id)
14741483
return self.serializer.data_to_object(data, Media)
14751484

1476-
def get_place_from_gramps_id(self, gramps_id) -> Place:
1485+
def get_place_from_gramps_id(self, gramps_id: PlaceGrampsID) -> Place:
14771486
data = self._get_raw_place_from_id_data(gramps_id)
14781487
return self.serializer.data_to_object(data, Place)
14791488

1480-
def get_repository_from_gramps_id(self, gramps_id) -> Repository:
1489+
def get_repository_from_gramps_id(
1490+
self, gramps_id: RepositoryGrampsID
1491+
) -> Repository:
14811492
data = self._get_raw_repository_from_id_data(gramps_id)
14821493
return self.serializer.data_to_object(data, Repository)
14831494

1484-
def get_note_from_gramps_id(self, gramps_id) -> Note:
1495+
def get_note_from_gramps_id(self, gramps_id: NoteGrampsID) -> Note:
14851496
data = self._get_raw_note_from_id_data(gramps_id)
14861497
return self.serializer.data_to_object(data, Note)
14871498

@@ -1536,31 +1547,31 @@ def has_tag_handle(self, handle: TagHandle) -> bool:
15361547
def _has_gramps_id(self, obj_key, gramps_id) -> bool:
15371548
raise NotImplementedError
15381549

1539-
def has_person_gramps_id(self, gramps_id) -> bool:
1550+
def has_person_gramps_id(self, gramps_id: PersonGrampsID) -> bool:
15401551
return self._has_gramps_id(PERSON_KEY, gramps_id)
15411552

1542-
def has_family_gramps_id(self, gramps_id) -> bool:
1553+
def has_family_gramps_id(self, gramps_id: FamilyGrampsID) -> bool:
15431554
return self._has_gramps_id(FAMILY_KEY, gramps_id)
15441555

1545-
def has_source_gramps_id(self, gramps_id) -> bool:
1556+
def has_source_gramps_id(self, gramps_id: SourceGrampsID) -> bool:
15461557
return self._has_gramps_id(SOURCE_KEY, gramps_id)
15471558

1548-
def has_citation_gramps_id(self, gramps_id) -> bool:
1559+
def has_citation_gramps_id(self, gramps_id: CitationGrampsID) -> bool:
15491560
return self._has_gramps_id(CITATION_KEY, gramps_id)
15501561

1551-
def has_event_gramps_id(self, gramps_id) -> bool:
1562+
def has_event_gramps_id(self, gramps_id: EventGrampsID) -> bool:
15521563
return self._has_gramps_id(EVENT_KEY, gramps_id)
15531564

1554-
def has_media_gramps_id(self, gramps_id) -> bool:
1565+
def has_media_gramps_id(self, gramps_id: MediaGrampsID) -> bool:
15551566
return self._has_gramps_id(MEDIA_KEY, gramps_id)
15561567

1557-
def has_place_gramps_id(self, gramps_id) -> bool:
1568+
def has_place_gramps_id(self, gramps_id: PlaceGrampsID) -> bool:
15581569
return self._has_gramps_id(PLACE_KEY, gramps_id)
15591570

1560-
def has_repository_gramps_id(self, gramps_id) -> bool:
1571+
def has_repository_gramps_id(self, gramps_id: RepositoryGrampsID) -> bool:
15611572
return self._has_gramps_id(REPOSITORY_KEY, gramps_id)
15621573

1563-
def has_note_gramps_id(self, gramps_id) -> bool:
1574+
def has_note_gramps_id(self, gramps_id: NoteGrampsID) -> bool:
15641575
return self._has_gramps_id(NOTE_KEY, gramps_id)
15651576

15661577
################################################################
@@ -1852,31 +1863,31 @@ def get_raw_tag_data(self, handle):
18521863
def _get_raw_from_id_data(self, obj_key, gramps_id):
18531864
raise NotImplementedError
18541865

1855-
def _get_raw_person_from_id_data(self, gramps_id):
1866+
def _get_raw_person_from_id_data(self, gramps_id: PersonGrampsID):
18561867
return self._get_raw_from_id_data(PERSON_KEY, gramps_id)
18571868

1858-
def _get_raw_family_from_id_data(self, gramps_id):
1869+
def _get_raw_family_from_id_data(self, gramps_id: FamilyGrampsID):
18591870
return self._get_raw_from_id_data(FAMILY_KEY, gramps_id)
18601871

1861-
def _get_raw_source_from_id_data(self, gramps_id):
1872+
def _get_raw_source_from_id_data(self, gramps_id: SourceGrampsID):
18621873
return self._get_raw_from_id_data(SOURCE_KEY, gramps_id)
18631874

1864-
def _get_raw_citation_from_id_data(self, gramps_id):
1875+
def _get_raw_citation_from_id_data(self, gramps_id: CitationGrampsID):
18651876
return self._get_raw_from_id_data(CITATION_KEY, gramps_id)
18661877

1867-
def _get_raw_event_from_id_data(self, gramps_id):
1878+
def _get_raw_event_from_id_data(self, gramps_id: EventGrampsID):
18681879
return self._get_raw_from_id_data(EVENT_KEY, gramps_id)
18691880

1870-
def _get_raw_media_from_id_data(self, gramps_id):
1881+
def _get_raw_media_from_id_data(self, gramps_id: MediaGrampsID):
18711882
return self._get_raw_from_id_data(MEDIA_KEY, gramps_id)
18721883

1873-
def _get_raw_place_from_id_data(self, gramps_id):
1884+
def _get_raw_place_from_id_data(self, gramps_id: PlaceGrampsID):
18741885
return self._get_raw_from_id_data(PLACE_KEY, gramps_id)
18751886

1876-
def _get_raw_repository_from_id_data(self, gramps_id):
1887+
def _get_raw_repository_from_id_data(self, gramps_id: RepositoryGrampsID):
18771888
return self._get_raw_from_id_data(REPOSITORY_KEY, gramps_id)
18781889

1879-
def _get_raw_note_from_id_data(self, gramps_id):
1890+
def _get_raw_note_from_id_data(self, gramps_id: NoteGrampsID):
18801891
return self._get_raw_from_id_data(NOTE_KEY, gramps_id)
18811892

18821893
################################################################

gramps/gen/types.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
#
2+
# Gramps - a GTK+/GNOME based genealogy program
3+
#
4+
# Copyright (C) 2025 David Straub
5+
# Copyright (C) 2025 Steve Youngs
6+
#
7+
# This program is free software; you can redistribute it and/or modify
8+
# it under the terms of the GNU General Public License as published by
9+
# the Free Software Foundation; either version 2 of the License, or
10+
# (at your option) any later version.
11+
#
12+
# This program is distributed in the hope that it will be useful,
13+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
# GNU General Public License for more details.
16+
#
17+
# You should have received a copy of the GNU General Public License
18+
# along with this program; if not, write to the Free Software
19+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20+
#
121
"""Types for static type checking."""
222

323
from __future__ import annotations
@@ -42,3 +62,26 @@
4262
)
4363
AnyHandle = PrimaryObjectHandle | TagHandle
4464
TableObjectType = TypeVar("TableObjectType", bound=TableObject)
65+
66+
PersonGrampsID = NewType("PersonGrampsID", str)
67+
FamilyGrampsID = NewType("FamilyGrampsID", str)
68+
EventGrampsID = NewType("EventGrampsID", str)
69+
PlaceGrampsID = NewType("PlaceGrampsID", str)
70+
SourceGrampsID = NewType("SourceGrampsID", str)
71+
RepositoryGrampsID = NewType("RepositoryGrampsID", str)
72+
CitationGrampsID = NewType("CitationGrampsID", str)
73+
MediaGrampsID = NewType("MediaGrampsID", str)
74+
NoteGrampsID = NewType("NoteGrampsID", str)
75+
# No Tag IDs
76+
PrimaryObjectGrampsID = (
77+
PersonGrampsID
78+
| FamilyGrampsID
79+
| EventGrampsID
80+
| PlaceGrampsID
81+
| SourceGrampsID
82+
| RepositoryGrampsID
83+
| CitationGrampsID
84+
| MediaGrampsID
85+
| NoteGrampsID
86+
)
87+
AnyGrampsID = PrimaryObjectGrampsID # No Tag IDs

0 commit comments

Comments
 (0)