Source code for pypdfium2._helpers.unsupported

# SPDX-FileCopyrightText: 2024 geisserml <geisserml@gmail.com>
# SPDX-License-Identifier: Apache-2.0 OR BSD-3-Clause

__all__ = ("PdfUnspHandler", )

import atexit
import logging
import pypdfium2.raw as pdfium_c
import pypdfium2.internal as pdfium_i

lib_logger = logging.getLogger("pypdfium2")


[docs] class PdfUnspHandler: """ Unsupported feature handler helper class. Attributes: handlers (dict[str, typing.Callable]): A dictionary of named handler functions to be called with an unsupported code (:attr:`FPDF_UNSP_*`) when PDFium detects an unsupported feature. """ def __init__(self): self.handlers = {} self._config = None def __call__(self, _, type): for handler in self.handlers.values(): handler(type)
[docs] def setup(self, add_default=True): """ Attach the handler to PDFium, and register an exit function to keep the object alive for the rest of the session. Parameters: add_default (bool): If True, add a default callback that will log unsupported features as warning. """ self._config = pdfium_c.UNSUPPORT_INFO(version=1) pdfium_i.set_callback(self._config, "FSDK_UnSupport_Handler", self) pdfium_c.FSDK_SetUnSpObjProcessHandler(self._config) atexit.register(self._keep) if add_default: self.handlers["default"] = PdfUnspHandler._default
def _keep(self): id(self.handlers) id(self._config) @staticmethod def _default(type): lib_logger.warning(f"Unsupported PDF feature: {pdfium_i.UnsupportedInfoToStr.get(type)}")