Skip to content

Commit ed1ef77

Browse files
committed
bumped version to 0.16.1
* changed warnings.warn calls to pcapkit.utilities.warnings.warn * revised missing optional dependency warnings (add for CLI & vendor) * updated version strings in repository * make isort
1 parent 51fde04 commit ed1ef77

File tree

16 files changed

+96
-61
lines changed

16 files changed

+96
-61
lines changed

doc/sphinx/source/conf.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
# list see the documentation:
55
# https://www.sphinx-doc.org/en/master/usage/configuration.html
66

7+
# pylint: disable=all
8+
# type: ignore
9+
710
# -- Path setup --------------------------------------------------------------
811

912
# If extensions (or modules to document with autodoc) are in another directory,
@@ -24,7 +27,7 @@
2427
author = 'Jarry Shaw'
2528

2629
# The full version, including alpha/beta/rc tags
27-
release = '0.15.5'
30+
release = '0.16.1'
2831

2932

3033
# -- General configuration ---------------------------------------------------

pcapkit/__main__.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@
1010
import warnings
1111
from typing import TYPE_CHECKING
1212

13-
import emoji
13+
from pcapkit.utilities.compat import ModuleNotFoundError # pylint: disable=redefined-builtin
14+
from pcapkit.utilities.exceptions import stacklevel
15+
from pcapkit.utilities.warnings import EmojiWarning, warn
16+
17+
try:
18+
import emoji
19+
except ModuleNotFoundError:
20+
warn("dependency package 'emoji' not found",
21+
EmojiWarning, stacklevel=stacklevel())
1422

1523
from pcapkit.foundation.extraction import Extractor
1624
from pcapkit.interface import JSON, PLIST, TREE
@@ -19,7 +27,7 @@
1927
from argparse import ArgumentParser
2028

2129
#: version number
22-
__version__ = '0.15.5'
30+
__version__ = '0.16.1'
2331

2432

2533
def get_parser() -> 'ArgumentParser':

pcapkit/foundation/extraction.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import importlib
1616
import os
1717
import sys
18-
import warnings
1918
from typing import TYPE_CHECKING, cast
2019

2120
from pcapkit.const.reg.linktype import LinkType as RegType_LinkType
@@ -25,7 +24,8 @@
2524
from pcapkit.utilities.exceptions import (CallableError, FileNotFound, FormatError, IterableError,
2625
UnsupportedCall, stacklevel)
2726
from pcapkit.utilities.logging import logger
28-
from pcapkit.utilities.warnings import AttributeWarning, DPKTWarning, EngineWarning, FormatWarning
27+
from pcapkit.utilities.warnings import (AttributeWarning, DPKTWarning, EngineWarning, FormatWarning,
28+
warn)
2929

3030
if TYPE_CHECKING:
3131
from types import ModuleType, TracebackType
@@ -336,8 +336,8 @@ def run(self) -> 'None': # pylint: disable=inconsistent-return-statements
336336
if engine is not None:
337337
return self._run_pyshark(engine)
338338
elif self._exeng not in ('default', 'pcapkit'):
339-
warnings.warn(f'unsupported extraction engine: {self._exeng}; '
340-
'using default engine instead', EngineWarning, stacklevel=stacklevel())
339+
warn(f'unsupported extraction engine: {self._exeng}; '
340+
'using default engine instead', EngineWarning, stacklevel=stacklevel())
341341
self._exeng = 'default' # using default/pcapkit engine
342342

343343
self.record_header() # read PCAP global header
@@ -364,8 +364,8 @@ def import_test(engine: 'str', *, name: 'Optional[str]' = None) -> 'Optional[Mod
364364
module = importlib.import_module(engine)
365365
except ImportError:
366366
module = None
367-
warnings.warn(f"extraction engine '{name or engine}' not available; "
368-
'using default engine instead', EngineWarning, stacklevel=stacklevel())
367+
warn(f"extraction engine '{name or engine}' not available; "
368+
'using default engine instead', EngineWarning, stacklevel=stacklevel())
369369
return module
370370

371371
@classmethod
@@ -611,8 +611,8 @@ def __init__(self,
611611
if trace:
612612
from pcapkit.foundation.traceflow import TraceFlow # isort: skip
613613
if self._exeng in ('pyshark',) and trace_format in ('pcap',):
614-
warnings.warn(f"'Extractor(engine={self._exeng})' does not support 'trace_format={trace_format}'; "
615-
"using 'trace_format=None' instead", FormatWarning, stacklevel=stacklevel())
614+
warn(f"'Extractor(engine={self._exeng})' does not support 'trace_format={trace_format}'; "
615+
"using 'trace_format=None' instead", FormatWarning, stacklevel=stacklevel())
616616
trace_format = None
617617
self._trace = TraceFlow(fout=trace_fout, format=trace_format,
618618
byteorder=trace_byteorder, nanosecond=trace_nanosecond)
@@ -621,8 +621,8 @@ def __init__(self,
621621
if not self._flag_q:
622622
module, class_, ext = self.__output__[fmt]
623623
if ext is None:
624-
warnings.warn(f'Unsupported output format: {fmt}; disabled file output feature',
625-
FormatWarning, stacklevel=stacklevel())
624+
warn(f'Unsupported output format: {fmt}; disabled file output feature',
625+
FormatWarning, stacklevel=stacklevel())
626626
output = getattr(importlib.import_module(module), class_) # type: Type[Dumper]
627627

628628
class DictDumper(output): # type: ignore[valid-type,misc]
@@ -851,9 +851,9 @@ def _run_scapy(self, scapy_all: 'ModuleType') -> 'None':
851851
852852
"""
853853
if self._exlyr != 'none' or self._exptl != 'null':
854-
warnings.warn("'Extractor(engine=scapy)' does not support protocol and layer threshold; "
855-
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
856-
AttributeWarning, stacklevel=stacklevel())
854+
warn("'Extractor(engine=scapy)' does not support protocol and layer threshold; "
855+
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
856+
AttributeWarning, stacklevel=stacklevel())
857857

858858
# setup verbose handler
859859
if self._flag_v:
@@ -951,9 +951,9 @@ def _run_dpkt(self, dpkt: 'ModuleType') -> 'None':
951951
import dpkt # type: ignore[no-redef]
952952

953953
if self._exlyr != 'none' or self._exptl != 'null':
954-
warnings.warn("'Extractor(engine=dpkt)' does not support protocol and layer threshold; "
955-
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
956-
AttributeWarning, stacklevel=stacklevel())
954+
warn("'Extractor(engine=dpkt)' does not support protocol and layer threshold; "
955+
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
956+
AttributeWarning, stacklevel=stacklevel())
957957

958958
# setup verbose handler
959959
if self._flag_v:
@@ -973,8 +973,8 @@ def _run_dpkt(self, dpkt: 'ModuleType') -> 'None':
973973
elif self._dlink.value == RegType_LinkType.IPV6:
974974
pkg = dpkt.ip6.IP6
975975
else:
976-
warnings.warn('unrecognised link layer protocol; all analysis functions ignored',
977-
DPKTWarning, stacklevel=stacklevel())
976+
warn('unrecognised link layer protocol; all analysis functions ignored',
977+
DPKTWarning, stacklevel=stacklevel())
978978

979979
class RawPacket(dpkt.dpkt.Packet): # type: ignore[name-defined]
980980
"""Raw packet."""
@@ -1077,16 +1077,16 @@ def _run_pyshark(self, pyshark: 'ModuleType') -> 'None':
10771077
10781078
"""
10791079
if self._exlyr != 'none' or self._exptl != 'null':
1080-
warnings.warn("'Extractor(engine=pyshark)' does not support protocol and layer threshold; "
1081-
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
1082-
AttributeWarning, stacklevel=stacklevel())
1080+
warn("'Extractor(engine=pyshark)' does not support protocol and layer threshold; "
1081+
f"'layer={self._exlyr}' and 'protocol={self._exptl}' ignored",
1082+
AttributeWarning, stacklevel=stacklevel())
10831083

10841084
if (self._ipv4 or self._ipv6 or self._tcp):
10851085
self._ipv4 = self._ipv6 = self._tcp = False
10861086
self._reasm = [None, None, None]
1087-
warnings.warn("'Extractor(engine=pyshark)' object dose not support reassembly; "
1088-
f"so 'ipv4={self._ipv4}', 'ipv6={self._ipv6}' and 'tcp={self._tcp}' will be ignored",
1089-
AttributeWarning, stacklevel=stacklevel())
1087+
warn("'Extractor(engine=pyshark)' object dose not support reassembly; "
1088+
f"so 'ipv4={self._ipv4}', 'ipv6={self._ipv6}' and 'tcp={self._tcp}' will be ignored",
1089+
AttributeWarning, stacklevel=stacklevel())
10901090

10911091
# setup verbose handler
10921092
if self._flag_v:

pcapkit/foundation/traceflow.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,14 @@
7777
import importlib
7878
import os
7979
import sys
80-
import warnings
8180
from typing import TYPE_CHECKING, Generic, TypeVar, overload
8281

8382
from pcapkit.corekit.infoclass import Info
8483
from pcapkit.utilities.exceptions import FileExists, stacklevel
8584
from pcapkit.utilities.logging import logger
86-
from pcapkit.utilities.warnings import FileWarning, FormatWarning
85+
from pcapkit.utilities.warnings import FileWarning, FormatWarning, warn
8786

8887
if TYPE_CHECKING:
89-
from decimal import Decimal
9088
from ipaddress import IPv4Address, IPv6Address
9189
from typing import Any, DefaultDict, Optional, TextIO, Type
9290

@@ -267,15 +265,15 @@ def make_fout(cls, fout: 'str' = './tmp', fmt: 'str' = 'pcap') -> 'tuple[Type[Du
267265
"""
268266
module, class_, ext = cls.__output__[fmt]
269267
if ext is None:
270-
warnings.warn(f'Unsupported output format: {fmt}; disabled file output feature',
271-
FormatWarning, stacklevel=stacklevel())
268+
warn(f'Unsupported output format: {fmt}; disabled file output feature',
269+
FormatWarning, stacklevel=stacklevel())
272270
output = getattr(importlib.import_module(module), class_) # type: Type[Dumper]
273271

274272
try:
275273
os.makedirs(fout, exist_ok=True)
276274
except FileExistsError as error:
277275
if ext is None:
278-
warnings.warn(error.strerror, FileWarning, stacklevel=stacklevel())
276+
warn(error.strerror, FileWarning, stacklevel=stacklevel())
279277
else:
280278
raise FileExists(*error.args).with_traceback(error.__traceback__)
281279

pcapkit/interface/misc.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
88
"""
99
import sys
10-
import warnings
1110
from typing import TYPE_CHECKING
1211

1312
from pcapkit.corekit.infoclass import Info
1413
from pcapkit.foundation.extraction import Extractor
1514
from pcapkit.foundation.reassembly.tcp import TCP_Reassembly
1615
from pcapkit.utilities.exceptions import stacklevel
17-
from pcapkit.utilities.warnings import EngineWarning
16+
from pcapkit.utilities.warnings import EngineWarning, warn
1817

1918
if TYPE_CHECKING:
2019
from typing import Optional
@@ -70,8 +69,8 @@ def follow_tcp_stream(fin: 'Optional[str]' = None, verbose: 'bool' = False,
7069
7170
"""
7271
if engine is not None and engine.lower() == 'pyshark':
73-
warnings.warn(f'unsupported extraction engine: {engine}; fallback to default engine',
74-
EngineWarning, stacklevel=stacklevel())
72+
warn(f'unsupported extraction engine: {engine}; fallback to default engine',
73+
EngineWarning, stacklevel=stacklevel())
7574
engine = None
7675

7776
extraction = Extractor(fin=fin, fout=None, format=None, auto=True, extension=extension,
@@ -84,9 +83,11 @@ def follow_tcp_stream(fin: 'Optional[str]' = None, verbose: 'bool' = False,
8483
if extraction.engine == 'dpkt':
8584
from pcapkit.toolkit.dpkt import tcp_reassembly # pylint: disable=import-outside-toplevel
8685
elif extraction.engine == 'scapy':
87-
from pcapkit.toolkit.scapy import tcp_reassembly # type: ignore[no-redef] # pylint: disable=import-outside-toplevel
86+
from pcapkit.toolkit.scapy import \
87+
tcp_reassembly # type: ignore[no-redef] # pylint: disable=import-outside-toplevel
8888
else:
89-
from pcapkit.toolkit.default import tcp_reassembly # type: ignore[no-redef] # pylint: disable=import-outside-toplevel
89+
from pcapkit.toolkit.default import \
90+
tcp_reassembly # type: ignore[no-redef] # pylint: disable=import-outside-toplevel
9091
fallback = True
9192

9293
streams = [] # type: list[Stream]

pcapkit/protocols/application/http.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,11 @@ def _guess_version(self, length: 'int', **kwargs: 'Any') -> 'Protocol':
150150
Parsed packet data.
151151
152152
"""
153-
from pcapkit.protocols.application.httpv1 import HTTPv1 # pylint: disable=line-too-long,import-outside-toplevel
153+
from pcapkit.protocols.application.httpv1 import HTTPv1 # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
154154
with contextlib.suppress(ProtocolError):
155155
return HTTPv1(self._file, length, **kwargs)
156156

157-
from pcapkit.protocols.application.httpv2 import HTTPv2 # pylint: disable=line-too-long,import-outside-toplevel
157+
from pcapkit.protocols.application.httpv2 import HTTPv2 # isort: skip # pylint: disable=line-too-long,import-outside-toplevel
158158
with contextlib.suppress(ProtocolError):
159159
return HTTPv2(self._file, length, **kwargs)
160160

pcapkit/protocols/internet/NotImplemented/esp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2727
2828
"""
29-
from pcapkit.protocols.internet.ipsec import IPsec
3029
from pcapkit.corekit.infoclass import Info
30+
from pcapkit.protocols.internet.ipsec import IPsec
3131

3232
__all__ = ['ESP']
3333

pcapkit/protocols/internet/hip.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
"""
3030
import datetime
3131
import ipaddress
32-
import warnings
3332
from typing import TYPE_CHECKING, overload
3433

3534
from pcapkit.const.hip.certificate import Certificate as RegType_Certificate
@@ -127,7 +126,7 @@
127126
from pcapkit.protocols.data.internet.hip import ViaRVSParameter as DataType_ViaRVSParameter
128127
from pcapkit.protocols.internet.internet import Internet
129128
from pcapkit.utilities.exceptions import ProtocolError, UnsupportedCall
130-
from pcapkit.utilities.warnings import ProtocolWarning
129+
from pcapkit.utilities.warnings import ProtocolWarning, warn
131130

132131
if TYPE_CHECKING:
133132
from ipaddress import IPv4Address, IPv6Address
@@ -1125,7 +1124,7 @@ def _read_param_hip_cipher(self, code: 'int', cbit: 'bool', clen: 'int', *, # p
11251124
# NOTE: The sender of a HIP_CIPHER parameter MUST make sure that there are no
11261125
# more than six (6) Cipher IDs in one HIP_CIPHER parameter. [:rfc:`7401#section-5.2.8`]
11271126
if index > 5:
1128-
warnings.warn(f'HIPv{version}: [ParamNo {code}] invalid format', ProtocolWarning)
1127+
warn(f'HIPv{version}: [ParamNo {code}] invalid format', ProtocolWarning)
11291128
# raise ProtocolError(f'HIPv{version}: [ParamNo {code}] invalid format')
11301129
_cpid.append(RegType_Cipher.get(self._read_unpack(2)))
11311130

pcapkit/protocols/transport/tcp.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@
9696
from mypy_extensions import NamedArg
9797
from typing_extensions import Literal
9898

99-
from pcapkit.protocols.data.transport.tcp import Option as DataType_Option
10099
from pcapkit.protocols.data.transport.tcp import MPTCPJoin as DataType_MPTCPJoin
100+
from pcapkit.protocols.data.transport.tcp import Option as DataType_Option
101101

102102
Option = OrderedMultiDict[RegType_Option, DataType_Option]
103103
OptionParser = Callable[['TCP', RegType_Option, NamedArg(Option, 'options')], DataType_Option]

pcapkit/toolkit/default.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def ipv6_reassembly(frame: 'Frame') -> 'IP_Packet[IPv6Address] | None':
9494
if 'IPv6' in frame:
9595
ipv6 = cast('IPv6', frame['IPv6'])
9696
ipv6_info = ipv6.info
97-
if (ipv6_frag := ipv6.extension_headers.get(
97+
if (ipv6_frag := ipv6.extension_headers.get( # type: ignore[call-overload]
9898
RegType_ExtensionHeader.IPv6_Frag
9999
)) is None: # dismiss not fragmented frame
100100
return None

0 commit comments

Comments
 (0)