tdl-xoa-driver 1.0.0__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.0.dist-info/LICENSE +202 -0
- tdl_xoa_driver-1.0.0.dist-info/METADATA +177 -0
- tdl_xoa_driver-1.0.0.dist-info/RECORD +325 -0
- tdl_xoa_driver-1.0.0.dist-info/WHEEL +5 -0
- tdl_xoa_driver-1.0.0.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,515 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
import asyncio
|
|
3
|
+
import typing as t
|
|
4
|
+
from xoa_driver import enums, testers
|
|
5
|
+
from xoa_driver.utils import apply
|
|
6
|
+
from xoa_driver.internals.hli_v2.ports.port_l23.family_l import FamilyL
|
|
7
|
+
from xoa_driver.internals.hli_v2.ports.port_l23.family_l1 import FamilyL1
|
|
8
|
+
from xoa_driver.ports import GenericAnyPort
|
|
9
|
+
from xoa_driver.modules import GenericAnyModule, GenericL23Module, ModuleChimera, Z800FreyaModule
|
|
10
|
+
from xoa_driver.testers import GenericAnyTester, L23Tester
|
|
11
|
+
from .exceptions import (
|
|
12
|
+
NotSupportMedia,
|
|
13
|
+
NotSupportPortSpeed,
|
|
14
|
+
)
|
|
15
|
+
from .tools import MODULE_EOL_INFO
|
|
16
|
+
from itertools import chain # type: ignore[Pylance false warning]
|
|
17
|
+
from datetime import datetime
|
|
18
|
+
import json
|
|
19
|
+
|
|
20
|
+
PcsPmaSupported = (FamilyL, FamilyL1)
|
|
21
|
+
AutoNegSupported = (FamilyL, FamilyL1)
|
|
22
|
+
LinkTrainingSupported = FamilyL
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# region Testers
|
|
26
|
+
async def reserve_tester(tester: GenericAnyTester, force: bool = True) -> None:
|
|
27
|
+
"""
|
|
28
|
+
.. versionadded:: 1.1
|
|
29
|
+
|
|
30
|
+
Reserve a tester regardless whether it is owned by others or not.
|
|
31
|
+
|
|
32
|
+
:param tester: The tester to reserve
|
|
33
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
34
|
+
:param force: Should force reserve the tester
|
|
35
|
+
:type force: boolean
|
|
36
|
+
:return:
|
|
37
|
+
:rtype: None
|
|
38
|
+
"""
|
|
39
|
+
r = await tester.reservation.get()
|
|
40
|
+
if force and r.operation == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
41
|
+
await tester.reservation.set_relinquish()
|
|
42
|
+
await asyncio.gather(*(free_module(m, True) for m in tester.modules))
|
|
43
|
+
await tester.reservation.set_reserve()
|
|
44
|
+
elif r.operation == enums.ReservedStatus.RELEASED:
|
|
45
|
+
await tester.reservation.set_reserve()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def free_tester(
|
|
49
|
+
tester: GenericAnyTester,
|
|
50
|
+
should_free_modules_ports: bool = False,
|
|
51
|
+
) -> None:
|
|
52
|
+
"""
|
|
53
|
+
.. versionadded:: 1.1
|
|
54
|
+
|
|
55
|
+
Free a tester. If the tester is reserved by you, release the tester. If the tester is reserved by others, relinquish the tester. The tester should have no owner afterwards.
|
|
56
|
+
|
|
57
|
+
:param tester: The tester to free
|
|
58
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
59
|
+
:param should_free_modules_ports: should modules and ports also be freed, defaults to False
|
|
60
|
+
:type should_free_modules_ports: bool, optional
|
|
61
|
+
:return:
|
|
62
|
+
:rtype: None
|
|
63
|
+
"""
|
|
64
|
+
r = await tester.reservation.get()
|
|
65
|
+
if r.operation == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
66
|
+
await tester.reservation.set_relinquish()
|
|
67
|
+
elif r.operation == enums.ReservedStatus.RESERVED_BY_YOU:
|
|
68
|
+
await tester.reservation.set_release()
|
|
69
|
+
if should_free_modules_ports:
|
|
70
|
+
await asyncio.gather(*(free_module(m, True) for m in tester.modules))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def get_chassis_sys_uptime_sec(tester: L23Tester) -> int:
|
|
74
|
+
"""
|
|
75
|
+
.. versionadded:: 2.7.2
|
|
76
|
+
|
|
77
|
+
Get chassis system uptime in seconds
|
|
78
|
+
|
|
79
|
+
:param tester: The tester to free
|
|
80
|
+
:type tester: :class:`~xoa_driver.testers.L23Tester`
|
|
81
|
+
:return: Chassis system uptime in seconds
|
|
82
|
+
:rtype: int
|
|
83
|
+
"""
|
|
84
|
+
resp = await tester.health.uptime.get()
|
|
85
|
+
info_js = resp.info
|
|
86
|
+
info_dict = json.loads(info_js)
|
|
87
|
+
result = info_dict['1']['data']['uptime_secs']
|
|
88
|
+
return result
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
# endregion
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# region Modules
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_module(tester: GenericAnyTester, module_id: int) -> GenericAnyModule:
|
|
98
|
+
"""
|
|
99
|
+
.. versionadded:: 1.1
|
|
100
|
+
|
|
101
|
+
Get a module object of the tester.
|
|
102
|
+
|
|
103
|
+
:param tester: The tester object
|
|
104
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
105
|
+
:param module_id: the index id of the module
|
|
106
|
+
:type module_id: int
|
|
107
|
+
:raises NoSuchModuleError: No such a module index on the tester
|
|
108
|
+
:return: module object
|
|
109
|
+
:rtype: :class:`~xoa_driver.modules.GenericAnyModule`
|
|
110
|
+
"""
|
|
111
|
+
return tester.modules.obtain(module_id)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def get_modules(tester: GenericAnyTester) -> tuple[GenericAnyModule, ...]:
|
|
115
|
+
"""
|
|
116
|
+
.. versionadded:: 1.1
|
|
117
|
+
|
|
118
|
+
Get all modules of the tester
|
|
119
|
+
|
|
120
|
+
:param tester: The tester object
|
|
121
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
122
|
+
:return: List of module objects
|
|
123
|
+
:rtype: tuple[GenericAnyModule]
|
|
124
|
+
"""
|
|
125
|
+
return tuple(tester.modules)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
async def reserve_module(module: GenericAnyModule, force: bool = True) -> None:
|
|
129
|
+
"""
|
|
130
|
+
.. versionadded:: 1.1
|
|
131
|
+
|
|
132
|
+
Reserve a module regardless whether it is owned by others or not.
|
|
133
|
+
|
|
134
|
+
:param module: The module to reserve
|
|
135
|
+
:type module: :class:`~xoa_driver.modules.GenericAnyModule`
|
|
136
|
+
:param force: Should force reserve the module, defaults to True
|
|
137
|
+
:type force: boolean
|
|
138
|
+
:return:
|
|
139
|
+
:rtype: None
|
|
140
|
+
"""
|
|
141
|
+
r = await module.reservation.get()
|
|
142
|
+
if force and r.operation == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
143
|
+
await free_module(module, True)
|
|
144
|
+
await module.reservation.set_reserve()
|
|
145
|
+
elif r.operation == enums.ReservedStatus.RELEASED:
|
|
146
|
+
await module.reservation.set_reserve()
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
async def free_module(
|
|
150
|
+
module: GenericAnyModule, should_free_ports: bool = False
|
|
151
|
+
) -> None:
|
|
152
|
+
"""
|
|
153
|
+
.. versionadded:: 1.2
|
|
154
|
+
|
|
155
|
+
Free a module. If the module is reserved by you, release the module. If the module is reserved by others, relinquish the module. The module should have no owner afterwards.
|
|
156
|
+
|
|
157
|
+
:param module: The module to free
|
|
158
|
+
:type module: :class:`~xoa_driver.modules.GenericAnyModule`
|
|
159
|
+
:param should_free_ports: should ports also be freed, defaults to False
|
|
160
|
+
:type should_free_ports: bool, optional
|
|
161
|
+
:return:
|
|
162
|
+
:rtype: None
|
|
163
|
+
"""
|
|
164
|
+
r = await module.reservation.get()
|
|
165
|
+
if r.operation == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
166
|
+
await module.reservation.set_relinquish()
|
|
167
|
+
elif r.operation == enums.ReservedStatus.RESERVED_BY_YOU:
|
|
168
|
+
await module.reservation.set_release()
|
|
169
|
+
if should_free_ports:
|
|
170
|
+
await free_ports(*module.ports)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def get_module_supported_media(
|
|
174
|
+
module: GenericL23Module | ModuleChimera,
|
|
175
|
+
) -> list[dict[str, t.Any]]:
|
|
176
|
+
"""
|
|
177
|
+
.. versionadded:: 1.3
|
|
178
|
+
|
|
179
|
+
Get a list of supported media, port speed and count of the module.
|
|
180
|
+
|
|
181
|
+
:param module: The module object
|
|
182
|
+
:type module: GenericAnyModule
|
|
183
|
+
:return: List of supported media, port speed and count
|
|
184
|
+
:rtype: list[dict[str, t.Any]]
|
|
185
|
+
"""
|
|
186
|
+
supported_media_list = []
|
|
187
|
+
item = {}
|
|
188
|
+
|
|
189
|
+
for media_item in module.info.media_info_list: # type: ignore
|
|
190
|
+
for sub_item in media_item.available_speeds:
|
|
191
|
+
item = dict()
|
|
192
|
+
item["media"] = media_item.cage_type
|
|
193
|
+
item["port_count"] = sub_item.port_count
|
|
194
|
+
item["port_speed"] = sub_item.port_speed
|
|
195
|
+
supported_media_list.append(item)
|
|
196
|
+
|
|
197
|
+
return supported_media_list
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
async def set_module_media_config(
|
|
201
|
+
module: t.Union[GenericL23Module, ModuleChimera],
|
|
202
|
+
media: enums.MediaConfigurationType,
|
|
203
|
+
force: bool = True,
|
|
204
|
+
) -> None:
|
|
205
|
+
"""
|
|
206
|
+
.. versionadded:: 1.3
|
|
207
|
+
|
|
208
|
+
Set module's media configuration.
|
|
209
|
+
|
|
210
|
+
:param module: The module object
|
|
211
|
+
:type module: GenericAnyModule
|
|
212
|
+
:param media: Target media for the module
|
|
213
|
+
:type media: enums.MediaConfigurationType
|
|
214
|
+
:param force: Should reserve the module by force, defaults to True
|
|
215
|
+
:type force: bool, optional
|
|
216
|
+
:raises NotSupportMedia: The module does not support this media type
|
|
217
|
+
:return:
|
|
218
|
+
:rtype:
|
|
219
|
+
"""
|
|
220
|
+
|
|
221
|
+
# reserve the module first
|
|
222
|
+
await reserve_module(module, force)
|
|
223
|
+
|
|
224
|
+
# get the supported media
|
|
225
|
+
supported_media_list = get_module_supported_media(module)
|
|
226
|
+
|
|
227
|
+
# set the module media if the target media is found in supported media
|
|
228
|
+
for item in supported_media_list:
|
|
229
|
+
if item["media"] == media:
|
|
230
|
+
await module.media.set(media_config=media)
|
|
231
|
+
return None
|
|
232
|
+
|
|
233
|
+
# raise exception is the target media is not found in the supported media
|
|
234
|
+
raise NotSupportMedia(module)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
async def set_module_port_config(
|
|
238
|
+
module: t.Union[GenericL23Module, ModuleChimera],
|
|
239
|
+
port_count: int,
|
|
240
|
+
port_speed: int,
|
|
241
|
+
force: bool = True,
|
|
242
|
+
) -> None:
|
|
243
|
+
"""
|
|
244
|
+
.. versionadded:: 1.3
|
|
245
|
+
|
|
246
|
+
Set module's port-speed configuration
|
|
247
|
+
|
|
248
|
+
:param module: The module object
|
|
249
|
+
:type module: t.Union[GenericL23Module, ModuleChimera]
|
|
250
|
+
:param port_count: The port count
|
|
251
|
+
:type port_count: int
|
|
252
|
+
:param port_speed: The port speed in Mbps, e.g. 40000 for 40G
|
|
253
|
+
:type port_speed: int
|
|
254
|
+
:param force: Should reserve the module by force, defaults to True
|
|
255
|
+
:type force: bool, optional
|
|
256
|
+
:raises NotSupportPortSpeed: The module does not support the port-speed configuration under its current media configuration
|
|
257
|
+
:return:
|
|
258
|
+
:rtype:
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
# reserve the module first
|
|
262
|
+
await free_module(module, True)
|
|
263
|
+
await reserve_module(module, force)
|
|
264
|
+
|
|
265
|
+
# get the supported media by the module
|
|
266
|
+
supported_media_list = get_module_supported_media(module)
|
|
267
|
+
|
|
268
|
+
# get the current media of the module
|
|
269
|
+
reply = await module.media.get()
|
|
270
|
+
current_media = reply.media_config
|
|
271
|
+
|
|
272
|
+
# set the module port speed if we can find the port-speed in the corresponding media
|
|
273
|
+
for item in supported_media_list:
|
|
274
|
+
if all(
|
|
275
|
+
(
|
|
276
|
+
item["media"] == enums.MediaConfigurationType(current_media),
|
|
277
|
+
item["port_count"] == port_count,
|
|
278
|
+
item["port_speed"] == port_speed,
|
|
279
|
+
)
|
|
280
|
+
):
|
|
281
|
+
portspeed_list = [port_count] + port_count * [port_speed]
|
|
282
|
+
await module.cfp.config.set(portspeed_list=portspeed_list)
|
|
283
|
+
await free_module(module, False)
|
|
284
|
+
return None
|
|
285
|
+
raise NotSupportPortSpeed(module)
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
async def get_module_eol_date(module: GenericAnyModule) -> str:
|
|
289
|
+
"""
|
|
290
|
+
.. versionadded:: 1.3
|
|
291
|
+
|
|
292
|
+
Get module's End-of-Life date
|
|
293
|
+
|
|
294
|
+
:param module: The module object
|
|
295
|
+
:type module: GenericAnyModule
|
|
296
|
+
:return: Module's EOL date
|
|
297
|
+
:rtype: str
|
|
298
|
+
"""
|
|
299
|
+
resp = await module.serial_number.get()
|
|
300
|
+
module_key = str(resp.serial_number)[-2:]
|
|
301
|
+
return MODULE_EOL_INFO.get(module_key, "2999-01-01")
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
async def get_module_eol_days(module: GenericAnyModule) -> int:
|
|
305
|
+
"""
|
|
306
|
+
.. versionadded:: 1.3
|
|
307
|
+
|
|
308
|
+
Get days until module's End-of-Life date
|
|
309
|
+
|
|
310
|
+
:param module: The module object
|
|
311
|
+
:type module: GenericAnyModule
|
|
312
|
+
:return: days until module's End-of-Life date
|
|
313
|
+
:rtype: int
|
|
314
|
+
"""
|
|
315
|
+
eol_string = await get_module_eol_date(module)
|
|
316
|
+
date1 = datetime.now()
|
|
317
|
+
date2 = datetime.strptime(eol_string, "%Y-%M-%d")
|
|
318
|
+
timedelta = date2 - date1
|
|
319
|
+
return timedelta.days
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
async def get_module_cage_insertion_count(module: Z800FreyaModule, cage_index: int) -> int:
|
|
323
|
+
"""
|
|
324
|
+
.. versionadded:: 2.7.2
|
|
325
|
+
|
|
326
|
+
Get module cage insertion count
|
|
327
|
+
|
|
328
|
+
:param module: The Z800 Freya module object
|
|
329
|
+
:type module: Z800FreyaModule
|
|
330
|
+
:param cage_index: The cage index
|
|
331
|
+
:type module: int
|
|
332
|
+
:return: Insertion count of the cage
|
|
333
|
+
:rtype: int
|
|
334
|
+
"""
|
|
335
|
+
resp = await module.health.cage_insertion.get()
|
|
336
|
+
info_js = resp.info
|
|
337
|
+
info_dict = json.loads(info_js)
|
|
338
|
+
if 0 <= cage_index < len(info_dict['1']['data']):
|
|
339
|
+
result = info_dict['1']['data'][cage_index]['insert_count']
|
|
340
|
+
elif cage_index < 0:
|
|
341
|
+
result = -1
|
|
342
|
+
else:
|
|
343
|
+
result = -1
|
|
344
|
+
return result
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
# endregion
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
# region Ports
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def get_all_ports(tester: GenericAnyTester) -> tuple[GenericAnyPort, ...]:
|
|
354
|
+
"""
|
|
355
|
+
.. versionadded:: 1.1
|
|
356
|
+
|
|
357
|
+
Get all ports of the tester
|
|
358
|
+
|
|
359
|
+
:param tester: The tester object
|
|
360
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
361
|
+
:return: List of port objects
|
|
362
|
+
:rtype: tuple[GenericAnyPort]
|
|
363
|
+
"""
|
|
364
|
+
all_ports_ = (m.ports for m in get_modules(tester))
|
|
365
|
+
return tuple(chain.from_iterable(all_ports_))
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
def get_ports(tester: GenericAnyTester, module_id: int) -> tuple[GenericAnyPort, ...]:
|
|
369
|
+
"""
|
|
370
|
+
.. versionadded:: 1.1
|
|
371
|
+
|
|
372
|
+
Get all ports of the module
|
|
373
|
+
|
|
374
|
+
:param tester: The tester object
|
|
375
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
376
|
+
:param module_id: The module index
|
|
377
|
+
:type module_id: int
|
|
378
|
+
:return: List of port objects
|
|
379
|
+
:rtype: tuple[GenericAnyPort]
|
|
380
|
+
"""
|
|
381
|
+
module = get_module(tester, module_id)
|
|
382
|
+
return tuple(module.ports)
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def get_port(tester: GenericAnyTester, module_id: int, port_id: int) -> GenericAnyPort:
|
|
386
|
+
"""
|
|
387
|
+
.. versionadded:: 1.1
|
|
388
|
+
|
|
389
|
+
Get a port of the module
|
|
390
|
+
|
|
391
|
+
:param tester: The tester object
|
|
392
|
+
:type tester: :class:`~xoa_driver.testers.GenericAnyTester`
|
|
393
|
+
:param module_id: The module index
|
|
394
|
+
:type module_id: int
|
|
395
|
+
:param port_id: The port index
|
|
396
|
+
:type port_id: int
|
|
397
|
+
:raises NoSuchPortError: No port found with the index
|
|
398
|
+
:return: The port object
|
|
399
|
+
:rtype: GenericAnyPort
|
|
400
|
+
"""
|
|
401
|
+
module = get_module(tester, module_id)
|
|
402
|
+
return module.ports.obtain(port_id)
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
async def reserve_port(port: GenericAnyPort, force: bool = True) -> None:
|
|
406
|
+
"""
|
|
407
|
+
.. versionadded:: 1.1
|
|
408
|
+
|
|
409
|
+
Reserve a port regardless whether it is owned by others or not.
|
|
410
|
+
|
|
411
|
+
:param port: The port to reserve
|
|
412
|
+
:type port: GenericAnyPort
|
|
413
|
+
:param force: Should force reserve the port
|
|
414
|
+
:type force: boolean
|
|
415
|
+
:return:
|
|
416
|
+
:rtype: None
|
|
417
|
+
"""
|
|
418
|
+
r = await port.reservation.get()
|
|
419
|
+
if force and r.status == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
420
|
+
await apply(
|
|
421
|
+
port.reservation.set_relinquish(),
|
|
422
|
+
port.reservation.set_reserve(),
|
|
423
|
+
)
|
|
424
|
+
elif r.status == enums.ReservedStatus.RELEASED:
|
|
425
|
+
await port.reservation.set_reserve()
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
async def reset_port(port: GenericAnyPort) -> None:
|
|
429
|
+
"""
|
|
430
|
+
.. versionadded:: 1.1
|
|
431
|
+
|
|
432
|
+
Reserve and reset a port
|
|
433
|
+
|
|
434
|
+
:param port: The port to reset
|
|
435
|
+
:type port: GenericAnyPort
|
|
436
|
+
:return:
|
|
437
|
+
:rtype: None
|
|
438
|
+
"""
|
|
439
|
+
await reserve_port(port, False)
|
|
440
|
+
await port.reset.set()
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
async def free_port(port: GenericAnyPort) -> None:
|
|
444
|
+
"""
|
|
445
|
+
.. versionadded:: 1.1
|
|
446
|
+
|
|
447
|
+
Free a port. If the port is reserved by you, release the port. If the port is reserved by others, relinquish the port. The port should have no owner afterwards.
|
|
448
|
+
|
|
449
|
+
:param port: The port to free
|
|
450
|
+
:type port: GenericAnyPort
|
|
451
|
+
:return:
|
|
452
|
+
:rtype: None
|
|
453
|
+
"""
|
|
454
|
+
r = await port.reservation.get()
|
|
455
|
+
if r.status == enums.ReservedStatus.RESERVED_BY_OTHER:
|
|
456
|
+
await port.reservation.set_relinquish()
|
|
457
|
+
elif r.status == enums.ReservedStatus.RESERVED_BY_YOU:
|
|
458
|
+
await port.reservation.set_release()
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
async def free_ports(*ports: GenericAnyPort) -> None:
|
|
462
|
+
"""
|
|
463
|
+
.. versionadded:: 1.1
|
|
464
|
+
|
|
465
|
+
Free all ports on a module.
|
|
466
|
+
|
|
467
|
+
:param port: The port to free
|
|
468
|
+
:type port: GenericAnyPort
|
|
469
|
+
"""
|
|
470
|
+
await asyncio.gather(*(free_port(port=p) for p in ports))
|
|
471
|
+
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
# endregion
|
|
475
|
+
|
|
476
|
+
|
|
477
|
+
# region Streams
|
|
478
|
+
async def remove_streams(port: GenericAnyPort) -> None:
|
|
479
|
+
"""
|
|
480
|
+
.. versionadded:: 2.1
|
|
481
|
+
|
|
482
|
+
Remove all streams on a port.
|
|
483
|
+
|
|
484
|
+
:param module: The port object
|
|
485
|
+
:type module: GenericAnyPort
|
|
486
|
+
"""
|
|
487
|
+
await port.streams.server_sync()
|
|
488
|
+
await asyncio.gather(*(s.delete() for s in port.streams))
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
# endregion
|
|
492
|
+
|
|
493
|
+
__all__ = (
|
|
494
|
+
"free_module",
|
|
495
|
+
"free_port",
|
|
496
|
+
"free_ports",
|
|
497
|
+
"free_tester",
|
|
498
|
+
"get_all_ports",
|
|
499
|
+
"get_module",
|
|
500
|
+
"get_module_eol_date",
|
|
501
|
+
"get_module_eol_days",
|
|
502
|
+
"get_module_supported_media",
|
|
503
|
+
"get_modules",
|
|
504
|
+
"get_port",
|
|
505
|
+
"get_ports",
|
|
506
|
+
"reserve_module",
|
|
507
|
+
"reserve_port",
|
|
508
|
+
"reserve_tester",
|
|
509
|
+
"reset_port",
|
|
510
|
+
"set_module_media_config",
|
|
511
|
+
"set_module_port_config",
|
|
512
|
+
"remove_streams",
|
|
513
|
+
"get_module_cage_insertion_count",
|
|
514
|
+
"get_chassis_sys_uptime_sec",
|
|
515
|
+
)
|