Skip to content

Commit 77e5672

Browse files
committed
redesigned registry management
1 parent de58706 commit 77e5672

File tree

6 files changed

+497
-434
lines changed

6 files changed

+497
-434
lines changed

docs/source/pcapkit/foundation/registry.rst

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,49 +10,59 @@ points.
1010
Protocol Registries
1111
-------------------
1212

13-
.. autofunction:: pcapkit.foundation.registry.register_protocol
13+
.. module:: pcapkit.foundation.registry.protocols
1414

15-
.. autofunction:: pcapkit.foundation.registry.register_pcap
15+
.. autofunction:: pcapkit.foundation.registry.protocols.register_protocol
1616

17-
.. autofunction:: pcapkit.foundation.registry.register_pcapng
17+
Top-Level Registries
18+
~~~~~~~~~~~~~~~~~~~~
19+
20+
.. autofunction:: pcapkit.foundation.registry.protocols.register_linktype
21+
22+
.. autofunction:: pcapkit.foundation.registry.protocols.register_pcap
23+
24+
.. autofunction:: pcapkit.foundation.registry.protocols.register_pcapng
1825

1926
Link Layer Registries
20-
---------------------
27+
~~~~~~~~~~~~~~~~~~~~~
2128

22-
.. autofunction:: pcapkit.foundation.registry.register_ethertype
29+
.. autofunction:: pcapkit.foundation.registry.protocols.register_ethertype
2330

2431
Internet Layer Registries
25-
-------------------------
32+
~~~~~~~~~~~~~~~~~~~~~~~~~
33+
34+
.. autofunction:: pcapkit.foundation.registry.protocols.register_transtype
2635

27-
.. autofunction:: pcapkit.foundation.registry.register_transtype
36+
.. autofunction:: pcapkit.foundation.registry.protocols.register_ipv4_option
2837

29-
.. autofunction:: pcapkit.foundation.registry.register_hopopt
38+
.. autofunction:: pcapkit.foundation.registry.protocols.register_hip_parameter
3039

31-
.. autofunction:: pcapkit.foundation.registry.register_ipv6_opts
40+
.. autofunction:: pcapkit.foundation.registry.protocols.register_hopopt_option
3241

33-
.. autofunction:: pcapkit.foundation.registry.register_ipv6_route
42+
.. autofunction:: pcapkit.foundation.registry.protocols.register_ipv6_opts_option
43+
44+
.. autofunction:: pcapkit.foundation.registry.protocols.register_ipv6_route_routing
3445

3546
Transport Layer Registries
36-
--------------------------
47+
~~~~~~~~~~~~~~~~~~~~~~~~~~
3748

38-
.. autofunction:: pcapkit.foundation.registry.register_tcp_port
49+
.. autofunction:: pcapkit.foundation.registry.register_port
3950

4051
.. autofunction:: pcapkit.foundation.registry.register_tcp
4152

42-
.. autofunction:: pcapkit.foundation.registry.register_mptcp
53+
.. autofunction:: pcapkit.foundation.registry.register_tcp_option
4354

44-
.. autofunction:: pcapkit.foundation.registry.register_udp_port
55+
.. autofunction:: pcapkit.foundation.registry.register_tcp_mp_option
4556

46-
Application Layer Registries
47-
----------------------------
57+
.. autofunction:: pcapkit.foundation.registry.register_udp
4858

49-
.. autofunction:: pcapkit.foundation.registry.register_http
59+
Application Layer Registries
60+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5061

51-
Miscellaneous Registries
52-
------------------------
62+
.. autofunction:: pcapkit.foundation.registry.register_http_frame
5363

54-
PCAP-NG Registries
55-
~~~~~~~~~~~~~~~~~~
64+
Miscellaneous Protocol Registries
65+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5666

5767
.. autofunction:: pcapkit.foundation.registry.register_pcapng_block
5868

@@ -62,23 +72,21 @@ PCAP-NG Registries
6272

6373
.. autofunction:: pcapkit.foundation.registry.register_pcapng_secrets
6474

65-
Engine Registries
66-
~~~~~~~~~~~~~~~~~
75+
Foundation Registries
76+
---------------------
6777

68-
.. autofunction:: pcapkit.foundation.registry.register_extractor_engine
78+
.. module:: pcapkit.foundation.registry.foundation
6979

70-
Dumper Registries
80+
Engine Registries
7181
~~~~~~~~~~~~~~~~~
7282

73-
.. autofunction:: pcapkit.foundation.registry.register_extractor_dumper
74-
75-
.. autofunction:: pcapkit.foundation.registry.register_traceflow
83+
.. autofunction:: pcapkit.foundation.registry.foundation.register_extractor_engine
7684

77-
Auxiliary Methods
85+
Dumper Registries
7886
~~~~~~~~~~~~~~~~~
7987

80-
.. autofunction:: pcapkit.foundation.registry.register_output
88+
.. autofunction:: pcapkit.foundation.registry.foundation.register_dumper
8189

82-
.. autofunction:: pcapkit.foundation.registry.register_linktype
90+
.. autofunction:: pcapkit.foundation.registry.foundation.register_extractor_dumper
8391

