Skip to content

Commit

Permalink
Merge pull request #1916 from stevenyoungs/grampsid-types
Browse files Browse the repository at this point in the history
  • Loading branch information
Nick-Hall committed Feb 3, 2025
2 parents 608d6e4 + 5eb7324 commit ca6c3b2
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 36 deletions.
83 changes: 47 additions & 36 deletions gramps/gen/db/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,15 @@
NoteHandle,
TagHandle,
TableObjectType,
PersonGrampsID,
EventGrampsID,
FamilyGrampsID,
PlaceGrampsID,
SourceGrampsID,
RepositoryGrampsID,
CitationGrampsID,
MediaGrampsID,
NoteGrampsID,
)
from ..updatecallback import UpdateCallback
from ..utils.callback import Callback
Expand Down Expand Up @@ -1156,7 +1165,7 @@ def _find_next_gramps_id(self, prefix, map_index, obj_key):
map_index += 1
return (map_index, index)

def find_next_person_gramps_id(self):
def find_next_person_gramps_id(self) -> PersonGrampsID:
"""
Return the next available GRAMPS' ID for a Person object based off the
person ID prefix.
Expand All @@ -1166,7 +1175,7 @@ def find_next_person_gramps_id(self):
)
return gid

def find_next_place_gramps_id(self):
def find_next_place_gramps_id(self) -> PlaceGrampsID:
"""
Return the next available GRAMPS' ID for a Place object based off the
place ID prefix.
Expand All @@ -1176,7 +1185,7 @@ def find_next_place_gramps_id(self):
)
return gid

def find_next_event_gramps_id(self):
def find_next_event_gramps_id(self) -> EventGrampsID:
"""
Return the next available GRAMPS' ID for a Event object based off the
event ID prefix.
Expand All @@ -1186,7 +1195,7 @@ def find_next_event_gramps_id(self):
)
return gid

def find_next_media_gramps_id(self):
def find_next_media_gramps_id(self) -> MediaGrampsID:
"""
Return the next available GRAMPS' ID for a Media object based
off the media object ID prefix.
Expand All @@ -1196,7 +1205,7 @@ def find_next_media_gramps_id(self):
)
return gid

def find_next_citation_gramps_id(self):
def find_next_citation_gramps_id(self) -> CitationGrampsID:
"""
Return the next available GRAMPS' ID for a Citation object based off the
citation ID prefix.
Expand All @@ -1206,7 +1215,7 @@ def find_next_citation_gramps_id(self):
)
return gid

def find_next_source_gramps_id(self):
def find_next_source_gramps_id(self) -> SourceGrampsID:
"""
Return the next available GRAMPS' ID for a Source object based off the
source ID prefix.
Expand All @@ -1216,7 +1225,7 @@ def find_next_source_gramps_id(self):
)
return gid

def find_next_family_gramps_id(self):
def find_next_family_gramps_id(self) -> FamilyGrampsID:
"""
Return the next available GRAMPS' ID for a Family object based off the
family ID prefix.
Expand All @@ -1226,7 +1235,7 @@ def find_next_family_gramps_id(self):
)
return gid

def find_next_repository_gramps_id(self):
def find_next_repository_gramps_id(self) -> RepositoryGrampsID:
"""
Return the next available GRAMPS' ID for a Respository object based
off the repository ID prefix.
Expand All @@ -1236,7 +1245,7 @@ def find_next_repository_gramps_id(self):
)
return gid

