tdl-xoa-driver 1.0.0b1__py3-none-any.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.
- tdl_xoa_driver-1.0.0b1.dist-info/LICENSE +202 -0
- tdl_xoa_driver-1.0.0b1.dist-info/METADATA +177 -0
- tdl_xoa_driver-1.0.0b1.dist-info/RECORD +325 -0
- tdl_xoa_driver-1.0.0b1.dist-info/WHEEL +5 -0
- tdl_xoa_driver-1.0.0b1.dist-info/top_level.txt +1 -0
- xoa_driver/__init__.py +2 -0
- xoa_driver/enums.py +399 -0
- xoa_driver/exceptions.py +77 -0
- xoa_driver/functions/__init__.py +0 -0
- xoa_driver/functions/anlt.py +744 -0
- xoa_driver/functions/anlt_ll_debug.py +429 -0
- xoa_driver/functions/cli.py +581 -0
- xoa_driver/functions/exceptions.py +72 -0
- xoa_driver/functions/headers.py +608 -0
- xoa_driver/functions/mgmt.py +515 -0
- xoa_driver/functions/tools.py +256 -0
- xoa_driver/hlfuncs.py +18 -0
- xoa_driver/internals/__init__.py +0 -0
- xoa_driver/internals/commands/__init__.py +31 -0
- xoa_driver/internals/commands/c_commands.py +2041 -0
- xoa_driver/internals/commands/enums.py +3289 -0
- xoa_driver/internals/commands/m4_commands.py +700 -0
- xoa_driver/internals/commands/m4e_commands.py +107 -0
- xoa_driver/internals/commands/m_commands.py +1875 -0
- xoa_driver/internals/commands/p4_commands.py +2221 -0
- xoa_driver/internals/commands/p4e_commands.py +160 -0
- xoa_driver/internals/commands/p4g_commands.py +7253 -0
- xoa_driver/internals/commands/p_commands.py +6000 -0
- xoa_driver/internals/commands/pc_commands.py +335 -0
- xoa_driver/internals/commands/pd_commands.py +355 -0
- xoa_driver/internals/commands/pe_commands.py +1018 -0
- xoa_driver/internals/commands/pec_commands.py +265 -0
- xoa_driver/internals/commands/ped_commands.py +1034 -0
- xoa_driver/internals/commands/pef_commands.py +2216 -0
- xoa_driver/internals/commands/pf_commands.py +379 -0
- xoa_driver/internals/commands/pl1_commands.py +1588 -0
- xoa_driver/internals/commands/pl_commands.py +178 -0
- xoa_driver/internals/commands/pm_commands.py +256 -0
- xoa_driver/internals/commands/pp_commands.py +2341 -0
- xoa_driver/internals/commands/pr_commands.py +812 -0
- xoa_driver/internals/commands/ps_commands.py +2311 -0
- xoa_driver/internals/commands/pt_commands.py +370 -0
- xoa_driver/internals/commands/px_commands.py +303 -0
- xoa_driver/internals/commands/subtypes.py +86 -0
- xoa_driver/internals/core/__init__.py +0 -0
- xoa_driver/internals/core/builders.py +39 -0
- xoa_driver/internals/core/exceptions.py +69 -0
- xoa_driver/internals/core/funcs.py +81 -0
- xoa_driver/internals/core/funcs.pyi +1072 -0
- xoa_driver/internals/core/interfaces.py +47 -0
- xoa_driver/internals/core/token.py +44 -0
- xoa_driver/internals/core/transporter/__init__.py +0 -0
- xoa_driver/internals/core/transporter/_processor.py +83 -0
- xoa_driver/internals/core/transporter/_publisher.py +101 -0
- xoa_driver/internals/core/transporter/_request_id_counter.py +28 -0
- xoa_driver/internals/core/transporter/_stream.py +99 -0
- xoa_driver/internals/core/transporter/_typings.py +43 -0
- xoa_driver/internals/core/transporter/exceptions.py +44 -0
- xoa_driver/internals/core/transporter/handler.py +127 -0
- xoa_driver/internals/core/transporter/logger/__init__.py +10 -0
- xoa_driver/internals/core/transporter/logger/__logger.py +94 -0
- xoa_driver/internals/core/transporter/logger/__state_off.py +32 -0
- xoa_driver/internals/core/transporter/logger/__state_on_default.py +70 -0
- xoa_driver/internals/core/transporter/logger/__state_on_loguru.py +51 -0
- xoa_driver/internals/core/transporter/logger/__state_on_user.py +48 -0
- xoa_driver/internals/core/transporter/protocol/__init__.py +0 -0
- xoa_driver/internals/core/transporter/protocol/_constants.py +77 -0
- xoa_driver/internals/core/transporter/protocol/_utils.py +59 -0
- xoa_driver/internals/core/transporter/protocol/exceptions.py +271 -0
- xoa_driver/internals/core/transporter/protocol/payload/__init__.py +70 -0
- xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +283 -0
- xoa_driver/internals/core/transporter/protocol/payload/descriptor.py +119 -0
- xoa_driver/internals/core/transporter/protocol/payload/exceptions.py +20 -0
- xoa_driver/internals/core/transporter/protocol/payload/field.py +296 -0
- xoa_driver/internals/core/transporter/protocol/payload/types.py +173 -0
- xoa_driver/internals/core/transporter/protocol/payload/utils.py +53 -0
- xoa_driver/internals/core/transporter/protocol/struct_header.py +123 -0
- xoa_driver/internals/core/transporter/protocol/struct_request.py +65 -0
- xoa_driver/internals/core/transporter/protocol/struct_response.py +89 -0
- xoa_driver/internals/core/transporter/registry.py +43 -0
- xoa_driver/internals/exceptions/__init__.py +9 -0
- xoa_driver/internals/exceptions/modules.py +13 -0
- xoa_driver/internals/exceptions/testers.py +21 -0
- xoa_driver/internals/hli_v1/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/base_index.py +39 -0
- xoa_driver/internals/hli_v1/indices/connection_group/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/connection_group/cg.py +186 -0
- xoa_driver/internals/hli_v1/indices/connection_group/histogram.py +78 -0
- xoa_driver/internals/hli_v1/indices/connection_group/l2.py +94 -0
- xoa_driver/internals/hli_v1/indices/connection_group/l3.py +130 -0
- xoa_driver/internals/hli_v1/indices/connection_group/raw.py +200 -0
- xoa_driver/internals/hli_v1/indices/connection_group/replay.py +109 -0
- xoa_driver/internals/hli_v1/indices/connection_group/tcp.py +314 -0
- xoa_driver/internals/hli_v1/indices/connection_group/tls.py +198 -0
- xoa_driver/internals/hli_v1/indices/connection_group/udp.py +133 -0
- xoa_driver/internals/hli_v1/indices/connection_group/user_state.py +28 -0
- xoa_driver/internals/hli_v1/indices/filter/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/filter/base_filter.py +65 -0
- xoa_driver/internals/hli_v1/indices/filter/genuine_filter.py +20 -0
- xoa_driver/internals/hli_v1/indices/length_term.py +49 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/base_macsecsc.py +224 -0
- xoa_driver/internals/hli_v1/indices/macsecscs/genuine_macsecsc.py +72 -0
- xoa_driver/internals/hli_v1/indices/match_term.py +64 -0
- xoa_driver/internals/hli_v1/indices/port_dataset.py +72 -0
- xoa_driver/internals/hli_v1/indices/streams/__init__.py +0 -0
- xoa_driver/internals/hli_v1/indices/streams/base_stream.py +405 -0
- xoa_driver/internals/hli_v1/indices/streams/genuine_stream.py +64 -0
- xoa_driver/internals/hli_v1/modules/__init__.py +0 -0
- xoa_driver/internals/hli_v1/modules/__interfaces.py +21 -0
- xoa_driver/internals/hli_v1/modules/base_module.py +138 -0
- xoa_driver/internals/hli_v1/modules/module_chimera.py +366 -0
- xoa_driver/internals/hli_v1/modules/module_l23ve.py +73 -0
- xoa_driver/internals/hli_v1/modules/module_l47.py +397 -0
- xoa_driver/internals/hli_v1/modules/module_l47ve.py +9 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_combi.py +83 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_d.py +75 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_e.py +85 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_f.py +145 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_g.py +84 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_h.py +40 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_i.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_j.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_k.py +39 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_l.py +55 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_l1.py +800 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_m.py +25 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/family_n.py +40 -0
- xoa_driver/internals/hli_v1/modules/modules_l23/module_l23_base.py +383 -0
- xoa_driver/internals/hli_v1/ports/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/base_port.py +125 -0
- xoa_driver/internals/hli_v1/ports/port_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_capture.py +70 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23.py +527 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23_genuine.py +229 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_reception_statistics.py +231 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transceiver.py +117 -0
- xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transmission_statistics.py +131 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/general.py +396 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/shadow.py +104 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/working.py +36 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_custom_distribution.py +125 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_distribution.py +174 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_chimera.py +119 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_emulation.py +244 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/reception_statistics.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/chimera/transmission_statistics.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_combi.py +37 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_d.py +51 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_e.py +107 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_f.py +151 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_g.py +77 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_h.py +67 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_i.py +84 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_j.py +68 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_k.py +73 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_l.py +82 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_l1.py +166 -0
- xoa_driver/internals/hli_v1/ports/port_l23/family_m.py +29 -0
- xoa_driver/internals/hli_v1/ports/port_l23/fault_jkl.py +24 -0
- xoa_driver/internals/hli_v1/ports/port_l23/freya_l1.py +722 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ghijkl.py +369 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ijkl_chimera.py +60 -0
- xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_l.py +78 -0
- xoa_driver/internals/hli_v1/ports/port_l23/port_l23ve.py +101 -0
- xoa_driver/internals/hli_v1/ports/port_l47/__init__.py +0 -0
- xoa_driver/internals/hli_v1/ports/port_l47/counters.py +174 -0
- xoa_driver/internals/hli_v1/ports/port_l47/main.py +228 -0
- xoa_driver/internals/hli_v1/ports/port_l47/packet_engine.py +31 -0
- xoa_driver/internals/hli_v1/revisions.py +11 -0
- xoa_driver/internals/hli_v1/testers/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/_base_tester.py +259 -0
- xoa_driver/internals/hli_v1/testers/genuine/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/__init__.py +0 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/health.py +16 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/rest_api.py +38 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/time_keeper.py +57 -0
- xoa_driver/internals/hli_v1/testers/genuine/l_23/upload_file.py +29 -0
- xoa_driver/internals/hli_v1/testers/genuine/management_interface.py +42 -0
- xoa_driver/internals/hli_v1/testers/l23_tester.py +196 -0
- xoa_driver/internals/hli_v1/testers/l23ve_tester.py +114 -0
- xoa_driver/internals/hli_v1/testers/l47_tester.py +106 -0
- xoa_driver/internals/hli_v1/testers/l47ve_tester.py +54 -0
- xoa_driver/internals/hli_v2/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/base_index.py +39 -0
- xoa_driver/internals/hli_v2/indices/connection_group/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/connection_group/cg.py +115 -0
- xoa_driver/internals/hli_v2/indices/connection_group/histogram.py +59 -0
- xoa_driver/internals/hli_v2/indices/connection_group/l2.py +71 -0
- xoa_driver/internals/hli_v2/indices/connection_group/l3.py +96 -0
- xoa_driver/internals/hli_v2/indices/connection_group/raw.py +148 -0
- xoa_driver/internals/hli_v2/indices/connection_group/replay.py +89 -0
- xoa_driver/internals/hli_v2/indices/connection_group/tcp.py +261 -0
- xoa_driver/internals/hli_v2/indices/connection_group/tls.py +166 -0
- xoa_driver/internals/hli_v2/indices/connection_group/udp.py +112 -0
- xoa_driver/internals/hli_v2/indices/connection_group/user_state.py +25 -0
- xoa_driver/internals/hli_v2/indices/filter/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/filter/base_filter.py +50 -0
- xoa_driver/internals/hli_v2/indices/filter/genuine_filter.py +17 -0
- xoa_driver/internals/hli_v2/indices/length_term.py +44 -0
- xoa_driver/internals/hli_v2/indices/match_term.py +49 -0
- xoa_driver/internals/hli_v2/indices/port_dataset.py +53 -0
- xoa_driver/internals/hli_v2/indices/streams/__init__.py +0 -0
- xoa_driver/internals/hli_v2/indices/streams/base_stream.py +234 -0
- xoa_driver/internals/hli_v2/indices/streams/genuine_stream.py +32 -0
- xoa_driver/internals/hli_v2/modules/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/__interfaces.py +21 -0
- xoa_driver/internals/hli_v2/modules/base_module.py +125 -0
- xoa_driver/internals/hli_v2/modules/module_chimera.py +358 -0
- xoa_driver/internals/hli_v2/modules/module_l23ve.py +58 -0
- xoa_driver/internals/hli_v2/modules/module_l47.py +230 -0
- xoa_driver/internals/hli_v2/modules/module_l47ve.py +8 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_combi.py +73 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_d.py +75 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_e.py +85 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_f.py +144 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_g.py +84 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_h.py +40 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_i.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_j.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_k.py +39 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l.py +55 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_l1.py +797 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_m.py +25 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/family_n.py +40 -0
- xoa_driver/internals/hli_v2/modules/modules_l23/module_l23_base.py +339 -0
- xoa_driver/internals/hli_v2/ports/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/base_port.py +105 -0
- xoa_driver/internals/hli_v2/ports/port_l23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_capture.py +64 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23.py +441 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23_genuine.py +172 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_reception_statistics.py +156 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transceiver.py +117 -0
- xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transmission_statistics.py +59 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/general.py +340 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/shadow.py +99 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/working.py +36 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_custom_distribution.py +116 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_distribution.py +102 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_chimera.py +113 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_emulation.py +420 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/reception_statistics.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/chimera/transmission_statistics.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_combi.py +36 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_d.py +49 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_e.py +96 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_f.py +144 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_g.py +77 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_h.py +60 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_i.py +66 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_j.py +53 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_k.py +58 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_l.py +67 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_l1.py +149 -0
- xoa_driver/internals/hli_v2/ports/port_l23/family_m.py +28 -0
- xoa_driver/internals/hli_v2/ports/port_l23/fault_jkl.py +22 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ghijkl.py +342 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ijkl_chimera.py +50 -0
- xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_l.py +65 -0
- xoa_driver/internals/hli_v2/ports/port_l23/port_l23ve.py +81 -0
- xoa_driver/internals/hli_v2/ports/port_l47/__init__.py +0 -0
- xoa_driver/internals/hli_v2/ports/port_l47/counters.py +146 -0
- xoa_driver/internals/hli_v2/ports/port_l47/main.py +137 -0
- xoa_driver/internals/hli_v2/ports/port_l47/packet_engine.py +20 -0
- xoa_driver/internals/hli_v2/revisions.py +11 -0
- xoa_driver/internals/hli_v2/testers/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/_base_tester.py +207 -0
- xoa_driver/internals/hli_v2/testers/genuine/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/__init__.py +0 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/health.py +16 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/rest_api.py +34 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/time_keeper.py +50 -0
- xoa_driver/internals/hli_v2/testers/genuine/l_23/upload_file.py +26 -0
- xoa_driver/internals/hli_v2/testers/genuine/management_interface.py +38 -0
- xoa_driver/internals/hli_v2/testers/l23_tester.py +159 -0
- xoa_driver/internals/hli_v2/testers/l23ve_tester.py +98 -0
- xoa_driver/internals/hli_v2/testers/l47_tester.py +95 -0
- xoa_driver/internals/hli_v2/testers/l47ve_tester.py +50 -0
- xoa_driver/internals/state_storage/__init__.py +0 -0
- xoa_driver/internals/state_storage/_speed_detector.py +121 -0
- xoa_driver/internals/state_storage/modules_state.py +128 -0
- xoa_driver/internals/state_storage/ports_state.py +154 -0
- xoa_driver/internals/state_storage/testers_state.py +104 -0
- xoa_driver/internals/utils/__init__.py +0 -0
- xoa_driver/internals/utils/attributes.py +33 -0
- xoa_driver/internals/utils/cap_id.py +63 -0
- xoa_driver/internals/utils/con_traffic_light.py +88 -0
- xoa_driver/internals/utils/indices/__init__.py +0 -0
- xoa_driver/internals/utils/indices/_interfaces.py +26 -0
- xoa_driver/internals/utils/indices/header_modifier_manager.py +56 -0
- xoa_driver/internals/utils/indices/index_manager.py +95 -0
- xoa_driver/internals/utils/indices/observer.py +17 -0
- xoa_driver/internals/utils/kind.py +19 -0
- xoa_driver/internals/utils/managers/__init__.py +0 -0
- xoa_driver/internals/utils/managers/abc.py +44 -0
- xoa_driver/internals/utils/managers/exceptions.py +22 -0
- xoa_driver/internals/utils/managers/modules_manager.py +118 -0
- xoa_driver/internals/utils/managers/ports_manager.py +116 -0
- xoa_driver/internals/utils/rev_tool.py +21 -0
- xoa_driver/internals/utils/session.py +117 -0
- xoa_driver/internals/warn.py +32 -0
- xoa_driver/lli.py +15 -0
- xoa_driver/misc.py +57 -0
- xoa_driver/modules.py +448 -0
- xoa_driver/ports.py +332 -0
- xoa_driver/testers.py +37 -0
- xoa_driver/utils.py +12 -0
- xoa_driver/v2/__init__.py +11 -0
- xoa_driver/v2/misc.py +77 -0
- xoa_driver/v2/modules.py +308 -0
- xoa_driver/v2/ports.py +232 -0
- xoa_driver/v2/testers.py +24 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import typing as t
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
from .__state_off import StateOff
|
|
6
|
+
from .__state_on_default import StateOnDefault
|
|
7
|
+
from .__state_on_loguru import StateOnLoguru
|
|
8
|
+
from .__state_on_user import StateOnUser
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TransportationLogger:
|
|
12
|
+
__slots__ = ("enabled", "identity_name", "_logger", "__state")
|
|
13
|
+
|
|
14
|
+
def __init__(self, cid: str, enabled: bool = False, logger: CustomLogger | None = None) -> None:
|
|
15
|
+
self.enabled = enabled
|
|
16
|
+
self.identity_name = f"{cid}"
|
|
17
|
+
self.__state = self.__select_state(logger)
|
|
18
|
+
self._logger = self.__state.setup(self.identity_name, logger)
|
|
19
|
+
|
|
20
|
+
def __select_state(self, logger) -> t.Type[LoggerState]:
|
|
21
|
+
if not self.enabled:
|
|
22
|
+
return StateOff
|
|
23
|
+
elif self.enabled and logger is None:
|
|
24
|
+
return StateOnDefault
|
|
25
|
+
elif isinstance(logger, logging.Logger):
|
|
26
|
+
return StateOnDefault
|
|
27
|
+
try:
|
|
28
|
+
from loguru import Logger as LoguruLogger
|
|
29
|
+
except ImportError:
|
|
30
|
+
pass
|
|
31
|
+
else:
|
|
32
|
+
if isinstance(logger, LoguruLogger):
|
|
33
|
+
return StateOnLoguru
|
|
34
|
+
return StateOnUser
|
|
35
|
+
|
|
36
|
+
def info(self, msg: t.Any) -> None:
|
|
37
|
+
self.__state.info(self, msg)
|
|
38
|
+
|
|
39
|
+
def error(self, msg: t.Any) -> None:
|
|
40
|
+
self.__state.error(self, msg)
|
|
41
|
+
|
|
42
|
+
def debug_request(self, request: object) -> None:
|
|
43
|
+
self.__state.debug_request(self, request)
|
|
44
|
+
|
|
45
|
+
def debug_response(self, response: object) -> None:
|
|
46
|
+
self.__state.debug_response(self, response)
|
|
47
|
+
|
|
48
|
+
def debug_push(self, response: object) -> None:
|
|
49
|
+
self.__state.debug_push(self, response)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class CustomLogger(t.Protocol):
|
|
53
|
+
"""
|
|
54
|
+
The custom logger must be an instance of python Logger or Loguru Logger.
|
|
55
|
+
by providing the custom class of the logger we will not waranty as all of
|
|
56
|
+
the messages will be visible to the user.
|
|
57
|
+
"""
|
|
58
|
+
def debug(self, msg, /, *args, **kwargs: t.Any) -> None:
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
def info(self, msg, /, *args, **kwargs: t.Any) -> None:
|
|
62
|
+
...
|
|
63
|
+
|
|
64
|
+
def warning(self, msg, /, *args, **kwargs: t.Any) -> None:
|
|
65
|
+
...
|
|
66
|
+
|
|
67
|
+
def error(self, msg, /, *args, **kwargs: t.Any) -> None:
|
|
68
|
+
...
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class LoggerState(t.Protocol):
|
|
72
|
+
@staticmethod
|
|
73
|
+
def setup(connid: str, logger) -> CustomLogger | None:
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
@staticmethod
|
|
77
|
+
def info(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
78
|
+
...
|
|
79
|
+
|
|
80
|
+
@staticmethod
|
|
81
|
+
def error(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
82
|
+
...
|
|
83
|
+
|
|
84
|
+
@staticmethod
|
|
85
|
+
def debug_request(inst: "TransportationLogger", request: object) -> None:
|
|
86
|
+
...
|
|
87
|
+
|
|
88
|
+
@staticmethod
|
|
89
|
+
def debug_response(inst: "TransportationLogger", response: object) -> None:
|
|
90
|
+
...
|
|
91
|
+
|
|
92
|
+
@staticmethod
|
|
93
|
+
def debug_push(inst: "TransportationLogger", response: object) -> None:
|
|
94
|
+
...
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import typing as t
|
|
3
|
+
|
|
4
|
+
if t.TYPE_CHECKING:
|
|
5
|
+
from .__logger import TransportationLogger
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class StateOff:
|
|
9
|
+
|
|
10
|
+
@staticmethod
|
|
11
|
+
def setup(connid: str, logger) -> None:
|
|
12
|
+
return None
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def info(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
16
|
+
return None
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def error(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
20
|
+
return None
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
def debug_request(inst: "TransportationLogger", request: object) -> None:
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def debug_response(inst: "TransportationLogger", response: object) -> None:
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
@staticmethod
|
|
31
|
+
def debug_push(inst: "TransportationLogger", response: object) -> None:
|
|
32
|
+
return None
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import sys
|
|
3
|
+
import typing as t
|
|
4
|
+
import logging
|
|
5
|
+
|
|
6
|
+
if t.TYPE_CHECKING:
|
|
7
|
+
from .__logger import TransportationLogger
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
RESET = "\x1b[0m"
|
|
11
|
+
YELLOW = "\x1b[30;43m"
|
|
12
|
+
GREEN = "\x1b[30;42m"
|
|
13
|
+
MAGENTA = "\x1b[1;45m"
|
|
14
|
+
|
|
15
|
+
SYMBOL_REQUEST = f"{GREEN} -> {RESET}"
|
|
16
|
+
SYMBOL_PUSH = f"{MAGENTA} -P {RESET}"
|
|
17
|
+
SYMBOL_RESPONSE = f"{YELLOW} <- {RESET}"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class XoaLoggerAdapter(logging.LoggerAdapter):
|
|
21
|
+
def process(self, msg: t.Any, kwargs: t.MutableMapping[str, t.Any]):
|
|
22
|
+
if not self.extra:
|
|
23
|
+
return f"{msg}", kwargs
|
|
24
|
+
return f"[{self.extra['connid']}] {msg}", kwargs
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class StateOnDefault:
|
|
28
|
+
@staticmethod
|
|
29
|
+
def setup(connid: str, logger: logging.Logger | None) -> XoaLoggerAdapter:
|
|
30
|
+
log_stream_formatter = logging.Formatter(
|
|
31
|
+
fmt="%(asctime)s | %(levelname)-8s | %(message)s"
|
|
32
|
+
)
|
|
33
|
+
console_handler = logging.StreamHandler(stream=sys.stdout)
|
|
34
|
+
console_handler.setFormatter(log_stream_formatter)
|
|
35
|
+
if not logger:
|
|
36
|
+
logger = logging.getLogger("XOA_Driver")
|
|
37
|
+
logger.propagate = False
|
|
38
|
+
logger.addHandler(console_handler)
|
|
39
|
+
logger.setLevel(logging.DEBUG)
|
|
40
|
+
return XoaLoggerAdapter(logger, {'connid': connid})
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def info(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
44
|
+
_logger = t.cast(logging.Logger, inst._logger)
|
|
45
|
+
if _logger.isEnabledFor(logging.INFO):
|
|
46
|
+
_logger.info(msg)
|
|
47
|
+
|
|
48
|
+
@staticmethod
|
|
49
|
+
def error(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
50
|
+
_logger = t.cast(logging.Logger, inst._logger)
|
|
51
|
+
if _logger.isEnabledFor(logging.ERROR):
|
|
52
|
+
_logger.error(msg)
|
|
53
|
+
|
|
54
|
+
@staticmethod
|
|
55
|
+
def debug_request(inst: "TransportationLogger", request: object) -> None:
|
|
56
|
+
_logger = t.cast(logging.Logger, inst._logger)
|
|
57
|
+
if _logger.isEnabledFor(logging.DEBUG):
|
|
58
|
+
_logger.debug(f"{SYMBOL_REQUEST} {request!r}")
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def debug_response(inst: "TransportationLogger", response: object) -> None:
|
|
62
|
+
_logger = t.cast(logging.Logger, inst._logger)
|
|
63
|
+
if _logger.isEnabledFor(logging.DEBUG):
|
|
64
|
+
_logger.debug(f"{SYMBOL_RESPONSE} {response!r}")
|
|
65
|
+
|
|
66
|
+
@staticmethod
|
|
67
|
+
def debug_push(inst: "TransportationLogger", response: object) -> None:
|
|
68
|
+
_logger = t.cast(logging.Logger, inst._logger)
|
|
69
|
+
if _logger.isEnabledFor(logging.DEBUG):
|
|
70
|
+
_logger.debug(f"{SYMBOL_PUSH} {response!r}")
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import sys
|
|
3
|
+
import typing as t
|
|
4
|
+
|
|
5
|
+
if t.TYPE_CHECKING:
|
|
6
|
+
try:
|
|
7
|
+
from loguru import Logger
|
|
8
|
+
except ImportError:
|
|
9
|
+
pass
|
|
10
|
+
from .__logger import TransportationLogger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
SYMBOL_REQUEST = "<G><w> -> </w></G>"
|
|
14
|
+
SYMBOL_PUSH = "<M><w> -P </w></M>"
|
|
15
|
+
SYMBOL_RESPONSE = "<Y><e> <- </e></Y>"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class StateOnLoguru:
|
|
19
|
+
|
|
20
|
+
@staticmethod
|
|
21
|
+
def setup(connid: str, logger: "Logger") -> "Logger":
|
|
22
|
+
logger.remove() # All configured handlers are removed
|
|
23
|
+
fmt = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <level>{message}</level>"
|
|
24
|
+
logger.add(sys.stdout, format=fmt)
|
|
25
|
+
logger = logger.bind(connid=connid)
|
|
26
|
+
return logger
|
|
27
|
+
|
|
28
|
+
@staticmethod
|
|
29
|
+
def info(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
30
|
+
_loger = t.cast("Logger", inst._logger)
|
|
31
|
+
_loger.opt(lazy=True, colors=True).info(msg)
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def error(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
35
|
+
_loger = t.cast("Logger", inst._logger)
|
|
36
|
+
_loger.opt(lazy=True, colors=True).error(msg)
|
|
37
|
+
|
|
38
|
+
@staticmethod
|
|
39
|
+
def debug_request(inst: "TransportationLogger", request: object) -> None:
|
|
40
|
+
_loger = t.cast("Logger", inst._logger)
|
|
41
|
+
_loger.opt(lazy=True, colors=True).debug(f"{SYMBOL_REQUEST} {request!r}")
|
|
42
|
+
|
|
43
|
+
@staticmethod
|
|
44
|
+
def debug_response(inst: "TransportationLogger", response: object) -> None:
|
|
45
|
+
_loger = t.cast("Logger", inst._logger)
|
|
46
|
+
_loger.opt(lazy=True, colors=True).debug(f"{SYMBOL_RESPONSE} {response!r}")
|
|
47
|
+
|
|
48
|
+
@staticmethod
|
|
49
|
+
def debug_push(inst: "TransportationLogger", response: object) -> None:
|
|
50
|
+
_loger = t.cast("Logger", inst._logger)
|
|
51
|
+
_loger.opt(lazy=True, colors=True).debug(f"{SYMBOL_PUSH} {response!r}")
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import typing as t
|
|
3
|
+
|
|
4
|
+
if t.TYPE_CHECKING:
|
|
5
|
+
from .__logger import (
|
|
6
|
+
TransportationLogger,
|
|
7
|
+
CustomLogger,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
RESET = "\x1b[0m"
|
|
12
|
+
YELLOW = "\x1b[30;43m"
|
|
13
|
+
GREEN = "\x1b[30;42m"
|
|
14
|
+
MAGENTA = "\x1b[1;45m"
|
|
15
|
+
|
|
16
|
+
SYMBOL_REQUEST = f"{GREEN} -> {RESET}"
|
|
17
|
+
SYMBOL_PUSH = f"{MAGENTA} -P {RESET}"
|
|
18
|
+
SYMBOL_RESPONSE = f"{YELLOW} <- {RESET}"
|
|
19
|
+
|
|
20
|
+
class StateOnUser:
|
|
21
|
+
@staticmethod
|
|
22
|
+
def setup(connid: str, logger: "CustomLogger") -> "CustomLogger" | None:
|
|
23
|
+
return logger
|
|
24
|
+
|
|
25
|
+
@staticmethod
|
|
26
|
+
def info(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
27
|
+
_logger = t.cast("CustomLogger", inst._logger)
|
|
28
|
+
_logger.info(msg)
|
|
29
|
+
|
|
30
|
+
@staticmethod
|
|
31
|
+
def error(inst: "TransportationLogger", msg: t.Any) -> None:
|
|
32
|
+
_logger = t.cast("CustomLogger", inst._logger)
|
|
33
|
+
_logger.error(msg)
|
|
34
|
+
|
|
35
|
+
@staticmethod
|
|
36
|
+
def debug_request(inst: "TransportationLogger", request: object) -> None:
|
|
37
|
+
_logger = t.cast("CustomLogger", inst._logger)
|
|
38
|
+
_logger.debug(f"{SYMBOL_REQUEST} {request!r}")
|
|
39
|
+
|
|
40
|
+
@staticmethod
|
|
41
|
+
def debug_response(inst: "TransportationLogger", response: object) -> None:
|
|
42
|
+
_logger = t.cast("CustomLogger", inst._logger)
|
|
43
|
+
_logger.debug(f"{SYMBOL_RESPONSE} {response!r}")
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def debug_push(inst: "TransportationLogger", response: object) -> None:
|
|
47
|
+
_logger = t.cast("CustomLogger", inst._logger)
|
|
48
|
+
_logger.debug(f"{SYMBOL_PUSH} {response!r}")
|
|
File without changes
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from enum import IntEnum
|
|
2
|
+
from typing import Final
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
NOTHING: Final = 0xFF
|
|
6
|
+
WILDCARD: Final = 0xFE
|
|
7
|
+
NOVALUE: Final = "N/A"
|
|
8
|
+
MAGIC_WORD: Final = b"XENA"
|
|
9
|
+
# MAGIC_WORD = 0x58454E41
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def indices_format(number: int) -> str:
|
|
13
|
+
return f"!{number}I"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CommandType(IntEnum):
|
|
17
|
+
"""BXMP request type"""
|
|
18
|
+
|
|
19
|
+
COMMAND_CHAIN = 1
|
|
20
|
+
COMMAND_QUERY = 2
|
|
21
|
+
COMMAND_VALUE = 3
|
|
22
|
+
COMMAND_STATUS = 4
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CommandStatus(IntEnum):
|
|
26
|
+
"""Status codes in BXMP response message to request type <COMMAND_STATUS = 4>"""
|
|
27
|
+
|
|
28
|
+
OK = 0
|
|
29
|
+
"""OK"""
|
|
30
|
+
NOCONNECTIONS = 1
|
|
31
|
+
"""chassis has no available connection slots"""
|
|
32
|
+
NOTLOGGEDON = 2
|
|
33
|
+
"""no command can be submitted before logon"""
|
|
34
|
+
NOTRESERVED = 3
|
|
35
|
+
"""parameter cannot be set because containing resource not reserved"""
|
|
36
|
+
NOTWRITABLE = 4
|
|
37
|
+
"""parameter cannot be set because it is not in a writable state"""
|
|
38
|
+
NOTREADABLE = 5
|
|
39
|
+
"""parameter is write-only"""
|
|
40
|
+
NOTVALID = 6
|
|
41
|
+
"""operation not valid in current state"""
|
|
42
|
+
BADHEADER = 7
|
|
43
|
+
"""invalid magic word"""
|
|
44
|
+
BADCOMMAND = 8
|
|
45
|
+
"""invalid command"""
|
|
46
|
+
BADPARAMETER = 9
|
|
47
|
+
"""invalid parameter code"""
|
|
48
|
+
BADMODULE = 10
|
|
49
|
+
"""invalid module index"""
|
|
50
|
+
BADPORT = 11
|
|
51
|
+
"""invalid port index"""
|
|
52
|
+
BADINDEX = 12
|
|
53
|
+
"""invalid parameter index"""
|
|
54
|
+
BADSIZE = 13
|
|
55
|
+
"""invalid size of data"""
|
|
56
|
+
BADVALUE = 14
|
|
57
|
+
"""invalid value of data"""
|
|
58
|
+
FAILED = 15
|
|
59
|
+
"""failed to perform operation"""
|
|
60
|
+
MEMORYFAILURE = 16
|
|
61
|
+
"""failed to allocate memory"""
|
|
62
|
+
NOLICPE = 17
|
|
63
|
+
"""no free PE license"""
|
|
64
|
+
NOLICPORT = 18
|
|
65
|
+
"""no free Port license"""
|
|
66
|
+
NOTSUPPORTED = 19
|
|
67
|
+
"""feature not supported"""
|
|
68
|
+
PENDING = 20
|
|
69
|
+
"""status return will wait until command has been executed"""
|
|
70
|
+
MODULE_OPERATION_NOT_SUPPORTED_BY_CHASSIS = 21
|
|
71
|
+
"""module is not supported by chassis - e.g. because multi-image requires x64 OS."""
|
|
72
|
+
XLSFAILED = 22
|
|
73
|
+
"""could not establish connection to Xena License Server"""
|
|
74
|
+
XLSDENIED = 23
|
|
75
|
+
"""request for resource rejected by Xena License Server"""
|
|
76
|
+
XLSINVALID = 24
|
|
77
|
+
"""Trying to run Valkyrie VE with VulcanVE-300 resource"""
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import Generator
|
|
3
|
+
from . import _constants as const
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def repr_bytes(data: bytes) -> list[str]:
|
|
7
|
+
return data.hex(",").split(",")
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_code_str(x) -> Generator[int | str, None, None]:
|
|
11
|
+
code, ty = (
|
|
12
|
+
x.header.cmd_code,
|
|
13
|
+
x.header.cmd_type,
|
|
14
|
+
)
|
|
15
|
+
yield const.CommandType(ty).name
|
|
16
|
+
if ty == const.CommandType.COMMAND_STATUS:
|
|
17
|
+
yield const.CommandStatus(code).name
|
|
18
|
+
else:
|
|
19
|
+
yield code
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def format_repr(obj) -> str:
|
|
23
|
+
ty_str, code_str = get_code_str(obj)
|
|
24
|
+
return (
|
|
25
|
+
f"{str(obj.header.request_identifier):5s} "
|
|
26
|
+
f"{str(obj.header.module_index):3s} "
|
|
27
|
+
f"{str(obj.header.port_index):3s} "
|
|
28
|
+
f"{str(obj.index_values):10s} "
|
|
29
|
+
f"{str(obj.class_name):25s} "
|
|
30
|
+
f"{str(code_str):6s} "
|
|
31
|
+
f"{str(ty_str):15s} "
|
|
32
|
+
f"{obj.values}"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def format_str(obj) -> str:
|
|
37
|
+
bin_str = repr_bytes(bytes(obj))
|
|
38
|
+
ty_str, code_str = get_code_str(obj)
|
|
39
|
+
obj_name = type(obj).__name__
|
|
40
|
+
if obj_name == 'Response':
|
|
41
|
+
cmd_p = 'Replied' if obj.header.request_identifier != 0 else 'Pushed'
|
|
42
|
+
else:
|
|
43
|
+
cmd_p = [code_str, ty_str]
|
|
44
|
+
|
|
45
|
+
return "\n" + "\n".join(
|
|
46
|
+
(
|
|
47
|
+
f"{obj_name} : {bin_str}",
|
|
48
|
+
f"class_name : {obj.class_name}",
|
|
49
|
+
f"magic_word : {obj.header.magic_word}",
|
|
50
|
+
f"number_of_indices : {obj.header.number_of_indices}",
|
|
51
|
+
f"number_of_value_bytes: {obj.header.number_of_value_bytes}",
|
|
52
|
+
f"command_parameter : {obj.header.command_parameter}:{cmd_p}",
|
|
53
|
+
f"module_index : {obj.header.module_index}",
|
|
54
|
+
f"port_index : {obj.header.port_index}",
|
|
55
|
+
f"request_identifier : {obj.header.request_identifier}",
|
|
56
|
+
f"index_values : {obj.index_values}",
|
|
57
|
+
f"values : {obj.values}",
|
|
58
|
+
)
|
|
59
|
+
)
|