0
0
mirror of https://github.com/gramps-project/gramps synced 2025-10-05 23:52:46 +02:00

WIP: log_once, deprecation messages

This commit is contained in:
Doug Blank
2025-01-19 08:59:03 -05:00
parent f113589954
commit b34fa6ccb3
2 changed files with 444 additions and 36 deletions

View File

@@ -64,6 +64,7 @@ from ..lib.researcher import Researcher
from ..updatecallback import UpdateCallback
from ..utils.callback import Callback
from ..utils.id import create_id
from ..utils.logging import log_once_per_level
from . import (
CITATION_KEY,
DBLOGNAME,
@@ -2742,42 +2743,389 @@ class DbGeneric(DbWriteBase, DbReadBase, UpdateCallback, Callback):
# New names for methods:
get_person = get_person_from_handle
get_family = get_family_from_handle
get_source = get_source_from_handle
get_citation = get_citation_from_handle
get_event = get_event_from_handle
get_media = get_media_from_handle
get_place = get_place_from_handle
get_repository = get_repository_from_handle
get_note = get_note_from_handle
def get_person_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_person_from_handle has been deprecated; please use db.get_person",
)
return self.get_person(*args, **kwargs)
get_person_data = get_raw_person_data
get_family_data = get_raw_family_data
get_source_data = get_raw_source_data
get_citation_data = get_raw_citation_data
get_event_data = get_raw_event_data
get_media_data = get_raw_media_data
get_place_data = get_raw_place_data
get_repository_data = get_raw_repository_data
get_note_data = get_raw_note_data
def get_family_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_family_from_handle has been deprecated; please use db.get_family",
)
return self.get_family(*args, **kwargs)
get_person_from_id = get_person_from_gramps_id
get_family_from_id = get_family_from_gramps_id
get_source_from_id = get_source_from_gramps_id
get_citation_from_id = get_citation_from_gramps_id
get_event_from_id = get_event_from_gramps_id
get_media_from_id = get_media_from_gramps_id
get_place_from_id = get_place_from_gramps_id
get_repository_from_id = get_repository_from_gramps_id
get_note_from_id = get_note_from_gramps_id
def get_source_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_source_from_handle has been deprecated; please use db.get_source",
)
return self.get_source(*args, **kwargs)
get_person_data_from_id = _get_raw_person_from_id_data
get_family_data_from_id = _get_raw_family_from_id_data
get_source_data_from_id = _get_raw_source_from_id_data
get_citation_data_from_id = _get_raw_citation_from_id_data
get_event_data_from_id = _get_raw_event_from_id_data
get_media_data_from_id = _get_raw_media_from_id_data
get_place_data_from_id = _get_raw_place_from_id_data
get_repository_data_from_id = _get_raw_repository_from_id_data
get_note_data_from_id = _get_raw_note_from_id_data
def get_citation_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_citation_from_handle has been deprecated; please use db.get_citation",
)
return self.get_citation(*args, **kwargs)
def get_event_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_event_from_handle has been deprecated; please use db.get_event",
)
return self.get_event(*args, **kwargs)
def get_media_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_media_from_handle has been deprecated; please use db.get_media",
)
return self.get_media(self, *args, **kwargs)
def get_place_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_place_from_handle has been deprecated; please use db.get_place",
)
return self.get_place(self, *args, **kwargs)
def get_repository_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_repository_from_handle has been deprecated; please use db.get_repository",
)
return self.get_repository(self, *args, **kwargs)
def get_note_from_handle(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_note_from_handle has been deprecated; please use db.get_note",
)
return self.get_note(self, *args, **kwargs)
def get_raw_person_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_person_data has been deprecated; please use db.get_person_data",
)
return self.get_person_data(self, *args, **kwargs)
def get_raw_family_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_family_data has been deprecated; please use db.get_family_data",
)
return self.get_family_data(self, *args, **kwargs)
def get_raw_source_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_source_data has been deprecated; please use db.get_source_data",
)
return self.get_source_data(self, *args, **kwargs)
def get_raw_citation_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_citation_data has been deprecated; please use db.get_citation_data",
)
return self.get_citation_data(self, *args, **kwargs)
def get_raw_event_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_event_data has been deprecated; please use db.get_event_data",
)
return self.get_event_data(self, *args, **kwargs)
def get_raw_media_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_media_data has been deprecated; please use db.get_media_data",
)
return self.get_media_data(self, *args, **kwargs)
def get_raw_place_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_place_data has been deprecated; please use db.get_place_data",
)
return self.get_place_data(self, *args, **kwargs)
def get_raw_repository_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_repository_data has been deprecated; please use db.get_repository_data",
)
return self.get_repository_data(self, *args, **kwargs)
def get_raw_note_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_raw_note_data has been deprecated; please use db.get_note_data",
)
return self.get_note_data(self, *args, **kwargs)
def get_person_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_person_from_gramps_id has been deprecated; please use db.get_person_from_id",
)
return self.get_person_from_id(self, *args, **kwargs)
def get_family_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_family_from_gramps_id has been deprecated; please use db.get_family_from_id",
)
return self.get_family_from_id(self, *args, **kwargs)
def get_source_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_source_from_gramps_id has been deprecated; please use db.get_source_from_id",
)
return self.get_source_from_id(self, *args, **kwargs)
def get_citation_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_citation_from_gramps_id has been deprecated; please use db.get_citation_from_id",
)
return self.get_citation_from_id(self, *args, **kwargs)
def get_event_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_event_from_gramps_id has been deprecated; please use db.get_event_from_id",
)
return self.get_event_from_id(self, *args, **kwargs)
def get_media_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_media_from_gramps_id has been deprecated; please use db.get_media_from_id",
)
return self.get_media_from_id(self, *args, **kwargs)
def get_place_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_place_from_gramps_id has been deprecated; please use db.get_place_from_id",
)
return self.get_place_from_id(self, *args, **kwargs)
def get_repository_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_repository_from_gramps_id has been deprecated; please use db.get_repository_from_id",
)
return self.get_repository_from_id(self, *args, **kwargs)
def get_note_from_gramps_id(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.get_note_from_gramps_id has been deprecated; please use db.get_note_from_id",
)
return self.get_note_from_id(self, *args, **kwargs)
def _get_raw_person_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_person_from_id_data has been deprecated; please use db.get_person_data_from_id",
)
return self.get_person_data_from_id(self, *args, **kwargs)
def _get_raw_family_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_family_from_id_data has been deprecated; please use db.get_family_data_from_id",
)
return self.get_family_data_from_id(self, *args, **kwargs)
def _get_raw_source_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_source_from_id_data has been deprecated; please use db.get_source_data_from_id",
)
return self.get_source_data_from_id(self, *args, **kwargs)
def _get_raw_citation_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_citation_from_id_data has been deprecated; please use db.get_citation_data_from_id",
)
return self.get_citation_data_from_id(self, *args, **kwargs)
def _get_raw_event_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_event_from_id_data has been deprecated; please use db.get_event_data_from_id",
)
return self.get_event_data_from_id(self, *args, **kwargs)
def _get_raw_media_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_media_from_id_data has been deprecated; please use db.get_media_data_from_id",
)
return self.get_media_data_from_id(self, *args, **kwargs)
def _get_raw_place_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_place_from_id_data has been deprecated; please use db.get_place_data_from_id",
)
return self.get_place_data_from_id(self, *args, **kwargs)
def _get_raw_repository_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_repository_from_id_data has been deprecated; please use db.get_repository_data_from_id",
)
return self.get_repository_data_from_id(self, *args, **kwargs)
def _get_raw_note_from_id_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._get_raw_note_from_id_data has been deprecated; please use db.get_note_data_from_id",
)
return self.get_note_data_from_id(self, *args, **kwargs)
def _iter_raw_person_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_person_data has been deprecated; please use db.iter_person_data",
)
return self.iter_person_data(self, *args, **kwargs)
def _iter_raw_family_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_family_data has been deprecated; please use db.iter_family_data",
)
return self.iter_family_data(self, *args, **kwargs)
def _iter_raw_event_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_event_data has been deprecated; please use db.iter_event_data",
)
return self.iter_event_data(self, *args, **kwargs)
def _iter_raw_place_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_place_data has been deprecated; please use db.iter_place_data",
)
return self.iter_place_data(self, *args, **kwargs)
def _iter_raw_repository_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_repository_data has been deprecated; please use db.iter_repository_data",
)
return self.iter_repository_data(self, *args, **kwargs)
def _iter_raw_source_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_source_data has been deprecated; please use db.iter_source_data",
)
return self.iter_source_data(self, *args, **kwargs)
def _iter_raw_citation_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_citation_data has been deprecated; please use db.iter_citation_data",
)
return self.iter_citation_data(self, *args, **kwargs)
def _iter_raw_media_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_media_data has been deprecated; please use db.iter_media_data",
)
return self.iter_media_data(self, *args, **kwargs)
def _iter_raw_note_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_note_data has been deprecated; please use db.iter_note_data",
)
return self.iter_note_data(self, *args, **kwargs)
def _iter_raw_tag_data(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db._iter_raw_tag_data has been deprecated; please use db.iter_tag_data",
)
return self.iter_tag_data(self, *args, **kwargs)
def iter_citations(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.iter_citations has been deprecated; please use db.iter_citation",
)
return self.iter_citation(self, *args, **kwargs)
def iter_events(self, *args, **kwargs):
log_once_at_level(
logging.INFO, "db.iter_events has been deprecated; please use db.iter_event"
)
return self.iter_event(self, *args, **kwargs)
def iter_families(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.iter_families has been deprecated; please use db.iter_family",
)
return self.iter_family(self, *args, **kwargs)
def iter_media(self, *args, **kwargs):
log_once_at_level(
logging.INFO, "db.iter_media has been deprecated; please use db.iter_media"
)
return self.iter_media(self, *args, **kwargs)
def iter_notes(self, *args, **kwargs):
log_once_at_level(
logging.INFO, "db.iter_notes has been deprecated; please use db.iter_note"
)
return self.iter_note(self, *args, **kwargs)
def iter_people(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.iter_people has been deprecated; please use db.iter_person",
)
return self.iter_person(self, *args, **kwargs)
def iter_places(self, *args, **kwargs):
log_once_at_level(
logging.INFO, "db.iter_places has been deprecated; please use db.iter_place"
)
return self.iter_place(self, *args, **kwargs)
def iter_repositories(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.iter_repositories has been deprecated; please use db.iter_repository",
)
return self.iter_repository(self, *args, **kwargs)
def iter_sources(self, *args, **kwargs):
log_once_at_level(
logging.INFO,
"db.iter_sources has been deprecated; please use db.iter_source",
)
return self.iter_source(self, *args, **kwargs)
def iter_tags(self, *args, **kwargs):
log_once_at_level(
logging.INFO, "db.iter_tags has been deprecated; please use db.iter_tag"
)
return self.iter_tag(self, *args, **kwargs)

View File

@@ -0,0 +1,60 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2025 Doug Blank <doug.blank@gmail.com>
#
# 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.
#
"""
Logging utilities
"""
import logging
from typing import Any, Set
LOGGER = logging.getLogger(".")
LOG_ONCE_CACHE: Set[str] = set()
def log_once_at_level(
logging_level: int, message: str, *args: Any, **kwargs: Any
) -> None:
"""
Log the given message once at the given level then at the DEBUG
level on further calls.
This is a global setting, removed with
remove_log_once_at_level(MESSAGE)
"""
global LOG_ONCE_CACHE
if message not in LOG_ONCE_CACHE:
LOG_ONCE_CACHE.add(message)
LOGGER.log(logging_level, message, *args, **kwargs)
else:
LOGGER.debug(message, *args, **kwargs)
def remove_log_once_at_level(message: str) -> None:
"""
Clears the specified message from the global
log-once-per-session cache, enabling it to be logged at the
original level again when ``log_once_at_level()`` is subsequently
called.
"""
global LOG_ONCE_CACHE
LOG_ONCE_CACHE.discard(message)