pyxcp 0.21.9__cp312-cp312-win_amd64.whl → 0.22.23__cp312-cp312-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyxcp might be problematic. Click here for more details.

Files changed (182) hide show
  1. pyxcp/__init__.py +12 -20
  2. pyxcp/aml/EtasCANMonitoring.a2l +82 -83
  3. pyxcp/aml/XCP_Common.aml +0 -1
  4. pyxcp/aml/XCPonUSB.aml +1 -1
  5. pyxcp/aml/ifdata_CAN.a2l +0 -1
  6. pyxcp/aml/ifdata_Eth.a2l +0 -1
  7. pyxcp/aml/ifdata_Flx.a2l +0 -1
  8. pyxcp/aml/ifdata_SxI.a2l +0 -1
  9. pyxcp/aml/ifdata_USB.a2l +0 -1
  10. pyxcp/asam/types.py +4 -4
  11. pyxcp/asamkeydll.c +0 -1
  12. pyxcp/checksum.py +0 -1
  13. pyxcp/cmdline.py +32 -50
  14. pyxcp/config/__init__.py +1100 -0
  15. pyxcp/config/legacy.py +120 -0
  16. pyxcp/constants.py +12 -13
  17. pyxcp/cpp_ext/__init__.py +0 -0
  18. pyxcp/cpp_ext/bin.hpp +104 -0
  19. pyxcp/cpp_ext/blockmem.hpp +58 -0
  20. pyxcp/cpp_ext/cpp_ext.cp310-win_amd64.pyd +0 -0
  21. pyxcp/cpp_ext/cpp_ext.cp311-win_amd64.pyd +0 -0
  22. pyxcp/cpp_ext/cpp_ext.cp312-win_amd64.pyd +0 -0
  23. pyxcp/cpp_ext/cpp_ext.cp38-win_amd64.pyd +0 -0
  24. pyxcp/cpp_ext/cpp_ext.cp39-win_amd64.pyd +0 -0
  25. pyxcp/cpp_ext/daqlist.hpp +200 -0
  26. pyxcp/cpp_ext/event.hpp +67 -0
  27. pyxcp/cpp_ext/extension_wrapper.cpp +96 -0
  28. pyxcp/cpp_ext/helper.hpp +280 -0
  29. pyxcp/cpp_ext/mcobject.hpp +246 -0
  30. pyxcp/cpp_ext/tsqueue.hpp +46 -0
  31. pyxcp/daq_stim/__init__.py +228 -0
  32. pyxcp/daq_stim/optimize/__init__.py +67 -0
  33. pyxcp/daq_stim/optimize/binpacking.py +41 -0
  34. pyxcp/daq_stim/scheduler.cpp +28 -0
  35. pyxcp/daq_stim/scheduler.hpp +75 -0
  36. pyxcp/daq_stim/stim.cp310-win_amd64.pyd +0 -0
  37. pyxcp/daq_stim/stim.cp311-win_amd64.pyd +0 -0
  38. pyxcp/daq_stim/stim.cp312-win_amd64.pyd +0 -0
  39. pyxcp/daq_stim/stim.cp38-win_amd64.pyd +0 -0
  40. pyxcp/daq_stim/stim.cp39-win_amd64.pyd +0 -0
  41. pyxcp/daq_stim/stim.cpp +13 -0
  42. pyxcp/daq_stim/stim.hpp +604 -0
  43. pyxcp/daq_stim/stim_wrapper.cpp +48 -0
  44. pyxcp/dllif.py +21 -18
  45. pyxcp/errormatrix.py +5 -3
  46. pyxcp/examples/conf_can.toml +4 -2
  47. pyxcp/examples/conf_can_vector.json +9 -9
  48. pyxcp/examples/conf_can_vector.toml +4 -2
  49. pyxcp/examples/conf_eth.toml +5 -2
  50. pyxcp/examples/conf_nixnet.json +18 -18
  51. pyxcp/examples/conf_sxi.json +7 -7
  52. pyxcp/examples/ex_arrow.py +109 -0
  53. pyxcp/examples/ex_csv.py +85 -0
  54. pyxcp/examples/ex_excel.py +95 -0
  55. pyxcp/examples/ex_mdf.py +124 -0
  56. pyxcp/examples/ex_sqlite.py +128 -0
  57. pyxcp/examples/run_daq.py +148 -0
  58. pyxcp/examples/xcp_policy.py +6 -7
  59. pyxcp/examples/xcp_read_benchmark.py +8 -6
  60. pyxcp/examples/xcp_skel.py +0 -2
  61. pyxcp/examples/xcp_unlock.py +1 -1
  62. pyxcp/examples/xcp_user_supplied_driver.py +1 -2
  63. pyxcp/examples/xcphello.py +6 -3
  64. pyxcp/examples/xcphello_recorder.py +4 -4
  65. pyxcp/master/__init__.py +1 -2
  66. pyxcp/master/errorhandler.py +107 -74
  67. pyxcp/master/master.py +196 -114
  68. pyxcp/py.typed +0 -0
  69. pyxcp/recorder/__init__.py +27 -6
  70. pyxcp/recorder/converter/__init__.py +37 -0
  71. pyxcp/recorder/lz4.c +129 -51
  72. pyxcp/recorder/lz4.h +45 -28
  73. pyxcp/recorder/lz4hc.c +560 -156
  74. pyxcp/recorder/lz4hc.h +1 -1
  75. pyxcp/recorder/mio.hpp +721 -767
  76. pyxcp/recorder/reader.hpp +139 -0
  77. pyxcp/recorder/reco.py +5 -8
  78. pyxcp/recorder/rekorder.cp310-win_amd64.pyd +0 -0
  79. pyxcp/recorder/rekorder.cp311-win_amd64.pyd +0 -0
  80. pyxcp/recorder/rekorder.cp312-win_amd64.pyd +0 -0
  81. pyxcp/recorder/rekorder.cp38-win_amd64.pyd +0 -0
  82. pyxcp/recorder/rekorder.cp39-win_amd64.pyd +0 -0
  83. pyxcp/recorder/rekorder.cpp +18 -22
  84. pyxcp/recorder/rekorder.hpp +200 -587
  85. pyxcp/recorder/setup.py +11 -10
  86. pyxcp/recorder/test_reko.py +2 -3
  87. pyxcp/recorder/unfolder.hpp +1332 -0
  88. pyxcp/recorder/wrap.cpp +171 -9
  89. pyxcp/recorder/writer.hpp +302 -0
  90. pyxcp/scripts/pyxcp_probe_can_drivers.py +0 -2
  91. pyxcp/scripts/xcp_examples.py +64 -0
  92. pyxcp/scripts/xcp_fetch_a2l.py +15 -10
  93. pyxcp/scripts/xcp_id_scanner.py +2 -6
  94. pyxcp/scripts/xcp_info.py +101 -63
  95. pyxcp/scripts/xcp_profile.py +27 -0
  96. pyxcp/stim/__init__.py +0 -0
  97. pyxcp/tests/test_asam_types.py +2 -2
  98. pyxcp/tests/test_binpacking.py +186 -0
  99. pyxcp/tests/test_can.py +1132 -38
  100. pyxcp/tests/test_checksum.py +2 -1
  101. pyxcp/tests/test_daq.py +193 -0
  102. pyxcp/tests/test_frame_padding.py +6 -3
  103. pyxcp/tests/test_master.py +42 -31
  104. pyxcp/tests/test_transport.py +12 -12
  105. pyxcp/tests/test_utils.py +2 -5
  106. pyxcp/timing.py +0 -2
  107. pyxcp/transport/__init__.py +9 -9
  108. pyxcp/transport/base.py +149 -127
  109. pyxcp/transport/base_transport.hpp +0 -0
  110. pyxcp/transport/can.py +194 -167
  111. pyxcp/transport/eth.py +80 -82
  112. pyxcp/transport/sxi.py +106 -60
  113. pyxcp/transport/transport_wrapper.cpp +0 -0
  114. pyxcp/transport/usb_transport.py +65 -83
  115. pyxcp/types.py +69 -20
  116. pyxcp/utils.py +47 -16
  117. pyxcp/vector/map.py +1 -3
  118. {pyxcp-0.21.9.dist-info → pyxcp-0.22.23.dist-info}/METADATA +28 -23
  119. pyxcp-0.22.23.dist-info/RECORD +140 -0
  120. {pyxcp-0.21.9.dist-info → pyxcp-0.22.23.dist-info}/WHEEL +1 -1
  121. {pyxcp-0.21.9.dist-info → pyxcp-0.22.23.dist-info}/entry_points.txt +2 -0
  122. pyxcp/config.py +0 -57
  123. pyxcp/cxx/asynchiofactory.hpp +0 -24
  124. pyxcp/cxx/blocking_client.cpp +0 -44
  125. pyxcp/cxx/blocking_socket.cpp +0 -43
  126. pyxcp/cxx/blocking_socket.hpp +0 -558
  127. pyxcp/cxx/concurrent_queue.hpp +0 -60
  128. pyxcp/cxx/eth.hpp +0 -57
  129. pyxcp/cxx/exceptions.hpp +0 -30
  130. pyxcp/cxx/iasyncioservice.hpp +0 -31
  131. pyxcp/cxx/iresource.hpp +0 -17
  132. pyxcp/cxx/isocket.hpp +0 -22
  133. pyxcp/cxx/linux/epoll.cpp +0 -51
  134. pyxcp/cxx/linux/epoll.hpp +0 -87
  135. pyxcp/cxx/linux/lit_tester.cpp +0 -19
  136. pyxcp/cxx/linux/socket.hpp +0 -234
  137. pyxcp/cxx/linux/timeout.hpp +0 -81
  138. pyxcp/cxx/memoryblock.hpp +0 -42
  139. pyxcp/cxx/pool.hpp +0 -81
  140. pyxcp/cxx/poolmgr.cpp +0 -6
  141. pyxcp/cxx/poolmgr.hpp +0 -31
  142. pyxcp/cxx/test_queue.cpp +0 -69
  143. pyxcp/cxx/timestamp.hpp +0 -84
  144. pyxcp/cxx/utils.cpp +0 -38
  145. pyxcp/cxx/utils.hpp +0 -29
  146. pyxcp/cxx/win/iocp.cpp +0 -242
  147. pyxcp/cxx/win/iocp.hpp +0 -42
  148. pyxcp/cxx/win/perhandledata.hpp +0 -24
  149. pyxcp/cxx/win/periodata.hpp +0 -97
  150. pyxcp/cxx/win/socket.hpp +0 -185
  151. pyxcp/cxx/win/timeout.hpp +0 -83
  152. pyxcp/examples/conf_can.json +0 -20
  153. pyxcp/examples/conf_eth.json +0 -8
  154. pyxcp/logger.py +0 -67
  155. pyxcp/tests/test_config.py +0 -62
  156. pyxcp/transport/candriver/__init__.py +0 -2
  157. pyxcp/transport/candriver/pc_canalystii.py +0 -27
  158. pyxcp/transport/candriver/pc_etas.py +0 -25
  159. pyxcp/transport/candriver/pc_gsusb.py +0 -23
  160. pyxcp/transport/candriver/pc_iscan.py +0 -23
  161. pyxcp/transport/candriver/pc_ixxat.py +0 -27
  162. pyxcp/transport/candriver/pc_kvaser.py +0 -39
  163. pyxcp/transport/candriver/pc_neovi.py +0 -31
  164. pyxcp/transport/candriver/pc_nican.py +0 -23
  165. pyxcp/transport/candriver/pc_nixnet.py +0 -23
  166. pyxcp/transport/candriver/pc_pcan.py +0 -25
  167. pyxcp/transport/candriver/pc_seeed.py +0 -28
  168. pyxcp/transport/candriver/pc_serial.py +0 -27
  169. pyxcp/transport/candriver/pc_slcan.py +0 -29
  170. pyxcp/transport/candriver/pc_socketcan.py +0 -23
  171. pyxcp/transport/candriver/pc_systec.py +0 -29
  172. pyxcp/transport/candriver/pc_usb2can.py +0 -30
  173. pyxcp/transport/candriver/pc_vector.py +0 -34
  174. pyxcp/transport/candriver/python_can.py +0 -101
  175. pyxcp/transport/cxx_ext/CMakeLists.txt +0 -51
  176. pyxcp/transport/cxx_ext/setup.py +0 -49
  177. pyxcp/transport/cxx_ext/tests/test_basic_socket.cpp +0 -39
  178. pyxcp/transport/cxx_ext/tests/test_pool.cpp +0 -39
  179. pyxcp/transport/cxx_ext/tests/test_timestamp.cpp +0 -27
  180. pyxcp-0.21.9.dist-info/RECORD +0 -147
  181. rekorder.cp312-win_amd64.pyd +0 -0
  182. {pyxcp-0.21.9.dist-info/licenses → pyxcp-0.22.23.dist-info}/LICENSE +0 -0
