Skip to content

Commit 84f5266

Browse files
MAINT: Use placeholder-based approach for logger_error (#3673)
See #3384. --------- Co-authored-by: Stefan <96178532+stefan6419846@users.noreply.github.com>
1 parent 8f1f4aa commit 84f5266

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

pypdf/_cmap.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ def _parse_encoding(
8484
else:
8585
raise Exception("not found")
8686
except Exception:
87-
logger_error(f"Advanced encoding {enc} not implemented yet", __name__)
87+
logger_error("Advanced encoding %(encoding)s not implemented yet", source=__name__, encoding=enc)
8888
encoding = enc
8989
elif isinstance(enc, DictionaryObject) and "/BaseEncoding" in enc:
9090
try:
9191
encoding = charset_encoding[cast(str, enc["/BaseEncoding"])].copy()
9292
except Exception:
9393
logger_error(
94-
f"Advanced encoding {encoding} not implemented yet",
95-
__name__,
94+
"Advanced encoding %(encoding)s not implemented yet",
95+
source=__name__, encoding=encoding
9696
)
9797
encoding = charset_encoding["/StandardEncoding"].copy()
9898
else:

pypdf/_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ def deprecation_no_replacement(name: str, removed_in: str) -> None:
440440
deprecation(f"{name} is deprecated and was removed in pypdf {removed_in}.")
441441

442442

443-
def logger_error(msg: str, src: str) -> None:
443+
def logger_error(message: str, *, source: str, **values: Any) -> None:
444444
"""
445445
Use this instead of logger.error directly.
446446
@@ -449,7 +449,7 @@ def logger_error(msg: str, src: str) -> None:
449449
See the docs on when to use which:
450450
https://pypdf.readthedocs.io/en/latest/user/suppress-warnings.html
451451
"""
452-
logging.getLogger(src).error(msg)
452+
logging.getLogger(source).error(message, values)
453453

454454

455455
def logger_warning(msg: str, src: str) -> None:

tests/test_utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
deprecate_with_replacement,
2222
deprecation_no_replacement,
2323
format_iso8824_date,
24+
logger_error,
2425
mark_location,
2526
matrix_multiply,
2627
parse_iso8824_date,
@@ -33,6 +34,7 @@
3334
skip_over_whitespace,
3435
)
3536
from pypdf.errors import DeprecationError, PdfReadError, PdfStreamError
37+
from pypdf.generic import DictionaryObject, NameObject, TextStringObject
3638

3739
from . import is_sublist
3840

@@ -331,6 +333,17 @@ def foo() -> None:
331333
foo()
332334

333335

336+
def test_logger_error(caplog):
337+
enc = NameObject("/Invalid")
338+
message = "Advanced encoding %(encoding)s not implemented yet"
339+
logger_error(message, source=__name__, encoding=enc)
340+
assert "Advanced encoding /Invalid not implemented yet" in caplog.text
341+
encoding = DictionaryObject({NameObject("/key"): TextStringObject("value")})
342+
message = "Advanced encoding %(encoding)s not implemented yet"
343+
logger_error(message, source=__name__, encoding=encoding)
344+
assert "Advanced encoding {'/key': 'value'} not implemented yet" in caplog.text
345+
346+
334347
def test_rename_kwargs():
335348
def deprecation_bookmark_nofail(**aliases: str) -> Callable:
336349
"""

0 commit comments

Comments
 (0)