84-
.. autofunction:: pcapkit.foundation.registry.register_port
92+
.. autofunction:: pcapkit.foundation.registry.foundation.register_traceflow_dumper

pcapkit/all.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -71,26 +71,29 @@
7171

7272
# pcapkit.foundation
7373
'Extractor', # Extraction
74-
'TraceFlow', # Trace Flow
74+
'TCP_TraceFlow', # Trace Flow
7575

7676
# pcapkit.foundation.reassembly
7777
'IPv4_Reassembly', 'IPv6_Reassembly', # IP Reassembly
7878
'TCP_Reassembly', # TCP Reassembly
7979

8080
# pcapkit.foundation.registry
8181
'register_protocol',
82-
'register_linktype', 'register_pcap', 'register_pcapng',
83-
'register_ethertype', 'register_transtype',
84-
'register_port', 'register_tcp_port', 'register_udp_port',
85-
'register_output',
86-
'register_extractor_dumper', 'register_extractor_engine',
87-
'register_traceflow',
82+
'register_linktype',
83+
'register_pcap', 'register_pcapng',
84+
'register_ethertype',
85+
'register_transtype',
86+
'register_ipv4_option', 'register_hip_parameter', 'register_hopopt_option',
87+
'register_ipv6_opts_option', 'register_ipv6_route_routing',
88+
'register_port',
89+
'register_tcp', 'register_udp',
90+
'register_tcp_option', 'register_tcp_mp_option',
91+
'register_http_frame',
8892
'register_pcapng_block', 'register_pcapng_option', 'register_pcapng_secrets',
8993
'register_pcapng_record',
90-
'register_hopopt', 'register_ipv6_opts', 'register_ipv6_route',
91-
'register_ipv4', 'register_hip',
92-
'register_tcp', 'register_mptcp',
93-
'register_http',
94+
'register_extractor_engine',
95+
'register_dumper',
96+
'register_extractor_dumper', 'register_traceflow_dumper',
9497

9598
# pcapkit.interface
9699
'extract', 'reassemble', 'trace', # Interface Functions

pcapkit/foundation/__init__.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,26 @@
1919