pyxcp/__init__.py CHANGED
@@ -1,28 +1,20 @@
1
1
  #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
- """Universal Calibration Protocol for Python"""
4
- import sys
2
+ """Universal Calibration Protocol for Python."""
5
3
 
6
- if sys.platform == "win32" and sys.version_info[:2] < (3, 11):
7
- # patch the time module with the high resolution alternatives
8
- try:
9
- from win_precise_time import sleep as wpsleep
10
- from win_precise_time import time as wptime
4
+ from rich import pretty
5
+ from rich.console import Console
6
+ from rich.traceback import install as tb_install
11
7
 
12
- import time
13
8
 
14
- time.sleep = wpsleep
15
- time.time = wptime
9
+ pretty.install()
16
10
 
17
- except ImportError:
18
- pass
11
+ from .master import Master # noqa: F401, E402
12
+ from .transport import Can, Eth, SxI, Usb # noqa: F401, E402
19
13
 
20
14
 
21
- from .master import Master
22
- from .transport import Can
23
- from .transport import Eth
24
- from .transport import SxI
25
- from .transport import Usb
15
+ console = Console()
16
+ tb_install(show_locals=True, max_frames=3) # Install custom exception handler.
26
17
 
27
- # if you update this manually, do not forget to update .bumpversion.cfg and pyproject.toml
28
- __version__ = "0.21.9"
18
+ # if you update this manually, do not forget to update
19
+ # .bumpversion.cfg and pyproject.toml.
20
+ __version__ = "0.22.23"
@@ -1,83 +1,82 @@
1
- ASAP2_VERSION 1 30
2
- /begin PROJECT
3
- aProjectName
4
- "description of project"
5
-
6
- /begin HEADER
7
- "project"
8
- VERSION "1.0"
9
- PROJECT_NO "1.0"
10
- /end HEADER
11
-
12
- /begin MODULE
13
- aModuleName
14
- "description of module"
15
-
16
- /begin MOD_PAR
17
- ""
18
- /end MOD_PAR
19
-
20
- /begin IF_DATA CAN_MONITORING
21
- /begin TP_BLOB
22
- 500
23
- /end TP_BLOB
24
- /end IF_DATA
25
-
26
- /begin MEASUREMENT
27
- aMeasurementName
28
- "description of measurement"
29
- ULONG
30
- aConversionName
31
- 0
32
- 0.0
33
- 0
34
- 1000
35
- /begin IF_DATA CAN_MONITORING
36
- /begin KP_BLOB
37
- 0x0 32
38
- /end KP_BLOB
39
- /end IF_DATA
40
- FORMAT ""
41
- BYTE_ORDER MSB_LAST
42
- BIT_MASK 0xFFFFFFFF
43
- /end MEASUREMENT
44
-
45
- /begin COMPU_METHOD
46
- aConversionName
47
- "description of conversion"
48
- RAT_FUNC
49
- "%f5.2"
50
- ""
51
- COEFFS 0 1.0 0.0 0 0 1
52
- /end COMPU_METHOD
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
- /begin FRAME
62
- aFrameName
63
- "description of frame"
64
- 0
65
- 0
66
- /begin IF_DATA CAN_MONITORING
67
- QP_BLOB 0x0200 0 8
68
- /end IF_DATA
69
- FRAME_MEASUREMENT aMeasurementName
70
- /end FRAME
71
-
72
- /begin FUNCTION
73
- aFunctionName
74
- "description of function"
75
- /begin OUT_MEASUREMENT
76
- aMeasurementName
77
- /end OUT_MEASUREMENT
78
- /end FUNCTION
79
-
80
- /end MODULE
81
-
82
- /end PROJECT
83
-
1
+ ASAP2_VERSION 1 30
2
+ /begin PROJECT
3
+ aProjectName
4
+ "description of project"
5
+
6
+ /begin HEADER
7
+ "project"
8
+ VERSION "1.0"
9
+ PROJECT_NO "1.0"
10
+ /end HEADER
11
+
12
+ /begin MODULE
13
+ aModuleName
14
+ "description of module"
15
+
16
+ /begin MOD_PAR
17
+ ""
18
+ /end MOD_PAR
19
+
20
+ /begin IF_DATA CAN_MONITORING
21
+ /begin TP_BLOB
22
+ 500
23
+ /end TP_BLOB
24
+ /end IF_DATA
25
+
26
+ /begin MEASUREMENT
27
+ aMeasurementName
28
+ "description of measurement"
29
+ ULONG
30
+ aConversionName
31
+ 0
32
+ 0.0
33
+ 0
34
+ 1000
35
+ /begin IF_DATA CAN_MONITORING
36
+ /begin KP_BLOB
37
+ 0x0 32
38
+ /end KP_BLOB
39
+ /end IF_DATA
40
+ FORMAT ""
41
+ BYTE_ORDER MSB_LAST
42
+ BIT_MASK 0xFFFFFFFF
43
+ /end MEASUREMENT
44
+
45
+ /begin COMPU_METHOD
46
+ aConversionName
47
+ "description of conversion"
48
+ RAT_FUNC
49
+ "%f5.2"
50
+ ""
51
+ COEFFS 0 1.0 0.0 0 0 1
52
+ /end COMPU_METHOD
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+ /begin FRAME
62
+ aFrameName
63
+ "description of frame"
64
+ 0
65
+ 0
66
+ /begin IF_DATA CAN_MONITORING
67
+ QP_BLOB 0x0200 0 8
68
+ /end IF_DATA
69
+ FRAME_MEASUREMENT aMeasurementName
70
+ /end FRAME
71
+
72
+ /begin FUNCTION
73
+ aFunctionName
74
+ "description of function"
75
+ /begin OUT_MEASUREMENT
76
+ aMeasurementName
77
+ /end OUT_MEASUREMENT
78
+ /end FUNCTION
79
+
80
+ /end MODULE
81
+
82
+ /end PROJECT
pyxcp/aml/XCP_Common.aml CHANGED
@@ -406,4 +406,3 @@ taggedstruct Common_Parameters {
406
406
  block "PGM" struct Pgm;
407
407
  block "DAQ_EVENT" taggedunion Daq_Event;
408
408
  }; /******************** end of Common Parameters *****************************/
