py-teststand 0.2.2__tar.gz → 0.2.3__tar.gz

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 (399) hide show
  1. {py_teststand-0.2.2 → py_teststand-0.2.3}/PKG-INFO +1 -1
  2. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/analyzer_step_name_length.py +4 -4
  3. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/property_object_serialize.py +7 -7
  4. {py_teststand-0.2.2 → py_teststand-0.2.3}/pyproject.toml +7 -1
  5. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/__init__.py +7 -1
  6. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/adapter.py +4 -10
  7. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/dotnet.py +8 -2
  8. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/labview.py +10 -0
  9. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/labview_nxg.py +11 -1
  10. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/sequence.py +5 -0
  11. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/rule_configuration.py +6 -2
  12. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/com_wrapper.py +1 -0
  13. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/engine/engine.py +4 -2
  14. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/sync_manager.py +9 -9
  15. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/property/property_object.py +5 -6
  16. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/code_template.py +5 -0
  17. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/sequence_file.py +12 -9
  18. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/step_type.py +0 -1
  19. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/events.py +9 -9
  20. py_teststand-0.2.3/tests/unit/test_public_api.py +52 -0
  21. {py_teststand-0.2.2 → py_teststand-0.2.3}/.gitignore +0 -0
  22. {py_teststand-0.2.2 → py_teststand-0.2.3}/.markdownlint-cli2.jsonc +0 -0
  23. {py_teststand-0.2.2 → py_teststand-0.2.3}/.python-version +0 -0
  24. {py_teststand-0.2.2 → py_teststand-0.2.3}/CLAUDE.md +0 -0
  25. {py_teststand-0.2.2 → py_teststand-0.2.3}/GEMINI.md +0 -0
  26. {py_teststand-0.2.2 → py_teststand-0.2.3}/LICENSE +0 -0
  27. {py_teststand-0.2.2 → py_teststand-0.2.3}/README.md +0 -0
  28. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/data_type_manage.py +0 -0
  29. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/execution_run_subsequence.py +0 -0
  30. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/execution_run_test_headless.py +0 -0
  31. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/launch_all_examples.py +0 -0
  32. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/search_directory_manage.py +0 -0
  33. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/sequence_build.py +0 -0
  34. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/station_options_update.py +0 -0
  35. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/step_insert.py +0 -0
  36. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/step_insert_from_template.py +0 -0
  37. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/ui_messages_handle.py +0 -0
  38. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/users_manage.py +0 -0
  39. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/variables_manage.py +0 -0
  40. {py_teststand-0.2.2 → py_teststand-0.2.3}/examples/workspace_create.py +0 -0
  41. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/.graphify_labels.json +0 -0
  42. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/.graphify_python +0 -0
  43. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/.graphify_root +0 -0
  44. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/.graphify_uncached.txt +0 -0
  45. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/GRAPH_REPORT.md +0 -0
  46. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/00300beaf41ddf8ca88a2133f315f9873877e388dfadf2343bc93ad9ec7189af.json +0 -0
  47. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0041043937ad3008273915d37b7f4b2d48ca2c4612d45ae3f8cd0cb931b90f9f.json +0 -0
  48. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/021c67591ed36baaccec5597b1aaa5da45a3d107860151d0c14da8d8e82d13fe.json +0 -0
  49. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/023707fc22c5dae0fe050b058cef36e8166178bd19bf64c19d1d5769193e0b66.json +0 -0
  50. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/040ee1db9c6b7f496603e954cded103cc0a695fdff0107104d1971e6bd77fa80.json +0 -0
  51. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/05037a9ec557a4372515feea0cb82e6b8112ac7c5e298565964fbd270f96bb55.json +0 -0
  52. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0524858e50a4d2f7d2ac92c57ca3c87df637bf4c3158c7092a413e4393c857a4.json +0 -0
  53. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/05547b7aeeb2f4a7f5f21a8e7104b9116d781c941b744c43b0ea6c82e21b5fdd.json +0 -0
  54. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0561a3660d3619ac6a5591c0657208ef1151afc18df8f2fd6f97de8670d8eb60.json +0 -0
  55. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/057056cc111fdb36b69e58f64079572f5c47872e0727d1ad3dfc0f35e7d39a4f.json +0 -0
  56. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/057e562996ba53b27fd80676787dca1563c48de754f9cd7932562ae64c3b5489.json +0 -0
  57. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/064e97d62db5d77399540dec673d05b900a3e29224bb4e45bc3e879729f20003.json +0 -0
  58. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/06511afc1a360b72ddc9b4497a994dca686aef3b97922cc8b80443403a4ddb83.json +0 -0
  59. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/06c31bd2b14400097f1e5123a6f39525ba4c4e5e2a5e7ff4c38a43b224d20a0d.json +0 -0
  60. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/070c095dddd2f798973cbb1332d344bf81370ea5a6eda28e88b1f7a27ef6c709.json +0 -0
  61. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/09332e170176084c6344fec2f82b8e890d06f8e32680643e316246716bee53e3.json +0 -0
  62. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/094e59f0e4cdb42feca81333bf3bf014eca76ad887ef1490483f798c17d40cd5.json +0 -0
  63. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0aec586f84490fed93173f8a2200485ceffc529450740dcf5edbe12a7d89f781.json +0 -0
  64. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0af23434a97b56cbda3aaf2de520ee9e18a629be0ef406a90dac45260481c1bf.json +0 -0
  65. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0bd90bc4c1dd73076d8627f6ea7be67faaf504d30221b1dce45cb1c443755fb5.json +0 -0
  66. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/0e7f3eedcff4a433a47611e1adf13860af5e6d16fbb6129fc48ddd8557aa1626.json +0 -0
  67. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/100f3021f37614916d64cfaf40b04fda8d1989d624d03d93a97ec6ca79bf17e0.json +0 -0
  68. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1051e1923497524696fb7fa1b71ba3a9d3cf12ec8519b1e8209d9d5eac717990.json +0 -0
  69. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1086f0d1446ee0d57fc4c325f3828ff783e328ced88aac13b45f718161499e53.json +0 -0
  70. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/10fe404eb03263a768b27a2e92b2fe20e33cda3eab265a84860286430be0a49b.json +0 -0
  71. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/13bdd9d4f7de5ab5fbb955890067eb3772a2302e014480243ae141a4eee8b4f7.json +0 -0
  72. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/167515af1cd986fa06cab9d7efa9f1feb18bc95e3c6de1dba854adafc7ae8ead.json +0 -0
  73. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/16fba3996eb41939497dbd0f426c599e4ebc1eb5a762d7e1ff143708e49e94dc.json +0 -0
  74. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/17de4e480542b25d6f2a11461ae4f41a6282c3ecbeb3619b0b42fdbb7f31939c.json +0 -0
  75. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/17fbd1888f87c0b6c099e7e88300cf58e26adda72cf2f2297fc1f0e6bd2e9257.json +0 -0
  76. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1d601091a3312ce89ddc9523bffccf41742eb6ea1223a6b4f751c210ffce1fb4.json +0 -0
  77. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1e4049e0856983245c1154127a97509e576a1fd14f3ea56d52f946878a535bae.json +0 -0
  78. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1e4d42449081955231608e3fa48b5c3102243d55a80e9064b88440669ed821b2.json +0 -0
  79. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1f727c948a41c946dd0aa376993d5620f226497d49404c03b3c175d057b4ab29.json +0 -0
  80. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1f7c2be5abf85169f9c409d39e58419418193281eeb391dc3ec0d1f6784f40dc.json +0 -0
  81. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/1f9db61abe1368fa82aab9d8e1b27d97389172db6c78cc23abe03025876ebdd1.json +0 -0
  82. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/207fdd9cd514b05162cd7babd5d2252985853a11cdf847113056a5071e8377e3.json +0 -0
  83. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/2165f2f41684c71dbce5e6edf7262786c5aa8518828e00e2a4dce75492f53aa3.json +0 -0
  84. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/22832c79316ab6a0c79a6bca80d9635ba80df2e2079ac114c354d43aec19f95c.json +0 -0
  85. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/22e04e79d7912eb1b7e3bca68279f3fa7e2936b3d2706fcdf688fff96f7c30c8.json +0 -0
  86. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/252d1adbbb189a3636432d8de48b5ed7c8d1f185c5ea46ceb616071960b1be42.json +0 -0
  87. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/25ab62b76a5f58693d5161dabf0a58862a7d6d5e9b054cc2347ffb79d4468f65.json +0 -0
  88. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/29731b11c9bdce6c0524fbcf801177b2da8d3181efa44ab73832e8dc0ed442bd.json +0 -0
  89. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/29ae039e1d154e5d25fc8659bf1eb270830e4fec772f91f41bf1cb9744733674.json +0 -0
  90. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/2b7f894857506a93df04568d3bc252c6883ac4010ba64b49a8c13c9cd06330ca.json +0 -0
  91. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/2bbb54bb8f3b91b33e7e872ea5e2b129079a60fe8284b8dd8bf5488b2f76b55d.json +0 -0
  92. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/2d70a40698b885cb7705c0d57922dfc922ef6b90e9a4580935d170395bc51a6e.json +0 -0
  93. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/2ddf8f9e5aa81db1e984bd5812d91143f64ab806a7b5676d6e7f23d1d08f677f.json +0 -0
  94. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/318ebfed808e94269a07fb5136c60f910bf810ffa3bef5aa7c26c313519147df.json +0 -0
  95. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3289a80010b6c0faed89308018fa31f7031f27ae0d853299443c23ba8a4d6e6b.json +0 -0
  96. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3312f8a2eccbfd08fabdba5d2af656bfbcb95e5b7e5390abf35ad5140759a710.json +0 -0
  97. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/35d6fee40fd65a1c224aa8320fbd8ef959f6975b16cc89fc2cfbb3c1b4e95641.json +0 -0
  98. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3654ae6c52c3267b7a62b7697d69011bd6446dd3f6da9bc5b133da4c2efe7d6b.json +0 -0
  99. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/37cb92f2f6a01d4862632405ced4934cc003818147fd14ea9a636bc7336d3af1.json +0 -0
  100. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3a06bdbfe7f9ae5d627e941fdd9e616d0431a4f41b37c8f8d7b3f5751fcadb21.json +0 -0
  101. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3ac8bb6902eda596ffe0f32f517fb6e567a34e52e76c4ccc682d7c7dcf65f06a.json +0 -0
  102. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3ace387692703afd7ecab2396d8eb8b3dc6411c0931ebf68ff5370013c707fa9.json +0 -0
  103. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3b65d0f842b856818ed2510234a106990e02450d60aed9075cc4c9f4b14101bc.json +0 -0
  104. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3b90f45c585a53b5f55ef2c3761eef4b97fcef1eb344f9a4819c989b174b52e5.json +0 -0
  105. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3cf920bfdd765673b964deab1cf13959604b7648091d4c58209f818cc3fede98.json +0 -0
  106. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/3d97defd459d93180b984ca62794c47f1da9a8dc105175bfc1d8948fc8dc3f29.json +0 -0
  107. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/4096008e37ad33f487fa031012fdc7f354edbb3e2c3d82eeeae616e8e1ae75fa.json +0 -0
  108. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/4278f99739c7c54475247d2cfb57eda95ad3cc39d7bbaf04729c04932d9fef12.json +0 -0
  109. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/44963597cd3ea0c48e79c9aeb4e7838f1faa5bcde319b7ff81b29aa6549d551f.json +0 -0
  110. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/455df594e48e61d53c059f4ddad24e31e427232f4fe871e8ff384227350cc9ce.json +0 -0
  111. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/49e757465d8e83eb1ea11482682a0dc9bf8dd399847c883954925749ad6470c2.json +0 -0
  112. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/4c3d7045d901449868d2003d5529dd6f41d635c9e1ef1b1b8a0bee5e15aafc70.json +0 -0
  113. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/4e9f3dd260b769260bab0fd12ca46ae6b3b17221c6968fed8b7907173b05fc2d.json +0 -0
  114. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/50c625a30e42a14c35d57d119aba7e16a17fa05fc60cb5ff961c61a77f6129d0.json +0 -0
  115. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/50d6499184d0d9889c9571e8f6b7b7def3329721be05cc10bbac13520f8eef37.json +0 -0
  116. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/519a945f4a84c930588f887f3b23f13102ea6138645d177cef5f98b7b91e6229.json +0 -0
  117. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/523e956286ac13d37bfffa655ef1e83b1ecd17889caeae0ede6e99cb03c29e83.json +0 -0
  118. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5254fe829c1a1554024b185254ce1177eaafa64b3ea72a0732abc7a205074b23.json +0 -0
  119. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/531a38ee0ed1035f37eecda69c27f43d9a0ecd6fea2fc6127c3a3318f5f06dad.json +0 -0
  120. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/535082e7e072de1deb460d4d58ba560c76f4c0ffdba7836846c3699d4c47fc5a.json +0 -0
  121. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/55cb312149a7885f52f272daaf0060fbdbd8e26dc67e79c7b15d94a32b750749.json +0 -0
  122. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/563deb73b3327340c242a025beeca43321716dfbcea23fac9c89875d67a08f72.json +0 -0
  123. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/58191b4e65d5ba31195e59a1f244014669e52970d0bfe01bc99ab171f54e1c03.json +0 -0
  124. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/584d486255b4cee316ca9e6e3656c989d600ac403ccf01bdb3d548606678b17b.json +0 -0
  125. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/589dad68071e187dbb2fbbaa04d83c88bf219f7d428bfe1aa5a1ff7dbf023a23.json +0 -0
  126. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5a0a54d982fe112ff92a0263994062f4bf21f02c426b6936f257e80d02efabb9.json +0 -0
  127. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5a4e9b332727fe6e94e1548fb31f14aef41966f5ead08e7dde780b02d60148f5.json +0 -0
  128. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5a8f8b728c901bfe909cccedbe276a221a7e0af456ebb26189774931eded5a74.json +0 -0
  129. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5bd0ff70a33bedbee8d278646e92ab57e29a43867cd60e7fb918508833117b56.json +0 -0
  130. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/5c088e2c173f3f6dd18f3df4cd20a198a76d4d5da9db7f8b749b55ea97210f05.json +0 -0
  131. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6095cf8a05c742b2d126bfc1cb9064a3c3cae65911146f1c4d36e2d4f86f1680.json +0 -0
  132. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6207dfec219a33509fc91cdd0055029c6b360a28fe282bee4bf489a4d45400d3.json +0 -0
  133. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/62602a326a616b0ef6a3ee96fdf794a5815d0a69babd77a9a85e68ba6599db60.json +0 -0
  134. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/627d8be024734a3d490521cd423e9db4c50870f3ca6ac761e75f86ea55eb9491.json +0 -0
  135. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/62ace6fa362a937c7d2e645eea0192df37d1de5fc0fcc9f0a16f708b74ecd48a.json +0 -0
  136. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6464e2cd097df4628226ba38836dd4d55ea4b97dba4dd952e1a34c84fa00e914.json +0 -0
  137. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6469622a3449ce827fd414b465085e38a53133a20024b6c30e13c6fab1cbd06e.json +0 -0
  138. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/64990a73d75b059ef41bfa7ffe5dc818e1e197e3509f3b568e7fec254760bdad.json +0 -0
  139. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/68806e21c83d8f6bb9b7deaf161a26e2543fb6a6052839b92fd229c44de4785d.json +0 -0
  140. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/689e2aa834fc2b6c42e3a6ad0c9b2a9060d968a9a8dd8d1c47be911b5a7347c6.json +0 -0
  141. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/69e95bec750edd2374827041d52575a2c09051c1adb4b1eab17cb8dc9ed5ee9d.json +0 -0
  142. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6a583adb3c041e3e49886b4b96a73494fdb8c677ac28463c037845ba616348a3.json +0 -0
  143. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6b39e36d9b59b214516369764a7c635e8b6af335c69fd2ab4fbd3be0aa12f539.json +0 -0
  144. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6bae4a41d4b3c584b87f6e963948951164f820ba2f77065856e93fa5fb77da4f.json +0 -0
  145. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6be37bdd97101b62dc6fd786d39749426e719b5f9c0464ceb43cdfc63e56d5b0.json +0 -0
  146. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6d775401047dd566d5fcab422fdb64798fc85eef1ccd9444c43376314a7e81ba.json +0 -0
  147. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/6e8481e9dad0e6c1793e5f6ccbbf1dfb5ba88a09fb9e326425df6bf3b5b10e33.json +0 -0
  148. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/70ac455c2976654f81e4ada2accbeb9a0ed097e513ee641a1767038b60f3d058.json +0 -0
  149. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/715a84c56ee658f84a9b5930a0d01326da31d98b891e6ba0be647527f999167c.json +0 -0
  150. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/73190900d1852a833a8e0c0cc86f2a1083d4b3ffcdd36ccf239bf3fefe2be9b9.json +0 -0
  151. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/731a07b1575dc21af660051d44974822d16d4d07e0ff8c959f3e7971c16e9a7a.json +0 -0
  152. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/73ee87e06204f3346bd71d9107d89a9171428bacf3611019cdfcfd4aef224acb.json +0 -0
  153. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/73f5451927075637af3c96c14efec5d69b6da496baee2dc759048edc9b12c232.json +0 -0
  154. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/74c85d86a6d8483900d3fa46e3dd606f54d64af4ae6e5b75421fe1c6788b3c60.json +0 -0
  155. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/77cefb8a568e79bbbf5ea2f16eca5b1dedef30fde3405aab81eec97baf84f827.json +0 -0
  156. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/782afa626a4098a473fab0fb263ca59c59db1111372aa81c48944c3b8c95f491.json +0 -0
  157. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/79ce979e77967e52a44d8579c4303ab655f65ad9bc258c3bd96c3dd7305cae06.json +0 -0
  158. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7c6ac8a21f4385b56aeea01fee3766a0f9abbbc6f9a0590ea16325f235efcf20.json +0 -0
  159. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7ceeb2d8df9a1700574716eeb32d72e4fd574ea02d01cb3e1e48e65df9c5003a.json +0 -0
  160. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7d5f935bff18ec87a6c7a089cd08c4d89cc922a0e020c1fb1b57f13ed586358c.json +0 -0
  161. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7db158ee49deabc6bb44403c7cde05504828d9e0ab9059b2630fc953bd81d93c.json +0 -0
  162. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7dc6b1a6affc2de030eaa790e0826a3797ed82b2f5e6df1481df872f1f511e9e.json +0 -0
  163. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7e0aa14109be2807e6cab542dd82edba518e53ede3c664eb7224a8dfe651f469.json +0 -0
  164. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7f546efb5963586a767ed1de189fdadacbe4ae8989478a5a66e5120052df625f.json +0 -0
  165. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/7fbf42c8c7d52f048579426d9da3dd81d5828c24c2321a3795fb3b7659b92a0c.json +0 -0
  166. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/80c3a5a1b8160107475d142a6135ddaf906da9307805f2e68ba8c3af04aa9882.json +0 -0
  167. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/81a280d2907246e14a57096449e036eb0363da6f0074ecedf14879d6f09a826c.json +0 -0
  168. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/81d4d752174e5a09b2ba32a01724629f16137270b7f0f098a5e66b6a1c689d18.json +0 -0
  169. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/82cad94a35ab2d431beb0f15d5d13decd59ab65525dfc802995ddc7fbacedc21.json +0 -0
  170. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/83d57f81198fde4ad8a03bbe0f9d80058eb82724505cb31283206d38486285cc.json +0 -0
  171. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/85af66fc476055f4e450401935be1757b9d043099c0530a55edaaa9e8fc45b78.json +0 -0
  172. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/85c074209d24896e542e425b1fb9fad5d2704db1286e406b25fbe2a9e1c62ac8.json +0 -0
  173. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/86332e56e1d088488a3378a8ffb47b13abb39e8c81cdeb5f1d546a14a5d4e03f.json +0 -0
  174. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/866b406c0825b3fd70dd6c7a0c04d67018b3701b14bf2658d5f05ebbfb134bb2.json +0 -0
  175. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/869ef8c9b4cfacfe7b568dedfac756cc52c7635bd951bacceb6f68930061e798.json +0 -0
  176. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8b4f66ce9958d1bb4077dfe1d0e4df2f7f4642a838714dbc93316dc3c8523534.json +0 -0
  177. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8b9eaad4dfb5c0936cebcafde3c3b368c71c5c2e7f4fbc282c887051e25567e5.json +0 -0
  178. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8e4e1c38e46c8daa3c97656d09feaa9fbb2f083b3401f9fbdf7fb53a87bb50f6.json +0 -0
  179. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8e73cca8cf7e6238b5a9e4a46b62d2cf8968fb9e071c8ff8e21a55b1cbb1cd46.json +0 -0
  180. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8ec0bfac79ec428f8e9bd6ef770eee33b0218601b0ada7b113da52b4a53ca6fc.json +0 -0
  181. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/8f1414450de85a7ca36b1c4508c946084f9eaa83eee74f709dd09ebb7fc9e773.json +0 -0
  182. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/92e467b0ca6f7256ca2bd57e96777a76d4cd15d574eb169a10d37c8c5737fb3d.json +0 -0
  183. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/93eb2741e82d5f2c723db19741da0ec90a516da435c2be2ce0c63fcf18a478af.json +0 -0
  184. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/95cb2ed2edc938dbc2eb71b8aeebaec57b8eaaf2229c8e7f4a1a702b36da6d36.json +0 -0
  185. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/95ede7cf79834cf530eb2332a0a7859f1f3b27cc246645cb88421aa0def23623.json +0 -0
  186. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/97aaf1b808af614b0985c5d9ea1196a794a2453b59c9bb81cac1561b29f9092f.json +0 -0
  187. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9811147e5abebc52edff502471a40f369ee1329e9f029ef3258976404f06a8f9.json +0 -0
  188. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/98270c04210ce70f7197fd3c1df74140159aed78f3d6b0c736b9fd1de4309b68.json +0 -0
  189. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/98f967e9230b612cb641244c969d3461874f40a74d00096217c05b4ca3cc5163.json +0 -0
  190. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9a710f33bcbf32f6281ef3199603286b84e3ead526791be3e5702cf19a10ba80.json +0 -0
  191. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9cce4a16b043c387789e0867504b51418b27f557bf5874111ac917bde8e0b109.json +0 -0
  192. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9cd2cffa72ed809a1541ad88bf92c541857c512b6e7fe07c5d9bb348a51c071a.json +0 -0
  193. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9d06f4503bab33ea71454511db6e94b3a27c29ad650cc9cdbfd5b43138f476a6.json +0 -0
  194. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9d3d1aee5a15a733c47dd04fdb5943d68a49f8ce13d67b05bc0a14497328f58d.json +0 -0
  195. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9d440f60091a4f93dcf1d78367e2c71755a3acdfe8844a1b5f756a235b763488.json +0 -0
  196. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9fd47dbb9db188abce18b1f3063253323bca0327c3362dbe36ee49250e348d54.json +0 -0
  197. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/9fe051f8082e371f9df5f940b8f071800623a9ad5b40755285095658d8f28b5a.json +0 -0
  198. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a06be12e9602b3b595742d0cad924633191314032eaf6acaba75ae02c60a9811.json +0 -0
  199. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a5369060fbe387a285b63275bb4e455f350efee2df2aa880f03b07ef8e64fe7c.json +0 -0
  200. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a67e0d0fc7ebb86fc0e08ddc07be6131e22b253ad50fb36935e7901dec5977b7.json +0 -0
  201. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a817b12b6f3c5a089ad11643f41230ba21f1987251b7a190b39cad4f485dabc5.json +0 -0
  202. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a86964aa1cbd83641808a11c8ec3231008bae1345219c2a5646e36a8e06599a5.json +0 -0
  203. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/a93efc87b8b26bb8e00bc3bb298aedd3d7ac45ceb950802398d2414bbf47c0dc.json +0 -0
  204. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/aa76182d9de824910acfbbfc5ea8f46681debd787c018927147e47b85f056e8e.json +0 -0
  205. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/aad95764364270f74a9a2b521a4eede3c4e63ec332fdb251f833610f46f62f9d.json +0 -0
  206. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ac62f874e909973d6a406359c3a3331861f7775ce15427c629754984e6c2bc59.json +0 -0
  207. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/acf05ae7385ed2c7fc6639333fe802f06a0ae3b54b7dc2704234673a41328154.json +0 -0
  208. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ad228703c7b568b72aee72ca2c50dc043ba963295abff15d0f2eced3379378dd.json +0 -0
  209. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ad28df2f2e8bc652a77cead6d657c2aed9fb644428bbd3e2c69d3b21790b6405.json +0 -0
  210. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ae24c1a5d0d0a7e29eec5c4f95e19009825ded2c622d288ba63e6b25de7524b5.json +0 -0
  211. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/aed3d23a58b420ee0328b3bbab000572b8891d72ffb6232c3cf8b807241fe903.json +0 -0
  212. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/aedd4475f0cf7c73ea7553423af3f920eb19c3efa9eb2f8a611f6e898dfe2a44.json +0 -0
  213. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/aef7fe4c9cedf564455aa029d6cc89b79b56a532d04a56a8d092808c0ad4e5b1.json +0 -0
  214. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b079373b22270ed561a40ead88df318a0b3cd52b143607c34f7340508f6e390e.json +0 -0
  215. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b15b8672daa3f5df56cc7f97ee8294dd2d23b975dc9e34256c69726676be3daa.json +0 -0
  216. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b4476bcd1991a5a30b1ac3f78801025d2928cd8c77db07730551b0815ce13c36.json +0 -0
  217. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b470e846ba2a52d4e0763ff5739d1528d1b86974dd79c08358ceb33076790e76.json +0 -0
  218. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b5a337d95da18b2c918d1be090cf235c67a7a09cd60f23033e8c570fa8dbb748.json +0 -0
  219. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b60d2e0d59f626d9ff57d7230795b09be357a37343d0d2c0d1ca958a1857d8bd.json +0 -0
  220. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b6420f0dfb5e0f15c42fa9170634d6c2b3d0409749b00ffd3c9364246d88d790.json +0 -0
  221. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b647bffb0af3f94c4df75171f311ece530c6def16132a3a33f4b7deff6dd707a.json +0 -0
  222. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b710a0414f46ecb976cc66ac059d3a74dbd64d0bf8f1116de968837e581b6422.json +0 -0
  223. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/b73436f8a0e225ea354ec4ad7993c5d5887b7227f7545e2ead47ac03ccc082cd.json +0 -0
  224. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ba1fcae5bd482a5ee1095215721f18a5951393e75bb88a9df1b3e1922e2202ef.json +0 -0
  225. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ba646e84c605179808ec987d421f534a1c4af669a910fdd1ac75bad73d8b587e.json +0 -0
  226. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/bafd5076a18391e489c5133abd6aa6032cec2783626bbd8a84381b7896f21c9d.json +0 -0
  227. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/bc630d1d2d79d48a0c7441c1081f97933ae9bc733733a7918a4cf498fa61b981.json +0 -0
  228. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/be18c3a11472b8d81adfe9761be1ff309c93c04be3f69d56638efb019757f8f7.json +0 -0
  229. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/be985fcfeb455e3d468126f1c7b65b4ab84b57c743118ef4ac021a88973dd155.json +0 -0
  230. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/bece45eb021b6454fcf8a9cf294536c7752f817beb12c90d65e0c21afe57a5a1.json +0 -0
  231. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/c018635d30a0f5436fc124a28ca204b8199b2dcec3335147150e0d34b9e1f82a.json +0 -0
  232. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/c3e028aefdbe3e462d7f676938ae48c428b44031e7c4ef34fb4686904e97b3c8.json +0 -0
  233. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/c7d3603bbe7edfbcfecc3a1b09bdd2307209be3fc7978fea7bfb7685c91b08d7.json +0 -0
  234. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/c9457b843ef85e899bfd9352d67f73980b1a2304cceb01e992440ffdd3d0eb5c.json +0 -0
  235. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/cb761115d0ed359fc4e55ad0c40245352cc091c68e5171ac20ef5e6d9d9832d1.json +0 -0
  236. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/cc658b209eeaf4c9249998a1534cefdf6837ce3a7de82fc62202102fe09957a2.json +0 -0
  237. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/cd2ce8667e344c6769096140ab1e4d9829ba2424eb9bdb65dee55f09469fecc8.json +0 -0
  238. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/cd8ce55adda67b165bf6272936d26dc172ba4d7a5fbfa4d5142181855c40f02d.json +0 -0
  239. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/cecb346166b599b5343dad969681c67168e5130e3a4018ee8fc903efc273fe04.json +0 -0
  240. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ced68cd7e814d7774ffbdc161d16335221561854b99e12f107671e17337504b1.json +0 -0
  241. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d08762a2d53ea94992d179f3affdd360ad2d58277024715af643374e65e62606.json +0 -0
  242. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d48e2ae9efb9c635d241fe4f1d65e0ec51c9ac3740c29a0db58e3bcccc0e2466.json +0 -0
  243. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d54b3634353a29d5fc12e6ccc72ca587a9b2676489bf893524c004d4afdefa51.json +0 -0
  244. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d6200254d8034d573eb3b6bd33d39d7efddaa5fdf60a61453789e61853f03489.json +0 -0
  245. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d7bd2958a25f99487597175b812cc96293a1342810f5076c4a92a1506fba2599.json +0 -0
  246. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d8ad7e776fd4b3708759b004e7ed524ff77a988d48237e5d357dc99a9a3bb79d.json +0 -0
  247. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/d9dd2631fda1b4480019731d75b0a908a057084bc22ad2ca66a2c381b86e0a38.json +0 -0
  248. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/db25c8d58f8689825c0d89e5ebb3ca93542b2dafa228fde7285dcd9565ccb552.json +0 -0
  249. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/dd430a8b0bc073c8deb7e7be1ca766292097b47301797452810293d73d53ff70.json +0 -0
  250. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ddaaecef88ef58b3207db5b55d5bbd8d91421cd99a49941482368f626cc28b9d.json +0 -0
  251. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/df9ffa69edbeaabf967cd706016a4c97e6f9ffc41c5e38ad327fde2d452ddd3e.json +0 -0
  252. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e1713cdd15edde27fe7f01c40841ee3ede0d411e350e2b31b9e8b5b2f9ce6feb.json +0 -0
  253. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e2eafeb868d33a2e19815315d4cfe04eaba57e9fa7835ec2a8f35b0ddffa3498.json +0 -0
  254. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e5581298f1ebdbc113077df91f6215a07ddde68e9a45c01035f87d241062abd2.json +0 -0
  255. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e5dcdfd16046923e879eb93db75c0df5067b2859f57259df63cdcce61ef2c03e.json +0 -0
  256. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e5e9a12f89839a814832a5d5c375d4f6da3f81197790d2d52467fca122f43fd8.json +0 -0
  257. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e8c2aff5248d3d761f3f8175e68f1ff46704c934465ccca6d284d40eeb54ae87.json +0 -0
  258. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/e992bfbfd3c2b33a9dac8499d800f5fcc3d7c33d8d84f90eb705bbd780a32b32.json +0 -0
  259. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ea02b9cc1c110994d38e9aa28b9e4fdf49c7b0e074809f09760f068bc41dc7f8.json +0 -0
  260. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/edbe4c5e6076cc2c119ccec658be0196128b8742a9d640cb9cdf7d79aa622304.json +0 -0
  261. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/ef396e2cc36a574a59a95bf95caae976ec92698d1b43a1fdca8e7a20609d6aa3.json +0 -0
  262. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f1607b2d6749b8e2f1b21e6985fa4da4077d01500b190e20b3d4ac89c8cd0e69.json +0 -0
  263. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f2c65b378401d4e854bb4d18bc4396419ca74dc8c84a5a8d57f4074baeeeb63f.json +0 -0
  264. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f5a620cd0622f180ea799f73823c099958513ca86ff822d9fc45f73b106b35c4.json +0 -0
  265. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f649350396b8f14e079a1646de95a5e490c709748fcd989a603afad3a7044898.json +0 -0
  266. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f68a4af4ef4d24cc0416195c9b123d0cb4f6811c08554914866d4a86835dab24.json +0 -0
  267. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/f9ee28f629cd46d9b44cdd1dfa64aadb0231af8002093266902d90e1f2f9fc88.json +0 -0
  268. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/faabe069e0568dabcc65124f0fa7d56e3ddfadf62523fc3f208ee4ad11c46f8d.json +0 -0
  269. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/fe209b7393dc29439e121809022e793527d4208c2957d479e9f0706d4ba357e0.json +0 -0
  270. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/ast/fe674973c21bca43da88fbeadc8361422a28aeb4d9eaca2db7d40f99a04d5608.json +0 -0
  271. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/cache/stat-index.json +0 -0
  272. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/graph.html +0 -0
  273. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/graph.json +0 -0
  274. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/manifest.json +0 -0
  275. {py_teststand-0.2.2 → py_teststand-0.2.3}/graphify-out/merged-graph.json +0 -0
  276. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/__init__.py +0 -0
  277. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/activex.py +0 -0
  278. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/cvi.py +0 -0
  279. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/dll.py +0 -0
  280. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/htbasic.py +0 -0
  281. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/adapters/python.py +0 -0
  282. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/__init__.py +0 -0
  283. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/analysis_context.py +0 -0
  284. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/analysis_message.py +0 -0
  285. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/analysis_utilities.py +0 -0
  286. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/rule.py +0 -0
  287. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/rule_setting_values.py +0 -0
  288. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/analyzer/types.py +0 -0
  289. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/__init__.py +0 -0
  290. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/engine/__init__.py +0 -0
  291. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/engine/enums.py +0 -0
  292. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/exceptions.py +0 -0
  293. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/external_report_viewers.py +0 -0
  294. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/file_information.py +0 -0
  295. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/images.py +0 -0
  296. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/search.py +0 -0
  297. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/core/utility.py +0 -0
  298. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/__init__.py +0 -0
  299. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/additional_results.py +0 -0
  300. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/breakpoint.py +0 -0
  301. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/database_options.py +0 -0
  302. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/edit_args.py +0 -0
  303. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/execution.py +0 -0
  304. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/interactive_args.py +0 -0
  305. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/output_record_stream.py +0 -0
  306. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/report.py +0 -0
  307. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/result_log.py +0 -0
  308. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/thread.py +0 -0
  309. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/execution/watch_expression.py +0 -0
  310. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ext/__init__.py +0 -0
  311. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ext/events.py +0 -0
  312. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ext/step_types.py +0 -0
  313. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/messaging/__init__.py +0 -0
  314. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/messaging/output_message.py +0 -0
  315. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/messaging/output_messages.py +0 -0
  316. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/messaging/ui_message.py +0 -0
  317. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/property/__init__.py +0 -0
  318. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/property/array_dimensions.py +0 -0
  319. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/property/data_type.py +0 -0
  320. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/property/property_object_file.py +0 -0
  321. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/py.typed +0 -0
  322. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/__init__.py +0 -0
  323. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/expression.py +0 -0
  324. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/location.py +0 -0
  325. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/sequence.py +0 -0
  326. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/sequence_context.py +0 -0
  327. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/step.py +0 -0
  328. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/step_group.py +0 -0
  329. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/sequence/type_palette.py +0 -0
  330. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/station/__init__.py +0 -0
  331. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/station/search_directories.py +0 -0
  332. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/station/station_options.py +0 -0
  333. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/__init__.py +0 -0
  334. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/application_manager.py +0 -0
  335. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/button_ctrl.py +0 -0
  336. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/checkbox_ctrl.py +0 -0
  337. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/combobox_ctrl.py +0 -0
  338. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/command.py +0 -0
  339. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/connections.py +0 -0
  340. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/entry_point.py +0 -0
  341. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/execution_view_manager.py +0 -0
  342. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/expression_edit_ctrl.py +0 -0
  343. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/insertion_palette.py +0 -0
  344. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/label_ctrl.py +0 -0
  345. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/list_box_ctrl.py +0 -0
  346. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/listbar_ctrl.py +0 -0
  347. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/menu_item.py +0 -0
  348. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/report_view_ctrl.py +0 -0
  349. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/sequence_file_view_manager.py +0 -0
  350. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/sequence_view_ctrl.py +0 -0
  351. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/status_bar.py +0 -0
  352. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/styles.py +0 -0
  353. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/ui/variables_view_ctrl.py +0 -0
  354. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/undo/__init__.py +0 -0
  355. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/undo/undo_item.py +0 -0
  356. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/undo/undo_item_creator.py +0 -0
  357. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/undo/undo_stack.py +0 -0
  358. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/users/__init__.py +0 -0
  359. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/users/user.py +0 -0
  360. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/users/users_file.py +0 -0
  361. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/workspace/__init__.py +0 -0
  362. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/workspace/workspace_file.py +0 -0
  363. {py_teststand-0.2.2 → py_teststand-0.2.3}/src/py_teststand/workspace/workspace_object.py +0 -0
  364. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/__init__.py +0 -0
  365. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/conftest.py +0 -0
  366. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/_ui_message_stress.py +0 -0
  367. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/test_api_compatibility.py +0 -0
  368. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/test_examples.py +0 -0
  369. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/test_memory_leaks.py +0 -0
  370. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/test_property_object_serialize.py +0 -0
  371. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/integration/test_ui_messages.py +0 -0
  372. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/test_core.py +0 -0
  373. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/__init__.py +0 -0
  374. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/adapters/test_activex_adapter.py +0 -0
  375. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/adapters/test_dotnet_adapter.py +0 -0
  376. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/adapters/test_labview_adapter.py +0 -0
  377. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/adapters/test_python_adapter.py +0 -0
  378. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/analyzer/__init__.py +0 -0
  379. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/analyzer/test_rule_authoring.py +0 -0
  380. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/__init__.py +0 -0
  381. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_engine.py +0 -0
  382. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_enums.py +0 -0
  383. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_errors.py +0 -0
  384. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_expression.py +0 -0
  385. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_property_object_file.py +0 -0
  386. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_sequence.py +0 -0
  387. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_sequence_file.py +0 -0
  388. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/core/test_step.py +0 -0
  389. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/execution/test_database_options.py +0 -0
  390. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/execution/test_execution.py +0 -0
  391. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/sequence/test_sequence.py +0 -0
  392. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/sequence/test_sequence_file.py +0 -0
  393. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/test_com_contract.py +0 -0
  394. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/test_core_mechanics.py +0 -0
  395. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/test_lifecycle.py +0 -0
  396. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/ui/test_events.py +0 -0
  397. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/ui/test_execution_view_manager.py +0 -0
  398. {py_teststand-0.2.2 → py_teststand-0.2.3}/tests/unit/ui/test_sequence_file_view_manager.py +0 -0
  399. {py_teststand-0.2.2 → py_teststand-0.2.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: py-teststand
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Community object-oriented Python 3 bindings for the National Instruments TestStand™ COM API
5
5
  Project-URL: Repository, https://github.com/TheDomcio/py-teststand
6
6
  Project-URL: Issues, https://github.com/TheDomcio/py-teststand/issues
@@ -37,7 +37,7 @@ MAXIMUM_STEP_NAME_LENGTH = 15
37
37
  transitions=(AnalysisTransition.BeforeStep,),
38
38
  severity=RuleSeverity.Warning,
39
39
  )
