testit-python-commons 5.1.3.post580__tar.gz → 5.1.4.post580__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 (263) hide show
  1. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/PKG-INFO +4 -2
  2. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/README.md +3 -1
  3. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/setup.py +1 -1
  4. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/api_client.py +36 -108
  5. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/adapter_manager.py +7 -4
  6. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons.egg-info/PKG-INFO +4 -2
  7. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/setup.cfg +0 -0
  8. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/__init__.py +0 -0
  9. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/__init__.py +0 -0
  10. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/attachments_api.py +0 -0
  11. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/auto_tests_api.py +0 -0
  12. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/configurations_api.py +0 -0
  13. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/parameters_api.py +0 -0
  14. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/project_attributes_api.py +0 -0
  15. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/project_sections_api.py +0 -0
  16. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/project_work_items_api.py +0 -0
  17. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/projects_api.py +0 -0
  18. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/sections_api.py +0 -0
  19. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/test_results_api.py +0 -0
  20. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/test_runs_api.py +0 -0
  21. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/work_items_api.py +0 -0
  22. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api/workflows_api.py +0 -0
  23. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/api_client.py +0 -0
  24. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/apis/__init__.py +0 -0
  25. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/configuration.py +0 -0
  26. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/exceptions.py +0 -0
  27. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/__init__.py +0 -0
  28. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_auto_tests_id_work_items_post_request.py +0 -0
  29. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_auto_tests_post_request.py +0 -0
  30. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_auto_tests_put_request.py +0 -0
  31. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_auto_tests_search_post_request.py +0 -0
  32. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_configurations_search_post_request.py +0 -0
  33. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_parameters_post_request.py +0 -0
  34. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_parameters_search_post_request.py +0 -0
  35. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_projects_post_request.py +0 -0
  36. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_projects_project_id_attributes_put_request.py +0 -0
  37. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_projects_project_id_attributes_search_post_request.py +0 -0
  38. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_projects_project_id_work_items_search_post_request.py +0 -0
  39. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_projects_search_post_request.py +0 -0
  40. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_sections_post_request.py +0 -0
  41. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_test_results_id_put_request.py +0 -0
  42. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_test_results_search_post_request.py +0 -0
  43. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_test_runs_id_reruns_post_request.py +0 -0
  44. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_test_runs_post_request.py +0 -0
  45. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_test_runs_put_request.py +0 -0
  46. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/adapters_work_items_post_request.py +0 -0
  47. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/assign_attachment_api_model.py +0 -0
  48. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/assign_auto_test_case_id_api_model.py +0 -0
  49. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/assign_iteration_api_model.py +0 -0
  50. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/attachment_api_result.py +0 -0
  51. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/attachment_model.py +0 -0
  52. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/attachment_put_model.py +0 -0
  53. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/attachment_put_model_auto_test_step_results_model.py +0 -0
  54. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/attachment_update_request.py +0 -0
  55. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test.py +0 -0
  56. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_api_result.py +0 -0
  57. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_case_api_model.py +0 -0
  58. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_create_api_model.py +0 -0
  59. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_filter_api_model.py +0 -0
  60. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_id_model.py +0 -0
  61. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_model.py +0 -0
  62. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_model_last_test_result_configuration.py +0 -0
  63. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_model_last_test_result_status.py +0 -0
  64. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_result_reason_short.py +0 -0
  65. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_results_for_test_run_model.py +0 -0
  66. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_search_api_model.py +0 -0
  67. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_search_api_model_filter.py +0 -0
  68. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_search_api_model_includes.py +0 -0
  69. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_search_include_api_model.py +0 -0
  70. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step.py +0 -0
  71. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step_api_model.py +0 -0
  72. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step_api_result.py +0 -0
  73. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step_model.py +0 -0
  74. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step_result.py +0 -0
  75. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_step_result_update_request.py +0 -0
  76. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_update_api_model.py +0 -0
  77. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/auto_test_work_item_identifier_api_result.py +0 -0
  78. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/available_test_result_outcome.py +0 -0
  79. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/configuration_filter_model.py +0 -0
  80. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/configuration_model.py +0 -0
  81. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/configuration_short_model.py +0 -0
  82. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_empty_test_run_api_model.py +0 -0
  83. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_link_api_model.py +0 -0
  84. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_parameter_api_model.py +0 -0
  85. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_project_api_model.py +0 -0
  86. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_step_api_model.py +0 -0
  87. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/create_work_item_api_model.py +0 -0
  88. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_api_result.py +0 -0
  89. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_get_model.py +0 -0
  90. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_option_api_result.py +0 -0
  91. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_option_model.py +0 -0
  92. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_put_model.py +0 -0
  93. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_type.py +0 -0
  94. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/custom_attribute_types_enum.py +0 -0
  95. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/date_time_range_selector_model.py +0 -0
  96. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/deletion_state.py +0 -0
  97. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/detailed_project_api_result.py +0 -0
  98. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/detailed_project_api_result_workflow.py +0 -0
  99. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/failure_category_model.py +0 -0
  100. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/guid_extraction_model.py +0 -0
  101. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/image_resize_type.py +0 -0
  102. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/int32_range_selector_model.py +0 -0
  103. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/int64_range_selector_model.py +0 -0
  104. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/iteration_api_result.py +0 -0
  105. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/iteration_model.py +0 -0
  106. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/label_api_model.py +0 -0
  107. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/label_api_result.py +0 -0
  108. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/label_short_model.py +0 -0
  109. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_api_result.py +0 -0
  110. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_create_api_model.py +0 -0
  111. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_model.py +0 -0
  112. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_post_model.py +0 -0
  113. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_put_model.py +0 -0
  114. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_short_api_result.py +0 -0
  115. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_type.py +0 -0
  116. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/link_update_api_model.py +0 -0
  117. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_api_result.py +0 -0
  118. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_select_test_results_api_model.py +0 -0
  119. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_select_test_results_api_model_extraction_model.py +0 -0
  120. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_select_test_results_api_model_filter.py +0 -0
  121. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_test_result_api_model.py +0 -0
  122. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/manual_rerun_test_result_api_model_test_result_ids.py +0 -0
  123. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/operation.py +0 -0
  124. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/parameter_api_result.py +0 -0
  125. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/parameter_iteration_model.py +0 -0
  126. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/parameter_short_api_result.py +0 -0
  127. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/parameter_short_model.py +0 -0
  128. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/parameters_filter_api_model.py +0 -0
  129. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/problem_details.py +0 -0
  130. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/project_api_result.py +0 -0
  131. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/project_attributes_filter_model.py +0 -0
  132. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/project_type_model.py +0 -0
  133. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model.py +0 -0
  134. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model_autotests_count.py +0 -0
  135. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model_checklists_count.py +0 -0
  136. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model_created_date.py +0 -0
  137. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model_shared_steps_count.py +0 -0
  138. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/projects_filter_model_test_cases_count.py +0 -0
  139. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/section_model.py +0 -0
  140. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/section_post_model.py +0 -0
  141. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/section_shared_step.py +0 -0
  142. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/section_with_steps_model.py +0 -0
  143. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/shared_step_model.py +0 -0
  144. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/shared_step_result_api_model.py +0 -0
  145. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/step_comment_api_model.py +0 -0
  146. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/step_model.py +0 -0
  147. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/step_post_model.py +0 -0
  148. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/step_result_api_model.py +0 -0
  149. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/tag_model.py +0 -0
  150. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_link_api_result.py +0 -0
  151. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_outcome.py +0 -0
  152. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_response.py +0 -0
  153. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_short_response.py +0 -0
  154. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_short_response_status.py +0 -0
  155. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_step_comment_update_request.py +0 -0
  156. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_result_update_request.py +0 -0
  157. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_results_filter_api_model.py +0 -0
  158. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_results_filter_api_model_duration.py +0 -0
  159. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_run_api_result.py +0 -0
  160. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_run_api_result_status.py +0 -0
  161. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_run_state.py +0 -0
  162. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_status_api_result.py +0 -0
  163. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_status_api_type.py +0 -0
  164. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_status_model.py +0 -0
  165. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/test_status_type.py +0 -0
  166. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/update_empty_test_run_api_model.py +0 -0
  167. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/update_link_api_model.py +0 -0
  168. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/validation_problem_details.py +0 -0
  169. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_api_result.py +0 -0
  170. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_entity_type_api_model.py +0 -0
  171. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_filter_api_model.py +0 -0
  172. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_filter_api_model_duration.py +0 -0
  173. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_id_api_model.py +0 -0
  174. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_parameter_key_api_model.py +0 -0
  175. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_parameter_key_api_result.py +0 -0
  176. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_priority_api_model.py +0 -0
  177. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_priority_model.py +0 -0
  178. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_select_api_model.py +0 -0
  179. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_select_api_model_filter.py +0 -0
  180. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_short_api_result.py +0 -0
  181. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_source_type_model.py +0 -0
  182. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_state_api_model.py +0 -0
  183. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_states.py +0 -0
  184. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/work_item_type_model.py +0 -0
  185. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/workflow_api_result.py +0 -0
  186. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model/workflow_status_api_result.py +0 -0
  187. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/model_utils.py +0 -0
  188. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/models/__init__.py +0 -0
  189. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_adapters/rest.py +0 -0
  190. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/__init__.py +0 -0
  191. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/__init__.py +0 -0
  192. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/completion_api.py +0 -0
  193. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/health_api.py +0 -0
  194. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/system_api.py +0 -0
  195. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/test_results_api.py +0 -0
  196. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api/workers_api.py +0 -0
  197. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/api_client.py +0 -0
  198. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/apis/__init__.py +0 -0
  199. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/configuration.py +0 -0
  200. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/exceptions.py +0 -0
  201. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/__init__.py +0 -0
  202. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/completion_response.py +0 -0
  203. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/health_status_response.py +0 -0
  204. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/register_request.py +0 -0
  205. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/register_response.py +0 -0
  206. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/set_worker_status_request.py +0 -0
  207. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/set_worker_status_response.py +0 -0
  208. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/shutdown_response.py +0 -0
  209. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/test_result_cut_api_model.py +0 -0
  210. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model/test_result_save_response.py +0 -0
  211. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/model_utils.py +0 -0
  212. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/models/__init__.py +0 -0
  213. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/api_client_syncstorage/rest.py +0 -0
  214. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit.py +0 -0
  215. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/__init__.py +0 -0
  216. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/app_properties.py +0 -0
  217. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/__init__.py +0 -0
  218. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/client_configuration.py +0 -0
  219. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/converter.py +0 -0
  220. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/helpers/__init__.py +0 -0
  221. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/helpers/bulk_autotest_helper.py +0 -0
  222. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/helpers/test_result_matching.py +0 -0
  223. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/helpers/threads_manager.py +0 -0
  224. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/models/__init__.py +0 -0
  225. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/models/threads_for_create_and_result.py +0 -0
  226. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/client/models/threads_for_update_and_result.py +0 -0
  227. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/configurations/__init__.py +0 -0
  228. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/configurations/properties_names.py +0 -0
  229. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/decorators.py +0 -0
  230. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/dynamic_methods.py +0 -0
  231. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/__init__.py +0 -0
  232. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/adapter_mode.py +0 -0
  233. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/fixture.py +0 -0
  234. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/link.py +0 -0
  235. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/link_type.py +0 -0
  236. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/outcome_type.py +0 -0
  237. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/status_type.py +0 -0
  238. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/step_result.py +0 -0
  239. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/test_result.py +0 -0
  240. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/models/test_result_with_all_fixture_step_results_model.py +0 -0
  241. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/__init__.py +0 -0
  242. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/adapter_manager_configuration.py +0 -0
  243. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/fixture_manager.py +0 -0
  244. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/fixture_storage.py +0 -0
  245. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/logger.py +0 -0
  246. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/plugin_manager.py +0 -0
  247. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/retry.py +0 -0
  248. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/step_manager.py +0 -0
  249. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/step_result_storage.py +0 -0
  250. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/sync_storage/__init__.py +0 -0
  251. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/sync_storage/sync_storage_runner.py +0 -0
  252. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/test_run_metadata.py +0 -0
  253. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/services/utils.py +0 -0
  254. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/step.py +0 -0
  255. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/utils/__init__.py +0 -0
  256. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons/utils/html_escape_utils.py +0 -0
  257. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons.egg-info/SOURCES.txt +0 -0
  258. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons.egg-info/dependency_links.txt +0 -0
  259. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons.egg-info/requires.txt +0 -0
  260. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/src/testit_python_commons.egg-info/top_level.txt +0 -0
  261. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/tests/test_app_properties.py +0 -0
  262. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/tests/test_dynamic_methods.py +0 -0
  263. {testit_python_commons-5.1.3.post580 → testit_python_commons-5.1.4.post580}/tests/test_html_escape_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testit-python-commons