409
-
pyxcp/aml/XCPonUSB.aml CHANGED
@@ -103,4 +103,4 @@ struct USB_Parameters {
103
103
  }; /* end of optional */
104
104
  };
105
105
  /************************* end of USB ***********************************/
106
- /end A2ML
106
+ /end A2ML
pyxcp/aml/ifdata_CAN.a2l CHANGED
@@ -18,4 +18,3 @@ begin XCP_ON_CAN
18
18
  FIXED 0x330
19
19
  /end DAQ_LIST_CAN_ID
20
20
  /end XCP_ON_CAN
21
-
pyxcp/aml/ifdata_Eth.a2l CHANGED
@@ -9,4 +9,3 @@
9
9
  0x5555 /* PORT */
10
10
  "127.0.0.1" /* ADDRESS */
11
11
  /end XCP_ON_UDP_IP
12
-
pyxcp/aml/ifdata_Flx.a2l CHANGED
@@ -92,4 +92,3 @@ STIM VARIABLE
92
92
  /end XCP_PACKET
93
93
  /end POOL_BUFFER
94
94
  /end XCP_ON_FLX
95
-
pyxcp/aml/ifdata_SxI.a2l CHANGED
@@ -11,4 +11,3 @@
11
11
  HEADER_LEN_CTR_WORD