40
- def check_step_name_length(context: Any) -> None:
40
+ def check_step_name_length(context: Any) -> None: # noqa: ANN401
41
41
  """Report any step whose name is longer than MAXIMUM_STEP_NAME_LENGTH."""
42
42
  step: Any = context.object
43
43
  name: Any = step.name
@@ -51,7 +51,7 @@ def check_step_name_length(context: Any) -> None:
51
51
 
52
52
 
53
53
  class _Violation:
54
- def __init__(self, rule_id: str, text: str, location: Any) -> None:
54
+ def __init__(self, rule_id: str, text: str, location: Any) -> None: # noqa: ANN401
55
55
  self.rule_id: str = rule_id
56
56
  self.text: str = text
57
57
  self.location: Any = location
@@ -65,12 +65,12 @@ class _OfflineStepContext:
65
65
  py_teststand.analyzer.AnalysisContext instead, whose `object` is the step.
66
66
  """
67
67
 
68
- def __init__(self, analyzed_object: Any) -> None:
68
+ def __init__(self, analyzed_object: Any) -> None: # noqa: ANN401
69
69
  self.object: Any = analyzed_object
70
70
  self.transition = AnalysisTransition.BeforeStep
71
71
  self.findings: list[_Violation] = []
72
72
 
73
- def report(self, rule_id: str, text: str, location_object: Any = None) -> None:
73
+ def report(self, rule_id: str, text: str, location_object: Any = None) -> None: # noqa: ANN401
74
74
  self.findings.append(_Violation(rule_id, text, location_object))
75
75
 
76
76
 
@@ -26,7 +26,7 @@ INSERT_IF_MISSING = int(PropertyOption.InsertIfMissing)
26
26
  ROOT_TEMP_DIR = Path(tempfile.gettempdir()) / "py-teststand"
27
27
 
28
28
 
29
- def property_object_to_dict(container: Any) -> dict[str, Any]:
29
+ def property_object_to_dict(container: Any) -> dict[str, Any]: # noqa: ANN401
30
30
  """Walk a container PropertyObject's sub-properties into a plain dict."""