3
- Version: 5.1.3.post580
3
+ Version: 5.1.4.post580
4
4
  Summary: Python commons for Test IT
5
5
  Home-page: https://github.com/testit-tms/adapters-python/
6
6
  Author: Integration team
@@ -33,7 +33,9 @@ Dynamic: summary
33
33
 
34
34
  This library includes built-in support for Sync Storage, enabling coordinated test execution across multiple workers in distributed testing environments.
35
35
 
36
- See [SYNC_STORAGE_INTEGRATION.md](SYNC_STORAGE_INTEGRATION.md) for detailed documentation on how the integration works.
36
+ See [sync-storage-interaction-spec.md](sync-storage-interaction-spec.md) for the protocol.
37
+
38
+ **Test result export (POST vs PUT):** [../docs/test-result-export-contract.md](../docs/test-result-export-contract.md)
37
39
 
38
40
  # How to enable debug logging?
39
41
  1. Add in **connection_config.ini** file from the root directory of the project:
@@ -2,7 +2,9 @@
2
2
 
3
3
  This library includes built-in support for Sync Storage, enabling coordinated test execution across multiple workers in distributed testing environments.
4
4
 
5
- See [SYNC_STORAGE_INTEGRATION.md](SYNC_STORAGE_INTEGRATION.md) for detailed documentation on how the integration works.
5
+ See [sync-storage-interaction-spec.md](sync-storage-interaction-spec.md) for the protocol.
6
+
7
+ **Test result export (POST vs PUT):** [../docs/test-result-export-contract.md](../docs/test-result-export-contract.md)
6
8
 