12
12
  NO_CHECKSUM
13
13
  /end XCP_ON_SxI
14
-
pyxcp/aml/ifdata_USB.a2l CHANGED
@@ -79,4 +79,3 @@
79
79
  FIXED_OUT 0x02 /* uses Endpoint 2 OUT. */
80
80
  /end DAQ_LIST_USB_ENDPOINT
81
81
  /end XCP_ON_USB
82
-
pyxcp/asam/types.py CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
2
  import struct
4
3
 
4
+
5
5
  INTEL = "<"
6
6
  MOTOROLA = ">"
7
7
 
@@ -15,7 +15,7 @@ MOTOROLA = ">"
15
15
  """
16
16
 
17
17
 
18
- class AsamBaseType(object):
18
+ class AsamBaseType:
19
19
  """Base class for ASAM codecs.
20
20
 
21
21
  Note
@@ -51,7 +51,7 @@ class AsamBaseType(object):
51
51
  bytes
52
52
  Encoded value.
53
53
  """
54
- return struct.pack("{}{}".format(self.byteorder, self.FMT), value)
54
+ return struct.pack(f"{self.byteorder}{self.FMT}", value)
55
55
 
56
56
  def decode(self, value):
57
57
  """Decode a value.
@@ -68,7 +68,7 @@ class AsamBaseType(object):
68
68
  data-type
