Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@

*.icloud
Pipfile.lock

out
*.js
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@
"sysconf",
"tbitem",
"tbody",
"tbtrim",
"tcif",
"tclass",
"tcls",
Expand Down
1 change: 1 addition & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ aenum = "*"
setuptools = "*"
dictdumper = "*"
emoji = "*"
tbtrim = "*"

[dev-packages]
pcapkit = {editable = true, path = "."}
Expand Down
10 changes: 8 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from distutils.core import setup

# version string
__version__ = '0.13.0.post2'
__version__ = '0.13.1'

# README
with open('README.md', encoding='utf-8') as file:
Expand All @@ -28,7 +28,13 @@
python_requires='>=3.4',
include_package_data=True,
zip_safe=True,
install_requires=['dictdumper', 'chardet', 'aenum', 'emoji'],
install_requires=[
'dictdumper', # for formatted output
'chardet', # for bytes decode
'aenum', # for const types
'emoji', # for CLI display
'tbtrim', # for refined exceptions
],
extras_require={
'all': ['dpkt', 'scapy', 'pyshark'],
'DPKT': ['dpkt'],
Expand Down
5 changes: 5 additions & 0 deletions src/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@
dump utilities for `pcapkit` implementation

"""
# set up sys.excepthook
import os
import tbtrim
tbtrim.set_trim_rule(lambda filename: f'{os.path.sep}pcapkit{os.path.sep}' in filename)

# All Reference
import pcapkit.__all__ as all # pylint: disable

Expand Down
3 changes: 2 additions & 1 deletion src/corekit/protochain.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import re

from pcapkit.corekit.infoclass import Info
from pcapkit.utilities.compat import Collection
from pcapkit.utilities.exceptions import (IndexNotFound, IntError,
ProtocolUnbound)
from pcapkit.utilities.validations import int_check, str_check
Expand All @@ -22,7 +23,7 @@
__all__ = ['ProtoChain']


class _ProtoList(collections.abc.Collection):
class _ProtoList(Collection):
"""List of protocol classes for ProtoChain."""
@property
def data(self):
Expand Down
6 changes: 1 addition & 5 deletions src/foundation/extraction.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,14 @@
from pcapkit.corekit.infoclass import Info
from pcapkit.protocols.pcap.frame import Frame
from pcapkit.protocols.pcap.header import Header
from pcapkit.utilities.compat import pathlib
from pcapkit.utilities.exceptions import (CallableError, FileNotFound,
FormatError, IterableError,
UnsupportedCall, stacklevel)
from pcapkit.utilities.warnings import (AttributeWarning, DPKTWarning,
EngineWarning, FormatWarning,
LayerWarning, ProtocolWarning)

try:
import pathlib2 as pathlib
except ImportError:
import pathlib

###############################################################################
# import enum
# import multiprocessing
Expand Down
6 changes: 1 addition & 5 deletions src/foundation/traceflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,11 @@
import warnings

from pcapkit.corekit.infoclass import Info
from pcapkit.utilities.compat import pathlib
from pcapkit.utilities.exceptions import FileExists, stacklevel
from pcapkit.utilities.validations import pkt_check
from pcapkit.utilities.warnings import FileWarning, FormatWarning

try:
import pathlib2 as pathlib
except ImportError:
import pathlib

###############################################################################
# from dictdumper import JSON, PLIST, XML, JavaScript, Tree
# from pcapkit.dumpkit import PCAP, NotImplementedIO
Expand Down
1 change: 1 addition & 0 deletions src/utilities/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
user-refined exceptions and validations.

"""
from pcapkit.utilities.compat import *
from pcapkit.utilities.decorators import *
from pcapkit.utilities.exceptions import *
from pcapkit.utilities.validations import *
Expand Down
47 changes: 47 additions & 0 deletions src/utilities/compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-

import builtins
import collections.abc
import sys

__all__ = [
'ModuleNotFoundError', # exceptions
'Collection', # classes
'pathlib', # modules
]

if sys.version_info[:2] < (3, 6):
class ModuleNotFoundError(ImportError):
pass
else:
ModuleNotFoundError = builtins.ModuleNotFoundError

if sys.version_info[:2] <= (3, 5):
def _check_methods(C, *methods):
mro = C.__mro__
for method in methods:
for B in mro:
if method in B.__dict__:
if B.__dict__[method] is None:
return NotImplemented
break
else:
return NotImplemented
return True

class Collection(collections.abc.Sized, collections.abc.Iterable, collections.abc.Container):

__slots__ = ()

@classmethod
def __subclasshook__(cls, C):
if cls is Collection:
return _check_methods(C, "__len__", "__iter__", "__contains__")
return NotImplemented
else:
Collection = collections.abc.Collection

if sys.version_info[:2] <= (3, 4):
import pathlib2 as pathlib
else:
import pathlib
2 changes: 2 additions & 0 deletions src/utilities/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
import sys
import traceback

from pcapkit.utilities.compat import ModuleNotFoundError

__all__ = [
'BaseError', # Exception
'DigitError', 'IntError', 'RealError', 'ComplexError', # TypeError
Expand Down