7
9
  # How to enable debug logging?
8
10
  1. Add in **connection_config.ini** file from the root directory of the project:
@@ -1,6 +1,6 @@
1
1
  from setuptools import find_packages, setup
2
2
 
3
- VERSION = "5.1.3.post580"
3
+ VERSION = "5.1.4.post580"
4
4
 
5
5
  setup(
6
6
  name='testit-python-commons',
@@ -30,7 +30,6 @@ from api_client_adapters.models import (
30
30
  from testit_python_commons.client.client_configuration import ClientConfiguration
31
31
  from testit_python_commons.client.converter import Converter
32
32
  from testit_python_commons.client.helpers.bulk_autotest_helper import BulkAutotestHelper
33
- from testit_python_commons.client.helpers.test_result_matching import pick_best_in_progress_id
34
33
  from typing import List
35
34
 
36
35
  from testit_python_commons.models.link import Link
@@ -63,7 +62,6 @@ class ApiClientWorker:
63
62
  self.__workflows_api = WorkflowsApi(api_client=api_client)
64
63
  self.__config = config
65
64
  self.__status_codes = self.__get_status_codes()
66
- self.__claimed_in_progress_ids = set()
67
65
 
68
66
  @staticmethod
69
67
  @adapter_logger
@@ -263,15 +261,34 @@ class ApiClientWorker:
263
261
 
264
262
  @adapter_logger
265
263
  @retry
266
- def write_tests(self, test_results: List[TestResult], fixture_containers: dict) -> None:
264
+ def write_tests(
265
+ self,
266
+ test_results: List[TestResult],
267
+ fixture_containers: dict,
268
+ finalized_external_ids: set = None) -> None:
267
269
  logging.debug("call __write_tests")
270
+ finalized_external_ids = finalized_external_ids or set()
268
271
  bulk_autotest_helper = BulkAutotestHelper(self.__autotest_api, self.__test_run_api, self.__config)
269
272
  create_count = 0
270
273
  update_count = 0
274
+ skip_count = 0
271
275
  tests_to_link_after_create = []
272
276
 
273
277
  for test_result in test_results:
274
278
  test_result = self.__add_fixtures_to_test_result(test_result, fixture_containers)
279
+ external_id = test_result.get_external_id()
280
+
281
+ if external_id in finalized_external_ids:
282
+ skip_count += 1
283
+ logging.info(
284
+ 'Bulk import: skip sendTestResults for %s (already finalized at test finish)',
285
+ external_id,
286
+ )
287
+ autotests = self.__get_autotests_by_external_id(external_id)
288
+ if autotests:
289
+ self.__update_auto_test(test_result, autotests[0])
290
+ continue
291
+
275
292
  should_create_work_item = test_result.get_automatic_creation_test_cases()
276
293
 
277
294
  test_result_model = Converter.test_result_to_testrun_result_post_model(
@@ -317,9 +334,10 @@ class ApiClientWorker:
317
334
  tests_to_link_after_create.append(test_result)
318
335
 
319
336
  logging.info(
320
- "Bulk write summary: create=%d, update=%d, total=%d",
337
+ "Bulk write summary: create=%d, update=%d, skip=%d, total=%d",
321
338
  create_count,
322
339
  update_count,
340
+ skip_count,
323
341
  len(test_results),
324
342
  )
325
343
  bulk_autotest_helper.teardown()
@@ -536,110 +554,9 @@ class ApiClientWorker:
536
554
 
537
555
  logging.debug(f'Autotest was linked with workItem "{work_item_id}" by global id "{autotest_global_id}')
538
556
 
539
- @adapter_logger
540
- def find_in_progress_test_result_id(self, external_id: str, parameters=None):
541
- if not external_id:
542
- return None
543
-
544
- candidates = []
545
- for item in self.__get_test_results():
546
- if item is None:
547
- continue
548
- if getattr(item, "autotest_external_id", None) != external_id:
549
- continue
550
- result_id = getattr(item, "id", None)
551
- if result_id is None:
552
- continue
553
- result_id_str = str(result_id)
554
- if result_id_str in self.__claimed_in_progress_ids:
555
- continue
556
- meta = self.__get_test_result_v2_meta(result_id_str)
557
- candidates.append({
558
- "id": result_id_str,
559
- "has_test_point": self.__is_valid_test_point_id(meta.get("testPointId")),
560
- "parameters": meta.get("parameters") or {},
561
- })
562
-
563
- chosen = pick_best_in_progress_id(candidates, parameters)
564
- if chosen:
565
- self.__claimed_in_progress_ids.add(chosen)
566
- return chosen
567
-
568
- def __get_test_result_v2_meta(self, test_result_id: str) -> dict:
569
- """Hack: adapters OpenAPI omits testPointId/parameters — read GET /api/v2/testResults/{id}."""
570
- import json
571
- import ssl
572
- import urllib.request
573
-
574
- base = (self.__config.get_url() or "").rstrip("/")
575
- url = f"{base}/api/v2/testResults/{test_result_id}"
576
- try:
577
- request = urllib.request.Request(
578
- url,
579
- headers={
580
- "Accept": "application/json",
581
- "Authorization": f"PrivateToken {self.__config.get_private_token()}",
582
- },
583
- method="GET",
584
- )
585
- context = None
586
- if not self.__config.get_cert_validation():
587
- context = ssl._create_unverified_context()
588
- with urllib.request.urlopen(request, timeout=10, context=context) as response:
589
- return json.loads(response.read().decode("utf-8")) or {}
590
- except Exception as exc:
591
- logging.debug("v2 getTestResult %s failed: %s", test_result_id, exc)
592
- return {}
593
-
594
- @staticmethod
595
- def __is_valid_test_point_id(test_point_id) -> bool:
596
- if test_point_id is None:
597
- return False
598
- value = str(test_point_id)
599
- return bool(value) and value != "00000000-0000-0000-0000-000000000000"
600
-
601
- def __has_valid_test_point_id_v2(self, test_result_id: str) -> bool:
602
- meta = self.__get_test_result_v2_meta(test_result_id)
603
- return self.__is_valid_test_point_id(meta.get("testPointId"))
604
-
605
- @adapter_logger
606
- @retry
607
- def __update_existing_test_result(self, test_result_id: str, test_result: TestResult) -> str:
608
- existing = self.get_test_result_by_id(test_result_id)
609
- model = Converter.convert_test_result_model_to_test_results_id_put_request(existing)
610
-
611
- outcome = test_result.get_outcome()
612
- if outcome and outcome.upper() in self.__status_codes:
613
- model.status_code = outcome
614
-
615
- if test_result.get_duration() is not None:
616
- model.duration_in_ms = round(test_result.get_duration())
617
- if test_result.get_message() is not None:
618
- model.message = test_result.get_message()
619
- if test_result.get_traces() is not None:
620
- model.trace = test_result.get_traces()
621
-
622
- self.__test_results_api.adapters_test_results_id_put(
623
- id=test_result_id,
624
- adapters_test_results_id_put_request=model,
625
- )
626
- logging.debug(
627
- 'Updated existing test result "%s" for autotest "%s"',
628
- test_result_id,
629
- test_result.get_autotest_name(),
630
- )
631
- return test_result_id
632
-
633
557
  @adapter_logger
634
558
  @retry
635
559
  def __load_test_result(self, test_result: TestResult) -> str:
636
- existing_id = self.find_in_progress_test_result_id(
637
- test_result.get_external_id(),
638
- test_result.get_parameters(),
639
- )
640
- if existing_id:
641
- return self.__update_existing_test_result(existing_id, test_result)
642
-
643
560
  model = Converter.test_result_to_testrun_result_post_model(
644
561
  test_result,
645
562
  self.__config.get_configuration_id(),
@@ -649,10 +566,19 @@ class ApiClientWorker:
649
566
  id=self.__config.get_test_run_id(),
650
567
  auto_test_results_for_test_run_model=[model])
651
568
 
652
- logging.debug(f'Result of the autotest "{test_result.get_autotest_name()}" was set '
653
- f'in the test run "{self.__config.get_test_run_id()}"')
569
+ test_result_id = Converter.get_test_result_id_from_testrun_result_post_response(response)
570
+ logging.debug(
571
+ 'Finalized test result via sendTestResults for %s (resultId=%s)',
572
+ test_result.get_external_id(),
573
+ test_result_id,
574
+ )
575
+ logging.debug(
576
+ 'Result of the autotest "%s" was set in the test run "%s"',
577
+ test_result.get_autotest_name(),
578
+ self.__config.get_test_run_id(),
579
+ )
654
580
 
655
- return Converter.get_test_result_id_from_testrun_result_post_response(response)
581
+ return test_result_id
656
582
 
657
583
  @adapter_logger
658
584
  @retry
@@ -661,6 +587,8 @@ class ApiClientWorker:
661
587
 
662
588
  @adapter_logger
663
589
  def update_test_results(self, fixtures_containers: dict, test_result_ids: dict) -> None:
590
+ # PUT only setup/teardown fixtures — never status or step_results.
591
+ # See docs/test-result-export-contract.md
664
592
  test_results = Converter.fixtures_containers_to_test_results_with_all_fixture_step_results(
665
593
  fixtures_containers, test_result_ids)
666
594
 
@@ -189,10 +189,9 @@ class AdapterManager:
189
189
  self.__sync_storage_runner.set_is_already_in_progress(True)
190
190
 
191
191
  try:
192
- # Keep final outcome. Prefer PUT on existing TP-bound InProgress (mode=0);
193
- # never invent a second InProgress via setAutoTestResultsForTestRun.
192
+ # Final status via sendTestResults (create); never change status via PUT.
194
193
  logging.debug(
195
- "SyncStorage accepted %s; write final status (update existing if present)",
194
+ "SyncStorage accepted %s; sendTestResults with final status",
196
195
  test_result.get_external_id(),
197
196
  )
198
197
  self._write_test_realtime_internal(test_result)
@@ -263,7 +262,11 @@ class AdapterManager:
263
262
  for test_result in self.__test_results:
264
263
  test_result.set_automatic_creation_test_cases(should_create_work_item)
265
264
 
266
- self.__api_client.write_tests(self.__test_results, fixtures)
265
+ self.__api_client.write_tests(
266
+ self.__test_results,
267
+ fixtures,
268
+ finalized_external_ids=set(self.__test_result_map.keys()),
269
+ )
267
270
 
268
271
  @adapter_logger
269
272
  def load_attachments(self, attach_paths):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: testit-python-commons
3
- Version: 5.1.3.post580
3
+ Version: 5.1.4.post580
4
4
  Summary: Python commons for Test IT
5
5
  Home-page: https://github.com/testit-tms/adapters-python/
6
6
  Author: Integration team
@@ -33,7 +33,9 @@ Dynamic: summary
33
33
 
34
34
  This library includes built-in support for Sync Storage, enabling coordinated test execution across multiple workers in distributed testing environments.
35
35
 
36
- See [SYNC_STORAGE_INTEGRATION.md](SYNC_STORAGE_INTEGRATION.md) for detailed documentation on how the integration works.
36
+ See [sync-storage-interaction-spec.md](sync-storage-interaction-spec.md) for the protocol.
37
+
38
+ **Test result export (POST vs PUT):** [../docs/test-result-export-contract.md](../docs/test-result-export-contract.md)
37
39
 
38
40
  # How to enable debug logging?
39
41
  1. Add in **connection_config.ini** file from the root directory of the project: