Source code for pcapkit.utilities.warnings

# -*- coding: utf-8 -*-
"""User Defined Warnings
===========================

:mod:`pcapkit.warnings` refined built-in warnings.

"""
import warnings
from typing import TYPE_CHECKING

from pcapkit.utilities.exceptions import stacklevel as stacklevel_calculator
from pcapkit.utilities.logging import DEVMODE, logger

if TYPE_CHECKING:
    from typing import Any, Optional, Type, Union

__all__ = [
    'warn',

    # UserWarning
    'BaseWarning',
    # ImportWarning
    'FormatWarning', 'EngineWarning', 'InvalidVendorWarning',
    # RuntimeWarning
    'FileWarning', 'LayerWarning', 'ProtocolWarning', 'AttributeWarning',
    'DevModeWarning', 'VendorRequestWarning', 'VendorRuntimeWarning',
    # ResourceWarning
    'DPKTWarning', 'ScapyWarning', 'PySharkWarning', 'EmojiWarning',
    'VendorWarning',
]


[docs]def warn(message: 'Union[str, Warning]', category: 'Type[Warning]', stacklevel: 'Optional[int]' = None) -> 'None': """Wrapper function of :func:`warnings.warn`. Args: message: Warning message. category: Warning category. stacklevel: Warning stack level. """ if stacklevel is None: stacklevel = stacklevel_calculator() warnings.warn(message, category, stacklevel)
############################################################################## # BaseWarning (abc of warnings) session. ##############################################################################
[docs]class BaseWarning(UserWarning): """Base warning class of all kinds.""" def __init__(self, *args: 'Any', **kwargs: 'Any') -> 'None': # pylint: disable=useless-super-delegation # log warning if DEVMODE: logger.warning(str(self), exc_info=self) else: logger.warning(str(self)) # warnings.simplefilter('default') super().__init__(*args, **kwargs)
############################################################################## # ImportWarning session. ##############################################################################
[docs]class FormatWarning(BaseWarning, ImportWarning): """Warning on unknown format(s)."""
[docs]class EngineWarning(BaseWarning, ImportWarning): """Unsupported extraction engine."""
[docs]class InvalidVendorWarning(BaseWarning, ImportWarning): """Vendor CLI invalid updater."""
############################################################################## # RuntimeWarning session. ##############################################################################
[docs]class FileWarning(BaseWarning, RuntimeWarning): """Warning on file(s)."""
[docs]class LayerWarning(BaseWarning, RuntimeWarning): """Unrecognised layer."""
[docs]class ProtocolWarning(BaseWarning, RuntimeWarning): """Unrecognised protocol."""
[docs]class AttributeWarning(BaseWarning, RuntimeWarning): """Unsupported attribute."""
[docs]class DevModeWarning(BaseWarning, RuntimeWarning): """Run in development mode."""
[docs]class VendorRequestWarning(BaseWarning, RuntimeWarning): """Vendor request connection failed."""
[docs]class VendorRuntimeWarning(BaseWarning, RuntimeWarning): """Vendor failed during runtime."""
############################################################################## # ResourceWarning session. ##############################################################################
[docs]class DPKTWarning(BaseWarning, ResourceWarning): """Warnings on DPKT usage."""
[docs]class ScapyWarning(BaseWarning, ResourceWarning): """Warnings on Scapy usage."""
[docs]class PySharkWarning(BaseWarning, ResourceWarning): """Warnings on PyShark usage."""
[docs]class EmojiWarning(BaseWarning, ResourceWarning): """Warnings on Emoji usage."""
[docs]class VendorWarning(BaseWarning, ResourceWarning): """Warnings on vendor usage."""