2020
__all__ = [
2121
'Extractor',
22+
2223
'IPv4_Reassembly', 'IPv6_Reassembly', 'TCP_Reassembly',
24+
2325
'TCP_TraceFlow',
2426

2527
'register_protocol',
26-
27-
'register_linktype', 'register_pcap', 'register_pcapng',
28-
'register_ethertype', 'register_transtype',
29-
'register_port', 'register_tcp_port', 'register_udp_port',
30-
31-
'register_output',
32-
'register_extractor_dumper', 'register_extractor_engine',
33-
'register_traceflow',
34-
28+
'register_linktype',
29+
'register_pcap', 'register_pcapng',
30+
'register_ethertype',
31+
'register_transtype',
32+
'register_ipv4_option', 'register_hip_parameter', 'register_hopopt_option',
33+
'register_ipv6_opts_option', 'register_ipv6_route_routing',
34+
'register_port',
35+
'register_tcp', 'register_udp',
36+
'register_tcp_option', 'register_tcp_mp_option',
37+
'register_http_frame',
3538
'register_pcapng_block', 'register_pcapng_option', 'register_pcapng_secrets',
3639
'register_pcapng_record',
37-
'register_hopopt', 'register_ipv6_opts', 'register_ipv6_route',
38-
'register_ipv4', 'register_hip',
39-
'register_tcp', 'register_mptcp',
40-
'register_http',
40+
41+
'register_extractor_engine',
42+
'register_dumper',
43+
'register_extractor_dumper', 'register_traceflow_dumper',
4144
]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# -*- coding: utf-8 -*-
2+
"""Registry Management
3+
=========================
4+
5+
.. module:: pcapkit.foundation.registry
6+
7+
This module provides the registry management for :mod:`pcapkit`, as the module
8+
contains various registry points.
9+
10+
"""
11+
12+
from pcapkit.foundation.registry.foundation import *
13+
from pcapkit.foundation.registry.protocols import *
14+
15+
__all__ = [
16+
'register_extractor_engine',
17+
18+
'register_dumper',
19+
'register_extractor_dumper', 'register_traceflow_dumper',
20+
21+
'register_protocol',
22+
23+
'register_linktype',
24+
'register_pcap', 'register_pcapng',
25+
26+
'register_ethertype',
27+
28+
'register_transtype',
29+
'register_ipv4_option', 'register_hip_parameter', 'register_hopopt_option',
30+
'register_ipv6_opts_option', 'register_ipv6_route_routing',
31+
32+
'register_port',
33+
'register_tcp', 'register_udp',
34+
'register_tcp_option', 'register_tcp_mp_option',
35+
36+
'register_http_frame',
37+
38+
'register_pcapng_block', 'register_pcapng_option', 'register_pcapng_secrets',
39+
'register_pcapng_record',
40+
]
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
# -*- coding: utf-8 -*-
2+
"""Foundation Registries
3+
===========================
4+
5+
.. module:: pcapkit.foundation.registry.foundation
6+
7+
This module provides the foundation registries for :mod:`pcapkit`.
8+
9+
"""
10+
import importlib
11+
12+
from dictdumper import Dumper
13+
14+
from pcapkit.foundation.engines import Engine
15+
from pcapkit.foundation.extraction import Extractor
16+
from pcapkit.foundation.traceflow import TraceFlow
17+
from pcapkit.utilities.exceptions import RegistryError
18+
from pcapkit.utilities.logging import logger
19+
20+
__all__ = [
21+
'register_extractor_engine',
22+
23+
'register_dumper',
24+
'register_extractor_dumper', 'register_traceflow_dumper',
25+
]
26+
27+
28+
###############################################################################
29+
# Engine Registries
30+
###############################################################################
31+
32+
33+
# NOTE: pcapkit.foundation.extraction.Extractor.__engine__
34+
def register_extractor_engine(engine: 'str', module: 'str', class_: 'str') -> 'None': # pylint: disable=redefined-builtin
35+
r"""Registered a new engine class.
36+
37+
Notes:
38+
The full qualified class name of the new engine class
39+
should be as ``{module}.{class_}``.
40+
41+
The function will register the given engine class to the
42+
:data:`pcapkit.foundation.extraction.Extractor.__engine__` registry.
43+
44+
Arguments:
45+
engine: engine name
46+
module: module name
47+
class\_: class name
48+
49+
"""
50+
engine_cls = getattr(importlib.import_module(module), class_)
51+
if not issubclass(engine_cls, Engine):
52+
raise RegistryError('engine must be a Engine subclass')
53+
54+
Extractor.register_engine(engine, module, class_)
55+
logger.info('registered extractor engine: %s', engine)
56+
57+
58+
###############################################################################
59+
# Dumper Registries
60+
###############################################################################
61+
62+
63+
def register_dumper(format: 'str', module: 'str', class_: 'str', ext: 'str') -> 'None': # pylint: disable=redefined-builtin
64+
r"""Registered a new dumper class.
65+
66+
Notes:
67+
The full qualified class name of the new dumper class
68+
should be as ``{module}.{class_}``.
69+
70+
The function will register the given dumper class to the
71+
:data:`pcapkit.foundation.traceflow.TraceFlow.__output__` and
72+
:data:`pcapkit.foundation.extraction.Extractor.__output__` registry.
73+
74+
See Also:
75+
* :func:`pcapkit.foundation.registry.register_extractor_dumper`
76+
* :func:`pcapkit.foundation.registry.register_traceflow`
77+
78+
Arguments:
79+
format: format name
80+
module: module name
81+
class\_: class name
82+
ext: file extension
83+
84+
"""
85+
dumper = getattr(importlib.import_module(module), class_)
86+
if not issubclass(dumper, Dumper):
87+
raise RegistryError('dumper must be a Dumper subclass')
88+
89+
Extractor.register_dumper(format, module, class_, ext)
90+
TraceFlow.register(format, module, class_, ext)
91+
logger.info('registered output format: %s', dumper.__name__)
92+
93+
94+
# NOTE: pcapkit.foundation.extraction.Extractor.__output__
95+
def register_extractor_dumper(format: 'str', module: 'str', class_: 'str', ext: 'str') -> 'None': # pylint: disable=redefined-builtin
96+
r"""Registered a new dumper class.
97+
98+
Notes:
99+
The full qualified class name of the new dumper class
100+
should be as ``{module}.{class_}``.
101+
102+
The function will register the given dumper class to the
103+
:data:`pcapkit.foundation.extraction.Extractor.__output__` registry.
104+
105+
Arguments:
106+
format: format name
107+
module: module name
108+
class\_: class name
109+
ext: file extension
110+
111+
"""
112+
dumper = getattr(importlib.import_module(module), class_)
113+
if not issubclass(dumper, Dumper):
114+
raise RegistryError('dumper must be a Dumper subclass')
115+
116+
Extractor.register_dumper(format, module, class_, ext)
117+
logger.info('registered extractor output dumper: %s', format)
118+
119+
120+
# NOTE: pcapkit.foundation.traceflow.traceflow.TraceFlow.__output__
121+
def register_traceflow_dumper(format: 'str', module: 'str', class_: 'str', ext: 'str') -> 'None': # pylint: disable=redefined-builtin
122+
r"""Registered a new dumper class.
123+
124+
Notes:
125+
The full qualified class name of the new dumper class
126+
should be as ``{module}.{class_}``.
127+
128+
The function will register the given dumper class to the
129+
:data:`pcapkit.foundation.traceflow.traceflow.TraceFlow.__output__` registry.
130+
131+
Arguments:
132+
format: format name
133+
module: module name
134+
class\_: class name
135+
ext: file extension
136+
137+
"""
138+
dumper = getattr(importlib.import_module(module), class_)
139+
if not issubclass(dumper, Dumper):
140+
raise RegistryError('dumper must be a Dumper subclass')
141+
142+
TraceFlow.register(format, module, class_, ext)
143+
logger.info('registered traceflow output: %s', format)

0 commit comments

Comments
 (0)