69
69
  data-type is determined by derived class.
70
70
  """
71
- return struct.unpack("{}{}".format(self.byteorder, self.FMT), bytes(value))[0]
71
+ return struct.unpack(f"{self.byteorder}{self.FMT}", bytes(value))[0]
72
72
 
73
73
 
74
74
  class A_Uint8(AsamBaseType):
pyxcp/asamkeydll.c CHANGED
@@ -110,7 +110,6 @@ int main(int argc, char ** argv)
110
110
  }
111
111
 
112
112
  res = GetKey((char *)&dllname, privilege, seedlen, (BYTE *)&seedBuffer, &keylen, (BYTE *)&keyBuffer);
113
- printf("%lu\n", res);
114
113
  if (res == 0) {
115
114
  hexlify(keyBuffer, keylen);
116
115
  }
pyxcp/checksum.py CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
2
  """Checksum calculation for memory ranges
4
3
 
5
4
  .. [1] XCP Specification, BUILD_CHECKSUM service.
pyxcp/cmdline.py CHANGED
@@ -1,68 +1,50 @@
1
1
  #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
2
  """
4
3
  Parse (transport-layer specific) command line parameters
5
4
  and create a XCP master instance.
6
5
  """
7
- import argparse
8
6
 
9
- from pyxcp.config import readConfiguration
7
+ import warnings
8
+ from dataclasses import dataclass
9
+ from typing import List
10
+
11
+ from pyxcp.config import create_application, reset_application # noqa: F401
10
12
  from pyxcp.master import Master