def find_next_note_gramps_id(self):
def find_next_note_gramps_id(self) -> NoteGrampsID:
"""
Return the next available GRAMPS' ID for a Note object based off the
note ID prefix.
Expand Down Expand Up @@ -1449,39 +1458,41 @@ def get_tag_from_handle(self, handle: TagHandle) -> Tag:
#
################################################################

def get_person_from_gramps_id(self, gramps_id) -> Person:
def get_person_from_gramps_id(self, gramps_id: PersonGrampsID) -> Person:
data = self._get_raw_person_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Person)

def get_family_from_gramps_id(self, gramps_id) -> Family:
def get_family_from_gramps_id(self, gramps_id: FamilyGrampsID) -> Family:
data = self._get_raw_family_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Family)

def get_citation_from_gramps_id(self, gramps_id) -> Citation:
def get_citation_from_gramps_id(self, gramps_id: CitationGrampsID) -> Citation:
data = self._get_raw_citation_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Citation)

def get_source_from_gramps_id(self, gramps_id) -> Source:
def get_source_from_gramps_id(self, gramps_id: SourceGrampsID) -> Source:
data = self._get_raw_source_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Source)

def get_event_from_gramps_id(self, gramps_id) -> Event:
def get_event_from_gramps_id(self, gramps_id: EventGrampsID) -> Event:
data = self._get_raw_event_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Event)

def get_media_from_gramps_id(self, gramps_id) -> Media:
def get_media_from_gramps_id(self, gramps_id: MediaGrampsID) -> Media:
data = self._get_raw_media_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Media)

def get_place_from_gramps_id(self, gramps_id) -> Place:
def get_place_from_gramps_id(self, gramps_id: PlaceGrampsID) -> Place:
data = self._get_raw_place_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Place)

def get_repository_from_gramps_id(self, gramps_id) -> Repository:
def get_repository_from_gramps_id(
self, gramps_id: RepositoryGrampsID
) -> Repository:
data = self._get_raw_repository_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Repository)

def get_note_from_gramps_id(self, gramps_id) -> Note:
def get_note_from_gramps_id(self, gramps_id: NoteGrampsID) -> Note:
data = self._get_raw_note_from_id_data(gramps_id)
return self.serializer.data_to_object(data, Note)

Expand Down Expand Up @@ -1536,31 +1547,31 @@ def has_tag_handle(self, handle: TagHandle) -> bool:
def _has_gramps_id(self, obj_key, gramps_id) -> bool:
raise NotImplementedError

def has_person_gramps_id(self, gramps_id) -> bool:
def has_person_gramps_id(self, gramps_id: PersonGrampsID) -> bool:
return self._has_gramps_id(PERSON_KEY, gramps_id)

def has_family_gramps_id(self, gramps_id) -> bool:
def has_family_gramps_id(self, gramps_id: FamilyGrampsID) -> bool:
return self._has_gramps_id(FAMILY_KEY, gramps_id)

def has_source_gramps_id(self, gramps_id) -> bool:
def has_source_gramps_id(self, gramps_id: SourceGrampsID) -> bool:
return self._has_gramps_id(SOURCE_KEY, gramps_id)

def has_citation_gramps_id(self, gramps_id) -> bool:
def has_citation_gramps_id(self, gramps_id: CitationGrampsID) -> bool:
return self._has_gramps_id(CITATION_KEY, gramps_id)

def has_event_gramps_id(self, gramps_id) -> bool:
def has_event_gramps_id(self, gramps_id: EventGrampsID) -> bool:
return self._has_gramps_id(EVENT_KEY, gramps_id)

def has_media_gramps_id(self, gramps_id) -> bool:
def has_media_gramps_id(self, gramps_id: MediaGrampsID) -> bool:
return self._has_gramps_id(MEDIA_KEY, gramps_id)

def has_place_gramps_id(self, gramps_id) -> bool:
def has_place_gramps_id(self, gramps_id: PlaceGrampsID) -> bool:
return self._has_gramps_id(PLACE_KEY, gramps_id)

def has_repository_gramps_id(self, gramps_id) -> bool:
def has_repository_gramps_id(self, gramps_id: RepositoryGrampsID) -> bool:
return self._has_gramps_id(REPOSITORY_KEY, gramps_id)

def has_note_gramps_id(self, gramps_id) -> bool:
def has_note_gramps_id(self, gramps_id: NoteGrampsID) -> bool:
return self._has_gramps_id(NOTE_KEY, gramps_id)

################################################################
Expand Down Expand Up @@ -1852,31 +1863,31 @@ def get_raw_tag_data(self, handle):
def _get_raw_from_id_data(self, obj_key, gramps_id):
raise NotImplementedError

def _get_raw_person_from_id_data(self, gramps_id):
def _get_raw_person_from_id_data(self, gramps_id: PersonGrampsID):
return self._get_raw_from_id_data(PERSON_KEY, gramps_id)

def _get_raw_family_from_id_data(self, gramps_id):
def _get_raw_family_from_id_data(self, gramps_id: FamilyGrampsID):
return self._get_raw_from_id_data(FAMILY_KEY, gramps_id)

def _get_raw_source_from_id_data(self, gramps_id):
def _get_raw_source_from_id_data(self, gramps_id: SourceGrampsID):
return self._get_raw_from_id_data(SOURCE_KEY, gramps_id)

def _get_raw_citation_from_id_data(self, gramps_id):
def _get_raw_citation_from_id_data(self, gramps_id: CitationGrampsID):
return self._get_raw_from_id_data(CITATION_KEY, gramps_id)

def _get_raw_event_from_id_data(self, gramps_id):
def _get_raw_event_from_id_data(self, gramps_id: EventGrampsID):
return self._get_raw_from_id_data(EVENT_KEY, gramps_id)

def _get_raw_media_from_id_data(self, gramps_id):
def _get_raw_media_from_id_data(self, gramps_id: MediaGrampsID):
return self._get_raw_from_id_data(MEDIA_KEY, gramps_id)

def _get_raw_place_from_id_data(self, gramps_id):
def _get_raw_place_from_id_data(self, gramps_id: PlaceGrampsID):
return self._get_raw_from_id_data(PLACE_KEY, gramps_id)

def _get_raw_repository_from_id_data(self, gramps_id):
def _get_raw_repository_from_id_data(self, gramps_id: RepositoryGrampsID):
return self._get_raw_from_id_data(REPOSITORY_KEY, gramps_id)

def _get_raw_note_from_id_data(self, gramps_id):
def _get_raw_note_from_id_data(self, gramps_id: NoteGrampsID):
return self._get_raw_from_id_data(NOTE_KEY, gramps_id)

################################################################
Expand Down
43 changes: 43 additions & 0 deletions gramps/gen/types.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,23 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2025 David Straub
# Copyright (C) 2025 Steve Youngs
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
"""Types for static type checking."""

from __future__ import annotations
Expand Down Expand Up @@ -42,3 +62,26 @@
)
AnyHandle = PrimaryObjectHandle | TagHandle
TableObjectType = TypeVar("TableObjectType", bound=TableObject)

PersonGrampsID = NewType("PersonGrampsID", str)
FamilyGrampsID = NewType("FamilyGrampsID", str)
EventGrampsID = NewType("EventGrampsID", str)
PlaceGrampsID = NewType("PlaceGrampsID", str)
SourceGrampsID = NewType("SourceGrampsID", str)
RepositoryGrampsID = NewType("RepositoryGrampsID", str)
CitationGrampsID = NewType("CitationGrampsID", str)
MediaGrampsID = NewType("MediaGrampsID", str)
NoteGrampsID = NewType("NoteGrampsID", str)
# No Tag IDs
PrimaryObjectGrampsID = (
PersonGrampsID
| FamilyGrampsID
| EventGrampsID
| PlaceGrampsID
| SourceGrampsID
| RepositoryGrampsID
| CitationGrampsID
| MediaGrampsID
| NoteGrampsID
)
AnyGrampsID = PrimaryObjectGrampsID # No Tag IDs

0 comments on commit ca6c3b2

Please sign in to comment.