31
31
  result: dict[str, Any] = {}
32
32
  for index in range(container.get_num_sub_properties("")):
@@ -35,7 +35,7 @@ def property_object_to_dict(container: Any) -> dict[str, Any]:
35
35
  return result
36
36
 
37
37
 
38
- def _to_python(obj: Any) -> Any:
38
+ def _to_python(obj: Any) -> Any: # noqa: ANN401
39
39
  """Convert one sub-property object to a list (array), dict (container), or scalar."""
40
40
  value_type, _is_object, is_array, _type_name = obj.get_type("")
41
41
  if is_array:
@@ -52,7 +52,7 @@ def _to_python(obj: Any) -> Any:
52
52
  return obj.get_val_string("", 0)
53
53
 
54
54
 
55
- def dict_to_property_object(engine: Engine, data: dict[str, Any], container: Any = None) -> Any:
55
+ def dict_to_property_object(engine: Engine, data: dict[str, Any], container: Any = None) -> Any: # noqa: ANN401
56
56
  """Rebuild a container PropertyObject from a dict produced by the walk above."""
57
57
  if container is None:
58
58
  container = engine.new_property_object(PropValType.Container, False, "", 0)
@@ -61,7 +61,7 @@ def dict_to_property_object(engine: Engine, data: dict[str, Any], container: Any
61
61
  return container
62
62
 
63
63
 
64
- def _set_member(engine: Engine, container: Any, name: str, value: Any) -> None:
64
+ def _set_member(engine: Engine, container: Any, name: str, value: Any) -> None: # noqa: ANN401
65
65
  """Create one sub-property (container, array, or scalar) from a Python value."""
66
66
  if isinstance(value, dict):
67
67
  container.new_sub_property(name, PropValType.Container, False, "", INSERT_IF_MISSING)
@@ -101,14 +101,14 @@ def _element_type(items: list[Any]) -> PropValType:
101
101
  return PropValType.String
102
102
 
103
103
 
104
- def _child(container: Any, name: str) -> Any:
104
+ def _child(container: Any, name: str) -> Any: # noqa: ANN401
105
105
  """Fetch a sub-property object, asserting it exists (keeps type-checkers happy)."""
106
106
  obj = container.get_property_object(name, 0)
107
107
  assert obj is not None
108
108
  return obj
109
109
 
110
110
 
111
- def _build_example_container(engine: Engine) -> Any:
111
+ def _build_example_container(engine: Engine) -> Any: # noqa: ANN401
112
112
  """Scalars, a scalar array, a nested DigitalMultimeter container, and an array of them."""
113
113
  data = engine.new_property_object(PropValType.Container, False, "", 0)
114
114
  data.set_val_number("TestResult", INSERT_IF_MISSING, 0.0)
@@ -138,7 +138,7 @@ def _build_example_container(engine: Engine) -> Any:
138
138
  return data
139
139
 
140
140
 
141
- def _child_by_offset(array: Any, offset: int) -> Any:
141
+ def _child_by_offset(array: Any, offset: int) -> Any: # noqa: ANN401
142
142
  """Fetch an array element object, asserting it exists (keeps type-checkers happy)."""
143
143
  element = array.get_property_object_by_offset(offset, 0)
144
144
  assert element is not None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "py-teststand"
3
- version = "0.2.2"
3
+ version = "0.2.3"
4
4
  description = "Community object-oriented Python 3 bindings for the National Instruments TestStand™ COM API"
5
5
  readme = "README.md"
6
6
  # Last supported by uv 0.11.15 (3cffe97c2 2026-05-18 x86_64-pc-windows-msvc)
@@ -132,6 +132,12 @@ url = "https://test.pypi.org/simple/"
132
132
  publish-url = "https://test.pypi.org/legacy/"
133
133
  explicit = true
134
134
 
135
+ [tool.pyrefly]
136
+ project-includes = [
137
+ "**/*.py*",
138
+ "**/*.ipynb",
139
+ ]
140
+
135
141
  [[tool.uv.index]]
136
142
  name = "pypi"
137
143
  url = "https://pypi.org/simple"
@@ -55,7 +55,9 @@ from .core.com_wrapper import COMWrapper, ts_interface # noqa: F401
55
55
  from .core.engine import (
56
56
  AdapterKeyName,
57
57
  AllowAutomaticTypeConflictResolution,
58
+ ConflictHandler,
58
59
  ConflictResolution,
60
+ DefaultModelCallback,
59
61
  EditKind,
60
62
  Engine,
61
63
  FindFilePromptOption,
@@ -153,7 +155,7 @@ from .property.property_object_file import (
153
155
  from .sequence.code_template import CodeTemplate, CodeTemplates
154
156
  from .sequence.expression import EvaluationType, Expression
155
157
  from .sequence.location import AutoCreateVariableLocation, Location, Locations
156
- from .sequence.sequence import Sequence
158
+ from .sequence.sequence import Sequence, SequenceFileType, SequenceType
157
159
  from .sequence.sequence_context import SequenceContext
158
160
  from .sequence.sequence_file import SequenceFile
159
161
  from .sequence.step import RunMode, Step
@@ -209,12 +211,14 @@ __all__ = [
209
211
  "CheckedState",
210
212
  "CodeTemplate",
211
213
  "CodeTemplates",
214
+ "ConflictHandler",
212
215
  "ConflictResolution",
213
216
  "DLLAdapter",
214
217
  "DLLModule",
215
218
  "DataType",
216
219
  "DatabaseLogOptions",
217
220
  "DebugOption",
221
+ "DefaultModelCallback",
218
222
  "DeploymentError",
219
223
  "DotNetAdapter",
220
224
  "DotNetModule",
@@ -314,8 +318,10 @@ __all__ = [
314
318
  "SequenceContext",
315
319
  "SequenceFile",
316
320
  "SequenceFileLoadError",
321
+ "SequenceFileType",
317
322
  "SequenceFileViewManager",
318
323
  "SequenceTerminatedError",
324
+ "SequenceType",
319
325
  "SequenceValidationError",
320
326
  "SourceControlCommand",
321
327
  "SourceControlCommandOption",
@@ -97,6 +97,10 @@ class Adapter(PropertyObject):
97
97
  def name(self) -> str:
98
98
  return self.key_name
99
99
 
100
+ @name.setter
101
+ def name(self, value: str) -> None: # noqa: ARG002
102
+ raise AttributeError("name is read-only on Adapter")
103
+
100
104
  @property
101
105
  @ts_interface
102
106
  def key_name(self) -> str:
@@ -525,16 +529,6 @@ class Module(PropertyObject):
525
529
 
526
530
  return SequenceCallModule(self._com_obj, self._engine_ref)
527
531
 
528
- @property
529
- @ts_interface
530
- def comment(self) -> str:
531
- return str(self._com_obj.Comment)
532
-
533
- @property
534
- @ts_interface
535
- def name(self) -> str:
536
- return str(self._com_obj.Name)
537
-
538
532
  @property
539
533
  @ts_interface
540
534
  def description(self) -> str:
@@ -908,8 +908,9 @@ class DotNetParameter(PropertyObject):
908
908
  return DotNetParameters(self._com_obj.Elements, self._engine_ref)
909
909
 
910
910
  @ts_interface
911
- def display_create_custom_data_type_dialog(self, sequence_context: bool) -> typing.Any: # noqa: ANN401
912
- return bool(self._com_obj.DisplayCreateCustomDataTypeDialog(sequence_context._com_obj))
911
+ def display_create_custom_data_type_dialog(self, sequence_context: typing.Any) -> typing.Any: # noqa: ANN401
912
+ raw_ctx = getattr(sequence_context, "_com_obj", sequence_context)
913
+ return bool(self._com_obj.DisplayCreateCustomDataTypeDialog(raw_ctx))
913
914
 
914
915
  @property
915
916
  @ts_interface
@@ -960,6 +961,11 @@ class DotNetParameter(PropertyObject):
960
961
  def name(self) -> str:
961
962
  return str(self._com_obj.Name)
962
963
 
964
+ @name.setter
965
+ @ts_interface
966
+ def name(self, value: str) -> None: # noqa: ARG002
967
+ raise AttributeError("name is read-only on DotNetParameter")
968
+
963
969
  @property
964
970
  @ts_interface
965
971
  def parameter_name(self) -> str:
@@ -1050,6 +1050,11 @@ class LabVIEWParameter(PropertyObject):
1050
1050
  def array_element_prototype(self) -> typing.Any: # noqa: ANN401
1051
1051
  return self._com_obj.ArrayElementPrototype
1052
1052
 
1053
+ @array_element_prototype.setter
1054
+ @ts_interface
1055
+ def array_element_prototype(self, value: typing.Any) -> None: # noqa: ANN401, ARG002
1056
+ raise AttributeError("array_element_prototype is read-only")
1057
+
1053
1058
  @ts_interface
1054
1059
  def as_property_object(self) -> PropertyObject:
1055
1060
  return PropertyObject(self._com_obj.AsPropertyObject(), self._engine_ref)
@@ -1258,6 +1263,11 @@ class LabVIEWParameterElement(PropertyObject):
1258
1263
  def array_element_prototype(self) -> typing.Any: # noqa: ANN401
1259
1264
  return self._com_obj.ArrayElementPrototype
1260
1265
 
1266
+ @array_element_prototype.setter
1267
+ @ts_interface
1268
+ def array_element_prototype(self, value: typing.Any) -> None: # noqa: ANN401, ARG002
1269
+ raise AttributeError("array_element_prototype is read-only")
1270
+
1261
1271
  @ts_interface
1262
1272
  def as_property_object(self) -> PropertyObject:
1263
1273
  return PropertyObject(self._com_obj.AsPropertyObject(), self._engine_ref)
@@ -348,7 +348,7 @@ class LabVIEWNXGModule(Module):
348
348
  self._com_obj.GLLPath = str(value)
349
349
 
350
350
  @ts_interface
351
- def have_properties_changed(self, options: int = 0) -> bool:
351
+ def have_properties_changed(self, options: int = 0) -> tuple[bool, list[typing.Any]]:
352
352
  result = self._com_obj.HavePropertiesChanged(None, int(options))
353
353
  if isinstance(result, tuple) and len(result) >= 2:
354
354
  return bool(result[0]), list(result[1])
@@ -458,6 +458,11 @@ class LabVIEWNXGProject(PropertyObject):
458
458
  def name(self) -> str:
459
459
  return str(self._com_obj.Name)
460
460
 
461
+ @name.setter
462
+ @ts_interface
463
+ def name(self, value: str) -> None: # noqa: ARG002
464
+ raise AttributeError("name is read-only on LabVIEWNXGProject")
465
+
461
466
 
462
467
  class LabVIEWNXGProjectItems(PropertyObject):
463
468
  @property
@@ -640,6 +645,11 @@ class LabVIEWNXGParameter(PropertyObject):
640
645
  def array_element_prototype(self) -> LabVIEWNXGParameter:
641
646
  return LabVIEWNXGParameter(self._com_obj.ArrayElementPrototype, self._engine_ref)
642
647
 
648
+ @array_element_prototype.setter
649
+ @ts_interface
650
+ def array_element_prototype(self, value: typing.Any) -> None: # noqa: ANN401, ARG002
651
+ raise AttributeError("array_element_prototype is read-only")
652
+
643
653
  @ts_interface
644
654
  def as_property_object(self) -> PropertyObject:
645
655
  return PropertyObject(self._com_obj.AsPropertyObject(), self._engine_ref)
@@ -305,6 +305,11 @@ class SequenceCallParameter(PropertyObject):
305
305
  def name(self) -> str:
306
306
  return str(self._com_obj.Name)
307
307
 
308
+ @name.setter
309
+ @ts_interface
310
+ def name(self, value: str) -> None: # noqa: ARG002
311
+ raise AttributeError("name is read-only on SequenceCallParameter")
312
+
308
313
  @property
309
314
  @ts_interface
310
315
  def type(self) -> int:
@@ -1,5 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import typing
4
+
3
5
  from py_teststand.analyzer.rule import RuleSeverity
4
6
  from py_teststand.analyzer.rule_setting_values import RuleSettingValues
5
7
  from py_teststand.core.com_wrapper import ts_interface
@@ -56,8 +58,10 @@ class RuleConfiguration(PropertyObject):
56
58
  class RuleConfigurationContext(PropertyObject):
57
59
  @property
58
60
  @ts_interface
59
- def engine(self) -> PropertyObject:
60
- return PropertyObject(self._com_obj.Engine, self._engine_ref)
61
+ def engine(self) -> typing.Any: # noqa: ANN401
62
+ from py_teststand.core.engine.engine import Engine
63
+
64
+ return Engine(self._com_obj.Engine)
61
65
 
62
66
  @property
63
67
  @ts_interface
@@ -122,6 +122,7 @@ def ts_interface(func: T) -> T:
122
122
 
123
123
  class COMWrapper:
124
124
  _com_obj: COM
125
+ _engine_ref: typing.Callable[[], Engine | typing.Any | None]
125
126
 
126
127
  def __init__(self, com_obj: COM, engine: Engine | typing.Any | None = None) -> None: # noqa: ANN401
127
128
 
@@ -789,6 +789,8 @@ class Engine(COMWrapper):
789
789
  int(dlg_options),
790
790
  selected_item_com,
791
791
  )
792
+ from py_teststand.execution.breakpoint import SelectedBreakpointItem
793
+
792
794
  item = SelectedBreakpointItem(selected_item_com, self) if selected_item_com else None
793
795
  return bool(result), item
794
796
 
@@ -1700,7 +1702,7 @@ class Engine(COMWrapper):
1700
1702
  return OutputMessages(self._engine.GetOutputMessages(), self)
1701
1703
 
1702
1704
  @ts_interface
1703
- def get_product_registration_info(self) -> bool:
1705
+ def get_product_registration_info(self) -> tuple[bool, str, str, str]:
1704
1706
  user_out = ""
1705
1707
  company_out = ""
1706
1708
  serial_out = ""
@@ -1845,7 +1847,7 @@ class Engine(COMWrapper):
1845
1847
  )
1846
1848
 
1847
1849
  @ts_interface
1848
- def get_tool_menu_item_info_with_id(self, unique_item_id: int) -> str:
1850
+ def get_tool_menu_item_info_with_id(self, unique_item_id: int) -> tuple[str, int, bool]:
1849
1851
  item_text_out = ""
1850
1852
  sub_menu_index_out = 0
1851
1853
  enabled_out = False
@@ -167,7 +167,7 @@ class Mutex(SyncObject):
167
167
  self._com_obj.EarlyUnlockMutexEx(com_context, thread_id)
168
168
 
169
169
  @ts_interface
170
- def get_saved_owner_info(self) -> str:
170
+ def get_saved_owner_info(self) -> tuple[str, str, SyncManager]:
171
171
  res = self._com_obj.GetSavedOwnerInfo()
172
172
  return str(res[0]), str(res[1]), SyncManager(res[2], self._engine_ref)
173
173
 
@@ -180,7 +180,7 @@ class Mutex(SyncObject):
180
180
  return int(self._com_obj.GetInfo())
181
181
 
182
182
  @ts_interface
183
- def get_info_ex(self) -> int:
183
+ def get_info_ex(self) -> tuple[int, int, str]:
184
184
  res = self._com_obj.GetInfoEx()
185
185
  return int(res[0]), int(res[1]), str(res[2])
186
186
 
@@ -216,7 +216,7 @@ class Semaphore(SyncObject):
216
216
  return AutoReleaser(res[0], self._engine_ref), WaitResult(res[1])
217
217
 
218
218
  @ts_interface
219
- def get_info(self) -> int:
219
+ def get_info(self) -> tuple[int, int, int, int]:
220
220
  res = self._com_obj.GetInfo()
221
221
  return int(res[0]), int(res[1]), int(res[2]), int(res[3])
222
222
 
@@ -262,7 +262,7 @@ class Batch(SyncObject):
262
262
  return [Thread(t, self._engine_ref) for t in com_threads]
263
263
 
264
264
  @ts_interface
265
- def get_info(self) -> int:
265
+ def get_info(self) -> tuple[int, int]:
266
266
  res = self._com_obj.GetInfo()
267
267
  return int(res[0]), int(res[1])
268
268
 
@@ -377,7 +377,7 @@ class Notification(SyncObject):
377
377
  self._com_obj.ClearEx(com_context)
378
378
 
379
379
  @ts_interface
380
- def get_info(self) -> int:
380
+ def get_info(self) -> tuple[int, bool]:
381
381
  res = self._com_obj.GetInfo()
382
382
  return int(res[0]), bool(res[1])
383
383
 
@@ -453,7 +453,7 @@ class Notification(SyncObject):
453
453
 
454
454
  class Rendezvous(SyncObject):
455
455
  @ts_interface
456
- def get_info(self) -> int:
456
+ def get_info(self) -> tuple[int, int]:
457
457
  res = self._com_obj.GetInfo()
458
458
  return int(res[0]), int(res[1])
459
459
 
@@ -531,7 +531,7 @@ class Queue(SyncObject):
531
531
  return list(self._com_obj.Flush(com_context))
532
532
 
533
533
  @ts_interface
534
- def get_info(self) -> int:
534
+ def get_info(self) -> tuple[int, int, int]:
535
535
  res = self._com_obj.GetInfo()
536
536
  return int(res[0]), int(res[1]), int(res[2])
537
537
 
@@ -729,12 +729,12 @@ class SyncManager(COMWrapper):
729
729
  return SyncObject(res, self._engine_ref)
730
730
 
731
731
  @ts_interface
732
- def get_mutex_owner_info(self, mutex_name: str) -> str:
732
+ def get_mutex_owner_info(self, mutex_name: str) -> tuple[str, str, SyncManager]:
733
733
  res = self._com_obj.GetMutexOwnerInfo(mutex_name)
734
734
  return str(res[0]), str(res[1]), SyncManager(res[2], self._engine_ref)
735
735
 
736
736
  @ts_interface
737
- def get_lock_mutex_thread_is_waiting_for(self, thread_id: str) -> str:
737
+ def get_lock_mutex_thread_is_waiting_for(self, thread_id: str) -> tuple[str, SyncManager]:
738
738
  res = self._com_obj.GetLockMutexThreadIsWaitingFor(thread_id)
739
739
  return str(res[0]), SyncManager(res[1], self._engine_ref)
740
740
 
@@ -387,7 +387,7 @@ class PropertyObject(COMWrapper):
387
387
  except Exception:
388
388
  value = tuple(typing.cast("typing.Any", value))
389
389
  elif isinstance(value, datetime.datetime) and pywintypes is not None:
390
- value = pywintypes.Time(value)
390
+ value = pywintypes.Time(typing.cast("typing.Any", value))
391
391
  self._property_object.SetValVariant(lookup_string, options, value)
392
392
 
393
393
  @ts_interface
@@ -533,7 +533,7 @@ class PropertyObject(COMWrapper):
533
533
  return bool(self._property_object.Exists(lookup_string, options))
534
534
 
535
535
  @ts_interface
536
- def validate_new_name(self, new_name: str, allow_duplicates: bool = False) -> bool:
536
+ def validate_new_name(self, new_name: str, allow_duplicates: bool = False) -> tuple[bool, str]:
537
537
  res = self._property_object.ValidateNewName(new_name, allow_duplicates)
538
538
  if isinstance(res, tuple) and len(res) >= 2:
539
539
  return bool(res[1]), str(res[0])
@@ -553,13 +553,12 @@ class PropertyObject(COMWrapper):
553
553
  @property
554
554
  @ts_interface
555
555
  def name(self) -> str:
556
- return str(getattr(self._com_obj, "Name", ""))
556
+ return str(self._property_object.Name)
557
557
 
558
558
  @name.setter
559
559
  @ts_interface
560
560
  def name(self, value: str) -> None:
561
- if hasattr(self._com_obj, "Name"):
562
- self._com_obj.Name = value
561
+ self._property_object.Name = value
563
562
 
564
563
  @functools.cached_property
565
564
  @ts_interface
@@ -837,7 +836,7 @@ class PropertyObject(COMWrapper):
837
836
  except Exception:
838
837
  value = value
839
838
  elif isinstance(value, datetime.datetime) and pywintypes is not None:
840
- value = pywintypes.Time(value)
839
+ value = pywintypes.Time(typing.cast("typing.Any", value))
841
840
  self._property_object.SetValVariantByOffset(array_offset, options, value)
842
841
 
843
842
  @ts_interface
@@ -31,6 +31,11 @@ class CodeTemplate(PropertyObject):
31
31
  def name(self) -> str:
32
32
  return str(self._com_obj.Name)
33
33
 
34
+ @name.setter
35
+ @ts_interface
36
+ def name(self, value: str) -> None: # noqa: ARG002
37
+ raise AttributeError("name is read-only on CodeTemplate")
38
+
34
39
  @property
35
40
  @ts_interface
36
41
  def description(self) -> str:
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import functools
4
4
  import typing
5
- import weakref
6
5
  from enum import Enum, IntEnum
7
6
  from typing import TYPE_CHECKING
8
7
 
@@ -112,12 +111,7 @@ class SequenceCollection:
112
111
  class SequenceFile(PropertyObjectFile):
113
112
  def __init__(self, com_obj: typing.Any, engine: Engine | typing.Any | None = None) -> None: # noqa: ANN401
114
113
 
115
- super().__init__(com_obj)
116
- self._engine_ref = (
117
- engine
118
- if isinstance(engine, weakref.ReferenceType) or engine is None
119
- else weakref.ref(engine)
120
- )
114
+ super().__init__(com_obj, engine)
121
115
 
122
116
  def __enter__(self) -> SequenceFile:
123
117
 
@@ -211,7 +205,12 @@ class SequenceFile(PropertyObjectFile):
211
205
  @property
212
206
  @ts_interface
213
207
  def change_count(self) -> int:
214
- return int(self._com_obj.ChangeCount)
208
+ return int(self.as_property_object_file().change_count)
209
+
210
+ @change_count.setter
211
+ @ts_interface
212
+ def change_count(self, value: int) -> None:
213
+ self.as_property_object_file().change_count = value
215
214
 
216
215
  @property
217
216
  @ts_interface
@@ -367,7 +366,11 @@ class SequenceFile(PropertyObjectFile):
367
366
  )
368
367
 
369
368
  @ts_interface
370
- def load_modules(self, options: int = 0, context: bool | None = None) -> typing.Any: # noqa: ANN401
369
+ def load_modules(
370
+ self,
371
+ options: int = 0,
372
+ context: typing.Any | None = None, # noqa: ANN401
373
+ ) -> typing.Any: # noqa: ANN401
371
374
  ctx_com = getattr(context, "_com_obj", context)
372
375
  return bool(self._com_obj.LoadModules(int(options), ctx_com))
373
376
 
@@ -27,7 +27,6 @@ class StepType(PropertyObject):
27
27
 
28
28
  super().__init__(com_obj, engine_ref)
29
29
 
30
- @property
31
30
  @ts_interface
32
31
  def as_property_object(self) -> PropertyObject:
33
32
  return PropertyObject(self._com_obj, self._engine_ref)
@@ -148,7 +148,7 @@ class ApplicationMgrEventsSink(UIEventSink):
148
148
 
149
149
  def on_query_reload_sequence_file(
150
150
  self,
151
- file: typing.Any,
151
+ file: typing.Any, # noqa: ANN401
152
152
  reload_option: typing.Any, # noqa: ANN401
153
153
  ) -> typing.Any: # noqa: ANN401
154
154
  try:
@@ -222,8 +222,8 @@ class ApplicationMgrEventsSink(UIEventSink):
222
222
 
223
223
  def on_query_close_execution(
224
224
  self,
225
- execution: typing.Any,
226
- run_state: typing.Any,
225
+ execution: typing.Any, # noqa: ANN401
226
+ run_state: typing.Any, # noqa: ANN401
227
227
  option: typing.Any, # noqa: ANN401
228
228
  ) -> typing.Any: # noqa: ANN401
229
229
  try:
@@ -359,8 +359,8 @@ class ApplicationMgrEventsSink(UIEventSink):
359
359
 
360
360
  def on_break(
361
361
  self,
362
- execution: typing.Any,
363
- thread: typing.Any,
362
+ execution: typing.Any, # noqa: ANN401
363
+ thread: typing.Any, # noqa: ANN401
364
364
  sequence_context: typing.Any, # noqa: ANN401
365
365
  ) -> typing.Any: # noqa: ANN401
366
366
  try:
@@ -496,8 +496,8 @@ class ExecutionViewMgrEventsSink(UIEventSink):
496
496
 
497
497
  def on_break(
498
498
  self,
499
- execution: typing.Any,
500
- thread: typing.Any,
499
+ execution: typing.Any, # noqa: ANN401
500
+ thread: typing.Any, # noqa: ANN401
501
501
  sequence_context: typing.Any, # noqa: ANN401
502
502
  ) -> typing.Any: # noqa: ANN401
503
503
  try:
@@ -507,8 +507,8 @@ class ExecutionViewMgrEventsSink(UIEventSink):
507
507
 
508
508
  def on_trace(
509
509
  self,
510
- execution: typing.Any,
511
- thread: typing.Any,
510
+ execution: typing.Any, # noqa: ANN401
511
+ thread: typing.Any, # noqa: ANN401
512
512
  sequence_context: typing.Any, # noqa: ANN401
513
513
  ) -> typing.Any: # noqa: ANN401
514
514
  try:
@@ -0,0 +1,52 @@
1
+ import importlib
2
+ import inspect
3
+ import pkgutil
4
+ import warnings
5
+ from enum import Enum
6
+
7
+ import py_teststand
8
+ from py_teststand.core.com_wrapper import COMWrapper
9
+
10
+
11
+ def test_public_api_exports_all_classes() -> None:
12
+ """Ensure that all public COM wrappers and Enums are exported in the root __init__.py."""
13
+ missing_exports: list[str] = []
14
+
15
+ package = py_teststand
16
+ prefix = package.__name__ + "."
17
+
18
+ for _importer, modname, _ispkg in pkgutil.walk_packages(package.__path__, prefix):
19
+ if "tests" in modname or "conftest" in modname:
20
+ continue
21
+
22
+ with warnings.catch_warnings():
23
+ warnings.simplefilter("ignore")
24
+ try:
25
+ module = importlib.import_module(modname)
26
+ except Exception:
27
+ continue
28
+
29
+ for name, obj in inspect.getmembers(module):
30
+ if name.startswith("_"):
31
+ continue
32
+
33
+ # Only consider classes defined in py_teststand (not imported from outside)
34
+ if inspect.isclass(obj) and getattr(obj, "__module__", "").startswith("py_teststand"):
35
+ if issubclass(obj, (COMWrapper, Enum)):
36
+ if name not in py_teststand.__all__:
37
+ missing_exports.append(f"{name} (from {obj.__module__})")
38
+
39
+ missing_exports = sorted(set(missing_exports))
40
+
41
+ # Exceptions that are purposefully not in __all__
42
+ # (add to this list if there are actual internal classes that shouldn't be exposed)
43
+ allowed_missing = {
44
+ "BaseAdapter (from py_teststand.adapters.adapter)",
45
+ "UIMessageHandler (from py_teststand.ext.events)",
46
+ }
47
+
48
+ missing_exports = [m for m in missing_exports if m not in allowed_missing]
49
+
50
+ assert not missing_exports, (
51
+ f"Missing exports in py_teststand.__init__.__all__: {missing_exports}"
52
+ )
File without changes
File without changes
File without changes
File without changes
File without changes