11
- from pyxcp.transport.can import registered_drivers
12
- from pyxcp.transport.can import try_to_install_system_supplied_drivers
13
13
 
14
- try_to_install_system_supplied_drivers()
15
14
 
16
- CAN_DRIVERS = registered_drivers()
15
+ warnings.simplefilter("always")
17
16
 
18
17
 
19
- class ArgumentParser:
20
- """
18
+ @dataclass
19
+ class Option:
20
+ short_opt: str
21
+ long_opt: str = ""
22
+ dest: str = ""
23
+ help: str = ""
24
+ type: str = ""
25
+ default: str = ""
21
26
 
22
- Parameter
23
- ---------
24
- callout: callable
25
- Process user-supplied arguments.
26
- """
27
27
 
28
- def __init__(self, callout=None, *args, **kws):
29
- self.callout = callout
30
- kws.update(formatter_class=argparse.RawDescriptionHelpFormatter, add_help=True)
31
- self._parser = argparse.ArgumentParser(*args, **kws)
32
- self._parser.add_argument(
33
- "-c",
34
- "--config-file",
35
- type=argparse.FileType("r"),
36
- dest="conf",
37
- help="File to read (extended) parameters from.",
38
- )
39
- self._parser.add_argument(
40
- "-l",
41
- "--loglevel",
42
- choices=["ERROR", "WARN", "INFO", "DEBUG"],
43
- default="INFO",
44
- )
45
- self._parser.epilog = "To get specific help on transport layers\nuse <layer> -h, e.g. {} eth -h".format(self._parser.prog)
46
- self._args = []
28
+ class FakeParser:
47
29
 
48
- @property
49
- def args(self):
50
- return self._args
30
+ options: List[Option] = []
51
31
 
52
- def run(self, policy=None):
53
- """"""
54
- self._args = self.parser.parse_args()
55
- args = self.args
56
- if args.conf is None:
57
- raise RuntimeError("Configuration file must be specified! (option: -c <file>)")
58
- config = readConfiguration(args.conf)
59
- config["LOGLEVEL"] = args.loglevel
60
- if "TRANSPORT" not in config:
61
- raise AttributeError("TRANSPORT must be specified in config!")
62
- transport = config["TRANSPORT"].lower()
63
- master = Master(transport, config=config, policy=policy)
64
- if self.callout:
65
- self.callout(master, args)
32
+ def add_argument(self, short_opt: str, long_opt: str = "", dest: str = "", help: str = "", type: str = "", default: str = ""):
33
+ warnings.warn("Argument parser extension is currently not supported.", DeprecationWarning, 2)
34
+ self.options.append(Option(short_opt, long_opt, dest, help, type, default))
35
+
36
+
37
+ class ArgumentParser:
38
+ def __init__(self, callout=None, *args, **kws):
39
+ self._parser = FakeParser()
40
+ if callout is not None:
41
+ warnings.warn("callout argument is currently not supported.", DeprecationWarning, 2)
42
+
43
+ def run(self, policy=None, transport_layer_interface=None):
44
+ application = create_application(self.parser.options)
45
+ master = Master(
46
+ application.transport.layer, config=application, policy=policy, transport_layer_interface=transport_layer_interface
47
+ )
66
48
  return master
67
49
 
68
50
  @property