py-teststand 0.2.2__tar.gz → 0.3.0__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.
- {py_teststand-0.2.2 → py_teststand-0.3.0}/CLAUDE.md +6 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/GEMINI.md +3 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/PKG-INFO +4 -3
- {py_teststand-0.2.2 → py_teststand-0.3.0}/README.md +3 -2
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/analyzer_step_name_length.py +4 -4
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/execution_run_subsequence.py +4 -9
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/execution_run_test_headless.py +9 -9
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/launch_all_examples.py +1 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/property_object_serialize.py +7 -7
- py_teststand-0.3.0/examples/result_list_parse.py +75 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/pyproject.toml +33 -5
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/__init__.py +11 -1
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/adapter.py +4 -10
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/dotnet.py +8 -2
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/labview.py +10 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/labview_nxg.py +11 -1
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/sequence.py +5 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/rule_configuration.py +6 -2
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/com_wrapper.py +1 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/engine/engine.py +4 -2
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/execution.py +8 -0
- py_teststand-0.3.0/src/py_teststand/execution/result_list.py +218 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/sync_manager.py +9 -9
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/property/property_object.py +5 -6
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/code_template.py +5 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/sequence_context.py +8 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/sequence_file.py +12 -9
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/step_type.py +0 -1
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/events.py +9 -9
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/test_examples.py +20 -0
- py_teststand-0.3.0/tests/integration/test_result_list_live.py +76 -0
- py_teststand-0.3.0/tests/unit/execution/test_result_list.py +151 -0
- py_teststand-0.3.0/tests/unit/test_public_api.py +52 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/uv.lock +137 -152
- {py_teststand-0.2.2 → py_teststand-0.3.0}/.gitignore +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/.markdownlint-cli2.jsonc +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/.python-version +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/LICENSE +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/data_type_manage.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/search_directory_manage.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/sequence_build.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/station_options_update.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/step_insert.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/step_insert_from_template.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/ui_messages_handle.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/users_manage.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/variables_manage.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/examples/workspace_create.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/.graphify_labels.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/.graphify_python +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/.graphify_root +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/.graphify_uncached.txt +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/GRAPH_REPORT.md +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/00300beaf41ddf8ca88a2133f315f9873877e388dfadf2343bc93ad9ec7189af.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0041043937ad3008273915d37b7f4b2d48ca2c4612d45ae3f8cd0cb931b90f9f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/021c67591ed36baaccec5597b1aaa5da45a3d107860151d0c14da8d8e82d13fe.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/023707fc22c5dae0fe050b058cef36e8166178bd19bf64c19d1d5769193e0b66.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/040ee1db9c6b7f496603e954cded103cc0a695fdff0107104d1971e6bd77fa80.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/05037a9ec557a4372515feea0cb82e6b8112ac7c5e298565964fbd270f96bb55.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0524858e50a4d2f7d2ac92c57ca3c87df637bf4c3158c7092a413e4393c857a4.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/05547b7aeeb2f4a7f5f21a8e7104b9116d781c941b744c43b0ea6c82e21b5fdd.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0561a3660d3619ac6a5591c0657208ef1151afc18df8f2fd6f97de8670d8eb60.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/057056cc111fdb36b69e58f64079572f5c47872e0727d1ad3dfc0f35e7d39a4f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/057e562996ba53b27fd80676787dca1563c48de754f9cd7932562ae64c3b5489.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/064e97d62db5d77399540dec673d05b900a3e29224bb4e45bc3e879729f20003.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/06511afc1a360b72ddc9b4497a994dca686aef3b97922cc8b80443403a4ddb83.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/06c31bd2b14400097f1e5123a6f39525ba4c4e5e2a5e7ff4c38a43b224d20a0d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/070c095dddd2f798973cbb1332d344bf81370ea5a6eda28e88b1f7a27ef6c709.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/09332e170176084c6344fec2f82b8e890d06f8e32680643e316246716bee53e3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/094e59f0e4cdb42feca81333bf3bf014eca76ad887ef1490483f798c17d40cd5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0aec586f84490fed93173f8a2200485ceffc529450740dcf5edbe12a7d89f781.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0af23434a97b56cbda3aaf2de520ee9e18a629be0ef406a90dac45260481c1bf.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0bd90bc4c1dd73076d8627f6ea7be67faaf504d30221b1dce45cb1c443755fb5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/0e7f3eedcff4a433a47611e1adf13860af5e6d16fbb6129fc48ddd8557aa1626.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/100f3021f37614916d64cfaf40b04fda8d1989d624d03d93a97ec6ca79bf17e0.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1051e1923497524696fb7fa1b71ba3a9d3cf12ec8519b1e8209d9d5eac717990.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1086f0d1446ee0d57fc4c325f3828ff783e328ced88aac13b45f718161499e53.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/10fe404eb03263a768b27a2e92b2fe20e33cda3eab265a84860286430be0a49b.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/13bdd9d4f7de5ab5fbb955890067eb3772a2302e014480243ae141a4eee8b4f7.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/167515af1cd986fa06cab9d7efa9f1feb18bc95e3c6de1dba854adafc7ae8ead.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/16fba3996eb41939497dbd0f426c599e4ebc1eb5a762d7e1ff143708e49e94dc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/17de4e480542b25d6f2a11461ae4f41a6282c3ecbeb3619b0b42fdbb7f31939c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/17fbd1888f87c0b6c099e7e88300cf58e26adda72cf2f2297fc1f0e6bd2e9257.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1d601091a3312ce89ddc9523bffccf41742eb6ea1223a6b4f751c210ffce1fb4.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1e4049e0856983245c1154127a97509e576a1fd14f3ea56d52f946878a535bae.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1e4d42449081955231608e3fa48b5c3102243d55a80e9064b88440669ed821b2.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1f727c948a41c946dd0aa376993d5620f226497d49404c03b3c175d057b4ab29.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1f7c2be5abf85169f9c409d39e58419418193281eeb391dc3ec0d1f6784f40dc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/1f9db61abe1368fa82aab9d8e1b27d97389172db6c78cc23abe03025876ebdd1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/207fdd9cd514b05162cd7babd5d2252985853a11cdf847113056a5071e8377e3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/2165f2f41684c71dbce5e6edf7262786c5aa8518828e00e2a4dce75492f53aa3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/22832c79316ab6a0c79a6bca80d9635ba80df2e2079ac114c354d43aec19f95c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/22e04e79d7912eb1b7e3bca68279f3fa7e2936b3d2706fcdf688fff96f7c30c8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/252d1adbbb189a3636432d8de48b5ed7c8d1f185c5ea46ceb616071960b1be42.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/25ab62b76a5f58693d5161dabf0a58862a7d6d5e9b054cc2347ffb79d4468f65.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/29731b11c9bdce6c0524fbcf801177b2da8d3181efa44ab73832e8dc0ed442bd.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/29ae039e1d154e5d25fc8659bf1eb270830e4fec772f91f41bf1cb9744733674.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/2b7f894857506a93df04568d3bc252c6883ac4010ba64b49a8c13c9cd06330ca.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/2bbb54bb8f3b91b33e7e872ea5e2b129079a60fe8284b8dd8bf5488b2f76b55d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/2d70a40698b885cb7705c0d57922dfc922ef6b90e9a4580935d170395bc51a6e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/2ddf8f9e5aa81db1e984bd5812d91143f64ab806a7b5676d6e7f23d1d08f677f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/318ebfed808e94269a07fb5136c60f910bf810ffa3bef5aa7c26c313519147df.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3289a80010b6c0faed89308018fa31f7031f27ae0d853299443c23ba8a4d6e6b.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3312f8a2eccbfd08fabdba5d2af656bfbcb95e5b7e5390abf35ad5140759a710.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/35d6fee40fd65a1c224aa8320fbd8ef959f6975b16cc89fc2cfbb3c1b4e95641.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3654ae6c52c3267b7a62b7697d69011bd6446dd3f6da9bc5b133da4c2efe7d6b.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/37cb92f2f6a01d4862632405ced4934cc003818147fd14ea9a636bc7336d3af1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3a06bdbfe7f9ae5d627e941fdd9e616d0431a4f41b37c8f8d7b3f5751fcadb21.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3ac8bb6902eda596ffe0f32f517fb6e567a34e52e76c4ccc682d7c7dcf65f06a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3ace387692703afd7ecab2396d8eb8b3dc6411c0931ebf68ff5370013c707fa9.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3b65d0f842b856818ed2510234a106990e02450d60aed9075cc4c9f4b14101bc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3b90f45c585a53b5f55ef2c3761eef4b97fcef1eb344f9a4819c989b174b52e5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3cf920bfdd765673b964deab1cf13959604b7648091d4c58209f818cc3fede98.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/3d97defd459d93180b984ca62794c47f1da9a8dc105175bfc1d8948fc8dc3f29.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/4096008e37ad33f487fa031012fdc7f354edbb3e2c3d82eeeae616e8e1ae75fa.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/4278f99739c7c54475247d2cfb57eda95ad3cc39d7bbaf04729c04932d9fef12.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/44963597cd3ea0c48e79c9aeb4e7838f1faa5bcde319b7ff81b29aa6549d551f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/455df594e48e61d53c059f4ddad24e31e427232f4fe871e8ff384227350cc9ce.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/49e757465d8e83eb1ea11482682a0dc9bf8dd399847c883954925749ad6470c2.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/4c3d7045d901449868d2003d5529dd6f41d635c9e1ef1b1b8a0bee5e15aafc70.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/4e9f3dd260b769260bab0fd12ca46ae6b3b17221c6968fed8b7907173b05fc2d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/50c625a30e42a14c35d57d119aba7e16a17fa05fc60cb5ff961c61a77f6129d0.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/50d6499184d0d9889c9571e8f6b7b7def3329721be05cc10bbac13520f8eef37.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/519a945f4a84c930588f887f3b23f13102ea6138645d177cef5f98b7b91e6229.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/523e956286ac13d37bfffa655ef1e83b1ecd17889caeae0ede6e99cb03c29e83.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5254fe829c1a1554024b185254ce1177eaafa64b3ea72a0732abc7a205074b23.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/531a38ee0ed1035f37eecda69c27f43d9a0ecd6fea2fc6127c3a3318f5f06dad.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/535082e7e072de1deb460d4d58ba560c76f4c0ffdba7836846c3699d4c47fc5a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/55cb312149a7885f52f272daaf0060fbdbd8e26dc67e79c7b15d94a32b750749.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/563deb73b3327340c242a025beeca43321716dfbcea23fac9c89875d67a08f72.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/58191b4e65d5ba31195e59a1f244014669e52970d0bfe01bc99ab171f54e1c03.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/584d486255b4cee316ca9e6e3656c989d600ac403ccf01bdb3d548606678b17b.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/589dad68071e187dbb2fbbaa04d83c88bf219f7d428bfe1aa5a1ff7dbf023a23.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5a0a54d982fe112ff92a0263994062f4bf21f02c426b6936f257e80d02efabb9.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5a4e9b332727fe6e94e1548fb31f14aef41966f5ead08e7dde780b02d60148f5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5a8f8b728c901bfe909cccedbe276a221a7e0af456ebb26189774931eded5a74.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5bd0ff70a33bedbee8d278646e92ab57e29a43867cd60e7fb918508833117b56.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/5c088e2c173f3f6dd18f3df4cd20a198a76d4d5da9db7f8b749b55ea97210f05.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6095cf8a05c742b2d126bfc1cb9064a3c3cae65911146f1c4d36e2d4f86f1680.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6207dfec219a33509fc91cdd0055029c6b360a28fe282bee4bf489a4d45400d3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/62602a326a616b0ef6a3ee96fdf794a5815d0a69babd77a9a85e68ba6599db60.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/627d8be024734a3d490521cd423e9db4c50870f3ca6ac761e75f86ea55eb9491.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/62ace6fa362a937c7d2e645eea0192df37d1de5fc0fcc9f0a16f708b74ecd48a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6464e2cd097df4628226ba38836dd4d55ea4b97dba4dd952e1a34c84fa00e914.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6469622a3449ce827fd414b465085e38a53133a20024b6c30e13c6fab1cbd06e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/64990a73d75b059ef41bfa7ffe5dc818e1e197e3509f3b568e7fec254760bdad.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/68806e21c83d8f6bb9b7deaf161a26e2543fb6a6052839b92fd229c44de4785d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/689e2aa834fc2b6c42e3a6ad0c9b2a9060d968a9a8dd8d1c47be911b5a7347c6.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/69e95bec750edd2374827041d52575a2c09051c1adb4b1eab17cb8dc9ed5ee9d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6a583adb3c041e3e49886b4b96a73494fdb8c677ac28463c037845ba616348a3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6b39e36d9b59b214516369764a7c635e8b6af335c69fd2ab4fbd3be0aa12f539.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6bae4a41d4b3c584b87f6e963948951164f820ba2f77065856e93fa5fb77da4f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6be37bdd97101b62dc6fd786d39749426e719b5f9c0464ceb43cdfc63e56d5b0.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6d775401047dd566d5fcab422fdb64798fc85eef1ccd9444c43376314a7e81ba.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/6e8481e9dad0e6c1793e5f6ccbbf1dfb5ba88a09fb9e326425df6bf3b5b10e33.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/70ac455c2976654f81e4ada2accbeb9a0ed097e513ee641a1767038b60f3d058.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/715a84c56ee658f84a9b5930a0d01326da31d98b891e6ba0be647527f999167c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/73190900d1852a833a8e0c0cc86f2a1083d4b3ffcdd36ccf239bf3fefe2be9b9.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/731a07b1575dc21af660051d44974822d16d4d07e0ff8c959f3e7971c16e9a7a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/73ee87e06204f3346bd71d9107d89a9171428bacf3611019cdfcfd4aef224acb.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/73f5451927075637af3c96c14efec5d69b6da496baee2dc759048edc9b12c232.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/74c85d86a6d8483900d3fa46e3dd606f54d64af4ae6e5b75421fe1c6788b3c60.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/77cefb8a568e79bbbf5ea2f16eca5b1dedef30fde3405aab81eec97baf84f827.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/782afa626a4098a473fab0fb263ca59c59db1111372aa81c48944c3b8c95f491.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/79ce979e77967e52a44d8579c4303ab655f65ad9bc258c3bd96c3dd7305cae06.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7c6ac8a21f4385b56aeea01fee3766a0f9abbbc6f9a0590ea16325f235efcf20.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7ceeb2d8df9a1700574716eeb32d72e4fd574ea02d01cb3e1e48e65df9c5003a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7d5f935bff18ec87a6c7a089cd08c4d89cc922a0e020c1fb1b57f13ed586358c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7db158ee49deabc6bb44403c7cde05504828d9e0ab9059b2630fc953bd81d93c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7dc6b1a6affc2de030eaa790e0826a3797ed82b2f5e6df1481df872f1f511e9e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7e0aa14109be2807e6cab542dd82edba518e53ede3c664eb7224a8dfe651f469.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7f546efb5963586a767ed1de189fdadacbe4ae8989478a5a66e5120052df625f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/7fbf42c8c7d52f048579426d9da3dd81d5828c24c2321a3795fb3b7659b92a0c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/80c3a5a1b8160107475d142a6135ddaf906da9307805f2e68ba8c3af04aa9882.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/81a280d2907246e14a57096449e036eb0363da6f0074ecedf14879d6f09a826c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/81d4d752174e5a09b2ba32a01724629f16137270b7f0f098a5e66b6a1c689d18.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/82cad94a35ab2d431beb0f15d5d13decd59ab65525dfc802995ddc7fbacedc21.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/83d57f81198fde4ad8a03bbe0f9d80058eb82724505cb31283206d38486285cc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/85af66fc476055f4e450401935be1757b9d043099c0530a55edaaa9e8fc45b78.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/85c074209d24896e542e425b1fb9fad5d2704db1286e406b25fbe2a9e1c62ac8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/86332e56e1d088488a3378a8ffb47b13abb39e8c81cdeb5f1d546a14a5d4e03f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/866b406c0825b3fd70dd6c7a0c04d67018b3701b14bf2658d5f05ebbfb134bb2.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/869ef8c9b4cfacfe7b568dedfac756cc52c7635bd951bacceb6f68930061e798.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8b4f66ce9958d1bb4077dfe1d0e4df2f7f4642a838714dbc93316dc3c8523534.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8b9eaad4dfb5c0936cebcafde3c3b368c71c5c2e7f4fbc282c887051e25567e5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8e4e1c38e46c8daa3c97656d09feaa9fbb2f083b3401f9fbdf7fb53a87bb50f6.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8e73cca8cf7e6238b5a9e4a46b62d2cf8968fb9e071c8ff8e21a55b1cbb1cd46.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8ec0bfac79ec428f8e9bd6ef770eee33b0218601b0ada7b113da52b4a53ca6fc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/8f1414450de85a7ca36b1c4508c946084f9eaa83eee74f709dd09ebb7fc9e773.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/92e467b0ca6f7256ca2bd57e96777a76d4cd15d574eb169a10d37c8c5737fb3d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/93eb2741e82d5f2c723db19741da0ec90a516da435c2be2ce0c63fcf18a478af.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/95cb2ed2edc938dbc2eb71b8aeebaec57b8eaaf2229c8e7f4a1a702b36da6d36.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/95ede7cf79834cf530eb2332a0a7859f1f3b27cc246645cb88421aa0def23623.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/97aaf1b808af614b0985c5d9ea1196a794a2453b59c9bb81cac1561b29f9092f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9811147e5abebc52edff502471a40f369ee1329e9f029ef3258976404f06a8f9.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/98270c04210ce70f7197fd3c1df74140159aed78f3d6b0c736b9fd1de4309b68.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/98f967e9230b612cb641244c969d3461874f40a74d00096217c05b4ca3cc5163.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9a710f33bcbf32f6281ef3199603286b84e3ead526791be3e5702cf19a10ba80.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9cce4a16b043c387789e0867504b51418b27f557bf5874111ac917bde8e0b109.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9cd2cffa72ed809a1541ad88bf92c541857c512b6e7fe07c5d9bb348a51c071a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9d06f4503bab33ea71454511db6e94b3a27c29ad650cc9cdbfd5b43138f476a6.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9d3d1aee5a15a733c47dd04fdb5943d68a49f8ce13d67b05bc0a14497328f58d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9d440f60091a4f93dcf1d78367e2c71755a3acdfe8844a1b5f756a235b763488.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9fd47dbb9db188abce18b1f3063253323bca0327c3362dbe36ee49250e348d54.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/9fe051f8082e371f9df5f940b8f071800623a9ad5b40755285095658d8f28b5a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a06be12e9602b3b595742d0cad924633191314032eaf6acaba75ae02c60a9811.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a5369060fbe387a285b63275bb4e455f350efee2df2aa880f03b07ef8e64fe7c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a67e0d0fc7ebb86fc0e08ddc07be6131e22b253ad50fb36935e7901dec5977b7.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a817b12b6f3c5a089ad11643f41230ba21f1987251b7a190b39cad4f485dabc5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a86964aa1cbd83641808a11c8ec3231008bae1345219c2a5646e36a8e06599a5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/a93efc87b8b26bb8e00bc3bb298aedd3d7ac45ceb950802398d2414bbf47c0dc.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/aa76182d9de824910acfbbfc5ea8f46681debd787c018927147e47b85f056e8e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/aad95764364270f74a9a2b521a4eede3c4e63ec332fdb251f833610f46f62f9d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ac62f874e909973d6a406359c3a3331861f7775ce15427c629754984e6c2bc59.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/acf05ae7385ed2c7fc6639333fe802f06a0ae3b54b7dc2704234673a41328154.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ad228703c7b568b72aee72ca2c50dc043ba963295abff15d0f2eced3379378dd.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ad28df2f2e8bc652a77cead6d657c2aed9fb644428bbd3e2c69d3b21790b6405.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ae24c1a5d0d0a7e29eec5c4f95e19009825ded2c622d288ba63e6b25de7524b5.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/aed3d23a58b420ee0328b3bbab000572b8891d72ffb6232c3cf8b807241fe903.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/aedd4475f0cf7c73ea7553423af3f920eb19c3efa9eb2f8a611f6e898dfe2a44.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/aef7fe4c9cedf564455aa029d6cc89b79b56a532d04a56a8d092808c0ad4e5b1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b079373b22270ed561a40ead88df318a0b3cd52b143607c34f7340508f6e390e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b15b8672daa3f5df56cc7f97ee8294dd2d23b975dc9e34256c69726676be3daa.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b4476bcd1991a5a30b1ac3f78801025d2928cd8c77db07730551b0815ce13c36.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b470e846ba2a52d4e0763ff5739d1528d1b86974dd79c08358ceb33076790e76.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b5a337d95da18b2c918d1be090cf235c67a7a09cd60f23033e8c570fa8dbb748.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b60d2e0d59f626d9ff57d7230795b09be357a37343d0d2c0d1ca958a1857d8bd.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b6420f0dfb5e0f15c42fa9170634d6c2b3d0409749b00ffd3c9364246d88d790.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b647bffb0af3f94c4df75171f311ece530c6def16132a3a33f4b7deff6dd707a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b710a0414f46ecb976cc66ac059d3a74dbd64d0bf8f1116de968837e581b6422.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/b73436f8a0e225ea354ec4ad7993c5d5887b7227f7545e2ead47ac03ccc082cd.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ba1fcae5bd482a5ee1095215721f18a5951393e75bb88a9df1b3e1922e2202ef.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ba646e84c605179808ec987d421f534a1c4af669a910fdd1ac75bad73d8b587e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/bafd5076a18391e489c5133abd6aa6032cec2783626bbd8a84381b7896f21c9d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/bc630d1d2d79d48a0c7441c1081f97933ae9bc733733a7918a4cf498fa61b981.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/be18c3a11472b8d81adfe9761be1ff309c93c04be3f69d56638efb019757f8f7.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/be985fcfeb455e3d468126f1c7b65b4ab84b57c743118ef4ac021a88973dd155.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/bece45eb021b6454fcf8a9cf294536c7752f817beb12c90d65e0c21afe57a5a1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/c018635d30a0f5436fc124a28ca204b8199b2dcec3335147150e0d34b9e1f82a.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/c3e028aefdbe3e462d7f676938ae48c428b44031e7c4ef34fb4686904e97b3c8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/c7d3603bbe7edfbcfecc3a1b09bdd2307209be3fc7978fea7bfb7685c91b08d7.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/c9457b843ef85e899bfd9352d67f73980b1a2304cceb01e992440ffdd3d0eb5c.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/cb761115d0ed359fc4e55ad0c40245352cc091c68e5171ac20ef5e6d9d9832d1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/cc658b209eeaf4c9249998a1534cefdf6837ce3a7de82fc62202102fe09957a2.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/cd2ce8667e344c6769096140ab1e4d9829ba2424eb9bdb65dee55f09469fecc8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/cd8ce55adda67b165bf6272936d26dc172ba4d7a5fbfa4d5142181855c40f02d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/cecb346166b599b5343dad969681c67168e5130e3a4018ee8fc903efc273fe04.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ced68cd7e814d7774ffbdc161d16335221561854b99e12f107671e17337504b1.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d08762a2d53ea94992d179f3affdd360ad2d58277024715af643374e65e62606.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d48e2ae9efb9c635d241fe4f1d65e0ec51c9ac3740c29a0db58e3bcccc0e2466.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d54b3634353a29d5fc12e6ccc72ca587a9b2676489bf893524c004d4afdefa51.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d6200254d8034d573eb3b6bd33d39d7efddaa5fdf60a61453789e61853f03489.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d7bd2958a25f99487597175b812cc96293a1342810f5076c4a92a1506fba2599.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d8ad7e776fd4b3708759b004e7ed524ff77a988d48237e5d357dc99a9a3bb79d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/d9dd2631fda1b4480019731d75b0a908a057084bc22ad2ca66a2c381b86e0a38.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/db25c8d58f8689825c0d89e5ebb3ca93542b2dafa228fde7285dcd9565ccb552.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/dd430a8b0bc073c8deb7e7be1ca766292097b47301797452810293d73d53ff70.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ddaaecef88ef58b3207db5b55d5bbd8d91421cd99a49941482368f626cc28b9d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/df9ffa69edbeaabf967cd706016a4c97e6f9ffc41c5e38ad327fde2d452ddd3e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e1713cdd15edde27fe7f01c40841ee3ede0d411e350e2b31b9e8b5b2f9ce6feb.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e2eafeb868d33a2e19815315d4cfe04eaba57e9fa7835ec2a8f35b0ddffa3498.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e5581298f1ebdbc113077df91f6215a07ddde68e9a45c01035f87d241062abd2.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e5dcdfd16046923e879eb93db75c0df5067b2859f57259df63cdcce61ef2c03e.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e5e9a12f89839a814832a5d5c375d4f6da3f81197790d2d52467fca122f43fd8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e8c2aff5248d3d761f3f8175e68f1ff46704c934465ccca6d284d40eeb54ae87.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/e992bfbfd3c2b33a9dac8499d800f5fcc3d7c33d8d84f90eb705bbd780a32b32.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ea02b9cc1c110994d38e9aa28b9e4fdf49c7b0e074809f09760f068bc41dc7f8.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/edbe4c5e6076cc2c119ccec658be0196128b8742a9d640cb9cdf7d79aa622304.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/ef396e2cc36a574a59a95bf95caae976ec92698d1b43a1fdca8e7a20609d6aa3.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f1607b2d6749b8e2f1b21e6985fa4da4077d01500b190e20b3d4ac89c8cd0e69.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f2c65b378401d4e854bb4d18bc4396419ca74dc8c84a5a8d57f4074baeeeb63f.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f5a620cd0622f180ea799f73823c099958513ca86ff822d9fc45f73b106b35c4.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f649350396b8f14e079a1646de95a5e490c709748fcd989a603afad3a7044898.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f68a4af4ef4d24cc0416195c9b123d0cb4f6811c08554914866d4a86835dab24.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/f9ee28f629cd46d9b44cdd1dfa64aadb0231af8002093266902d90e1f2f9fc88.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/faabe069e0568dabcc65124f0fa7d56e3ddfadf62523fc3f208ee4ad11c46f8d.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/fe209b7393dc29439e121809022e793527d4208c2957d479e9f0706d4ba357e0.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/ast/fe674973c21bca43da88fbeadc8361422a28aeb4d9eaca2db7d40f99a04d5608.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/cache/stat-index.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/graph.html +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/graph.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/manifest.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/graphify-out/merged-graph.json +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/activex.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/cvi.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/dll.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/htbasic.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/adapters/python.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/analysis_context.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/analysis_message.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/analysis_utilities.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/rule.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/rule_setting_values.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/analyzer/types.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/engine/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/engine/enums.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/exceptions.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/external_report_viewers.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/file_information.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/images.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/search.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/core/utility.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/additional_results.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/breakpoint.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/database_options.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/edit_args.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/interactive_args.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/output_record_stream.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/report.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/result_log.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/thread.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/execution/watch_expression.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ext/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ext/events.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ext/step_types.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/messaging/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/messaging/output_message.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/messaging/output_messages.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/messaging/ui_message.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/property/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/property/array_dimensions.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/property/data_type.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/property/property_object_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/py.typed +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/expression.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/location.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/sequence.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/step.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/step_group.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/sequence/type_palette.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/station/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/station/search_directories.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/station/station_options.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/application_manager.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/button_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/checkbox_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/combobox_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/command.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/connections.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/entry_point.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/execution_view_manager.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/expression_edit_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/insertion_palette.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/label_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/list_box_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/listbar_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/menu_item.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/report_view_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/sequence_file_view_manager.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/sequence_view_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/status_bar.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/styles.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/ui/variables_view_ctrl.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/undo/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/undo/undo_item.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/undo/undo_item_creator.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/undo/undo_stack.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/users/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/users/user.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/users/users_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/workspace/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/workspace/workspace_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/src/py_teststand/workspace/workspace_object.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/conftest.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/_ui_message_stress.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/test_api_compatibility.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/test_memory_leaks.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/test_property_object_serialize.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/integration/test_ui_messages.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/test_core.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/adapters/test_activex_adapter.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/adapters/test_dotnet_adapter.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/adapters/test_labview_adapter.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/adapters/test_python_adapter.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/analyzer/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/analyzer/test_rule_authoring.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/__init__.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_engine.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_enums.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_errors.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_expression.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_property_object_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_sequence.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_sequence_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/core/test_step.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/execution/test_database_options.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/execution/test_execution.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/sequence/test_sequence.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/sequence/test_sequence_file.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/test_com_contract.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/test_core_mechanics.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/test_lifecycle.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/ui/test_events.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/ui/test_execution_view_manager.py +0 -0
- {py_teststand-0.2.2 → py_teststand-0.3.0}/tests/unit/ui/test_sequence_file_view_manager.py +0 -0
|
@@ -56,6 +56,11 @@ understanding the runtime environment:
|
|
|
56
56
|
callbacks, code templates, adapter support files, and the Python helper scripts
|
|
57
57
|
used by the Python adapter (`Bin\ni_teststand_python_*.py`).
|
|
58
58
|
|
|
59
|
+
- **Sequence File Converter** — TestStand provides a command-line utility at
|
|
60
|
+
`C:\Program Files\National Instruments\TestStand 2026\Bin\SequenceFileConverter.exe`
|
|
61
|
+
to convert sequence files between binary and XML formats (e.g. using `-Format:XML` or
|
|
62
|
+
`-Format:Binary` options) to facilitate inspection.
|
|
63
|
+
|
|
59
64
|
- **Station config dir** — `C:\ProgramData\National Instruments\TestStand 2026 (64-bit)\Cfg\`
|
|
60
65
|
Per-station configuration: `SearchDirectories.cfg`, `Adapters.cfg`,
|
|
61
66
|
`GeneralEngine.cfg`, `StationGlobals.ini`, `Users.ini`, `TypePalettes.cfg`,
|
|
@@ -217,6 +222,7 @@ Prefer extending this facade over deep imports in user-facing code and examples.
|
|
|
217
222
|
- No cryptic abbreviations in code or tests: `property_object` not `po`,
|
|
218
223
|
`sequence_file` not `sf`, `sequence` not `seq`, `engine` not `eng`,
|
|
219
224
|
`execution` not `exe`, `sequence_context` not `ctx`.
|
|
225
|
+
- Do not use "TestStand" prefixes in documentation, docstrings, or variables (e.g., say "live engine" instead of "live TestStand Engine", "ResultList array" instead of "TestStand ResultList array"). The user already knows this library wraps TestStand. Refer to the COM objects directly by their interface names.
|
|
220
226
|
- Examples in `examples/` double as documentation and as inputs for other tools,
|
|
221
227
|
so they must run end to end and import only from the top-level `py_teststand`.
|
|
222
228
|
|
|
@@ -6,3 +6,6 @@ This file directs Gemini (Antigravity) and any other AI coding assistant working
|
|
|
6
6
|
You must **always** read and strictly follow the guidelines, architectural rules, and project-specific memory stored in `CLAUDE.md`.
|
|
7
7
|
|
|
8
8
|
The `CLAUDE.md` file acts as the ultimate source of truth for repository conventions, TestStand COM interactions, typing rules (`ANN401`), and testing procedures. Treat the contents of `CLAUDE.md` as if they were written directly in this file.
|
|
9
|
+
|
|
10
|
+
**DOCUMENTATION RULE:**
|
|
11
|
+
Do not use "TestStand" prefixes in documentation, docstrings, or variables (e.g., say "live engine" instead of "live TestStand Engine", "ResultList array" instead of "TestStand ResultList array"). The user already knows this library wraps TestStand bindings. Refer to the COM objects directly by their interface names.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: py-teststand
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
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
|
|
@@ -156,6 +156,7 @@ EXAMPLES: list[tuple[str, str]] = [
|
|
|
156
156
|
("users_manage", "Create users and set their privileges."),
|
|
157
157
|
("execution_run_test_headless", "Run real pass/fail tests and read their numeric results."),
|
|
158
158
|
("ui_messages_handle", "Receive UI messages from a running sequence without a GUI."),
|
|
159
|
+
("result_list_parse", "Parse a sequence execution's ResultList array."),
|
|
159
160
|
(
|
|
160
161
|
"execution_run_subsequence",
|
|
161
162
|
"Run a sequence and read its results. Last; it shuts the engine down.",
|
|
@@ -206,7 +207,7 @@ pip install py-teststand
|
|
|
206
207
|
## 🔗 Compatibility
|
|
207
208
|
|
|
208
209
|
| Component | Versions |
|
|
209
|
-
|
|
210
|
+
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
210
211
|
| **[Windows](https://www.microsoft.com/en-us/windows)** | 7 to 11 |
|
|
211
212
|
| **[Python](https://www.python.org/downloads/)** | 3.8 to 3.14 |
|
|
212
213
|
| **[TestStand™][ni-teststand-api-reference]** | [2016 to 2026](https://www.ni.com/docs/en-US/bundle/teststand/page/year-based-and-major.html) |
|
|
@@ -271,7 +272,7 @@ long-lived COM interfaces that exist across the supported range.
|
|
|
271
272
|
## 🧰 Technical Stack
|
|
272
273
|
|
|
273
274
|
| Tool | Purpose |
|
|
274
|
-
|
|
275
|
+
| ------------------------------------------------ | ----------------------------------------------------------- |
|
|
275
276
|
| **[uv](https://github.com/astral-sh/uv)** | Python package and project manager |
|
|
276
277
|
| **[ty](https://github.com/astral-sh/ty)** | Static type checker for interface validation |
|
|
277
278
|
| **[ruff](https://github.com/astral-sh/ruff)** | Linter and code formatter (with strict rules) |
|
|
@@ -120,6 +120,7 @@ EXAMPLES: list[tuple[str, str]] = [
|
|
|
120
120
|
("users_manage", "Create users and set their privileges."),
|
|
121
121
|
("execution_run_test_headless", "Run real pass/fail tests and read their numeric results."),
|
|
122
122
|
("ui_messages_handle", "Receive UI messages from a running sequence without a GUI."),
|
|
123
|
+
("result_list_parse", "Parse a sequence execution's ResultList array."),
|
|
123
124
|
(
|
|
124
125
|
"execution_run_subsequence",
|
|
125
126
|
"Run a sequence and read its results. Last; it shuts the engine down.",
|
|
@@ -170,7 +171,7 @@ pip install py-teststand
|
|
|
170
171
|
## 🔗 Compatibility
|
|
171
172
|
|
|
172
173
|
| Component | Versions |
|
|
173
|
-
|
|
174
|
+
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
174
175
|
| **[Windows](https://www.microsoft.com/en-us/windows)** | 7 to 11 |
|
|
175
176
|
| **[Python](https://www.python.org/downloads/)** | 3.8 to 3.14 |
|
|
176
177
|
| **[TestStand™][ni-teststand-api-reference]** | [2016 to 2026](https://www.ni.com/docs/en-US/bundle/teststand/page/year-based-and-major.html) |
|
|
@@ -235,7 +236,7 @@ long-lived COM interfaces that exist across the supported range.
|
|
|
235
236
|
## 🧰 Technical Stack
|
|
236
237
|
|
|
237
238
|
| Tool | Purpose |
|
|
238
|
-
|
|
239
|
+
| ------------------------------------------------ | ----------------------------------------------------------- |
|
|
239
240
|
| **[uv](https://github.com/astral-sh/uv)** | Python package and project manager |
|
|
240
241
|
| **[ty](https://github.com/astral-sh/ty)** | Static type checker for interface validation |
|
|
241
242
|
| **[ruff](https://github.com/astral-sh/ruff)** | Linter and code formatter (with strict rules) |
|
|
@@ -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
|
|
|
@@ -12,7 +12,7 @@ engine without external dependencies.
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
-
from py_teststand import AdapterKeyName, Engine, StepGroup
|
|
15
|
+
from py_teststand import AdapterKeyName, Engine, StepGroup, ResultList
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def main() -> None:
|
|
@@ -42,14 +42,9 @@ def main() -> None:
|
|
|
42
42
|
if result_list_obj is None:
|
|
43
43
|
return
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
continue
|
|
49
|
-
with step_result as sr:
|
|
50
|
-
name = sr.get_val_string("TS.StepName", 0)
|
|
51
|
-
status = sr.get_val_string("Status", 0)
|
|
52
|
-
print(f"{name}: {status}")
|
|
45
|
+
parsed_results = ResultList(result_list_obj._com_obj).parse()
|
|
46
|
+
for result in parsed_results:
|
|
47
|
+
print(f"{result['name']}: {result['status']}")
|
|
53
48
|
|
|
54
49
|
|
|
55
50
|
if __name__ == "__main__":
|
|
@@ -21,7 +21,7 @@ records Passed or Failed, which we read from each entry in the ResultList.
|
|
|
21
21
|
|
|
22
22
|
from __future__ import annotations
|
|
23
23
|
|
|
24
|
-
from py_teststand import AdapterKeyName, Engine, Sequence, StepGroup
|
|
24
|
+
from py_teststand import AdapterKeyName, Engine, Sequence, StepGroup, ResultList
|
|
25
25
|
|
|
26
26
|
# (name, measurement expression, low limit, high limit)
|
|
27
27
|
TESTS: list[tuple[str, str, float, float]] = [
|
|
@@ -60,15 +60,15 @@ def main() -> None:
|
|
|
60
60
|
print("No results recorded.")
|
|
61
61
|
return
|
|
62
62
|
|
|
63
|
+
parsed_results = ResultList(result_list._com_obj).parse()
|
|
64
|
+
|
|
63
65
|
all_passed = True
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
print(f" {name}: {status} (measured {numeric})")
|
|
71
|
-
all_passed = all_passed and status == "Passed"
|
|
66
|
+
for result in parsed_results:
|
|
67
|
+
name = result["name"]
|
|
68
|
+
status = result["status"]
|
|
69
|
+
numeric = result["value"]
|
|
70
|
+
print(f" {name}: {status} (measured {numeric})")
|
|
71
|
+
all_passed = all_passed and status == "Passed"
|
|
72
72
|
|
|
73
73
|
print(f"\nOverall: {'PASSED' if all_passed else 'FAILED'}")
|
|
74
74
|
|
|
@@ -21,6 +21,7 @@ EXAMPLES: list[tuple[str, str]] = [
|
|
|
21
21
|
("users_manage", "Create users and set their privileges."),
|
|
22
22
|
("execution_run_test_headless", "Run real pass/fail tests and read their numeric results."),
|
|
23
23
|
("ui_messages_handle", "Receive UI messages from a running sequence without a GUI."),
|
|
24
|
+
("result_list_parse", "Parse a sequence execution's ResultList array."),
|
|
24
25
|
(
|
|
25
26
|
"execution_run_subsequence",
|
|
26
27
|
"Run a sequence and read its results. Last; it shuts the engine down.",
|
|
@@ -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
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Walk and parse execution results into Python dictionaries.
|
|
2
|
+
|
|
3
|
+
Builds a sequence with test steps, runs it, then shows two ways to
|
|
4
|
+
retrieve the parsed ResultList:
|
|
5
|
+
|
|
6
|
+
1. Object-oriented approach via execution.result_list.
|
|
7
|
+
2. Passing a raw COM/PropertyObject ResultList directly to ResultList().
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import json
|
|
13
|
+
|
|
14
|
+
from py_teststand import (
|
|
15
|
+
AdapterKeyName,
|
|
16
|
+
Engine,
|
|
17
|
+
ResultList,
|
|
18
|
+
StepGroup,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def main() -> None:
|
|
23
|
+
with Engine() as engine:
|
|
24
|
+
sequence_file = engine.new_sequence_file()
|
|
25
|
+
main_sequence = sequence_file.get_sequence_by_name("MainSequence")
|
|
26
|
+
|
|
27
|
+
# Pass/Fail Test — forces pass
|
|
28
|
+
step1 = engine.new_step(AdapterKeyName.NoneAdapterKeyName, "PassFailTest")
|
|
29
|
+
step1.name = "Verify Power Rail"
|
|
30
|
+
step1.record_result = True
|
|
31
|
+
step1.as_property_object()["DataSource"] = "True"
|
|
32
|
+
main_sequence.insert_step(step1, 0, StepGroup.Main)
|
|
33
|
+
|
|
34
|
+
# Numeric Limit Test - forces 1.5 against 1.0-2.0 limits
|
|
35
|
+
step2 = engine.new_step(AdapterKeyName.NoneAdapterKeyName, "NumericLimitTest")
|
|
36
|
+
step2.name = "Verify Current Draw"
|
|
37
|
+
step2.record_result = True
|
|
38
|
+
step_properties = step2.as_property_object()
|
|
39
|
+
step_properties["DataSource"] = "1.5"
|
|
40
|
+
step_properties["Limits.Low"] = 1.0
|
|
41
|
+
step_properties["Limits.High"] = 2.0
|
|
42
|
+
main_sequence.insert_step(step2, 1, StepGroup.Main)
|
|
43
|
+
|
|
44
|
+
# Execute the sequence
|
|
45
|
+
print("Running sequence...")
|
|
46
|
+
with engine.new_execution(sequence_file, "MainSequence") as execution:
|
|
47
|
+
execution.wait_for_end_ex(-1)
|
|
48
|
+
|
|
49
|
+
# Approach 1: Object-oriented approach (directly on Execution object)
|
|
50
|
+
# The execution.result_list property automatically extracts and parses
|
|
51
|
+
# the ResultList array internally.
|
|
52
|
+
parsed_results = execution.result_list.parse()
|
|
53
|
+
|
|
54
|
+
print("\nApproach 1 - execution.result_list:")
|
|
55
|
+
for index, result in enumerate(parsed_results):
|
|
56
|
+
print(
|
|
57
|
+
f" [{index}] {result['name']} "
|
|
58
|
+
f"({result['type']}) -> {result['status']}, "
|
|
59
|
+
f"Value: {result['value']}"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Approach 2: Universal helper class
|
|
63
|
+
# You can also pass an Execution or SequenceContext
|
|
64
|
+
# directly to ResultList().
|
|
65
|
+
result_list = ResultList(execution).parse()
|
|
66
|
+
|
|
67
|
+
print("\nApproach 2 - ResultList(execution).parse():")
|
|
68
|
+
for index, result in enumerate(result_list):
|
|
69
|
+
print(f" [{index}] {result['name']} ({result['type']}) -> {result['status']}")
|
|
70
|
+
print("\nSerialized JSON Report:")
|
|
71
|
+
print(json.dumps(parsed_results, indent=4))
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
if __name__ == "__main__":
|
|
75
|
+
main()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "py-teststand"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
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)
|
|
@@ -19,7 +19,7 @@ keywords = [
|
|
|
19
19
|
"windows",
|
|
20
20
|
"sugaring",
|
|
21
21
|
"scripting",
|
|
22
|
-
"python"
|
|
22
|
+
"python",
|
|
23
23
|
]
|
|
24
24
|
authors = [{ name = "Dominik Rajchel" }]
|
|
25
25
|
license = { text = "MIT" }
|
|
@@ -68,8 +68,27 @@ target-version = "py38"
|
|
|
68
68
|
|
|
69
69
|
[tool.ruff.lint]
|
|
70
70
|
# Added "ANN" to enforce type annotations
|
|
71
|
-
select = [
|
|
72
|
-
|
|
71
|
+
select = [
|
|
72
|
+
"E",
|
|
73
|
+
"F",
|
|
74
|
+
"I",
|
|
75
|
+
"N",
|
|
76
|
+
"W",
|
|
77
|
+
"B",
|
|
78
|
+
"C4",
|
|
79
|
+
"UP",
|
|
80
|
+
"ARG",
|
|
81
|
+
"PTH",
|
|
82
|
+
"RUF",
|
|
83
|
+
"FA",
|
|
84
|
+
"PGH",
|
|
85
|
+
"FLY",
|
|
86
|
+
"ANN",
|
|
87
|
+
]
|
|
88
|
+
per-file-ignores = { "tests/**" = [
|
|
89
|
+
"N801",
|
|
90
|
+
"ANN",
|
|
91
|
+
] } # Ignore typing enforcements in test files
|
|
73
92
|
unfixable = []
|
|
74
93
|
fixable = ["ALL"]
|
|
75
94
|
|
|
@@ -81,7 +100,13 @@ suppress-dummy-args = true
|
|
|
81
100
|
[tool.ruff.lint.isort]
|
|
82
101
|
combine-as-imports = true
|
|
83
102
|
known-first-party = ["py_teststand"]
|
|
84
|
-
section-order = [
|
|
103
|
+
section-order = [
|
|
104
|
+
"future",
|
|
105
|
+
"standard-library",
|
|
106
|
+
"third-party",
|
|
107
|
+
"first-party",
|
|
108
|
+
"local-folder",
|
|
109
|
+
]
|
|
85
110
|
|
|
86
111
|
[tool.ruff.format]
|
|
87
112
|
quote-style = "double"
|
|
@@ -132,6 +157,9 @@ url = "https://test.pypi.org/simple/"
|
|
|
132
157
|
publish-url = "https://test.pypi.org/legacy/"
|
|
133
158
|
explicit = true
|
|
134
159
|
|
|
160
|
+
[tool.pyrefly]
|
|
161
|
+
project-includes = ["**/*.py*", "**/*.ipynb"]
|
|
162
|
+
|
|
135
163
|
[[tool.uv.index]]
|
|
136
164
|
name = "pypi"
|
|
137
165
|
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,
|
|
@@ -114,6 +116,9 @@ from .execution.edit_args import EditArgs
|
|
|
114
116
|
from .execution.execution import Execution, ExecutionTypeMask
|
|
115
117
|
from .execution.interactive_args import InteractiveArgs, InteractiveContext
|
|
116
118
|
from .execution.report import Report, ReportConversion, Reports, ReportSection, ReportSections
|
|
119
|
+
from .execution.result_list import (
|
|
120
|
+
ResultList,
|
|
121
|
+
)
|
|
117
122
|
from .execution.result_log import ResultLog, ResultLogger, ResultLogRecordType
|
|
118
123
|
from .execution.sync_manager import (
|
|
119
124
|
AutoReleaser,
|
|
@@ -153,7 +158,7 @@ from .property.property_object_file import (
|
|
|
153
158
|
from .sequence.code_template import CodeTemplate, CodeTemplates
|
|
154
159
|
from .sequence.expression import EvaluationType, Expression
|
|
155
160
|
from .sequence.location import AutoCreateVariableLocation, Location, Locations
|
|
156
|
-
from .sequence.sequence import Sequence
|
|
161
|
+
from .sequence.sequence import Sequence, SequenceFileType, SequenceType
|
|
157
162
|
from .sequence.sequence_context import SequenceContext
|
|
158
163
|
from .sequence.sequence_file import SequenceFile
|
|
159
164
|
from .sequence.step import RunMode, Step
|
|
@@ -209,12 +214,14 @@ __all__ = [
|
|
|
209
214
|
"CheckedState",
|
|
210
215
|
"CodeTemplate",
|
|
211
216
|
"CodeTemplates",
|
|
217
|
+
"ConflictHandler",
|
|
212
218
|
"ConflictResolution",
|
|
213
219
|
"DLLAdapter",
|
|
214
220
|
"DLLModule",
|
|
215
221
|
"DataType",
|
|
216
222
|
"DatabaseLogOptions",
|
|
217
223
|
"DebugOption",
|
|
224
|
+
"DefaultModelCallback",
|
|
218
225
|
"DeploymentError",
|
|
219
226
|
"DotNetAdapter",
|
|
220
227
|
"DotNetModule",
|
|
@@ -282,6 +289,7 @@ __all__ = [
|
|
|
282
289
|
"ReportSection",
|
|
283
290
|
"ReportSections",
|
|
284
291
|
"Reports",
|
|
292
|
+
"ResultList",
|
|
285
293
|
"ResultLog",
|
|
286
294
|
"ResultLogRecordType",
|
|
287
295
|
"ResultLogger",
|
|
@@ -314,8 +322,10 @@ __all__ = [
|
|
|
314
322
|
"SequenceContext",
|
|
315
323
|
"SequenceFile",
|
|
316
324
|
"SequenceFileLoadError",
|
|
325
|
+
"SequenceFileType",
|
|
317
326
|
"SequenceFileViewManager",
|
|
318
327
|
"SequenceTerminatedError",
|
|
328
|
+
"SequenceType",
|
|
319
329
|
"SequenceValidationError",
|
|
320
330
|
"SourceControlCommand",
|
|
321
331
|
"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:
|
|
912
|
-
|
|
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) ->
|
|
60
|
-
|
|
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
|
|
@@ -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
|