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.
Files changed (325) hide show
  1. tdl_xoa_driver-1.0.0b1.dist-info/LICENSE +202 -0
  2. tdl_xoa_driver-1.0.0b1.dist-info/METADATA +177 -0
  3. tdl_xoa_driver-1.0.0b1.dist-info/RECORD +325 -0
  4. tdl_xoa_driver-1.0.0b1.dist-info/WHEEL +5 -0
  5. tdl_xoa_driver-1.0.0b1.dist-info/top_level.txt +1 -0
  6. xoa_driver/__init__.py +2 -0
  7. xoa_driver/enums.py +399 -0
  8. xoa_driver/exceptions.py +77 -0
  9. xoa_driver/functions/__init__.py +0 -0
  10. xoa_driver/functions/anlt.py +744 -0
  11. xoa_driver/functions/anlt_ll_debug.py +429 -0
  12. xoa_driver/functions/cli.py +581 -0
  13. xoa_driver/functions/exceptions.py +72 -0
  14. xoa_driver/functions/headers.py +608 -0
  15. xoa_driver/functions/mgmt.py +515 -0
  16. xoa_driver/functions/tools.py +256 -0
  17. xoa_driver/hlfuncs.py +18 -0
  18. xoa_driver/internals/__init__.py +0 -0
  19. xoa_driver/internals/commands/__init__.py +31 -0
  20. xoa_driver/internals/commands/c_commands.py +2041 -0
  21. xoa_driver/internals/commands/enums.py +3289 -0
  22. xoa_driver/internals/commands/m4_commands.py +700 -0
  23. xoa_driver/internals/commands/m4e_commands.py +107 -0
  24. xoa_driver/internals/commands/m_commands.py +1875 -0
  25. xoa_driver/internals/commands/p4_commands.py +2221 -0
  26. xoa_driver/internals/commands/p4e_commands.py +160 -0
  27. xoa_driver/internals/commands/p4g_commands.py +7253 -0
  28. xoa_driver/internals/commands/p_commands.py +6000 -0
  29. xoa_driver/internals/commands/pc_commands.py +335 -0
  30. xoa_driver/internals/commands/pd_commands.py +355 -0
  31. xoa_driver/internals/commands/pe_commands.py +1018 -0
  32. xoa_driver/internals/commands/pec_commands.py +265 -0
  33. xoa_driver/internals/commands/ped_commands.py +1034 -0
  34. xoa_driver/internals/commands/pef_commands.py +2216 -0
  35. xoa_driver/internals/commands/pf_commands.py +379 -0
  36. xoa_driver/internals/commands/pl1_commands.py +1588 -0
  37. xoa_driver/internals/commands/pl_commands.py +178 -0
  38. xoa_driver/internals/commands/pm_commands.py +256 -0
  39. xoa_driver/internals/commands/pp_commands.py +2341 -0
  40. xoa_driver/internals/commands/pr_commands.py +812 -0
  41. xoa_driver/internals/commands/ps_commands.py +2311 -0
  42. xoa_driver/internals/commands/pt_commands.py +370 -0
  43. xoa_driver/internals/commands/px_commands.py +303 -0
  44. xoa_driver/internals/commands/subtypes.py +86 -0
  45. xoa_driver/internals/core/__init__.py +0 -0
  46. xoa_driver/internals/core/builders.py +39 -0
  47. xoa_driver/internals/core/exceptions.py +69 -0
  48. xoa_driver/internals/core/funcs.py +81 -0
  49. xoa_driver/internals/core/funcs.pyi +1072 -0
  50. xoa_driver/internals/core/interfaces.py +47 -0
  51. xoa_driver/internals/core/token.py +44 -0
  52. xoa_driver/internals/core/transporter/__init__.py +0 -0
  53. xoa_driver/internals/core/transporter/_processor.py +83 -0
  54. xoa_driver/internals/core/transporter/_publisher.py +101 -0
  55. xoa_driver/internals/core/transporter/_request_id_counter.py +28 -0
  56. xoa_driver/internals/core/transporter/_stream.py +99 -0
  57. xoa_driver/internals/core/transporter/_typings.py +43 -0
  58. xoa_driver/internals/core/transporter/exceptions.py +44 -0
  59. xoa_driver/internals/core/transporter/handler.py +127 -0
  60. xoa_driver/internals/core/transporter/logger/__init__.py +10 -0
  61. xoa_driver/internals/core/transporter/logger/__logger.py +94 -0
  62. xoa_driver/internals/core/transporter/logger/__state_off.py +32 -0
  63. xoa_driver/internals/core/transporter/logger/__state_on_default.py +70 -0
  64. xoa_driver/internals/core/transporter/logger/__state_on_loguru.py +51 -0
  65. xoa_driver/internals/core/transporter/logger/__state_on_user.py +48 -0
  66. xoa_driver/internals/core/transporter/protocol/__init__.py +0 -0
  67. xoa_driver/internals/core/transporter/protocol/_constants.py +77 -0
  68. xoa_driver/internals/core/transporter/protocol/_utils.py +59 -0
  69. xoa_driver/internals/core/transporter/protocol/exceptions.py +271 -0
  70. xoa_driver/internals/core/transporter/protocol/payload/__init__.py +70 -0
  71. xoa_driver/internals/core/transporter/protocol/payload/base_struct.py +283 -0
  72. xoa_driver/internals/core/transporter/protocol/payload/descriptor.py +119 -0
  73. xoa_driver/internals/core/transporter/protocol/payload/exceptions.py +20 -0
  74. xoa_driver/internals/core/transporter/protocol/payload/field.py +296 -0
  75. xoa_driver/internals/core/transporter/protocol/payload/types.py +173 -0
  76. xoa_driver/internals/core/transporter/protocol/payload/utils.py +53 -0
  77. xoa_driver/internals/core/transporter/protocol/struct_header.py +123 -0
  78. xoa_driver/internals/core/transporter/protocol/struct_request.py +65 -0
  79. xoa_driver/internals/core/transporter/protocol/struct_response.py +89 -0
  80. xoa_driver/internals/core/transporter/registry.py +43 -0
  81. xoa_driver/internals/exceptions/__init__.py +9 -0
  82. xoa_driver/internals/exceptions/modules.py +13 -0
  83. xoa_driver/internals/exceptions/testers.py +21 -0
  84. xoa_driver/internals/hli_v1/__init__.py +0 -0
  85. xoa_driver/internals/hli_v1/indices/__init__.py +0 -0
  86. xoa_driver/internals/hli_v1/indices/base_index.py +39 -0
  87. xoa_driver/internals/hli_v1/indices/connection_group/__init__.py +0 -0
  88. xoa_driver/internals/hli_v1/indices/connection_group/cg.py +186 -0
  89. xoa_driver/internals/hli_v1/indices/connection_group/histogram.py +78 -0
  90. xoa_driver/internals/hli_v1/indices/connection_group/l2.py +94 -0
  91. xoa_driver/internals/hli_v1/indices/connection_group/l3.py +130 -0
  92. xoa_driver/internals/hli_v1/indices/connection_group/raw.py +200 -0
  93. xoa_driver/internals/hli_v1/indices/connection_group/replay.py +109 -0
  94. xoa_driver/internals/hli_v1/indices/connection_group/tcp.py +314 -0
  95. xoa_driver/internals/hli_v1/indices/connection_group/tls.py +198 -0
  96. xoa_driver/internals/hli_v1/indices/connection_group/udp.py +133 -0
  97. xoa_driver/internals/hli_v1/indices/connection_group/user_state.py +28 -0
  98. xoa_driver/internals/hli_v1/indices/filter/__init__.py +0 -0
  99. xoa_driver/internals/hli_v1/indices/filter/base_filter.py +65 -0
  100. xoa_driver/internals/hli_v1/indices/filter/genuine_filter.py +20 -0
  101. xoa_driver/internals/hli_v1/indices/length_term.py +49 -0
  102. xoa_driver/internals/hli_v1/indices/macsecscs/__init__.py +0 -0
  103. xoa_driver/internals/hli_v1/indices/macsecscs/base_macsecsc.py +224 -0
  104. xoa_driver/internals/hli_v1/indices/macsecscs/genuine_macsecsc.py +72 -0
  105. xoa_driver/internals/hli_v1/indices/match_term.py +64 -0
  106. xoa_driver/internals/hli_v1/indices/port_dataset.py +72 -0
  107. xoa_driver/internals/hli_v1/indices/streams/__init__.py +0 -0
  108. xoa_driver/internals/hli_v1/indices/streams/base_stream.py +405 -0
  109. xoa_driver/internals/hli_v1/indices/streams/genuine_stream.py +64 -0
  110. xoa_driver/internals/hli_v1/modules/__init__.py +0 -0
  111. xoa_driver/internals/hli_v1/modules/__interfaces.py +21 -0
  112. xoa_driver/internals/hli_v1/modules/base_module.py +138 -0
  113. xoa_driver/internals/hli_v1/modules/module_chimera.py +366 -0
  114. xoa_driver/internals/hli_v1/modules/module_l23ve.py +73 -0
  115. xoa_driver/internals/hli_v1/modules/module_l47.py +397 -0
  116. xoa_driver/internals/hli_v1/modules/module_l47ve.py +9 -0
  117. xoa_driver/internals/hli_v1/modules/modules_l23/__init__.py +0 -0
  118. xoa_driver/internals/hli_v1/modules/modules_l23/family_combi.py +83 -0
  119. xoa_driver/internals/hli_v1/modules/modules_l23/family_d.py +75 -0
  120. xoa_driver/internals/hli_v1/modules/modules_l23/family_e.py +85 -0
  121. xoa_driver/internals/hli_v1/modules/modules_l23/family_f.py +145 -0
  122. xoa_driver/internals/hli_v1/modules/modules_l23/family_g.py +84 -0
  123. xoa_driver/internals/hli_v1/modules/modules_l23/family_h.py +40 -0
  124. xoa_driver/internals/hli_v1/modules/modules_l23/family_i.py +25 -0
  125. xoa_driver/internals/hli_v1/modules/modules_l23/family_j.py +25 -0
  126. xoa_driver/internals/hli_v1/modules/modules_l23/family_k.py +39 -0
  127. xoa_driver/internals/hli_v1/modules/modules_l23/family_l.py +55 -0
  128. xoa_driver/internals/hli_v1/modules/modules_l23/family_l1.py +800 -0
  129. xoa_driver/internals/hli_v1/modules/modules_l23/family_m.py +25 -0
  130. xoa_driver/internals/hli_v1/modules/modules_l23/family_n.py +40 -0
  131. xoa_driver/internals/hli_v1/modules/modules_l23/module_l23_base.py +383 -0
  132. xoa_driver/internals/hli_v1/ports/__init__.py +0 -0
  133. xoa_driver/internals/hli_v1/ports/base_port.py +125 -0
  134. xoa_driver/internals/hli_v1/ports/port_l23/__init__.py +0 -0
  135. xoa_driver/internals/hli_v1/ports/port_l23/bases/__init__.py +0 -0
  136. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_capture.py +70 -0
  137. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23.py +527 -0
  138. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_l23_genuine.py +229 -0
  139. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_reception_statistics.py +231 -0
  140. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transceiver.py +117 -0
  141. xoa_driver/internals/hli_v1/ports/port_l23/bases/port_transmission_statistics.py +131 -0
  142. xoa_driver/internals/hli_v1/ports/port_l23/chimera/__init__.py +0 -0
  143. xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
  144. xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
  145. xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/general.py +396 -0
  146. xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/shadow.py +104 -0
  147. xoa_driver/internals/hli_v1/ports/port_l23/chimera/filter_definition/working.py +36 -0
  148. xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_custom_distribution.py +125 -0
  149. xoa_driver/internals/hli_v1/ports/port_l23/chimera/pe_distribution.py +174 -0
  150. xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_chimera.py +119 -0
  151. xoa_driver/internals/hli_v1/ports/port_l23/chimera/port_emulation.py +244 -0
  152. xoa_driver/internals/hli_v1/ports/port_l23/chimera/reception_statistics.py +24 -0
  153. xoa_driver/internals/hli_v1/ports/port_l23/chimera/transmission_statistics.py +24 -0
  154. xoa_driver/internals/hli_v1/ports/port_l23/family_combi.py +37 -0
  155. xoa_driver/internals/hli_v1/ports/port_l23/family_d.py +51 -0
  156. xoa_driver/internals/hli_v1/ports/port_l23/family_e.py +107 -0
  157. xoa_driver/internals/hli_v1/ports/port_l23/family_f.py +151 -0
  158. xoa_driver/internals/hli_v1/ports/port_l23/family_g.py +77 -0
  159. xoa_driver/internals/hli_v1/ports/port_l23/family_h.py +67 -0
  160. xoa_driver/internals/hli_v1/ports/port_l23/family_i.py +84 -0
  161. xoa_driver/internals/hli_v1/ports/port_l23/family_j.py +68 -0
  162. xoa_driver/internals/hli_v1/ports/port_l23/family_k.py +73 -0
  163. xoa_driver/internals/hli_v1/ports/port_l23/family_l.py +82 -0
  164. xoa_driver/internals/hli_v1/ports/port_l23/family_l1.py +166 -0
  165. xoa_driver/internals/hli_v1/ports/port_l23/family_m.py +29 -0
  166. xoa_driver/internals/hli_v1/ports/port_l23/fault_jkl.py +24 -0
  167. xoa_driver/internals/hli_v1/ports/port_l23/freya_l1.py +722 -0
  168. xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ghijkl.py +369 -0
  169. xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_ijkl_chimera.py +60 -0
  170. xoa_driver/internals/hli_v1/ports/port_l23/pcs_pma_l.py +78 -0
  171. xoa_driver/internals/hli_v1/ports/port_l23/port_l23ve.py +101 -0
  172. xoa_driver/internals/hli_v1/ports/port_l47/__init__.py +0 -0
  173. xoa_driver/internals/hli_v1/ports/port_l47/counters.py +174 -0
  174. xoa_driver/internals/hli_v1/ports/port_l47/main.py +228 -0
  175. xoa_driver/internals/hli_v1/ports/port_l47/packet_engine.py +31 -0
  176. xoa_driver/internals/hli_v1/revisions.py +11 -0
  177. xoa_driver/internals/hli_v1/testers/__init__.py +0 -0
  178. xoa_driver/internals/hli_v1/testers/_base_tester.py +259 -0
  179. xoa_driver/internals/hli_v1/testers/genuine/__init__.py +0 -0
  180. xoa_driver/internals/hli_v1/testers/genuine/l_23/__init__.py +0 -0
  181. xoa_driver/internals/hli_v1/testers/genuine/l_23/health.py +16 -0
  182. xoa_driver/internals/hli_v1/testers/genuine/l_23/rest_api.py +38 -0
  183. xoa_driver/internals/hli_v1/testers/genuine/l_23/time_keeper.py +57 -0
  184. xoa_driver/internals/hli_v1/testers/genuine/l_23/upload_file.py +29 -0
  185. xoa_driver/internals/hli_v1/testers/genuine/management_interface.py +42 -0
  186. xoa_driver/internals/hli_v1/testers/l23_tester.py +196 -0
  187. xoa_driver/internals/hli_v1/testers/l23ve_tester.py +114 -0
  188. xoa_driver/internals/hli_v1/testers/l47_tester.py +106 -0
  189. xoa_driver/internals/hli_v1/testers/l47ve_tester.py +54 -0
  190. xoa_driver/internals/hli_v2/__init__.py +0 -0
  191. xoa_driver/internals/hli_v2/indices/__init__.py +0 -0
  192. xoa_driver/internals/hli_v2/indices/base_index.py +39 -0
  193. xoa_driver/internals/hli_v2/indices/connection_group/__init__.py +0 -0
  194. xoa_driver/internals/hli_v2/indices/connection_group/cg.py +115 -0
  195. xoa_driver/internals/hli_v2/indices/connection_group/histogram.py +59 -0
  196. xoa_driver/internals/hli_v2/indices/connection_group/l2.py +71 -0
  197. xoa_driver/internals/hli_v2/indices/connection_group/l3.py +96 -0
  198. xoa_driver/internals/hli_v2/indices/connection_group/raw.py +148 -0
  199. xoa_driver/internals/hli_v2/indices/connection_group/replay.py +89 -0
  200. xoa_driver/internals/hli_v2/indices/connection_group/tcp.py +261 -0
  201. xoa_driver/internals/hli_v2/indices/connection_group/tls.py +166 -0
  202. xoa_driver/internals/hli_v2/indices/connection_group/udp.py +112 -0
  203. xoa_driver/internals/hli_v2/indices/connection_group/user_state.py +25 -0
  204. xoa_driver/internals/hli_v2/indices/filter/__init__.py +0 -0
  205. xoa_driver/internals/hli_v2/indices/filter/base_filter.py +50 -0
  206. xoa_driver/internals/hli_v2/indices/filter/genuine_filter.py +17 -0
  207. xoa_driver/internals/hli_v2/indices/length_term.py +44 -0
  208. xoa_driver/internals/hli_v2/indices/match_term.py +49 -0
  209. xoa_driver/internals/hli_v2/indices/port_dataset.py +53 -0
  210. xoa_driver/internals/hli_v2/indices/streams/__init__.py +0 -0
  211. xoa_driver/internals/hli_v2/indices/streams/base_stream.py +234 -0
  212. xoa_driver/internals/hli_v2/indices/streams/genuine_stream.py +32 -0
  213. xoa_driver/internals/hli_v2/modules/__init__.py +0 -0
  214. xoa_driver/internals/hli_v2/modules/__interfaces.py +21 -0
  215. xoa_driver/internals/hli_v2/modules/base_module.py +125 -0
  216. xoa_driver/internals/hli_v2/modules/module_chimera.py +358 -0
  217. xoa_driver/internals/hli_v2/modules/module_l23ve.py +58 -0
  218. xoa_driver/internals/hli_v2/modules/module_l47.py +230 -0
  219. xoa_driver/internals/hli_v2/modules/module_l47ve.py +8 -0
  220. xoa_driver/internals/hli_v2/modules/modules_l23/__init__.py +0 -0
  221. xoa_driver/internals/hli_v2/modules/modules_l23/family_combi.py +73 -0
  222. xoa_driver/internals/hli_v2/modules/modules_l23/family_d.py +75 -0
  223. xoa_driver/internals/hli_v2/modules/modules_l23/family_e.py +85 -0
  224. xoa_driver/internals/hli_v2/modules/modules_l23/family_f.py +144 -0
  225. xoa_driver/internals/hli_v2/modules/modules_l23/family_g.py +84 -0
  226. xoa_driver/internals/hli_v2/modules/modules_l23/family_h.py +40 -0
  227. xoa_driver/internals/hli_v2/modules/modules_l23/family_i.py +25 -0
  228. xoa_driver/internals/hli_v2/modules/modules_l23/family_j.py +25 -0
  229. xoa_driver/internals/hli_v2/modules/modules_l23/family_k.py +39 -0
  230. xoa_driver/internals/hli_v2/modules/modules_l23/family_l.py +55 -0
  231. xoa_driver/internals/hli_v2/modules/modules_l23/family_l1.py +797 -0
  232. xoa_driver/internals/hli_v2/modules/modules_l23/family_m.py +25 -0
  233. xoa_driver/internals/hli_v2/modules/modules_l23/family_n.py +40 -0
  234. xoa_driver/internals/hli_v2/modules/modules_l23/module_l23_base.py +339 -0
  235. xoa_driver/internals/hli_v2/ports/__init__.py +0 -0
  236. xoa_driver/internals/hli_v2/ports/base_port.py +105 -0
  237. xoa_driver/internals/hli_v2/ports/port_l23/__init__.py +0 -0
  238. xoa_driver/internals/hli_v2/ports/port_l23/bases/__init__.py +0 -0
  239. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_capture.py +64 -0
  240. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23.py +441 -0
  241. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_l23_genuine.py +172 -0
  242. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_reception_statistics.py +156 -0
  243. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transceiver.py +117 -0
  244. xoa_driver/internals/hli_v2/ports/port_l23/bases/port_transmission_statistics.py +59 -0
  245. xoa_driver/internals/hli_v2/ports/port_l23/chimera/__init__.py +0 -0
  246. xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/__init__.py +0 -0
  247. xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/_utils.py +15 -0
  248. xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/general.py +340 -0
  249. xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/shadow.py +99 -0
  250. xoa_driver/internals/hli_v2/ports/port_l23/chimera/filter_definition/working.py +36 -0
  251. xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_custom_distribution.py +116 -0
  252. xoa_driver/internals/hli_v2/ports/port_l23/chimera/pe_distribution.py +102 -0
  253. xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_chimera.py +113 -0
  254. xoa_driver/internals/hli_v2/ports/port_l23/chimera/port_emulation.py +420 -0
  255. xoa_driver/internals/hli_v2/ports/port_l23/chimera/reception_statistics.py +22 -0
  256. xoa_driver/internals/hli_v2/ports/port_l23/chimera/transmission_statistics.py +22 -0
  257. xoa_driver/internals/hli_v2/ports/port_l23/family_combi.py +36 -0
  258. xoa_driver/internals/hli_v2/ports/port_l23/family_d.py +49 -0
  259. xoa_driver/internals/hli_v2/ports/port_l23/family_e.py +96 -0
  260. xoa_driver/internals/hli_v2/ports/port_l23/family_f.py +144 -0
  261. xoa_driver/internals/hli_v2/ports/port_l23/family_g.py +77 -0
  262. xoa_driver/internals/hli_v2/ports/port_l23/family_h.py +60 -0
  263. xoa_driver/internals/hli_v2/ports/port_l23/family_i.py +66 -0
  264. xoa_driver/internals/hli_v2/ports/port_l23/family_j.py +53 -0
  265. xoa_driver/internals/hli_v2/ports/port_l23/family_k.py +58 -0
  266. xoa_driver/internals/hli_v2/ports/port_l23/family_l.py +67 -0
  267. xoa_driver/internals/hli_v2/ports/port_l23/family_l1.py +149 -0
  268. xoa_driver/internals/hli_v2/ports/port_l23/family_m.py +28 -0
  269. xoa_driver/internals/hli_v2/ports/port_l23/fault_jkl.py +22 -0
  270. xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ghijkl.py +342 -0
  271. xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_ijkl_chimera.py +50 -0
  272. xoa_driver/internals/hli_v2/ports/port_l23/pcs_pma_l.py +65 -0
  273. xoa_driver/internals/hli_v2/ports/port_l23/port_l23ve.py +81 -0
  274. xoa_driver/internals/hli_v2/ports/port_l47/__init__.py +0 -0
  275. xoa_driver/internals/hli_v2/ports/port_l47/counters.py +146 -0
  276. xoa_driver/internals/hli_v2/ports/port_l47/main.py +137 -0
  277. xoa_driver/internals/hli_v2/ports/port_l47/packet_engine.py +20 -0
  278. xoa_driver/internals/hli_v2/revisions.py +11 -0
  279. xoa_driver/internals/hli_v2/testers/__init__.py +0 -0
  280. xoa_driver/internals/hli_v2/testers/_base_tester.py +207 -0
  281. xoa_driver/internals/hli_v2/testers/genuine/__init__.py +0 -0
  282. xoa_driver/internals/hli_v2/testers/genuine/l_23/__init__.py +0 -0
  283. xoa_driver/internals/hli_v2/testers/genuine/l_23/health.py +16 -0
  284. xoa_driver/internals/hli_v2/testers/genuine/l_23/rest_api.py +34 -0
  285. xoa_driver/internals/hli_v2/testers/genuine/l_23/time_keeper.py +50 -0
  286. xoa_driver/internals/hli_v2/testers/genuine/l_23/upload_file.py +26 -0
  287. xoa_driver/internals/hli_v2/testers/genuine/management_interface.py +38 -0
  288. xoa_driver/internals/hli_v2/testers/l23_tester.py +159 -0
  289. xoa_driver/internals/hli_v2/testers/l23ve_tester.py +98 -0
  290. xoa_driver/internals/hli_v2/testers/l47_tester.py +95 -0
  291. xoa_driver/internals/hli_v2/testers/l47ve_tester.py +50 -0
  292. xoa_driver/internals/state_storage/__init__.py +0 -0
  293. xoa_driver/internals/state_storage/_speed_detector.py +121 -0
  294. xoa_driver/internals/state_storage/modules_state.py +128 -0
  295. xoa_driver/internals/state_storage/ports_state.py +154 -0
  296. xoa_driver/internals/state_storage/testers_state.py +104 -0
  297. xoa_driver/internals/utils/__init__.py +0 -0
  298. xoa_driver/internals/utils/attributes.py +33 -0
  299. xoa_driver/internals/utils/cap_id.py +63 -0
  300. xoa_driver/internals/utils/con_traffic_light.py +88 -0
  301. xoa_driver/internals/utils/indices/__init__.py +0 -0
  302. xoa_driver/internals/utils/indices/_interfaces.py +26 -0
  303. xoa_driver/internals/utils/indices/header_modifier_manager.py +56 -0
  304. xoa_driver/internals/utils/indices/index_manager.py +95 -0
  305. xoa_driver/internals/utils/indices/observer.py +17 -0
  306. xoa_driver/internals/utils/kind.py +19 -0
  307. xoa_driver/internals/utils/managers/__init__.py +0 -0
  308. xoa_driver/internals/utils/managers/abc.py +44 -0
  309. xoa_driver/internals/utils/managers/exceptions.py +22 -0
  310. xoa_driver/internals/utils/managers/modules_manager.py +118 -0
  311. xoa_driver/internals/utils/managers/ports_manager.py +116 -0
  312. xoa_driver/internals/utils/rev_tool.py +21 -0
  313. xoa_driver/internals/utils/session.py +117 -0
  314. xoa_driver/internals/warn.py +32 -0
  315. xoa_driver/lli.py +15 -0
  316. xoa_driver/misc.py +57 -0
  317. xoa_driver/modules.py +448 -0
  318. xoa_driver/ports.py +332 -0
  319. xoa_driver/testers.py +37 -0
  320. xoa_driver/utils.py +12 -0
  321. xoa_driver/v2/__init__.py +11 -0
  322. xoa_driver/v2/misc.py +77 -0
  323. xoa_driver/v2/modules.py +308 -0
  324. xoa_driver/v2/ports.py +232 -0
  325. 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
+ )