lucius-mcp 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1433) hide show
  1. lucius_mcp-0.1.0.dist-info/METADATA +269 -0
  2. lucius_mcp-0.1.0.dist-info/RECORD +1433 -0
  3. lucius_mcp-0.1.0.dist-info/WHEEL +4 -0
  4. lucius_mcp-0.1.0.dist-info/entry_points.txt +2 -0
  5. lucius_mcp-0.1.0.dist-info/licenses/LICENSE +201 -0
  6. src/__init__.py +0 -0
  7. src/client/__init__.py +59 -0
  8. src/client/client.py +1203 -0
  9. src/client/exceptions.py +61 -0
  10. src/client/generated/README.md +878 -0
  11. src/client/generated/__init__.py +1438 -0
  12. src/client/generated/api/__init__.py +17 -0
  13. src/client/generated/api/launch_controller_api.py +8330 -0
  14. src/client/generated/api/launch_search_controller_api.py +644 -0
  15. src/client/generated/api/shared_step_attachment_controller_api.py +1734 -0
  16. src/client/generated/api/shared_step_controller_api.py +1949 -0
  17. src/client/generated/api/shared_step_scenario_controller_api.py +2597 -0
  18. src/client/generated/api/test_case_attachment_controller_api.py +1734 -0
  19. src/client/generated/api/test_case_bulk_controller_api.py +5341 -0
  20. src/client/generated/api/test_case_controller_api.py +3926 -0
  21. src/client/generated/api/test_case_custom_field_controller_api.py +863 -0
  22. src/client/generated/api/test_case_overview_controller_api.py +294 -0
  23. src/client/generated/api/test_case_scenario_controller_api.py +3054 -0
  24. src/client/generated/api/test_case_search_controller_api.py +678 -0
  25. src/client/generated/api/test_case_tag_controller_api.py +581 -0
  26. src/client/generated/api_client.py +807 -0
  27. src/client/generated/api_response.py +21 -0
  28. src/client/generated/configuration.py +573 -0
  29. src/client/generated/docs/AccessGroupBulkDto.md +29 -0
  30. src/client/generated/docs/AccessGroupCreateDto.md +31 -0
  31. src/client/generated/docs/AccessGroupDto.md +33 -0
  32. src/client/generated/docs/AccessGroupPaDto.md +33 -0
  33. src/client/generated/docs/AccessGroupPatchDto.md +31 -0
  34. src/client/generated/docs/AccessGroupProjectAccessDto.md +30 -0
  35. src/client/generated/docs/AccessGroupProjectsAddDto.md +29 -0
  36. src/client/generated/docs/AccessGroupUserDto.md +29 -0
  37. src/client/generated/docs/AccessGroupUsersAddDto.md +29 -0
  38. src/client/generated/docs/AllowedRoleDto.md +12 -0
  39. src/client/generated/docs/AnalyticAutomationTrendDto.md +33 -0
  40. src/client/generated/docs/AnalyticDto.md +38 -0
  41. src/client/generated/docs/AnalyticInterval.md +16 -0
  42. src/client/generated/docs/AnalyticLaunchDurationHistogramDto.md +34 -0
  43. src/client/generated/docs/AnalyticMuteTrendDto.md +30 -0
  44. src/client/generated/docs/AnalyticTcAutomationCountDto.md +30 -0
  45. src/client/generated/docs/AnalyticTcStatusCountDto.md +32 -0
  46. src/client/generated/docs/AnalyticTrByStatusTrendDto.md +33 -0
  47. src/client/generated/docs/AqlValidateResponseDto.md +30 -0
  48. src/client/generated/docs/AssignRequestDto.md +29 -0
  49. src/client/generated/docs/AsyncJobDto.md +33 -0
  50. src/client/generated/docs/AsyncJobStatusDto.md +18 -0
  51. src/client/generated/docs/AsyncJobStepDto.md +35 -0
  52. src/client/generated/docs/AsyncJobStepStatusDto.md +16 -0
  53. src/client/generated/docs/AsyncJobWithStepsDto.md +34 -0
  54. src/client/generated/docs/AttachmentRow.md +33 -0
  55. src/client/generated/docs/AttachmentStepDto.md +29 -0
  56. src/client/generated/docs/Attrs.md +29 -0
  57. src/client/generated/docs/AuditActionTypeDto.md +14 -0
  58. src/client/generated/docs/BlobStorageStats.md +31 -0
  59. src/client/generated/docs/BlobStorageUpdateStats.md +33 -0
  60. src/client/generated/docs/BodyStepDto.md +30 -0
  61. src/client/generated/docs/BoldMark.md +28 -0
  62. src/client/generated/docs/BusinessMetricDto.md +30 -0
  63. src/client/generated/docs/CategoryCreateDto.md +32 -0
  64. src/client/generated/docs/CategoryDto.md +37 -0
  65. src/client/generated/docs/CategoryMatcherCreateDto.md +33 -0
  66. src/client/generated/docs/CategoryMatcherDto.md +38 -0
  67. src/client/generated/docs/CategoryMatcherPatchDto.md +32 -0
  68. src/client/generated/docs/CategoryPatchDto.md +31 -0
  69. src/client/generated/docs/CfvMergeToExistingGlobalValueDto.md +30 -0
  70. src/client/generated/docs/CfvMergeToNewGlobalValueDto.md +32 -0
  71. src/client/generated/docs/Ci.md +30 -0
  72. src/client/generated/docs/CleanerSchemaCreateDto.md +32 -0
  73. src/client/generated/docs/CleanerSchemaDto.md +37 -0
  74. src/client/generated/docs/CleanerSchemaPatchDto.md +31 -0
  75. src/client/generated/docs/CleanerSchemaTargetDto.md +14 -0
  76. src/client/generated/docs/CodeBlockDocumentNode.md +30 -0
  77. src/client/generated/docs/CodeMark.md +28 -0
  78. src/client/generated/docs/CommentCreateDto.md +30 -0
  79. src/client/generated/docs/CommentDto.md +38 -0
  80. src/client/generated/docs/CommentPatchDto.md +29 -0
  81. src/client/generated/docs/CreateLaunchEvent.md +32 -0
  82. src/client/generated/docs/CsvImportOptions.md +33 -0
  83. src/client/generated/docs/CustomFieldBulkAddToProjectsDto.md +30 -0
  84. src/client/generated/docs/CustomFieldBulkArchiveDto.md +30 -0
  85. src/client/generated/docs/CustomFieldCreateDto.md +31 -0
  86. src/client/generated/docs/CustomFieldDto.md +39 -0
  87. src/client/generated/docs/CustomFieldExportFieldMapping.md +32 -0
  88. src/client/generated/docs/CustomFieldImportFieldMapping.md +31 -0
  89. src/client/generated/docs/CustomFieldMergeDto.md +30 -0
  90. src/client/generated/docs/CustomFieldPatchDto.md +32 -0
  91. src/client/generated/docs/CustomFieldProjectCountDto.md +30 -0
  92. src/client/generated/docs/CustomFieldProjectDto.md +40 -0
  93. src/client/generated/docs/CustomFieldProjectPatchDto.md +31 -0
  94. src/client/generated/docs/CustomFieldProjectWithValuesDto.md +30 -0
  95. src/client/generated/docs/CustomFieldRawDto.md +35 -0
  96. src/client/generated/docs/CustomFieldSchemaCountDto.md +30 -0
  97. src/client/generated/docs/CustomFieldSchemaCreateDto.md +31 -0
  98. src/client/generated/docs/CustomFieldSchemaDto.md +36 -0
  99. src/client/generated/docs/CustomFieldSchemaPatchDto.md +30 -0
  100. src/client/generated/docs/CustomFieldValueBulkDeleteDto.md +30 -0
  101. src/client/generated/docs/CustomFieldValueBulkMergeDto.md +33 -0
  102. src/client/generated/docs/CustomFieldValueDto.md +30 -0
  103. src/client/generated/docs/CustomFieldValuePatchDto.md +31 -0
  104. src/client/generated/docs/CustomFieldValueProjectCreateDto.md +32 -0
  105. src/client/generated/docs/CustomFieldValueProjectMergeByIdDto.md +29 -0
  106. src/client/generated/docs/CustomFieldValueProjectMergeByNameDto.md +32 -0
  107. src/client/generated/docs/CustomFieldValueProjectPatchDto.md +31 -0
  108. src/client/generated/docs/CustomFieldValueProjectRenameDto.md +30 -0
  109. src/client/generated/docs/CustomFieldValueWithCfDto.md +32 -0
  110. src/client/generated/docs/CustomFieldValueWithTcCountDto.md +33 -0
  111. src/client/generated/docs/CustomFieldWithValuesDto.md +30 -0
  112. src/client/generated/docs/DashboardCopyDto.md +31 -0
  113. src/client/generated/docs/DashboardCreateDto.md +31 -0
  114. src/client/generated/docs/DashboardDragAndDropDto.md +30 -0
  115. src/client/generated/docs/DashboardDto.md +34 -0
  116. src/client/generated/docs/DashboardOverviewDto.md +35 -0
  117. src/client/generated/docs/DashboardPatchDto.md +29 -0
  118. src/client/generated/docs/DashboardUpdateDto.md +30 -0
  119. src/client/generated/docs/DefaultCustomFieldValueDto.md +31 -0
  120. src/client/generated/docs/DefaultTextMarkupDocument.md +29 -0
  121. src/client/generated/docs/DefaultTextMarkupDocumentAllOfContent.md +31 -0
  122. src/client/generated/docs/DefaultWebhookSettings.md +30 -0
  123. src/client/generated/docs/DefaultWebhookSettingsAllOfSubjects.md +31 -0
  124. src/client/generated/docs/DefectBulkDto.md +30 -0
  125. src/client/generated/docs/DefectCountRowDto.md +33 -0
  126. src/client/generated/docs/DefectCreateDto.md +34 -0
  127. src/client/generated/docs/DefectDto.md +37 -0
  128. src/client/generated/docs/DefectIssueLinkDto.md +30 -0
  129. src/client/generated/docs/DefectMatcherCreateDto.md +32 -0
  130. src/client/generated/docs/DefectMatcherDto.md +37 -0
  131. src/client/generated/docs/DefectMatcherPatchDto.md +31 -0
  132. src/client/generated/docs/DefectOverviewDto.md +40 -0
  133. src/client/generated/docs/DefectPatchDto.md +31 -0
  134. src/client/generated/docs/DefectRowDto.md +32 -0
  135. src/client/generated/docs/DefectWebhook.md +29 -0
  136. src/client/generated/docs/DiffValueChangeBoolean.md +30 -0
  137. src/client/generated/docs/DiffValueChangeLong.md +30 -0
  138. src/client/generated/docs/DiffValueChangeSetLong.md +30 -0
  139. src/client/generated/docs/DiffValueChangeString.md +30 -0
  140. src/client/generated/docs/DocumentNode.md +29 -0
  141. src/client/generated/docs/EnvVarCreateDto.md +29 -0
  142. src/client/generated/docs/EnvVarDto.md +34 -0
  143. src/client/generated/docs/EnvVarMergeDto.md +30 -0
  144. src/client/generated/docs/EnvVarPatchDto.md +29 -0
  145. src/client/generated/docs/EnvVarSchemaCreateDto.md +31 -0
  146. src/client/generated/docs/EnvVarSchemaDto.md +36 -0
  147. src/client/generated/docs/EnvVarSchemaPatchDto.md +30 -0
  148. src/client/generated/docs/EnvVarValueCreateDto.md +30 -0
  149. src/client/generated/docs/EnvVarValueDto.md +31 -0
  150. src/client/generated/docs/EnvVarValuePatchDto.md +29 -0
  151. src/client/generated/docs/EnvironmentSetDto.md +29 -0
  152. src/client/generated/docs/EventType.md +16 -0
  153. src/client/generated/docs/EventTypeSettings.md +30 -0
  154. src/client/generated/docs/ExampleExportFieldMapping.md +33 -0
  155. src/client/generated/docs/ExpectedBodyStepDto.md +30 -0
  156. src/client/generated/docs/ExportFieldMappingTestCaseExportField.md +30 -0
  157. src/client/generated/docs/ExportFieldMappingTestResultExportField.md +30 -0
  158. src/client/generated/docs/ExportRequestDto.md +41 -0
  159. src/client/generated/docs/ExportStatus.md +14 -0
  160. src/client/generated/docs/ExportType.md +16 -0
  161. src/client/generated/docs/ExtFormField.md +33 -0
  162. src/client/generated/docs/ExtFormFieldCheckbox.md +30 -0
  163. src/client/generated/docs/ExtFormFieldComposite.md +30 -0
  164. src/client/generated/docs/ExtFormFieldExternalSelect.md +29 -0
  165. src/client/generated/docs/ExtFormFieldFormChoice.md +32 -0
  166. src/client/generated/docs/ExtFormFieldFormChoiceOption.md +30 -0
  167. src/client/generated/docs/ExtFormFieldList.md +30 -0
  168. src/client/generated/docs/ExtFormFieldNumber.md +31 -0
  169. src/client/generated/docs/ExtFormFieldOption.md +30 -0
  170. src/client/generated/docs/ExtFormFieldPassword.md +30 -0
  171. src/client/generated/docs/ExtFormFieldSelect.md +33 -0
  172. src/client/generated/docs/ExtFormFieldSlider.md +34 -0
  173. src/client/generated/docs/ExtFormFieldText.md +32 -0
  174. src/client/generated/docs/ExtFormFieldTextarea.md +31 -0
  175. src/client/generated/docs/ExtFormFieldUnknown.md +30 -0
  176. src/client/generated/docs/ExtIssueLink.md +33 -0
  177. src/client/generated/docs/ExtIssueType.md +30 -0
  178. src/client/generated/docs/ExtProject.md +31 -0
  179. src/client/generated/docs/ExtSelectValue.md +30 -0
  180. src/client/generated/docs/ExternalLinkDto.md +31 -0
  181. src/client/generated/docs/ExternalRunResponseDto.md +32 -0
  182. src/client/generated/docs/ExternalRunStartRequestDto.md +33 -0
  183. src/client/generated/docs/ExternalRunStopRequestDto.md +32 -0
  184. src/client/generated/docs/FileUploadResponseDto.md +29 -0
  185. src/client/generated/docs/FilterBaseSetDto.md +29 -0
  186. src/client/generated/docs/FilterCreateDto.md +34 -0
  187. src/client/generated/docs/FilterDto.md +40 -0
  188. src/client/generated/docs/FilterPatchDto.md +31 -0
  189. src/client/generated/docs/FilterTypeDto.md +14 -0
  190. src/client/generated/docs/FindAll29200Response.md +39 -0
  191. src/client/generated/docs/GlobalPermissionsDto.md +29 -0
  192. src/client/generated/docs/GlobalSettingsDto.md +29 -0
  193. src/client/generated/docs/GlobalSettingsProjectCreatePatchDto.md +29 -0
  194. src/client/generated/docs/GridPosDto.md +32 -0
  195. src/client/generated/docs/GroupBy.md +14 -0
  196. src/client/generated/docs/GroupNodeContext.md +30 -0
  197. src/client/generated/docs/IdAndNameOnlyDto.md +30 -0
  198. src/client/generated/docs/IdOnlyDto.md +29 -0
  199. src/client/generated/docs/ImportRequestDto.md +41 -0
  200. src/client/generated/docs/ImportRequestInfoDto.md +31 -0
  201. src/client/generated/docs/ImportRequestStateDto.md +16 -0
  202. src/client/generated/docs/ImportRequestTypeDto.md +10 -0
  203. src/client/generated/docs/IntegrationCreateDto.md +34 -0
  204. src/client/generated/docs/IntegrationDto.md +34 -0
  205. src/client/generated/docs/IntegrationExportCreateDto.md +39 -0
  206. src/client/generated/docs/IntegrationExportDto.md +42 -0
  207. src/client/generated/docs/IntegrationExportPatchDto.md +37 -0
  208. src/client/generated/docs/IntegrationFieldsFormDto.md +34 -0
  209. src/client/generated/docs/IntegrationFieldsFormDtoDefaultProjectFieldsInner.md +43 -0
  210. src/client/generated/docs/IntegrationInfoDto.md +33 -0
  211. src/client/generated/docs/IntegrationLinksFixedDto.md +29 -0
  212. src/client/generated/docs/IntegrationOperationTypeDto.md +30 -0
  213. src/client/generated/docs/IntegrationPatchDto.md +34 -0
  214. src/client/generated/docs/IntegrationRoutineTypeDto.md +16 -0
  215. src/client/generated/docs/IntegrationTypeDto.md +76 -0
  216. src/client/generated/docs/IntegrationValidateDto.md +32 -0
  217. src/client/generated/docs/IntegrationWebhookCreateDto.md +29 -0
  218. src/client/generated/docs/IntegrationWebhookDto.md +36 -0
  219. src/client/generated/docs/IntegrationWebhookLogDto.md +32 -0
  220. src/client/generated/docs/IntegrationWebhookPatchDto.md +29 -0
  221. src/client/generated/docs/IntegrationWebhookTokenDto.md +36 -0
  222. src/client/generated/docs/IssueCreateDto.md +30 -0
  223. src/client/generated/docs/IssueDto.md +37 -0
  224. src/client/generated/docs/IssueImportFieldMapping.md +31 -0
  225. src/client/generated/docs/IssueIntegrationExportFieldMapping.md +32 -0
  226. src/client/generated/docs/IssuePatchDto.md +29 -0
  227. src/client/generated/docs/IssueSchemaCreateDto.md +31 -0
  228. src/client/generated/docs/IssueSchemaDto.md +36 -0
  229. src/client/generated/docs/IssueSchemaPatchDto.md +30 -0
  230. src/client/generated/docs/IssueToCreateDto.md +32 -0
  231. src/client/generated/docs/ItalicMark.md +28 -0
  232. src/client/generated/docs/Job.md +33 -0
  233. src/client/generated/docs/JobCreateDto.md +32 -0
  234. src/client/generated/docs/JobDto.md +33 -0
  235. src/client/generated/docs/JobInfoDto.md +32 -0
  236. src/client/generated/docs/JobMapping.md +30 -0
  237. src/client/generated/docs/JobParameterDto.md +30 -0
  238. src/client/generated/docs/JobPatchDto.md +32 -0
  239. src/client/generated/docs/JobRerunRequestDto.md +29 -0
  240. src/client/generated/docs/JobRun.md +33 -0
  241. src/client/generated/docs/JobRunDto.md +41 -0
  242. src/client/generated/docs/JobRunRequestDto.md +35 -0
  243. src/client/generated/docs/JobRunStageDto.md +16 -0
  244. src/client/generated/docs/JobRunStatusDto.md +16 -0
  245. src/client/generated/docs/JobRunUploadInfoDto.md +29 -0
  246. src/client/generated/docs/JobTestCasesStatDto.md +30 -0
  247. src/client/generated/docs/Launch.md +32 -0
  248. src/client/generated/docs/LaunchCleanupRequest.md +31 -0
  249. src/client/generated/docs/LaunchCloseConfigDto.md +32 -0
  250. src/client/generated/docs/LaunchControllerApi.md +2025 -0
  251. src/client/generated/docs/LaunchCopyRqDto.md +34 -0
  252. src/client/generated/docs/LaunchCreateAndUploadDto.md +34 -0
  253. src/client/generated/docs/LaunchCreateDto.md +35 -0
  254. src/client/generated/docs/LaunchDiffCell.md +32 -0
  255. src/client/generated/docs/LaunchDiffMode.md +14 -0
  256. src/client/generated/docs/LaunchDiffRow.md +31 -0
  257. src/client/generated/docs/LaunchDiffStatusChangeDto.md +39 -0
  258. src/client/generated/docs/LaunchDiffTestResult.md +33 -0
  259. src/client/generated/docs/LaunchDiffTestResultDto.md +34 -0
  260. src/client/generated/docs/LaunchDto.md +39 -0
  261. src/client/generated/docs/LaunchExistingUploadDto.md +29 -0
  262. src/client/generated/docs/LaunchLiveDocConfigDto.md +30 -0
  263. src/client/generated/docs/LaunchMemberStatsDto.md +36 -0
  264. src/client/generated/docs/LaunchMergeDto.md +30 -0
  265. src/client/generated/docs/LaunchPatchDto.md +34 -0
  266. src/client/generated/docs/LaunchPdfOptions.md +38 -0
  267. src/client/generated/docs/LaunchPdfPart.md +24 -0
  268. src/client/generated/docs/LaunchPdfStructure.md +29 -0
  269. src/client/generated/docs/LaunchPreviewDto.md +45 -0
  270. src/client/generated/docs/LaunchProgressDto.md +29 -0
  271. src/client/generated/docs/LaunchRowDto.md +32 -0
  272. src/client/generated/docs/LaunchSearchControllerApi.md +152 -0
  273. src/client/generated/docs/LaunchTagCreateDto.md +29 -0
  274. src/client/generated/docs/LaunchTagDto.md +30 -0
  275. src/client/generated/docs/LaunchTagPatchDto.md +29 -0
  276. src/client/generated/docs/LaunchTestCasesAddDto.md +33 -0
  277. src/client/generated/docs/LaunchTestPlanAddDto.md +30 -0
  278. src/client/generated/docs/LaunchUploadResponseDto.md +31 -0
  279. src/client/generated/docs/LaunchVariableDto.md +30 -0
  280. src/client/generated/docs/LaunchWebhook.md +30 -0
  281. src/client/generated/docs/LineBreakParagraphNode.md +28 -0
  282. src/client/generated/docs/LinkExportFieldMapping.md +31 -0
  283. src/client/generated/docs/LinkImportFieldMapping.md +32 -0
  284. src/client/generated/docs/LinkMark.md +29 -0
  285. src/client/generated/docs/ListSelectionDto.md +30 -0
  286. src/client/generated/docs/ManualSessionRequestDto.md +30 -0
  287. src/client/generated/docs/Matcher.md +31 -0
  288. src/client/generated/docs/MemberCreateDto.md +30 -0
  289. src/client/generated/docs/MemberDto.md +31 -0
  290. src/client/generated/docs/MemberPatchDto.md +29 -0
  291. src/client/generated/docs/Metric.md +12 -0
  292. src/client/generated/docs/MfaGlobalSettingsDto.md +29 -0
  293. src/client/generated/docs/MfaGlobalSettingsPatchDto.md +29 -0
  294. src/client/generated/docs/MultiValueExportFieldMapping.md +31 -0
  295. src/client/generated/docs/MultiValueImportFieldMapping.md +30 -0
  296. src/client/generated/docs/MultiValueMapStringString.md +30 -0
  297. src/client/generated/docs/MuteCreateDto.md +32 -0
  298. src/client/generated/docs/MuteDto.md +38 -0
  299. src/client/generated/docs/NameOnlyDto.md +29 -0
  300. src/client/generated/docs/NodeType.md +12 -0
  301. src/client/generated/docs/NormalizedScenarioDto.md +34 -0
  302. src/client/generated/docs/NormalizedScenarioDtoAttachmentsValue.md +39 -0
  303. src/client/generated/docs/NormalizedScenarioStepDto.md +42 -0
  304. src/client/generated/docs/OrderedValueDtoString.md +30 -0
  305. src/client/generated/docs/PageAccessGroupDto.md +39 -0
  306. src/client/generated/docs/PageAccessGroupDtoSort.md +31 -0
  307. src/client/generated/docs/PageAccessGroupPaDto.md +39 -0
  308. src/client/generated/docs/PageAccessGroupUserDto.md +39 -0
  309. src/client/generated/docs/PageAsyncJobDto.md +39 -0
  310. src/client/generated/docs/PageCategoryDto.md +39 -0
  311. src/client/generated/docs/PageCategoryMatcherDto.md +39 -0
  312. src/client/generated/docs/PageCleanerSchemaDto.md +39 -0
  313. src/client/generated/docs/PageCommentDto.md +39 -0
  314. src/client/generated/docs/PageCustomFieldProjectDto.md +39 -0
  315. src/client/generated/docs/PageCustomFieldSchemaDto.md +39 -0
  316. src/client/generated/docs/PageCustomFieldValueWithTcCountDto.md +39 -0
  317. src/client/generated/docs/PageDashboardDto.md +39 -0
  318. src/client/generated/docs/PageDefectCountRowDto.md +39 -0
  319. src/client/generated/docs/PageDefectDto.md +39 -0
  320. src/client/generated/docs/PageDefectMatcherDto.md +39 -0
  321. src/client/generated/docs/PageDefectRowDto.md +39 -0
  322. src/client/generated/docs/PageEnvVarSchemaDto.md +39 -0
  323. src/client/generated/docs/PageExportRequestDto.md +39 -0
  324. src/client/generated/docs/PageFilterDto.md +39 -0
  325. src/client/generated/docs/PageIdAndNameOnlyDto.md +39 -0
  326. src/client/generated/docs/PageImportRequestDto.md +39 -0
  327. src/client/generated/docs/PageIntegrationDto.md +39 -0
  328. src/client/generated/docs/PageIntegrationExportDto.md +39 -0
  329. src/client/generated/docs/PageIntegrationInfoDto.md +39 -0
  330. src/client/generated/docs/PageIntegrationWebhookDto.md +39 -0
  331. src/client/generated/docs/PageIntegrationWebhookLogDto.md +39 -0
  332. src/client/generated/docs/PageIssueDto.md +39 -0
  333. src/client/generated/docs/PageIssueSchemaDto.md +39 -0
  334. src/client/generated/docs/PageJobDto.md +39 -0
  335. src/client/generated/docs/PageLaunchDiffRow.md +39 -0
  336. src/client/generated/docs/PageLaunchDto.md +39 -0
  337. src/client/generated/docs/PageLaunchMemberStatsDto.md +39 -0
  338. src/client/generated/docs/PageLaunchPreviewDto.md +39 -0
  339. src/client/generated/docs/PageLaunchRowDto.md +39 -0
  340. src/client/generated/docs/PageLaunchTagDto.md +39 -0
  341. src/client/generated/docs/PageLaunchVariableDto.md +39 -0
  342. src/client/generated/docs/PageMemberDto.md +39 -0
  343. src/client/generated/docs/PageMuteDto.md +39 -0
  344. src/client/generated/docs/PagePermissionSetDto.md +39 -0
  345. src/client/generated/docs/PageProjectCollaboratorAccessDto.md +39 -0
  346. src/client/generated/docs/PageProjectCollaboratorDto.md +39 -0
  347. src/client/generated/docs/PageProjectCustomFieldDto.md +39 -0
  348. src/client/generated/docs/PageProjectDto.md +39 -0
  349. src/client/generated/docs/PageProjectGroupAccessDto.md +39 -0
  350. src/client/generated/docs/PageProjectIntegrationDto.md +39 -0
  351. src/client/generated/docs/PageProjectSuggestDto.md +39 -0
  352. src/client/generated/docs/PageRoleSchemaDto.md +39 -0
  353. src/client/generated/docs/PageSharedStepAttachmentRowDto.md +39 -0
  354. src/client/generated/docs/PageSharedStepDto.md +39 -0
  355. src/client/generated/docs/PageStatisticWidgetItem.md +39 -0
  356. src/client/generated/docs/PageStatusDto.md +39 -0
  357. src/client/generated/docs/PageTemplateDto.md +39 -0
  358. src/client/generated/docs/PageTestCaseAttachmentRowDto.md +39 -0
  359. src/client/generated/docs/PageTestCaseAuditLogEntryDto.md +39 -0
  360. src/client/generated/docs/PageTestCaseDto.md +39 -0
  361. src/client/generated/docs/PageTestCaseExampleDto.md +39 -0
  362. src/client/generated/docs/PageTestCaseFlatDto.md +39 -0
  363. src/client/generated/docs/PageTestCaseRowDto.md +39 -0
  364. src/client/generated/docs/PageTestCaseTreeGroupDto.md +39 -0
  365. src/client/generated/docs/PageTestCaseTreeLeafDto.md +39 -0
  366. src/client/generated/docs/PageTestCaseTreeNodeDto.md +39 -0
  367. src/client/generated/docs/PageTestCaseTreeNodeDtoContentInner.md +43 -0
  368. src/client/generated/docs/PageTestFixtureResultAttachmentRowDto.md +39 -0
  369. src/client/generated/docs/PageTestKeySchemaDto.md +39 -0
  370. src/client/generated/docs/PageTestLayerDto.md +39 -0
  371. src/client/generated/docs/PageTestLayerSchemaDto.md +39 -0
  372. src/client/generated/docs/PageTestPlanDto.md +39 -0
  373. src/client/generated/docs/PageTestPlanRowDto.md +39 -0
  374. src/client/generated/docs/PageTestResultAttachmentRowDto.md +39 -0
  375. src/client/generated/docs/PageTestResultDefectMatchDto.md +39 -0
  376. src/client/generated/docs/PageTestResultDto.md +39 -0
  377. src/client/generated/docs/PageTestResultFlatDto.md +39 -0
  378. src/client/generated/docs/PageTestResultHistoryDto.md +39 -0
  379. src/client/generated/docs/PageTestResultRetriesRowDto.md +39 -0
  380. src/client/generated/docs/PageTestResultRowDto.md +39 -0
  381. src/client/generated/docs/PageTestResultTreeGroupDto.md +39 -0
  382. src/client/generated/docs/PageTestResultTreeLeafDto.md +39 -0
  383. src/client/generated/docs/PageTestResultTreeNodeDto.md +39 -0
  384. src/client/generated/docs/PageTestResultTreeNodeDtoContentInner.md +46 -0
  385. src/client/generated/docs/PageTreeDto.md +39 -0
  386. src/client/generated/docs/PageTreeDtoV2.md +39 -0
  387. src/client/generated/docs/PageTreePathDto.md +39 -0
  388. src/client/generated/docs/PageWebhookDto.md +39 -0
  389. src/client/generated/docs/PageWidgetDto.md +39 -0
  390. src/client/generated/docs/PageWorkflowDto.md +39 -0
  391. src/client/generated/docs/PageWorkflowSchemaDto.md +39 -0
  392. src/client/generated/docs/Pageable.md +34 -0
  393. src/client/generated/docs/ParagraphDocumentNode.md +30 -0
  394. src/client/generated/docs/ParagraphDocumentNodeAllOfContent.md +30 -0
  395. src/client/generated/docs/ParagraphNode.md +29 -0
  396. src/client/generated/docs/Parameter.md +30 -0
  397. src/client/generated/docs/ParameterValueDto.md +30 -0
  398. src/client/generated/docs/PermissionDto.md +16 -0
  399. src/client/generated/docs/PermissionSetCreateDto.md +30 -0
  400. src/client/generated/docs/PermissionSetDto.md +31 -0
  401. src/client/generated/docs/PermissionSetPatchDto.md +30 -0
  402. src/client/generated/docs/ProjectAccessCollaboratorAddDto.md +29 -0
  403. src/client/generated/docs/ProjectAccessGroupAddDto.md +29 -0
  404. src/client/generated/docs/ProjectCategoryAddDto.md +29 -0
  405. src/client/generated/docs/ProjectCategoryMatcherAddDto.md +29 -0
  406. src/client/generated/docs/ProjectCategoryMatcherRemoveDto.md +29 -0
  407. src/client/generated/docs/ProjectCategoryRemoveDto.md +29 -0
  408. src/client/generated/docs/ProjectCollaboratorAccessDto.md +35 -0
  409. src/client/generated/docs/ProjectCollaboratorDto.md +31 -0
  410. src/client/generated/docs/ProjectCreateDto.md +33 -0
  411. src/client/generated/docs/ProjectCustomFieldDto.md +39 -0
  412. src/client/generated/docs/ProjectDto.md +39 -0
  413. src/client/generated/docs/ProjectGroupAccessAddDto.md +30 -0
  414. src/client/generated/docs/ProjectGroupAccessDto.md +31 -0
  415. src/client/generated/docs/ProjectIntegrationCreateDto.md +32 -0
  416. src/client/generated/docs/ProjectIntegrationDto.md +36 -0
  417. src/client/generated/docs/ProjectIntegrationFieldsFormDto.md +34 -0
  418. src/client/generated/docs/ProjectIntegrationPatchDto.md +31 -0
  419. src/client/generated/docs/ProjectIntegrationValidateDto.md +31 -0
  420. src/client/generated/docs/ProjectMetricDto.md +33 -0
  421. src/client/generated/docs/ProjectPatchDto.md +33 -0
  422. src/client/generated/docs/ProjectPropertyCreateDto.md +31 -0
  423. src/client/generated/docs/ProjectPropertyDto.md +32 -0
  424. src/client/generated/docs/ProjectPropertyPatchDto.md +30 -0
  425. src/client/generated/docs/ProjectStatsDto.md +32 -0
  426. src/client/generated/docs/ProjectSuggestDto.md +32 -0
  427. src/client/generated/docs/ProjectSyncRequest.md +35 -0
  428. src/client/generated/docs/ProjectTestCaseCountDto.md +30 -0
  429. src/client/generated/docs/ResolveRequestV2Dto.md +36 -0
  430. src/client/generated/docs/Retry.md +31 -0
  431. src/client/generated/docs/RoleCreateDto.md +29 -0
  432. src/client/generated/docs/RoleDto.md +34 -0
  433. src/client/generated/docs/RoleExportFieldMapping.md +32 -0
  434. src/client/generated/docs/RoleImportFieldMapping.md +31 -0
  435. src/client/generated/docs/RolePatchDto.md +29 -0
  436. src/client/generated/docs/RoleSchemaCreateDto.md +31 -0
  437. src/client/generated/docs/RoleSchemaDto.md +36 -0
  438. src/client/generated/docs/RoleSchemaPatchDto.md +30 -0
  439. src/client/generated/docs/ScenarioExportFieldMapping.md +32 -0
  440. src/client/generated/docs/ScenarioStepCopyDto.md +31 -0
  441. src/client/generated/docs/ScenarioStepCreateDto.md +34 -0
  442. src/client/generated/docs/ScenarioStepCreatedResponseDto.md +30 -0
  443. src/client/generated/docs/ScenarioStepDto.md +29 -0
  444. src/client/generated/docs/ScenarioStepMoveDto.md +31 -0
  445. src/client/generated/docs/ScenarioStepPatchDto.md +33 -0
  446. src/client/generated/docs/SessionVariable.md +30 -0
  447. src/client/generated/docs/SharedStepAttachmentControllerApi.md +421 -0
  448. src/client/generated/docs/SharedStepAttachmentPatchDto.md +30 -0
  449. src/client/generated/docs/SharedStepAttachmentRowDto.md +33 -0
  450. src/client/generated/docs/SharedStepControllerApi.md +482 -0
  451. src/client/generated/docs/SharedStepCreateDto.md +30 -0
  452. src/client/generated/docs/SharedStepDto.md +39 -0
  453. src/client/generated/docs/SharedStepPatchDto.md +29 -0
  454. src/client/generated/docs/SharedStepScenarioControllerApi.md +635 -0
  455. src/client/generated/docs/SharedStepScenarioDto.md +29 -0
  456. src/client/generated/docs/SharedStepScenarioDtoStepsInner.md +33 -0
  457. src/client/generated/docs/SharedStepStepDto.md +29 -0
  458. src/client/generated/docs/StatisticDto.md +35 -0
  459. src/client/generated/docs/StatisticWidgetItem.md +31 -0
  460. src/client/generated/docs/Status.md +16 -0
  461. src/client/generated/docs/StatusCreateDto.md +30 -0
  462. src/client/generated/docs/StatusDto.md +35 -0
  463. src/client/generated/docs/StatusPatchDto.md +30 -0
  464. src/client/generated/docs/StrikeMark.md +28 -0
  465. src/client/generated/docs/TagImportFieldMapping.md +31 -0
  466. src/client/generated/docs/TemplateDto.md +32 -0
  467. src/client/generated/docs/TemplateOverviewDto.md +33 -0
  468. src/client/generated/docs/TestCaseAssociationDiff.md +29 -0
  469. src/client/generated/docs/TestCaseAttachmentControllerApi.md +421 -0
  470. src/client/generated/docs/TestCaseAttachmentPatchDto.md +30 -0
  471. src/client/generated/docs/TestCaseAttachmentRowDto.md +32 -0
  472. src/client/generated/docs/TestCaseAuditLogData.md +30 -0
  473. src/client/generated/docs/TestCaseAuditLogDataDiff.md +43 -0
  474. src/client/generated/docs/TestCaseAuditLogEntryDto.md +33 -0
  475. src/client/generated/docs/TestCaseBulkCfMoveStrategy.md +16 -0
  476. src/client/generated/docs/TestCaseBulkChangeProjectDtoV2.md +32 -0
  477. src/client/generated/docs/TestCaseBulkCloneDto.md +45 -0
  478. src/client/generated/docs/TestCaseBulkCloneDtoV2.md +45 -0
  479. src/client/generated/docs/TestCaseBulkControllerApi.md +1320 -0
  480. src/client/generated/docs/TestCaseBulkDragAndDropDto.md +30 -0
  481. src/client/generated/docs/TestCaseBulkDragAndDropDtoV2.md +30 -0
  482. src/client/generated/docs/TestCaseBulkDto.md +29 -0
  483. src/client/generated/docs/TestCaseBulkDtoV2.md +29 -0
  484. src/client/generated/docs/TestCaseBulkEntityIdsDto.md +30 -0
  485. src/client/generated/docs/TestCaseBulkEntityIdsDtoV2.md +30 -0
  486. src/client/generated/docs/TestCaseBulkExportCsvOptions.md +33 -0
  487. src/client/generated/docs/TestCaseBulkExportCsvOptionsMappingInner.md +39 -0
  488. src/client/generated/docs/TestCaseBulkExportPdfOptions.md +35 -0
  489. src/client/generated/docs/TestCaseBulkExternalLinkDto.md +30 -0
  490. src/client/generated/docs/TestCaseBulkIssueDto.md +30 -0
  491. src/client/generated/docs/TestCaseBulkLayerDto.md +30 -0
  492. src/client/generated/docs/TestCaseBulkMemberDto.md +30 -0
  493. src/client/generated/docs/TestCaseBulkMuteDto.md +30 -0
  494. src/client/generated/docs/TestCaseBulkNewCfvDto.md +30 -0
  495. src/client/generated/docs/TestCaseBulkProjectChangeDto.md +32 -0
  496. src/client/generated/docs/TestCaseBulkRunExistingLaunchDto.md +34 -0
  497. src/client/generated/docs/TestCaseBulkRunNewLaunchDto.md +37 -0
  498. src/client/generated/docs/TestCaseBulkStatusDto.md +31 -0
  499. src/client/generated/docs/TestCaseBulkTagDto.md +30 -0
  500. src/client/generated/docs/TestCaseBulkTestPlanCreateDto.md +31 -0
  501. src/client/generated/docs/TestCaseCfBulkDeltaDtoV2.md +30 -0
  502. src/client/generated/docs/TestCaseCfvBulkAddDto.md +30 -0
  503. src/client/generated/docs/TestCaseCloneRqDto.md +44 -0
  504. src/client/generated/docs/TestCaseControllerApi.md +934 -0
  505. src/client/generated/docs/TestCaseCountDto.md +29 -0
  506. src/client/generated/docs/TestCaseCreateV2Dto.md +45 -0
  507. src/client/generated/docs/TestCaseCsvExportOptions.md +33 -0
  508. src/client/generated/docs/TestCaseCsvImportOptions.md +37 -0
  509. src/client/generated/docs/TestCaseCsvImportOptionsMappingInner.md +37 -0
  510. src/client/generated/docs/TestCaseCsvPreviewOptions.md +38 -0
  511. src/client/generated/docs/TestCaseCustomFieldControllerApi.md +212 -0
  512. src/client/generated/docs/TestCaseDetachAutomationRqDto.md +31 -0
  513. src/client/generated/docs/TestCaseDiff.md +42 -0
  514. src/client/generated/docs/TestCaseDto.md +52 -0
  515. src/client/generated/docs/TestCaseExampleDto.md +31 -0
  516. src/client/generated/docs/TestCaseExportField.md +40 -0
  517. src/client/generated/docs/TestCaseExternalLinkBulkAddDto.md +30 -0
  518. src/client/generated/docs/TestCaseFlatDto.md +37 -0
  519. src/client/generated/docs/TestCaseFullTreeNodeDto.md +33 -0
  520. src/client/generated/docs/TestCaseImportDto.md +50 -0
  521. src/client/generated/docs/TestCaseImportField.md +38 -0
  522. src/client/generated/docs/TestCaseImportMapping.md +29 -0
  523. src/client/generated/docs/TestCaseInfo.md +30 -0
  524. src/client/generated/docs/TestCaseIssueBulkAddDto.md +30 -0
  525. src/client/generated/docs/TestCaseLastResultDto.md +33 -0
  526. src/client/generated/docs/TestCaseLayerBulkSetDto.md +30 -0
  527. src/client/generated/docs/TestCaseLightTreeNodeDto.md +32 -0
  528. src/client/generated/docs/TestCaseMemberBulkAddDto.md +30 -0
  529. src/client/generated/docs/TestCaseMuteBulkAddDto.md +30 -0
  530. src/client/generated/docs/TestCaseOverviewControllerApi.md +75 -0
  531. src/client/generated/docs/TestCaseOverviewDto.md +61 -0
  532. src/client/generated/docs/TestCaseParameterDto.md +29 -0
  533. src/client/generated/docs/TestCaseParameterValues.md +30 -0
  534. src/client/generated/docs/TestCasePatchV2Dto.md +44 -0
  535. src/client/generated/docs/TestCasePdfOptions.md +35 -0
  536. src/client/generated/docs/TestCasePdfPart.md +16 -0
  537. src/client/generated/docs/TestCaseRelationDto.md +31 -0
  538. src/client/generated/docs/TestCaseRelationTypeDto.md +22 -0
  539. src/client/generated/docs/TestCaseRowDto.md +33 -0
  540. src/client/generated/docs/TestCaseRunBulkExistingLaunchDto.md +34 -0
  541. src/client/generated/docs/TestCaseRunBulkNewLaunchDto.md +37 -0
  542. src/client/generated/docs/TestCaseRunByStats.md +32 -0
  543. src/client/generated/docs/TestCaseRunStatsRequestDto.md +30 -0
  544. src/client/generated/docs/TestCaseScenarioControllerApi.md +760 -0
  545. src/client/generated/docs/TestCaseScenarioDto.md +31 -0
  546. src/client/generated/docs/TestCaseScenarioStepDto.md +36 -0
  547. src/client/generated/docs/TestCaseScenarioV2Dto.md +29 -0
  548. src/client/generated/docs/TestCaseSearchControllerApi.md +156 -0
  549. src/client/generated/docs/TestCaseSelectionDtoV2.md +39 -0
  550. src/client/generated/docs/TestCaseStatusBulkSetDto.md +31 -0
  551. src/client/generated/docs/TestCaseStyle.md +12 -0
  552. src/client/generated/docs/TestCaseSyncFromTo.md +30 -0
  553. src/client/generated/docs/TestCaseSyncRqDto.md +41 -0
  554. src/client/generated/docs/TestCaseTagBulkAddDto.md +30 -0
  555. src/client/generated/docs/TestCaseTagControllerApi.md +144 -0
  556. src/client/generated/docs/TestCaseTestPlanBulkCreateDto.md +31 -0
  557. src/client/generated/docs/TestCaseTreeAllPathsDto.md +29 -0
  558. src/client/generated/docs/TestCaseTreeFilterCountDto.md +30 -0
  559. src/client/generated/docs/TestCaseTreeGroupAddDto.md +29 -0
  560. src/client/generated/docs/TestCaseTreeGroupDto.md +32 -0
  561. src/client/generated/docs/TestCaseTreeGroupRenameDto.md +29 -0
  562. src/client/generated/docs/TestCaseTreeLeafAddDto.md +29 -0
  563. src/client/generated/docs/TestCaseTreeLeafDto.md +37 -0
  564. src/client/generated/docs/TestCaseTreeLeafDtoV2.md +36 -0
  565. src/client/generated/docs/TestCaseTreeLeafRenameDto.md +29 -0
  566. src/client/generated/docs/TestCaseTreeNodeDto.md +31 -0
  567. src/client/generated/docs/TestCaseTreeRunStatRequestDto.md +40 -0
  568. src/client/generated/docs/TestCaseTreeSelectionDto.md +39 -0
  569. src/client/generated/docs/TestCaseTreeSelectionDtoV2.md +38 -0
  570. src/client/generated/docs/TestCaseType.md +12 -0
  571. src/client/generated/docs/TestCaseUpdateFieldDto.md +30 -0
  572. src/client/generated/docs/TestCaseUpdatePolicyDto.md +12 -0
  573. src/client/generated/docs/TestCaseUpdateSchemaCreateDto.md +31 -0
  574. src/client/generated/docs/TestCaseUpdateSchemaDto.md +32 -0
  575. src/client/generated/docs/TestCaseUpdateSchemaPatchDto.md +30 -0
  576. src/client/generated/docs/TestCaseVersionDto.md +34 -0
  577. src/client/generated/docs/TestCaseVersionPatchDto.md +30 -0
  578. src/client/generated/docs/TestCaseVersionRqDto.md +30 -0
  579. src/client/generated/docs/TestDurationCount.md +30 -0
  580. src/client/generated/docs/TestFixtureResultAttachmentPatchDto.md +30 -0
  581. src/client/generated/docs/TestFixtureResultAttachmentRowDto.md +29 -0
  582. src/client/generated/docs/TestFixtureResultTypeDto.md +12 -0
  583. src/client/generated/docs/TestFixtureResultV2Dto.md +38 -0
  584. src/client/generated/docs/TestKeyDto.md +32 -0
  585. src/client/generated/docs/TestKeyImportFieldMapping.md +31 -0
  586. src/client/generated/docs/TestKeySchemaCreateDto.md +31 -0
  587. src/client/generated/docs/TestKeySchemaDto.md +37 -0
  588. src/client/generated/docs/TestKeySchemaPatchDto.md +30 -0
  589. src/client/generated/docs/TestLayerCreateDto.md +29 -0
  590. src/client/generated/docs/TestLayerDto.md +34 -0
  591. src/client/generated/docs/TestLayerPatchDto.md +29 -0
  592. src/client/generated/docs/TestLayerSchemaCreateDto.md +31 -0
  593. src/client/generated/docs/TestLayerSchemaDto.md +36 -0
  594. src/client/generated/docs/TestLayerSchemaPatchDto.md +30 -0
  595. src/client/generated/docs/TestPlanAssignDto.md +31 -0
  596. src/client/generated/docs/TestPlanCreateDto.md +33 -0
  597. src/client/generated/docs/TestPlanDiffDto.md +30 -0
  598. src/client/generated/docs/TestPlanDto.md +39 -0
  599. src/client/generated/docs/TestPlanJobParametersDto.md +30 -0
  600. src/client/generated/docs/TestPlanJobStatDto.md +30 -0
  601. src/client/generated/docs/TestPlanMemberStatDto.md +32 -0
  602. src/client/generated/docs/TestPlanPatchDto.md +32 -0
  603. src/client/generated/docs/TestPlanRowDto.md +31 -0
  604. src/client/generated/docs/TestPlanRunRequestDto.md +33 -0
  605. src/client/generated/docs/TestPlanTreeSelectionDto.md +37 -0
  606. src/client/generated/docs/TestPlanWebhook.md +29 -0
  607. src/client/generated/docs/TestResultAttachmentPatchDto.md +30 -0
  608. src/client/generated/docs/TestResultAttachmentRowDto.md +31 -0
  609. src/client/generated/docs/TestResultAttachmentStepDto.md +34 -0
  610. src/client/generated/docs/TestResultAttachmentStepDtoAllOfAttachment.md +39 -0
  611. src/client/generated/docs/TestResultBodyStepDto.md +38 -0
  612. src/client/generated/docs/TestResultBulkAssignDto.md +30 -0
  613. src/client/generated/docs/TestResultBulkDto.md +29 -0
  614. src/client/generated/docs/TestResultBulkEntityIdsDto.md +30 -0
  615. src/client/generated/docs/TestResultBulkMuteDto.md +32 -0
  616. src/client/generated/docs/TestResultBulkRerunDto.md +32 -0
  617. src/client/generated/docs/TestResultBulkResolveDto.md +32 -0
  618. src/client/generated/docs/TestResultBulkTagDto.md +30 -0
  619. src/client/generated/docs/TestResultCreateV2Dto.md +49 -0
  620. src/client/generated/docs/TestResultCsvExportOptions.md +33 -0
  621. src/client/generated/docs/TestResultCsvExportOptionsMappingInner.md +39 -0
  622. src/client/generated/docs/TestResultDefectMatchDto.md +33 -0
  623. src/client/generated/docs/TestResultDefectMatcherDto.md +31 -0
  624. src/client/generated/docs/TestResultDto.md +69 -0
  625. src/client/generated/docs/TestResultExpectedBodyStepDto.md +36 -0
  626. src/client/generated/docs/TestResultExportField.md +52 -0
  627. src/client/generated/docs/TestResultFlatDto.md +43 -0
  628. src/client/generated/docs/TestResultGroupNode.md +32 -0
  629. src/client/generated/docs/TestResultHistoryDto.md +43 -0
  630. src/client/generated/docs/TestResultLeafNode.md +40 -0
  631. src/client/generated/docs/TestResultLinkDefectDto.md +29 -0
  632. src/client/generated/docs/TestResultMuteReason.md +31 -0
  633. src/client/generated/docs/TestResultNewDefectDto.md +33 -0
  634. src/client/generated/docs/TestResultParameterDto.md +32 -0
  635. src/client/generated/docs/TestResultPatchDto.md +39 -0
  636. src/client/generated/docs/TestResultRerunDto.md +29 -0
  637. src/client/generated/docs/TestResultRetriesRowDto.md +34 -0
  638. src/client/generated/docs/TestResultRowDto.md +34 -0
  639. src/client/generated/docs/TestResultScenarioDto.md +30 -0
  640. src/client/generated/docs/TestResultScenarioStepDto.md +45 -0
  641. src/client/generated/docs/TestResultScenarioStepParameter.md +32 -0
  642. src/client/generated/docs/TestResultScenarioV2Dto.md +29 -0
  643. src/client/generated/docs/TestResultScenarioV2DtoStepsInner.md +41 -0
  644. src/client/generated/docs/TestResultStatsDto.md +32 -0
  645. src/client/generated/docs/TestResultTree.md +35 -0
  646. src/client/generated/docs/TestResultTreeFilterCountDto.md +29 -0
  647. src/client/generated/docs/TestResultTreeGroupDto.md +32 -0
  648. src/client/generated/docs/TestResultTreeGroupDtoV2.md +30 -0
  649. src/client/generated/docs/TestResultTreeLeafDto.md +41 -0
  650. src/client/generated/docs/TestResultTreeLeafDtoV2.md +41 -0
  651. src/client/generated/docs/TestResultTreeNodeDto.md +31 -0
  652. src/client/generated/docs/TestResultTreeSelectionDto.md +38 -0
  653. src/client/generated/docs/TestSessionResponseDto.md +33 -0
  654. src/client/generated/docs/TestStatus.md +18 -0
  655. src/client/generated/docs/TestStatusCount.md +30 -0
  656. src/client/generated/docs/TestTagCreateDto.md +29 -0
  657. src/client/generated/docs/TestTagDto.md +30 -0
  658. src/client/generated/docs/TestTagPatchDto.md +29 -0
  659. src/client/generated/docs/TextColorMark.md +29 -0
  660. src/client/generated/docs/TextFillMark.md +29 -0
  661. src/client/generated/docs/TextMark.md +29 -0
  662. src/client/generated/docs/TextMarkupDocument.md +29 -0
  663. src/client/generated/docs/TextParagraphNode.md +30 -0
  664. src/client/generated/docs/TextParagraphNodeMarksInner.md +30 -0
  665. src/client/generated/docs/TrScenarioStepDto.md +29 -0
  666. src/client/generated/docs/TreeCreateDto.md +31 -0
  667. src/client/generated/docs/TreeCustomFieldProjectDto.md +33 -0
  668. src/client/generated/docs/TreeDto.md +36 -0
  669. src/client/generated/docs/TreeDtoV2.md +32 -0
  670. src/client/generated/docs/TreePatchDto.md +30 -0
  671. src/client/generated/docs/TreePathCreateDto.md +30 -0
  672. src/client/generated/docs/TreePathDto.md +32 -0
  673. src/client/generated/docs/TreePathItemDto.md +31 -0
  674. src/client/generated/docs/TreeSelectionDto.md +34 -0
  675. src/client/generated/docs/UnderlineMark.md +28 -0
  676. src/client/generated/docs/UploadAttachmentDto.md +33 -0
  677. src/client/generated/docs/UploadFixturesResultsDto.md +29 -0
  678. src/client/generated/docs/UploadLabelDto.md +30 -0
  679. src/client/generated/docs/UploadLinkDto.md +31 -0
  680. src/client/generated/docs/UploadParameterDto.md +33 -0
  681. src/client/generated/docs/UploadResultsDto.md +30 -0
  682. src/client/generated/docs/UploadResultsResponseDto.md +29 -0
  683. src/client/generated/docs/UploadTestCaseDto.md +37 -0
  684. src/client/generated/docs/UploadTestFixtureResultDto.md +37 -0
  685. src/client/generated/docs/UploadTestFixtureResultDtoStepsInner.md +39 -0
  686. src/client/generated/docs/UploadTestFixtureType.md +12 -0
  687. src/client/generated/docs/UploadTestResultAttachmentStepDto.md +33 -0
  688. src/client/generated/docs/UploadTestResultBodyStepDto.md +37 -0
  689. src/client/generated/docs/UploadTestResultDto.md +56 -0
  690. src/client/generated/docs/UploadTestResultExpectedBodyStepDto.md +35 -0
  691. src/client/generated/docs/UploadTestResultStepDto.md +29 -0
  692. src/client/generated/docs/UploadTestStatus.md +18 -0
  693. src/client/generated/docs/WebhookCreateDto.md +32 -0
  694. src/client/generated/docs/WebhookDto.md +39 -0
  695. src/client/generated/docs/WebhookPatchDto.md +31 -0
  696. src/client/generated/docs/WebhookSettings.md +29 -0
  697. src/client/generated/docs/WebhookSubject.md +30 -0
  698. src/client/generated/docs/WebhookValidateDto.md +32 -0
  699. src/client/generated/docs/WidgetCreateDto.md +33 -0
  700. src/client/generated/docs/WidgetCreateDtoOptions.md +42 -0
  701. src/client/generated/docs/WidgetDataDto.md +30 -0
  702. src/client/generated/docs/WidgetDto.md +38 -0
  703. src/client/generated/docs/WidgetOptions.md +29 -0
  704. src/client/generated/docs/WidgetOptionsAnalyticGraph.md +33 -0
  705. src/client/generated/docs/WidgetOptionsHavingSettableAql.md +30 -0
  706. src/client/generated/docs/WidgetOptionsLastLaunchPieChart.md +31 -0
  707. src/client/generated/docs/WidgetOptionsLaunchList.md +31 -0
  708. src/client/generated/docs/WidgetOptionsLaunchTrend.md +30 -0
  709. src/client/generated/docs/WidgetOptionsMarkdown.md +29 -0
  710. src/client/generated/docs/WidgetOptionsStatisticTrend.md +33 -0
  711. src/client/generated/docs/WidgetOptionsTcPieChart.md +33 -0
  712. src/client/generated/docs/WidgetOptionsTcTreeMap.md +32 -0
  713. src/client/generated/docs/WidgetOptionsTopTc.md +32 -0
  714. src/client/generated/docs/WidgetOptionsTrend.md +32 -0
  715. src/client/generated/docs/WidgetOptionsTrendV2.md +29 -0
  716. src/client/generated/docs/WidgetPatchDto.md +32 -0
  717. src/client/generated/docs/WidgetTypeDto.md +30 -0
  718. src/client/generated/docs/WorkflowCreateDto.md +30 -0
  719. src/client/generated/docs/WorkflowDto.md +35 -0
  720. src/client/generated/docs/WorkflowPatchDto.md +30 -0
  721. src/client/generated/docs/WorkflowRowDto.md +30 -0
  722. src/client/generated/docs/WorkflowSchemaCreateDto.md +31 -0
  723. src/client/generated/docs/WorkflowSchemaDto.md +36 -0
  724. src/client/generated/docs/WorkflowSchemaPatchDto.md +30 -0
  725. src/client/generated/exceptions.py +219 -0
  726. src/client/generated/models/__init__.py +699 -0
  727. src/client/generated/models/access_group_bulk_dto.py +91 -0
  728. src/client/generated/models/access_group_create_dto.py +108 -0
  729. src/client/generated/models/access_group_dto.py +103 -0
  730. src/client/generated/models/access_group_pa_dto.py +95 -0
  731. src/client/generated/models/access_group_patch_dto.py +107 -0
  732. src/client/generated/models/access_group_project_access_dto.py +89 -0
  733. src/client/generated/models/access_group_projects_add_dto.py +96 -0
  734. src/client/generated/models/access_group_user_dto.py +87 -0
  735. src/client/generated/models/access_group_users_add_dto.py +88 -0
  736. src/client/generated/models/allowed_role_dto.py +37 -0
  737. src/client/generated/models/analytic_automation_trend_dto.py +95 -0
  738. src/client/generated/models/analytic_dto.py +105 -0
  739. src/client/generated/models/analytic_interval.py +39 -0
  740. src/client/generated/models/analytic_launch_duration_histogram_dto.py +97 -0
  741. src/client/generated/models/analytic_mute_trend_dto.py +89 -0
  742. src/client/generated/models/analytic_tc_automation_count_dto.py +89 -0
  743. src/client/generated/models/analytic_tc_status_count_dto.py +93 -0
  744. src/client/generated/models/analytic_tr_by_status_trend_dto.py +95 -0
  745. src/client/generated/models/aql_validate_response_dto.py +89 -0
  746. src/client/generated/models/assign_request_dto.py +88 -0
  747. src/client/generated/models/async_job_dto.py +96 -0
  748. src/client/generated/models/async_job_status_dto.py +40 -0
  749. src/client/generated/models/async_job_step_dto.py +100 -0
  750. src/client/generated/models/async_job_step_status_dto.py +39 -0
  751. src/client/generated/models/async_job_with_steps_dto.py +106 -0
  752. src/client/generated/models/attachment_row.py +117 -0
  753. src/client/generated/models/attachment_step_dto.py +89 -0
  754. src/client/generated/models/attrs.py +87 -0
  755. src/client/generated/models/audit_action_type_dto.py +38 -0
  756. src/client/generated/models/blob_storage_stats.py +91 -0
  757. src/client/generated/models/blob_storage_update_stats.py +95 -0
  758. src/client/generated/models/body_step_dto.py +95 -0
  759. src/client/generated/models/bold_mark.py +87 -0
  760. src/client/generated/models/business_metric_dto.py +89 -0
  761. src/client/generated/models/category_create_dto.py +94 -0
  762. src/client/generated/models/category_dto.py +103 -0
  763. src/client/generated/models/category_matcher_create_dto.py +100 -0
  764. src/client/generated/models/category_matcher_dto.py +109 -0
  765. src/client/generated/models/category_matcher_patch_dto.py +97 -0
  766. src/client/generated/models/category_patch_dto.py +91 -0
  767. src/client/generated/models/cfv_merge_to_existing_global_value_dto.py +89 -0
  768. src/client/generated/models/cfv_merge_to_new_global_value_dto.py +94 -0
  769. src/client/generated/models/ci.py +89 -0
  770. src/client/generated/models/cleaner_schema_create_dto.py +95 -0
  771. src/client/generated/models/cleaner_schema_dto.py +105 -0
  772. src/client/generated/models/cleaner_schema_patch_dto.py +93 -0
  773. src/client/generated/models/cleaner_schema_target_dto.py +38 -0
  774. src/client/generated/models/code_block_document_node.py +103 -0
  775. src/client/generated/models/code_mark.py +87 -0
  776. src/client/generated/models/comment_create_dto.py +90 -0
  777. src/client/generated/models/comment_dto.py +105 -0
  778. src/client/generated/models/comment_patch_dto.py +87 -0
  779. src/client/generated/models/create_launch_event.py +93 -0
  780. src/client/generated/models/csv_import_options.py +95 -0
  781. src/client/generated/models/custom_field_bulk_add_to_projects_dto.py +89 -0
  782. src/client/generated/models/custom_field_bulk_archive_dto.py +89 -0
  783. src/client/generated/models/custom_field_create_dto.py +92 -0
  784. src/client/generated/models/custom_field_dto.py +107 -0
  785. src/client/generated/models/custom_field_export_field_mapping.py +98 -0
  786. src/client/generated/models/custom_field_import_field_mapping.py +94 -0
  787. src/client/generated/models/custom_field_merge_dto.py +89 -0
  788. src/client/generated/models/custom_field_patch_dto.py +93 -0
  789. src/client/generated/models/custom_field_project_count_dto.py +89 -0
  790. src/client/generated/models/custom_field_project_dto.py +113 -0
  791. src/client/generated/models/custom_field_project_patch_dto.py +91 -0
  792. src/client/generated/models/custom_field_project_with_values_dto.py +101 -0
  793. src/client/generated/models/custom_field_raw_dto.py +99 -0
  794. src/client/generated/models/custom_field_schema_count_dto.py +89 -0
  795. src/client/generated/models/custom_field_schema_create_dto.py +92 -0
  796. src/client/generated/models/custom_field_schema_dto.py +105 -0
  797. src/client/generated/models/custom_field_schema_patch_dto.py +89 -0
  798. src/client/generated/models/custom_field_value_bulk_delete_dto.py +89 -0
  799. src/client/generated/models/custom_field_value_bulk_merge_dto.py +96 -0
  800. src/client/generated/models/custom_field_value_dto.py +89 -0
  801. src/client/generated/models/custom_field_value_patch_dto.py +91 -0
  802. src/client/generated/models/custom_field_value_project_create_dto.py +98 -0
  803. src/client/generated/models/custom_field_value_project_merge_by_id_dto.py +87 -0
  804. src/client/generated/models/custom_field_value_project_merge_by_name_dto.py +94 -0
  805. src/client/generated/models/custom_field_value_project_patch_dto.py +91 -0
  806. src/client/generated/models/custom_field_value_project_rename_dto.py +90 -0
  807. src/client/generated/models/custom_field_value_with_cf_dto.py +97 -0
  808. src/client/generated/models/custom_field_value_with_tc_count_dto.py +99 -0
  809. src/client/generated/models/custom_field_with_values_dto.py +101 -0
  810. src/client/generated/models/dashboard_copy_dto.py +91 -0
  811. src/client/generated/models/dashboard_create_dto.py +91 -0
  812. src/client/generated/models/dashboard_drag_and_drop_dto.py +89 -0
  813. src/client/generated/models/dashboard_dto.py +97 -0
  814. src/client/generated/models/dashboard_overview_dto.py +107 -0
  815. src/client/generated/models/dashboard_patch_dto.py +87 -0
  816. src/client/generated/models/dashboard_update_dto.py +89 -0
  817. src/client/generated/models/default_custom_field_value_dto.py +91 -0
  818. src/client/generated/models/default_text_markup_document.py +97 -0
  819. src/client/generated/models/default_text_markup_document_all_of_content.py +140 -0
  820. src/client/generated/models/default_webhook_settings.py +100 -0
  821. src/client/generated/models/default_webhook_settings_all_of_subjects.py +151 -0
  822. src/client/generated/models/defect_bulk_dto.py +93 -0
  823. src/client/generated/models/defect_count_row_dto.py +99 -0
  824. src/client/generated/models/defect_create_dto.py +110 -0
  825. src/client/generated/models/defect_dto.py +107 -0
  826. src/client/generated/models/defect_issue_link_dto.py +90 -0
  827. src/client/generated/models/defect_matcher_create_dto.py +94 -0
  828. src/client/generated/models/defect_matcher_dto.py +103 -0
  829. src/client/generated/models/defect_matcher_patch_dto.py +91 -0
  830. src/client/generated/models/defect_overview_dto.py +120 -0
  831. src/client/generated/models/defect_patch_dto.py +91 -0
  832. src/client/generated/models/defect_row_dto.py +97 -0
  833. src/client/generated/models/defect_webhook.py +98 -0
  834. src/client/generated/models/diff_value_change_boolean.py +89 -0
  835. src/client/generated/models/diff_value_change_long.py +89 -0
  836. src/client/generated/models/diff_value_change_set_long.py +89 -0
  837. src/client/generated/models/diff_value_change_string.py +89 -0
  838. src/client/generated/models/document_node.py +110 -0
  839. src/client/generated/models/env_var_create_dto.py +88 -0
  840. src/client/generated/models/env_var_dto.py +97 -0
  841. src/client/generated/models/env_var_merge_dto.py +89 -0
  842. src/client/generated/models/env_var_patch_dto.py +87 -0
  843. src/client/generated/models/env_var_schema_create_dto.py +92 -0
  844. src/client/generated/models/env_var_schema_dto.py +105 -0
  845. src/client/generated/models/env_var_schema_patch_dto.py +89 -0
  846. src/client/generated/models/env_var_value_create_dto.py +94 -0
  847. src/client/generated/models/env_var_value_dto.py +95 -0
  848. src/client/generated/models/env_var_value_patch_dto.py +87 -0
  849. src/client/generated/models/environment_set_dto.py +95 -0
  850. src/client/generated/models/event_type.py +39 -0
  851. src/client/generated/models/event_type_settings.py +90 -0
  852. src/client/generated/models/example_export_field_mapping.py +100 -0
  853. src/client/generated/models/expected_body_step_dto.py +95 -0
  854. src/client/generated/models/export_field_mapping_test_case_export_field.py +90 -0
  855. src/client/generated/models/export_field_mapping_test_result_export_field.py +90 -0
  856. src/client/generated/models/export_request_dto.py +113 -0
  857. src/client/generated/models/export_status.py +38 -0
  858. src/client/generated/models/export_type.py +39 -0
  859. src/client/generated/models/ext_form_field.py +144 -0
  860. src/client/generated/models/ext_form_field_checkbox.py +95 -0
  861. src/client/generated/models/ext_form_field_composite.py +95 -0
  862. src/client/generated/models/ext_form_field_external_select.py +93 -0
  863. src/client/generated/models/ext_form_field_form_choice.py +107 -0
  864. src/client/generated/models/ext_form_field_form_choice_option.py +89 -0
  865. src/client/generated/models/ext_form_field_list.py +95 -0
  866. src/client/generated/models/ext_form_field_number.py +97 -0
  867. src/client/generated/models/ext_form_field_option.py +89 -0
  868. src/client/generated/models/ext_form_field_password.py +95 -0
  869. src/client/generated/models/ext_form_field_select.py +109 -0
  870. src/client/generated/models/ext_form_field_slider.py +103 -0
  871. src/client/generated/models/ext_form_field_text.py +99 -0
  872. src/client/generated/models/ext_form_field_textarea.py +97 -0
  873. src/client/generated/models/ext_form_field_unknown.py +95 -0
  874. src/client/generated/models/ext_issue_link.py +95 -0
  875. src/client/generated/models/ext_issue_type.py +89 -0
  876. src/client/generated/models/ext_project.py +91 -0
  877. src/client/generated/models/ext_select_value.py +89 -0
  878. src/client/generated/models/external_link_dto.py +91 -0
  879. src/client/generated/models/external_run_response_dto.py +93 -0
  880. src/client/generated/models/external_run_start_request_dto.py +111 -0
  881. src/client/generated/models/external_run_stop_request_dto.py +95 -0
  882. src/client/generated/models/file_upload_response_dto.py +87 -0
  883. src/client/generated/models/filter_base_set_dto.py +87 -0
  884. src/client/generated/models/filter_create_dto.py +98 -0
  885. src/client/generated/models/filter_dto.py +110 -0
  886. src/client/generated/models/filter_patch_dto.py +91 -0
  887. src/client/generated/models/filter_type_dto.py +38 -0
  888. src/client/generated/models/find_all29200_response.py +137 -0
  889. src/client/generated/models/global_permissions_dto.py +87 -0
  890. src/client/generated/models/global_settings_dto.py +88 -0
  891. src/client/generated/models/global_settings_project_create_patch_dto.py +88 -0
  892. src/client/generated/models/grid_pos_dto.py +93 -0
  893. src/client/generated/models/group_by.py +38 -0
  894. src/client/generated/models/group_node_context.py +89 -0
  895. src/client/generated/models/id_and_name_only_dto.py +89 -0
  896. src/client/generated/models/id_only_dto.py +87 -0
  897. src/client/generated/models/import_request_dto.py +113 -0
  898. src/client/generated/models/import_request_info_dto.py +106 -0
  899. src/client/generated/models/import_request_state_dto.py +39 -0
  900. src/client/generated/models/import_request_type_dto.py +36 -0
  901. src/client/generated/models/integration_create_dto.py +113 -0
  902. src/client/generated/models/integration_dto.py +101 -0
  903. src/client/generated/models/integration_export_create_dto.py +112 -0
  904. src/client/generated/models/integration_export_dto.py +118 -0
  905. src/client/generated/models/integration_export_patch_dto.py +108 -0
  906. src/client/generated/models/integration_fields_form_dto.py +119 -0
  907. src/client/generated/models/integration_fields_form_dto_default_project_fields_inner.py +277 -0
  908. src/client/generated/models/integration_info_dto.py +98 -0
  909. src/client/generated/models/integration_links_fixed_dto.py +87 -0
  910. src/client/generated/models/integration_operation_type_dto.py +46 -0
  911. src/client/generated/models/integration_patch_dto.py +112 -0
  912. src/client/generated/models/integration_routine_type_dto.py +39 -0
  913. src/client/generated/models/integration_type_dto.py +69 -0
  914. src/client/generated/models/integration_validate_dto.py +109 -0
  915. src/client/generated/models/integration_webhook_create_dto.py +87 -0
  916. src/client/generated/models/integration_webhook_dto.py +101 -0
  917. src/client/generated/models/integration_webhook_log_dto.py +93 -0
  918. src/client/generated/models/integration_webhook_patch_dto.py +87 -0
  919. src/client/generated/models/integration_webhook_token_dto.py +101 -0
  920. src/client/generated/models/issue_create_dto.py +90 -0
  921. src/client/generated/models/issue_dto.py +104 -0
  922. src/client/generated/models/issue_import_field_mapping.py +94 -0
  923. src/client/generated/models/issue_integration_export_field_mapping.py +98 -0
  924. src/client/generated/models/issue_patch_dto.py +87 -0
  925. src/client/generated/models/issue_schema_create_dto.py +92 -0
  926. src/client/generated/models/issue_schema_dto.py +101 -0
  927. src/client/generated/models/issue_schema_patch_dto.py +89 -0
  928. src/client/generated/models/issue_to_create_dto.py +98 -0
  929. src/client/generated/models/italic_mark.py +87 -0
  930. src/client/generated/models/job.py +103 -0
  931. src/client/generated/models/job_create_dto.py +93 -0
  932. src/client/generated/models/job_dto.py +104 -0
  933. src/client/generated/models/job_info_dto.py +94 -0
  934. src/client/generated/models/job_mapping.py +89 -0
  935. src/client/generated/models/job_parameter_dto.py +89 -0
  936. src/client/generated/models/job_patch_dto.py +101 -0
  937. src/client/generated/models/job_rerun_request_dto.py +87 -0
  938. src/client/generated/models/job_run.py +103 -0
  939. src/client/generated/models/job_run_dto.py +117 -0
  940. src/client/generated/models/job_run_request_dto.py +144 -0
  941. src/client/generated/models/job_run_stage_dto.py +39 -0
  942. src/client/generated/models/job_run_status_dto.py +39 -0
  943. src/client/generated/models/job_run_upload_info_dto.py +95 -0
  944. src/client/generated/models/job_test_cases_stat_dto.py +93 -0
  945. src/client/generated/models/launch.py +93 -0
  946. src/client/generated/models/launch_cleanup_request.py +94 -0
  947. src/client/generated/models/launch_close_config_dto.py +93 -0
  948. src/client/generated/models/launch_copy_rq_dto.py +129 -0
  949. src/client/generated/models/launch_create_and_upload_dto.py +130 -0
  950. src/client/generated/models/launch_create_dto.py +123 -0
  951. src/client/generated/models/launch_diff_cell.py +102 -0
  952. src/client/generated/models/launch_diff_mode.py +38 -0
  953. src/client/generated/models/launch_diff_row.py +99 -0
  954. src/client/generated/models/launch_diff_status_change_dto.py +108 -0
  955. src/client/generated/models/launch_diff_test_result.py +96 -0
  956. src/client/generated/models/launch_diff_test_result_dto.py +98 -0
  957. src/client/generated/models/launch_dto.py +131 -0
  958. src/client/generated/models/launch_existing_upload_dto.py +95 -0
  959. src/client/generated/models/launch_live_doc_config_dto.py +89 -0
  960. src/client/generated/models/launch_member_stats_dto.py +109 -0
  961. src/client/generated/models/launch_merge_dto.py +89 -0
  962. src/client/generated/models/launch_patch_dto.py +121 -0
  963. src/client/generated/models/launch_pdf_options.py +106 -0
  964. src/client/generated/models/launch_pdf_part.py +43 -0
  965. src/client/generated/models/launch_pdf_structure.py +88 -0
  966. src/client/generated/models/launch_preview_dto.py +167 -0
  967. src/client/generated/models/launch_progress_dto.py +87 -0
  968. src/client/generated/models/launch_row_dto.py +101 -0
  969. src/client/generated/models/launch_tag_create_dto.py +88 -0
  970. src/client/generated/models/launch_tag_dto.py +89 -0
  971. src/client/generated/models/launch_tag_patch_dto.py +87 -0
  972. src/client/generated/models/launch_test_cases_add_dto.py +123 -0
  973. src/client/generated/models/launch_test_plan_add_dto.py +97 -0
  974. src/client/generated/models/launch_upload_response_dto.py +91 -0
  975. src/client/generated/models/launch_variable_dto.py +89 -0
  976. src/client/generated/models/launch_webhook.py +100 -0
  977. src/client/generated/models/line_break_paragraph_node.py +87 -0
  978. src/client/generated/models/link_export_field_mapping.py +96 -0
  979. src/client/generated/models/link_import_field_mapping.py +96 -0
  980. src/client/generated/models/link_mark.py +93 -0
  981. src/client/generated/models/list_selection_dto.py +89 -0
  982. src/client/generated/models/manual_session_request_dto.py +97 -0
  983. src/client/generated/models/matcher.py +91 -0
  984. src/client/generated/models/member_create_dto.py +94 -0
  985. src/client/generated/models/member_dto.py +95 -0
  986. src/client/generated/models/member_patch_dto.py +87 -0
  987. src/client/generated/models/metric.py +37 -0
  988. src/client/generated/models/mfa_global_settings_dto.py +87 -0
  989. src/client/generated/models/mfa_global_settings_patch_dto.py +87 -0
  990. src/client/generated/models/multi_value_export_field_mapping.py +96 -0
  991. src/client/generated/models/multi_value_import_field_mapping.py +92 -0
  992. src/client/generated/models/multi_value_map_string_string.py +102 -0
  993. src/client/generated/models/mute_create_dto.py +101 -0
  994. src/client/generated/models/mute_dto.py +113 -0
  995. src/client/generated/models/name_only_dto.py +88 -0
  996. src/client/generated/models/node_type.py +37 -0
  997. src/client/generated/models/normalized_scenario_dto.py +162 -0
  998. src/client/generated/models/normalized_scenario_dto_attachments_value.py +154 -0
  999. src/client/generated/models/normalized_scenario_step_dto.py +117 -0
  1000. src/client/generated/models/ordered_value_dto_string.py +89 -0
  1001. src/client/generated/models/page_access_group_dto.py +123 -0
  1002. src/client/generated/models/page_access_group_dto_sort.py +91 -0
  1003. src/client/generated/models/page_access_group_pa_dto.py +123 -0
  1004. src/client/generated/models/page_access_group_user_dto.py +123 -0
  1005. src/client/generated/models/page_async_job_dto.py +123 -0
  1006. src/client/generated/models/page_category_dto.py +123 -0
  1007. src/client/generated/models/page_category_matcher_dto.py +123 -0
  1008. src/client/generated/models/page_cleaner_schema_dto.py +123 -0
  1009. src/client/generated/models/page_comment_dto.py +123 -0
  1010. src/client/generated/models/page_custom_field_project_dto.py +123 -0
  1011. src/client/generated/models/page_custom_field_schema_dto.py +123 -0
  1012. src/client/generated/models/page_custom_field_value_with_tc_count_dto.py +123 -0
  1013. src/client/generated/models/page_dashboard_dto.py +123 -0
  1014. src/client/generated/models/page_defect_count_row_dto.py +123 -0
  1015. src/client/generated/models/page_defect_dto.py +123 -0
  1016. src/client/generated/models/page_defect_matcher_dto.py +123 -0
  1017. src/client/generated/models/page_defect_row_dto.py +123 -0
  1018. src/client/generated/models/page_env_var_schema_dto.py +123 -0
  1019. src/client/generated/models/page_export_request_dto.py +123 -0
  1020. src/client/generated/models/page_filter_dto.py +123 -0
  1021. src/client/generated/models/page_id_and_name_only_dto.py +123 -0
  1022. src/client/generated/models/page_import_request_dto.py +123 -0
  1023. src/client/generated/models/page_integration_dto.py +123 -0
  1024. src/client/generated/models/page_integration_export_dto.py +123 -0
  1025. src/client/generated/models/page_integration_info_dto.py +123 -0
  1026. src/client/generated/models/page_integration_webhook_dto.py +123 -0
  1027. src/client/generated/models/page_integration_webhook_log_dto.py +123 -0
  1028. src/client/generated/models/page_issue_dto.py +123 -0
  1029. src/client/generated/models/page_issue_schema_dto.py +123 -0
  1030. src/client/generated/models/page_job_dto.py +123 -0
  1031. src/client/generated/models/page_launch_diff_row.py +123 -0
  1032. src/client/generated/models/page_launch_dto.py +123 -0
  1033. src/client/generated/models/page_launch_member_stats_dto.py +123 -0
  1034. src/client/generated/models/page_launch_preview_dto.py +123 -0
  1035. src/client/generated/models/page_launch_row_dto.py +123 -0
  1036. src/client/generated/models/page_launch_tag_dto.py +123 -0
  1037. src/client/generated/models/page_launch_variable_dto.py +123 -0
  1038. src/client/generated/models/page_member_dto.py +123 -0
  1039. src/client/generated/models/page_mute_dto.py +123 -0
  1040. src/client/generated/models/page_permission_set_dto.py +123 -0
  1041. src/client/generated/models/page_project_collaborator_access_dto.py +123 -0
  1042. src/client/generated/models/page_project_collaborator_dto.py +123 -0
  1043. src/client/generated/models/page_project_custom_field_dto.py +123 -0
  1044. src/client/generated/models/page_project_dto.py +123 -0
  1045. src/client/generated/models/page_project_group_access_dto.py +123 -0
  1046. src/client/generated/models/page_project_integration_dto.py +123 -0
  1047. src/client/generated/models/page_project_suggest_dto.py +123 -0
  1048. src/client/generated/models/page_role_schema_dto.py +123 -0
  1049. src/client/generated/models/page_shared_step_attachment_row_dto.py +123 -0
  1050. src/client/generated/models/page_shared_step_dto.py +123 -0
  1051. src/client/generated/models/page_statistic_widget_item.py +123 -0
  1052. src/client/generated/models/page_status_dto.py +123 -0
  1053. src/client/generated/models/page_template_dto.py +123 -0
  1054. src/client/generated/models/page_test_case_attachment_row_dto.py +123 -0
  1055. src/client/generated/models/page_test_case_audit_log_entry_dto.py +123 -0
  1056. src/client/generated/models/page_test_case_dto.py +123 -0
  1057. src/client/generated/models/page_test_case_example_dto.py +123 -0
  1058. src/client/generated/models/page_test_case_flat_dto.py +123 -0
  1059. src/client/generated/models/page_test_case_row_dto.py +123 -0
  1060. src/client/generated/models/page_test_case_tree_group_dto.py +123 -0
  1061. src/client/generated/models/page_test_case_tree_leaf_dto.py +123 -0
  1062. src/client/generated/models/page_test_case_tree_node_dto.py +123 -0
  1063. src/client/generated/models/page_test_case_tree_node_dto_content_inner.py +140 -0
  1064. src/client/generated/models/page_test_fixture_result_attachment_row_dto.py +123 -0
  1065. src/client/generated/models/page_test_key_schema_dto.py +123 -0
  1066. src/client/generated/models/page_test_layer_dto.py +123 -0
  1067. src/client/generated/models/page_test_layer_schema_dto.py +123 -0
  1068. src/client/generated/models/page_test_plan_dto.py +123 -0
  1069. src/client/generated/models/page_test_plan_row_dto.py +123 -0
  1070. src/client/generated/models/page_test_result_attachment_row_dto.py +123 -0
  1071. src/client/generated/models/page_test_result_defect_match_dto.py +123 -0
  1072. src/client/generated/models/page_test_result_dto.py +123 -0
  1073. src/client/generated/models/page_test_result_flat_dto.py +123 -0
  1074. src/client/generated/models/page_test_result_history_dto.py +123 -0
  1075. src/client/generated/models/page_test_result_retries_row_dto.py +123 -0
  1076. src/client/generated/models/page_test_result_row_dto.py +123 -0
  1077. src/client/generated/models/page_test_result_tree_group_dto.py +123 -0
  1078. src/client/generated/models/page_test_result_tree_leaf_dto.py +123 -0
  1079. src/client/generated/models/page_test_result_tree_node_dto.py +123 -0
  1080. src/client/generated/models/page_test_result_tree_node_dto_content_inner.py +140 -0
  1081. src/client/generated/models/page_tree_dto.py +123 -0
  1082. src/client/generated/models/page_tree_dto_v2.py +123 -0
  1083. src/client/generated/models/page_tree_path_dto.py +123 -0
  1084. src/client/generated/models/page_webhook_dto.py +123 -0
  1085. src/client/generated/models/page_widget_dto.py +123 -0
  1086. src/client/generated/models/page_workflow_dto.py +123 -0
  1087. src/client/generated/models/page_workflow_schema_dto.py +123 -0
  1088. src/client/generated/models/pageable.py +101 -0
  1089. src/client/generated/models/paragraph_document_node.py +103 -0
  1090. src/client/generated/models/paragraph_document_node_all_of_content.py +137 -0
  1091. src/client/generated/models/paragraph_node.py +107 -0
  1092. src/client/generated/models/parameter.py +89 -0
  1093. src/client/generated/models/parameter_value_dto.py +89 -0
  1094. src/client/generated/models/permission_dto.py +39 -0
  1095. src/client/generated/models/permission_set_create_dto.py +91 -0
  1096. src/client/generated/models/permission_set_dto.py +92 -0
  1097. src/client/generated/models/permission_set_patch_dto.py +90 -0
  1098. src/client/generated/models/project_access_collaborator_add_dto.py +96 -0
  1099. src/client/generated/models/project_access_group_add_dto.py +96 -0
  1100. src/client/generated/models/project_category_add_dto.py +87 -0
  1101. src/client/generated/models/project_category_matcher_add_dto.py +87 -0
  1102. src/client/generated/models/project_category_matcher_remove_dto.py +87 -0
  1103. src/client/generated/models/project_category_remove_dto.py +87 -0
  1104. src/client/generated/models/project_collaborator_access_dto.py +107 -0
  1105. src/client/generated/models/project_collaborator_dto.py +91 -0
  1106. src/client/generated/models/project_create_dto.py +95 -0
  1107. src/client/generated/models/project_custom_field_dto.py +107 -0
  1108. src/client/generated/models/project_dto.py +107 -0
  1109. src/client/generated/models/project_group_access_add_dto.py +89 -0
  1110. src/client/generated/models/project_group_access_dto.py +95 -0
  1111. src/client/generated/models/project_integration_create_dto.py +103 -0
  1112. src/client/generated/models/project_integration_dto.py +110 -0
  1113. src/client/generated/models/project_integration_fields_form_dto.py +112 -0
  1114. src/client/generated/models/project_integration_patch_dto.py +101 -0
  1115. src/client/generated/models/project_integration_validate_dto.py +101 -0
  1116. src/client/generated/models/project_metric_dto.py +95 -0
  1117. src/client/generated/models/project_patch_dto.py +95 -0
  1118. src/client/generated/models/project_property_create_dto.py +92 -0
  1119. src/client/generated/models/project_property_dto.py +93 -0
  1120. src/client/generated/models/project_property_patch_dto.py +89 -0
  1121. src/client/generated/models/project_stats_dto.py +93 -0
  1122. src/client/generated/models/project_suggest_dto.py +93 -0
  1123. src/client/generated/models/project_sync_request.py +104 -0
  1124. src/client/generated/models/project_test_case_count_dto.py +89 -0
  1125. src/client/generated/models/resolve_request_v2_dto.py +106 -0
  1126. src/client/generated/models/retry.py +92 -0
  1127. src/client/generated/models/role_create_dto.py +88 -0
  1128. src/client/generated/models/role_dto.py +97 -0
  1129. src/client/generated/models/role_export_field_mapping.py +98 -0
  1130. src/client/generated/models/role_import_field_mapping.py +94 -0
  1131. src/client/generated/models/role_patch_dto.py +87 -0
  1132. src/client/generated/models/role_schema_create_dto.py +91 -0
  1133. src/client/generated/models/role_schema_dto.py +105 -0
  1134. src/client/generated/models/role_schema_patch_dto.py +89 -0
  1135. src/client/generated/models/scenario_export_field_mapping.py +98 -0
  1136. src/client/generated/models/scenario_step_copy_dto.py +91 -0
  1137. src/client/generated/models/scenario_step_create_dto.py +101 -0
  1138. src/client/generated/models/scenario_step_created_response_dto.py +93 -0
  1139. src/client/generated/models/scenario_step_dto.py +116 -0
  1140. src/client/generated/models/scenario_step_move_dto.py +91 -0
  1141. src/client/generated/models/scenario_step_patch_dto.py +99 -0
  1142. src/client/generated/models/session_variable.py +89 -0
  1143. src/client/generated/models/shared_step_attachment_patch_dto.py +89 -0
  1144. src/client/generated/models/shared_step_attachment_row_dto.py +95 -0
  1145. src/client/generated/models/shared_step_create_dto.py +89 -0
  1146. src/client/generated/models/shared_step_dto.py +107 -0
  1147. src/client/generated/models/shared_step_patch_dto.py +87 -0
  1148. src/client/generated/models/shared_step_scenario_dto.py +95 -0
  1149. src/client/generated/models/shared_step_scenario_dto_steps_inner.py +165 -0
  1150. src/client/generated/models/shared_step_step_dto.py +89 -0
  1151. src/client/generated/models/statistic_dto.py +99 -0
  1152. src/client/generated/models/statistic_widget_item.py +99 -0
  1153. src/client/generated/models/status.py +39 -0
  1154. src/client/generated/models/status_create_dto.py +90 -0
  1155. src/client/generated/models/status_dto.py +99 -0
  1156. src/client/generated/models/status_patch_dto.py +89 -0
  1157. src/client/generated/models/strike_mark.py +87 -0
  1158. src/client/generated/models/tag_import_field_mapping.py +94 -0
  1159. src/client/generated/models/template_dto.py +93 -0
  1160. src/client/generated/models/template_overview_dto.py +103 -0
  1161. src/client/generated/models/test_case_association_diff.py +91 -0
  1162. src/client/generated/models/test_case_attachment_patch_dto.py +89 -0
  1163. src/client/generated/models/test_case_attachment_row_dto.py +99 -0
  1164. src/client/generated/models/test_case_audit_log_data.py +93 -0
  1165. src/client/generated/models/test_case_audit_log_data_diff.py +137 -0
  1166. src/client/generated/models/test_case_audit_log_entry_dto.py +104 -0
  1167. src/client/generated/models/test_case_bulk_cf_move_strategy.py +39 -0
  1168. src/client/generated/models/test_case_bulk_change_project_dto_v2.py +98 -0
  1169. src/client/generated/models/test_case_bulk_clone_dto.py +124 -0
  1170. src/client/generated/models/test_case_bulk_clone_dto_v2.py +124 -0
  1171. src/client/generated/models/test_case_bulk_drag_and_drop_dto.py +93 -0
  1172. src/client/generated/models/test_case_bulk_drag_and_drop_dto_v2.py +93 -0
  1173. src/client/generated/models/test_case_bulk_dto.py +91 -0
  1174. src/client/generated/models/test_case_bulk_dto_v2.py +91 -0
  1175. src/client/generated/models/test_case_bulk_entity_ids_dto.py +94 -0
  1176. src/client/generated/models/test_case_bulk_entity_ids_dto_v2.py +94 -0
  1177. src/client/generated/models/test_case_bulk_export_csv_options.py +107 -0
  1178. src/client/generated/models/test_case_bulk_export_csv_options_mapping_inner.py +224 -0
  1179. src/client/generated/models/test_case_bulk_export_pdf_options.py +104 -0
  1180. src/client/generated/models/test_case_bulk_external_link_dto.py +102 -0
  1181. src/client/generated/models/test_case_bulk_issue_dto.py +102 -0
  1182. src/client/generated/models/test_case_bulk_layer_dto.py +93 -0
  1183. src/client/generated/models/test_case_bulk_member_dto.py +102 -0
  1184. src/client/generated/models/test_case_bulk_mute_dto.py +97 -0
  1185. src/client/generated/models/test_case_bulk_new_cfv_dto.py +102 -0
  1186. src/client/generated/models/test_case_bulk_project_change_dto.py +98 -0
  1187. src/client/generated/models/test_case_bulk_run_existing_launch_dto.py +125 -0
  1188. src/client/generated/models/test_case_bulk_run_new_launch_dto.py +156 -0
  1189. src/client/generated/models/test_case_bulk_status_dto.py +95 -0
  1190. src/client/generated/models/test_case_bulk_tag_dto.py +102 -0
  1191. src/client/generated/models/test_case_bulk_test_plan_create_dto.py +100 -0
  1192. src/client/generated/models/test_case_cf_bulk_delta_dto_v2.py +93 -0
  1193. src/client/generated/models/test_case_cfv_bulk_add_dto.py +102 -0
  1194. src/client/generated/models/test_case_clone_rq_dto.py +118 -0
  1195. src/client/generated/models/test_case_count_dto.py +87 -0
  1196. src/client/generated/models/test_case_create_v2_dto.py +155 -0
  1197. src/client/generated/models/test_case_csv_export_options.py +107 -0
  1198. src/client/generated/models/test_case_csv_import_options.py +111 -0
  1199. src/client/generated/models/test_case_csv_import_options_mapping_inner.py +224 -0
  1200. src/client/generated/models/test_case_csv_preview_options.py +113 -0
  1201. src/client/generated/models/test_case_detach_automation_rq_dto.py +91 -0
  1202. src/client/generated/models/test_case_diff.py +158 -0
  1203. src/client/generated/models/test_case_dto.py +161 -0
  1204. src/client/generated/models/test_case_example_dto.py +100 -0
  1205. src/client/generated/models/test_case_export_field.py +51 -0
  1206. src/client/generated/models/test_case_external_link_bulk_add_dto.py +102 -0
  1207. src/client/generated/models/test_case_flat_dto.py +111 -0
  1208. src/client/generated/models/test_case_full_tree_node_dto.py +99 -0
  1209. src/client/generated/models/test_case_import_dto.py +209 -0
  1210. src/client/generated/models/test_case_import_field.py +50 -0
  1211. src/client/generated/models/test_case_import_mapping.py +126 -0
  1212. src/client/generated/models/test_case_info.py +89 -0
  1213. src/client/generated/models/test_case_issue_bulk_add_dto.py +102 -0
  1214. src/client/generated/models/test_case_last_result_dto.py +96 -0
  1215. src/client/generated/models/test_case_layer_bulk_set_dto.py +93 -0
  1216. src/client/generated/models/test_case_light_tree_node_dto.py +98 -0
  1217. src/client/generated/models/test_case_member_bulk_add_dto.py +102 -0
  1218. src/client/generated/models/test_case_mute_bulk_add_dto.py +97 -0
  1219. src/client/generated/models/test_case_overview_dto.py +232 -0
  1220. src/client/generated/models/test_case_parameter_dto.py +87 -0
  1221. src/client/generated/models/test_case_parameter_values.py +89 -0
  1222. src/client/generated/models/test_case_patch_v2_dto.py +153 -0
  1223. src/client/generated/models/test_case_pdf_options.py +104 -0
  1224. src/client/generated/models/test_case_pdf_part.py +39 -0
  1225. src/client/generated/models/test_case_relation_dto.py +96 -0
  1226. src/client/generated/models/test_case_relation_type_dto.py +42 -0
  1227. src/client/generated/models/test_case_row_dto.py +103 -0
  1228. src/client/generated/models/test_case_run_bulk_existing_launch_dto.py +125 -0
  1229. src/client/generated/models/test_case_run_bulk_new_launch_dto.py +156 -0
  1230. src/client/generated/models/test_case_run_by_stats.py +93 -0
  1231. src/client/generated/models/test_case_run_stats_request_dto.py +101 -0
  1232. src/client/generated/models/test_case_scenario_dto.py +107 -0
  1233. src/client/generated/models/test_case_scenario_step_dto.py +124 -0
  1234. src/client/generated/models/test_case_scenario_v2_dto.py +95 -0
  1235. src/client/generated/models/test_case_selection_dto_v2.py +107 -0
  1236. src/client/generated/models/test_case_status_bulk_set_dto.py +95 -0
  1237. src/client/generated/models/test_case_style.py +37 -0
  1238. src/client/generated/models/test_case_sync_from_to.py +89 -0
  1239. src/client/generated/models/test_case_sync_rq_dto.py +120 -0
  1240. src/client/generated/models/test_case_tag_bulk_add_dto.py +102 -0
  1241. src/client/generated/models/test_case_test_plan_bulk_create_dto.py +100 -0
  1242. src/client/generated/models/test_case_tree_all_paths_dto.py +87 -0
  1243. src/client/generated/models/test_case_tree_filter_count_dto.py +89 -0
  1244. src/client/generated/models/test_case_tree_group_add_dto.py +88 -0
  1245. src/client/generated/models/test_case_tree_group_dto.py +93 -0
  1246. src/client/generated/models/test_case_tree_group_rename_dto.py +87 -0
  1247. src/client/generated/models/test_case_tree_leaf_add_dto.py +88 -0
  1248. src/client/generated/models/test_case_tree_leaf_dto.py +103 -0
  1249. src/client/generated/models/test_case_tree_leaf_dto_v2.py +114 -0
  1250. src/client/generated/models/test_case_tree_leaf_rename_dto.py +88 -0
  1251. src/client/generated/models/test_case_tree_node_dto.py +113 -0
  1252. src/client/generated/models/test_case_tree_run_stat_request_dto.py +117 -0
  1253. src/client/generated/models/test_case_tree_selection_dto.py +107 -0
  1254. src/client/generated/models/test_case_tree_selection_dto_v2.py +105 -0
  1255. src/client/generated/models/test_case_type.py +37 -0
  1256. src/client/generated/models/test_case_update_field_dto.py +46 -0
  1257. src/client/generated/models/test_case_update_policy_dto.py +37 -0
  1258. src/client/generated/models/test_case_update_schema_create_dto.py +93 -0
  1259. src/client/generated/models/test_case_update_schema_dto.py +95 -0
  1260. src/client/generated/models/test_case_update_schema_patch_dto.py +91 -0
  1261. src/client/generated/models/test_case_version_dto.py +97 -0
  1262. src/client/generated/models/test_case_version_patch_dto.py +89 -0
  1263. src/client/generated/models/test_case_version_rq_dto.py +90 -0
  1264. src/client/generated/models/test_duration_count.py +89 -0
  1265. src/client/generated/models/test_fixture_result_attachment_patch_dto.py +89 -0
  1266. src/client/generated/models/test_fixture_result_attachment_row_dto.py +93 -0
  1267. src/client/generated/models/test_fixture_result_type_dto.py +37 -0
  1268. src/client/generated/models/test_fixture_result_v2_dto.py +111 -0
  1269. src/client/generated/models/test_key_dto.py +93 -0
  1270. src/client/generated/models/test_key_import_field_mapping.py +94 -0
  1271. src/client/generated/models/test_key_schema_create_dto.py +92 -0
  1272. src/client/generated/models/test_key_schema_dto.py +103 -0
  1273. src/client/generated/models/test_key_schema_patch_dto.py +89 -0
  1274. src/client/generated/models/test_layer_create_dto.py +88 -0
  1275. src/client/generated/models/test_layer_dto.py +97 -0
  1276. src/client/generated/models/test_layer_patch_dto.py +87 -0
  1277. src/client/generated/models/test_layer_schema_create_dto.py +92 -0
  1278. src/client/generated/models/test_layer_schema_dto.py +105 -0
  1279. src/client/generated/models/test_layer_schema_patch_dto.py +89 -0
  1280. src/client/generated/models/test_plan_assign_dto.py +95 -0
  1281. src/client/generated/models/test_plan_create_dto.py +100 -0
  1282. src/client/generated/models/test_plan_diff_dto.py +89 -0
  1283. src/client/generated/models/test_plan_dto.py +115 -0
  1284. src/client/generated/models/test_plan_job_parameters_dto.py +97 -0
  1285. src/client/generated/models/test_plan_job_stat_dto.py +93 -0
  1286. src/client/generated/models/test_plan_member_stat_dto.py +93 -0
  1287. src/client/generated/models/test_plan_patch_dto.py +97 -0
  1288. src/client/generated/models/test_plan_row_dto.py +91 -0
  1289. src/client/generated/models/test_plan_run_request_dto.py +128 -0
  1290. src/client/generated/models/test_plan_tree_selection_dto.py +103 -0
  1291. src/client/generated/models/test_plan_webhook.py +98 -0
  1292. src/client/generated/models/test_result_attachment_patch_dto.py +89 -0
  1293. src/client/generated/models/test_result_attachment_row_dto.py +97 -0
  1294. src/client/generated/models/test_result_attachment_step_dto.py +104 -0
  1295. src/client/generated/models/test_result_attachment_step_dto_all_of_attachment.py +154 -0
  1296. src/client/generated/models/test_result_body_step_dto.py +120 -0
  1297. src/client/generated/models/test_result_bulk_assign_dto.py +93 -0
  1298. src/client/generated/models/test_result_bulk_dto.py +91 -0
  1299. src/client/generated/models/test_result_bulk_entity_ids_dto.py +94 -0
  1300. src/client/generated/models/test_result_bulk_mute_dto.py +105 -0
  1301. src/client/generated/models/test_result_bulk_rerun_dto.py +97 -0
  1302. src/client/generated/models/test_result_bulk_resolve_dto.py +98 -0
  1303. src/client/generated/models/test_result_bulk_tag_dto.py +102 -0
  1304. src/client/generated/models/test_result_create_v2_dto.py +164 -0
  1305. src/client/generated/models/test_result_csv_export_options.py +107 -0
  1306. src/client/generated/models/test_result_csv_export_options_mapping_inner.py +224 -0
  1307. src/client/generated/models/test_result_defect_match_dto.py +96 -0
  1308. src/client/generated/models/test_result_defect_matcher_dto.py +92 -0
  1309. src/client/generated/models/test_result_dto.py +208 -0
  1310. src/client/generated/models/test_result_expected_body_step_dto.py +108 -0
  1311. src/client/generated/models/test_result_export_field.py +57 -0
  1312. src/client/generated/models/test_result_flat_dto.py +116 -0
  1313. src/client/generated/models/test_result_group_node.py +105 -0
  1314. src/client/generated/models/test_result_history_dto.py +136 -0
  1315. src/client/generated/models/test_result_leaf_node.py +110 -0
  1316. src/client/generated/models/test_result_link_defect_dto.py +91 -0
  1317. src/client/generated/models/test_result_mute_reason.py +99 -0
  1318. src/client/generated/models/test_result_new_defect_dto.py +108 -0
  1319. src/client/generated/models/test_result_parameter_dto.py +93 -0
  1320. src/client/generated/models/test_result_patch_dto.py +143 -0
  1321. src/client/generated/models/test_result_rerun_dto.py +87 -0
  1322. src/client/generated/models/test_result_retries_row_dto.py +102 -0
  1323. src/client/generated/models/test_result_row_dto.py +98 -0
  1324. src/client/generated/models/test_result_scenario_dto.py +105 -0
  1325. src/client/generated/models/test_result_scenario_step_dto.py +145 -0
  1326. src/client/generated/models/test_result_scenario_step_parameter.py +93 -0
  1327. src/client/generated/models/test_result_scenario_v2_dto.py +95 -0
  1328. src/client/generated/models/test_result_scenario_v2_dto_steps_inner.py +154 -0
  1329. src/client/generated/models/test_result_stats_dto.py +93 -0
  1330. src/client/generated/models/test_result_tree.py +119 -0
  1331. src/client/generated/models/test_result_tree_filter_count_dto.py +87 -0
  1332. src/client/generated/models/test_result_tree_group_dto.py +97 -0
  1333. src/client/generated/models/test_result_tree_group_dto_v2.py +98 -0
  1334. src/client/generated/models/test_result_tree_leaf_dto.py +112 -0
  1335. src/client/generated/models/test_result_tree_leaf_dto_v2.py +117 -0
  1336. src/client/generated/models/test_result_tree_node_dto.py +113 -0
  1337. src/client/generated/models/test_result_tree_selection_dto.py +105 -0
  1338. src/client/generated/models/test_session_response_dto.py +95 -0
  1339. src/client/generated/models/test_status.py +40 -0
  1340. src/client/generated/models/test_status_count.py +90 -0
  1341. src/client/generated/models/test_tag_create_dto.py +88 -0
  1342. src/client/generated/models/test_tag_dto.py +89 -0
  1343. src/client/generated/models/test_tag_patch_dto.py +87 -0
  1344. src/client/generated/models/text_color_mark.py +93 -0
  1345. src/client/generated/models/text_fill_mark.py +93 -0
  1346. src/client/generated/models/text_mark.py +128 -0
  1347. src/client/generated/models/text_markup_document.py +107 -0
  1348. src/client/generated/models/text_paragraph_node.py +97 -0
  1349. src/client/generated/models/text_paragraph_node_marks_inner.py +221 -0
  1350. src/client/generated/models/tr_scenario_step_dto.py +113 -0
  1351. src/client/generated/models/tree_create_dto.py +100 -0
  1352. src/client/generated/models/tree_custom_field_project_dto.py +99 -0
  1353. src/client/generated/models/tree_dto.py +109 -0
  1354. src/client/generated/models/tree_dto_v2.py +101 -0
  1355. src/client/generated/models/tree_patch_dto.py +97 -0
  1356. src/client/generated/models/tree_path_create_dto.py +98 -0
  1357. src/client/generated/models/tree_path_dto.py +101 -0
  1358. src/client/generated/models/tree_path_item_dto.py +91 -0
  1359. src/client/generated/models/tree_selection_dto.py +97 -0
  1360. src/client/generated/models/underline_mark.py +87 -0
  1361. src/client/generated/models/upload_attachment_dto.py +95 -0
  1362. src/client/generated/models/upload_fixtures_results_dto.py +96 -0
  1363. src/client/generated/models/upload_label_dto.py +89 -0
  1364. src/client/generated/models/upload_link_dto.py +91 -0
  1365. src/client/generated/models/upload_parameter_dto.py +95 -0
  1366. src/client/generated/models/upload_results_dto.py +98 -0
  1367. src/client/generated/models/upload_results_response_dto.py +87 -0
  1368. src/client/generated/models/upload_test_case_dto.py +127 -0
  1369. src/client/generated/models/upload_test_fixture_result_dto.py +113 -0
  1370. src/client/generated/models/upload_test_fixture_result_dto_steps_inner.py +154 -0
  1371. src/client/generated/models/upload_test_fixture_type.py +37 -0
  1372. src/client/generated/models/upload_test_result_attachment_step_dto.py +102 -0
  1373. src/client/generated/models/upload_test_result_body_step_dto.py +118 -0
  1374. src/client/generated/models/upload_test_result_dto.py +182 -0
  1375. src/client/generated/models/upload_test_result_expected_body_step_dto.py +106 -0
  1376. src/client/generated/models/upload_test_result_step_dto.py +113 -0
  1377. src/client/generated/models/upload_test_status.py +40 -0
  1378. src/client/generated/models/webhook_create_dto.py +98 -0
  1379. src/client/generated/models/webhook_dto.py +111 -0
  1380. src/client/generated/models/webhook_patch_dto.py +95 -0
  1381. src/client/generated/models/webhook_settings.py +107 -0
  1382. src/client/generated/models/webhook_subject.py +122 -0
  1383. src/client/generated/models/webhook_validate_dto.py +94 -0
  1384. src/client/generated/models/widget_create_dto.py +105 -0
  1385. src/client/generated/models/widget_create_dto_options.py +263 -0
  1386. src/client/generated/models/widget_data_dto.py +94 -0
  1387. src/client/generated/models/widget_dto.py +114 -0
  1388. src/client/generated/models/widget_options.py +137 -0
  1389. src/client/generated/models/widget_options_analytic_graph.py +99 -0
  1390. src/client/generated/models/widget_options_having_settable_aql.py +99 -0
  1391. src/client/generated/models/widget_options_last_launch_pie_chart.py +97 -0
  1392. src/client/generated/models/widget_options_launch_list.py +97 -0
  1393. src/client/generated/models/widget_options_launch_trend.py +95 -0
  1394. src/client/generated/models/widget_options_markdown.py +89 -0
  1395. src/client/generated/models/widget_options_statistic_trend.py +98 -0
  1396. src/client/generated/models/widget_options_tc_pie_chart.py +98 -0
  1397. src/client/generated/models/widget_options_tc_tree_map.py +99 -0
  1398. src/client/generated/models/widget_options_top_tc.py +96 -0
  1399. src/client/generated/models/widget_options_trend.py +96 -0
  1400. src/client/generated/models/widget_options_trend_v2.py +89 -0
  1401. src/client/generated/models/widget_patch_dto.py +102 -0
  1402. src/client/generated/models/widget_type_dto.py +46 -0
  1403. src/client/generated/models/workflow_create_dto.py +98 -0
  1404. src/client/generated/models/workflow_dto.py +107 -0
  1405. src/client/generated/models/workflow_patch_dto.py +97 -0
  1406. src/client/generated/models/workflow_row_dto.py +89 -0
  1407. src/client/generated/models/workflow_schema_create_dto.py +92 -0
  1408. src/client/generated/models/workflow_schema_dto.py +106 -0
  1409. src/client/generated/models/workflow_schema_patch_dto.py +90 -0
  1410. src/client/generated/rest.py +199 -0
  1411. src/client/refactor-hotspots.md +53 -0
  1412. src/client/refactor-plan.md +78 -0
  1413. src/main.py +95 -0
  1414. src/services/__init__.py +1 -0
  1415. src/services/attachment_service.py +104 -0
  1416. src/services/search_service.py +230 -0
  1417. src/services/shared_step_service.py +329 -0
  1418. src/services/test_case_service.py +951 -0
  1419. src/tools/__init__.py +41 -0
  1420. src/tools/create_test_case.py +76 -0
  1421. src/tools/delete_test_case.py +53 -0
  1422. src/tools/link_shared_step.py +95 -0
  1423. src/tools/search.py +348 -0
  1424. src/tools/shared_steps.py +169 -0
  1425. src/tools/unlink_shared_step.py +70 -0
  1426. src/tools/update_test_case.py +125 -0
  1427. src/utils/__init__.py +1 -0
  1428. src/utils/auth.py +106 -0
  1429. src/utils/config.py +36 -0
  1430. src/utils/error.py +184 -0
  1431. src/utils/logger.py +68 -0
  1432. src/utils/schema_hint.py +58 -0
  1433. src/version.py +3 -0
src/client/client.py ADDED
@@ -0,0 +1,1203 @@
1
+ """Async HTTP client for Allure TestOps API.
2
+
3
+ This module provides a high-level wrapper around the auto-generated Allure TestOps
4
+ client, adding features like token management, automatic refresh, and
5
+ standardized error handling.
6
+ """
7
+
8
+ import time
9
+ from collections.abc import Awaitable
10
+ from typing import Literal, TypeVar, cast, overload
11
+
12
+ import httpx
13
+ from pydantic import SecretStr
14
+
15
+ from src.client.exceptions import TestCaseNotFoundError
16
+ from src.utils.config import settings
17
+ from src.utils.logger import get_logger
18
+
19
+ from .exceptions import (
20
+ AllureAPIError,
21
+ AllureAuthError,
22
+ AllureNotFoundError,
23
+ AllureRateLimitError,
24
+ AllureValidationError,
25
+ )
26
+ from .generated.api.shared_step_attachment_controller_api import SharedStepAttachmentControllerApi
27
+ from .generated.api.shared_step_controller_api import SharedStepControllerApi
28
+ from .generated.api.shared_step_scenario_controller_api import SharedStepScenarioControllerApi
29
+ from .generated.api.test_case_attachment_controller_api import TestCaseAttachmentControllerApi
30
+ from .generated.api.test_case_controller_api import TestCaseControllerApi
31
+ from .generated.api.test_case_overview_controller_api import TestCaseOverviewControllerApi
32
+ from .generated.api.test_case_scenario_controller_api import TestCaseScenarioControllerApi
33
+ from .generated.api.test_case_search_controller_api import TestCaseSearchControllerApi
34
+ from .generated.api_client import ApiClient
35
+ from .generated.configuration import Configuration
36
+ from .generated.exceptions import ApiException
37
+ from .generated.models.attachment_step_dto import AttachmentStepDto
38
+ from .generated.models.body_step_dto import BodyStepDto
39
+ from .generated.models.custom_field_value_with_cf_dto import CustomFieldValueWithCfDto
40
+ from .generated.models.page_shared_step_dto import PageSharedStepDto
41
+ from .generated.models.page_test_case_dto import PageTestCaseDto
42
+ from .generated.models.scenario_step_create_dto import ScenarioStepCreateDto
43
+ from .generated.models.scenario_step_created_response_dto import ScenarioStepCreatedResponseDto
44
+ from .generated.models.shared_step_attachment_row_dto import SharedStepAttachmentRowDto
45
+ from .generated.models.shared_step_create_dto import SharedStepCreateDto
46
+ from .generated.models.shared_step_dto import SharedStepDto
47
+ from .generated.models.shared_step_patch_dto import SharedStepPatchDto
48
+ from .generated.models.shared_step_scenario_dto_steps_inner import SharedStepScenarioDtoStepsInner
49
+ from .generated.models.shared_step_step_dto import SharedStepStepDto
50
+ from .generated.models.test_case_attachment_row_dto import TestCaseAttachmentRowDto
51
+ from .generated.models.test_case_create_v2_dto import TestCaseCreateV2Dto
52
+ from .generated.models.test_case_dto import TestCaseDto
53
+ from .generated.models.test_case_overview_dto import TestCaseOverviewDto
54
+ from .generated.models.test_case_patch_v2_dto import TestCasePatchV2Dto
55
+ from .generated.models.test_case_row_dto import TestCaseRowDto
56
+ from .generated.models.test_case_scenario_dto import TestCaseScenarioDto
57
+ from .generated.models.test_case_scenario_v2_dto import TestCaseScenarioV2Dto
58
+
59
+
60
+ # Subclasses to add missing fields to generated models
61
+ class TestCaseDtoWithCF(TestCaseDto):
62
+ """Subclass to support custom_fields access."""
63
+
64
+ custom_fields: list[CustomFieldValueWithCfDto] | None = None
65
+
66
+
67
+ class BodyStepDtoWithSteps(BodyStepDto):
68
+ """Subclass to support nested steps and id."""
69
+
70
+ steps: list[SharedStepScenarioDtoStepsInner] | None = None
71
+ id: int | None = None
72
+
73
+
74
+ class AttachmentStepDtoWithName(AttachmentStepDto):
75
+ """Subclass to support name attribute and id."""
76
+
77
+ name: str | None = None
78
+ id: int | None = None
79
+
80
+
81
+ class SharedStepStepDtoWithId(SharedStepStepDto):
82
+ """Subclass to support id attribute."""
83
+
84
+ id: int | None = None
85
+
86
+
87
+ logger = get_logger(__name__)
88
+
89
+ T = TypeVar("T")
90
+
91
+ type ApiType = (
92
+ TestCaseControllerApi
93
+ | SharedStepControllerApi
94
+ | SharedStepAttachmentControllerApi
95
+ | TestCaseAttachmentControllerApi
96
+ | TestCaseScenarioControllerApi
97
+ | SharedStepScenarioControllerApi
98
+ | TestCaseOverviewControllerApi
99
+ | TestCaseSearchControllerApi
100
+ )
101
+
102
+ type NormalizedScenarioDict = dict[str, object]
103
+
104
+ type ScenarioStepsMap = dict[str, dict[str, object]]
105
+
106
+ type AttachmentsMap = dict[str, dict[str, object]]
107
+
108
+ # Export models for convenience
109
+ __all__ = [
110
+ "AllureClient",
111
+ "AttachmentStepDtoWithName",
112
+ "BodyStepDtoWithSteps",
113
+ "PageSharedStepDto",
114
+ "PageTestCaseDto",
115
+ "ScenarioStepCreateDto",
116
+ "ScenarioStepCreatedResponseDto",
117
+ "SharedStepAttachmentRowDto",
118
+ "SharedStepCreateDto",
119
+ "SharedStepDto",
120
+ "SharedStepPatchDto",
121
+ "SharedStepScenarioDtoStepsInner",
122
+ "SharedStepStepDtoWithId",
123
+ "TestCaseAttachmentRowDto",
124
+ "TestCaseCreateV2Dto",
125
+ "TestCaseDto",
126
+ "TestCaseDtoWithCF",
127
+ "TestCaseOverviewDto",
128
+ "TestCasePatchV2Dto",
129
+ "TestCaseRowDto",
130
+ "TestCaseScenarioDto",
131
+ "TestCaseScenarioV2Dto",
132
+ ]
133
+
134
+
135
+ class AllureClient:
136
+ """Async client for Allure TestOps API.
137
+
138
+ This client manages a session with the Allure TestOps API, handling
139
+ initial Bearer token exchange and automatic background renewal
140
+ before expiry.
141
+
142
+ Example:
143
+ ```python
144
+ from pydantic import SecretStr
145
+ from src.client import AllureClient
146
+
147
+ async with AllureClient(
148
+ base_url="https://demo.testops.cloud",
149
+ token=SecretStr("your-api-token"),
150
+ project=0
151
+ ) as client:
152
+ # client is initialized and authenticated
153
+ pass
154
+ ```
155
+ """
156
+
157
+ def __init__(
158
+ self,
159
+ base_url: str,
160
+ token: SecretStr,
161
+ project: int,
162
+ timeout: float = 30.0,
163
+ ) -> None:
164
+ """Initialize AllureClient.
165
+
166
+ Args:
167
+ base_url: Allure TestOps instance base URL
168
+ token: API token (will be exchanged for JWT Bearer token)
169
+ project: Target Allure TestOps project ID
170
+ timeout: Request timeout in seconds (default: 30.0)
171
+ """
172
+ if not base_url.startswith(("http://", "https://")):
173
+ raise ValueError(f"Invalid base_url scheme: {base_url}. Must start with http:// or https://")
174
+
175
+ self._base_url = base_url.rstrip("/")
176
+ self._token = token
177
+ self._project = project
178
+ self._timeout = timeout
179
+ self._jwt_token: str | None = None
180
+ self._token_expires_at: float | None = None
181
+ self._csrf_token: str | None = None
182
+
183
+ # Generated client components
184
+ self._api_client: ApiClient | None = None
185
+ self._test_case_api: TestCaseControllerApi | None = None
186
+ self._shared_step_api: SharedStepControllerApi | None = None
187
+ self._shared_step_attachment_api: SharedStepAttachmentControllerApi | None = None
188
+ self._attachment_api: TestCaseAttachmentControllerApi | None = None
189
+ self._scenario_api: TestCaseScenarioControllerApi | None = None
190
+ self._shared_step_scenario_api: SharedStepScenarioControllerApi | None = None
191
+ self._overview_api: TestCaseOverviewControllerApi
192
+ self._search_api: TestCaseSearchControllerApi | None = None
193
+ self._is_entered = False
194
+
195
+ @classmethod
196
+ def from_env(cls, project: int | None = None, timeout: float = 30.0) -> AllureClient:
197
+ """Initialize AllureClient from environment variables.
198
+
199
+ Expects:
200
+ ALLURE_ENDPOINT: The base URL of the Allure TestOps instance.
201
+ ALLURE_API_TOKEN: The API token for authentication.
202
+ ALLURE_PROJECT_ID: The target project ID.
203
+
204
+ Args:
205
+ project: Optional target Allure TestOps project ID to override the one from environment variables.
206
+ timeout: Request timeout in seconds (default: 30.0)
207
+
208
+ Returns:
209
+ An initialized AllureClient instance.
210
+
211
+ Raises:
212
+ KeyError: If required environment variables are missing.
213
+ ValueError: If settings validation fails.
214
+ """
215
+ if not settings.ALLURE_ENDPOINT:
216
+ raise KeyError("ALLURE_ENDPOINT is not set in environment or config")
217
+ if not settings.ALLURE_API_TOKEN:
218
+ raise KeyError("ALLURE_API_TOKEN is not set in environment or config")
219
+
220
+ if not isinstance(settings.ALLURE_PROJECT_ID, int) or settings.ALLURE_PROJECT_ID <= 0:
221
+ raise ValueError("ALLURE_PROJECT_ID must be a positive integer")
222
+
223
+ if project:
224
+ p = project
225
+ else:
226
+ p = settings.ALLURE_PROJECT_ID
227
+
228
+ return cls(
229
+ base_url=settings.ALLURE_ENDPOINT,
230
+ token=settings.ALLURE_API_TOKEN,
231
+ project=p,
232
+ timeout=timeout,
233
+ )
234
+
235
+ def set_project(self, project: int) -> None:
236
+ self._project = project
237
+
238
+ def get_project(self) -> int:
239
+ return self._project
240
+
241
+ async def _get_jwt_token(self) -> str:
242
+ """Exchange API token for a JWT Bearer token.
243
+
244
+ Uses a one-off httpx request to the auth endpoint since the
245
+ generated client is designed for use after authentication.
246
+
247
+ Returns:
248
+ The raw JWT access token string.
249
+
250
+ Raises:
251
+ AllureAuthError: If the token exchange fails due to invalid credentials.
252
+ AllureAPIError: If a connection or system error occurs.
253
+ """
254
+ # We use a temporary httpx client for the initial token exchange
255
+ # because the generated client expects a valid access token.
256
+ async with httpx.AsyncClient(base_url=self._base_url, timeout=self._timeout) as temp_client:
257
+ try:
258
+ response = await temp_client.post(
259
+ "/api/uaa/oauth/token",
260
+ data={
261
+ "grant_type": "apitoken",
262
+ "scope": "openid",
263
+ "token": self._token.get_secret_value(),
264
+ },
265
+ headers={"Accept": "application/json"},
266
+ timeout=self._timeout * 2,
267
+ )
268
+ response.raise_for_status()
269
+ data = response.json()
270
+ access_token: str = data["access_token"]
271
+ expires_in: int = data.get("expires_in", 3600)
272
+
273
+ self._jwt_token = access_token
274
+ # Refresh 60 seconds before expiry
275
+ self._token_expires_at = time.time() + expires_in - 60
276
+
277
+ # Capture CSRF token if present (standard Spring Security/Angular convention)
278
+ self._csrf_token = response.cookies.get("XSRF-TOKEN")
279
+
280
+ return access_token
281
+ except httpx.HTTPStatusError as e:
282
+ raise AllureAuthError(
283
+ f"Token exchange failed: {e.response.text}",
284
+ status_code=e.response.status_code,
285
+ response_body=e.response.text,
286
+ ) from e
287
+ except httpx.RequestError as e:
288
+ raise AllureAPIError(f"Token exchange request error: {e}") from e
289
+
290
+ async def _ensure_valid_token(self) -> None:
291
+ """Ensure the session has a valid JWT token.
292
+
293
+ Checks the token expiration and triggers a refresh if it's missing
294
+ or about to expire (within 60 seconds). Also initializes or updates
295
+ the internal ApiClient and controllers.
296
+ """
297
+ if self._token_expires_at is None or time.time() >= self._token_expires_at:
298
+ new_token = await self._get_jwt_token()
299
+
300
+ # Initialize or update ApiClient
301
+ if self._api_client is None:
302
+ config = Configuration(host=self._base_url, access_token=new_token, retries=3)
303
+ self._api_client = ApiClient(configuration=config)
304
+ # Set custom timeout on the underlying REST client if possible
305
+ # The generated client typically uses default timeout or per-request
306
+ else:
307
+ self._api_client.configuration.access_token = new_token
308
+
309
+ if self._api_client:
310
+ # Ensure Authorization header is set as generated client might not pick it up automatically
311
+ self._api_client.default_headers["Authorization"] = f"Bearer {new_token}"
312
+
313
+ # Inject CSRF token if available
314
+ if self._csrf_token and self._api_client:
315
+ # Cookie for standard session checks
316
+ self._api_client.cookie = f"XSRF-TOKEN={self._csrf_token}"
317
+ # Header for CSRF protection
318
+ self._api_client.default_headers["X-XSRF-TOKEN"] = self._csrf_token
319
+
320
+ # Re-initialize controllers
321
+ self._test_case_api = TestCaseControllerApi(self._api_client)
322
+ self._shared_step_api = SharedStepControllerApi(self._api_client)
323
+ self._shared_step_attachment_api = SharedStepAttachmentControllerApi(self._api_client)
324
+ self._attachment_api = TestCaseAttachmentControllerApi(self._api_client)
325
+ self._scenario_api = TestCaseScenarioControllerApi(self._api_client)
326
+ self._shared_step_scenario_api = SharedStepScenarioControllerApi(self._api_client)
327
+ self._overview_api = TestCaseOverviewControllerApi(self._api_client)
328
+ self._search_api = TestCaseSearchControllerApi(self._api_client)
329
+
330
+ @property
331
+ def api_client(self) -> ApiClient:
332
+ """Get the underlying ApiClient instance.
333
+
334
+ Raises:
335
+ RuntimeError: If the client has not been initialized (entered with).
336
+ """
337
+ if self._api_client is None:
338
+ raise RuntimeError("AllureClient must be used as an async context manager")
339
+ return self._api_client
340
+
341
+ async def __aenter__(self) -> AllureClient:
342
+ """Initialize the client session within an async context.
343
+
344
+ Performs token exchange and prepares all generated API controllers.
345
+
346
+ Returns:
347
+ Self (authenticated and ready to use).
348
+ """
349
+ await self._ensure_valid_token()
350
+ if self._api_client:
351
+ # Generate client's __aenter__ is untyped
352
+ await self._api_client.__aenter__() # type: ignore[no-untyped-call]
353
+ self._is_entered = True
354
+ return self
355
+
356
+ async def __aexit__(self, *args: object) -> None:
357
+ """Cleanly close the client session and underlying HTTP transport."""
358
+ self._is_entered = False
359
+ if self._api_client:
360
+ # Generated client's __aexit__ is untyped
361
+ await self._api_client.__aexit__(*args) # type: ignore[no-untyped-call]
362
+
363
+ def _handle_api_exception(self, e: ApiException) -> None:
364
+ """Map generated client exceptions to lucius-mcp custom exceptions.
365
+
366
+ Args:
367
+ e: The raw ApiException from the generated client.
368
+
369
+ Raises:
370
+ AllureNotFoundError: For 404 status.
371
+ AllureValidationError: For 400 status.
372
+ AllureAuthError: For 401/403 status.
373
+ AllureRateLimitError: For 429 status.
374
+ AllureAPIError: For all other non-success statuses.
375
+ """
376
+ status = e.status
377
+ body = e.body if hasattr(e, "body") else str(e)
378
+
379
+ # Log the exception with traceback for debugging
380
+ logger.exception("API request failed with status %s", status)
381
+
382
+ if status == 404:
383
+ raise AllureNotFoundError(f"Resource not found: {body}", status_code=status, response_body=body) from e
384
+ if status == 400:
385
+ raise AllureValidationError(f"Validation error: {body}", status_code=status, response_body=body) from e
386
+ if status in (401, 403):
387
+ raise AllureAuthError(f"Authentication failed: {body}", status_code=status, response_body=body) from e
388
+ if status == 429:
389
+ raise AllureRateLimitError("Rate limit exceeded", status_code=status, response_body=body) from e
390
+
391
+ raise AllureAPIError(f"API request failed: {body}", status_code=status, response_body=body) from e
392
+
393
+ def _require_entered(self) -> None:
394
+ if not self._is_entered:
395
+ raise AllureAPIError("Client not initialized. Use 'async with AllureClient(...)'")
396
+
397
+ @staticmethod
398
+ def _raise_missing_api(api_name: str) -> None:
399
+ raise AllureAPIError(f"Internal error: {api_name} not initialized")
400
+
401
+ @overload
402
+ @overload
403
+ async def _get_api(
404
+ self, attr_name: Literal["_test_case_api"], *, error_name: str | None = None
405
+ ) -> TestCaseControllerApi: ...
406
+
407
+ @overload
408
+ async def _get_api(
409
+ self, attr_name: Literal["_shared_step_api"], *, error_name: str | None = None
410
+ ) -> SharedStepControllerApi: ...
411
+
412
+ @overload
413
+ async def _get_api(
414
+ self, attr_name: Literal["_shared_step_attachment_api"], *, error_name: str | None = None
415
+ ) -> SharedStepAttachmentControllerApi: ...
416
+
417
+ @overload
418
+ async def _get_api(
419
+ self, attr_name: Literal["_attachment_api"], *, error_name: str | None = None
420
+ ) -> TestCaseAttachmentControllerApi: ...
421
+
422
+ @overload
423
+ async def _get_api(
424
+ self, attr_name: Literal["_scenario_api"], *, error_name: str | None = None
425
+ ) -> TestCaseScenarioControllerApi: ...
426
+
427
+ @overload
428
+ async def _get_api(
429
+ self, attr_name: Literal["_shared_step_scenario_api"], *, error_name: str | None = None
430
+ ) -> SharedStepScenarioControllerApi: ...
431
+
432
+ @overload
433
+ async def _get_api(
434
+ self, attr_name: Literal["_overview_api"], *, error_name: str | None = None
435
+ ) -> TestCaseOverviewControllerApi: ...
436
+
437
+ @overload
438
+ async def _get_api(
439
+ self, attr_name: Literal["_search_api"], *, error_name: str | None = None
440
+ ) -> TestCaseSearchControllerApi: ...
441
+
442
+ async def _get_api(self, attr_name: str, *, error_name: str | None = None) -> ApiType:
443
+ self._require_entered()
444
+ await self._ensure_valid_token()
445
+ api = getattr(self, attr_name)
446
+ if api is None:
447
+ self._raise_missing_api(error_name or attr_name.lstrip("_"))
448
+ return cast(ApiType, api)
449
+
450
+ async def _call_api(self, coro: Awaitable[T]) -> T:
451
+ try:
452
+ return await coro
453
+ except ApiException as e:
454
+ self._handle_api_exception(e)
455
+ raise
456
+
457
+ async def _call_api_raw(self, coro: Awaitable[httpx.Response]) -> httpx.Response:
458
+ try:
459
+ return await coro
460
+ except ApiException as e:
461
+ self._handle_api_exception(e)
462
+ raise
463
+
464
+ @staticmethod
465
+ def _extract_response_data(response: httpx.Response) -> dict[str, object]:
466
+ if not 200 <= response.status_code <= 299:
467
+ raise ApiException(status=response.status_code, reason=response.reason_phrase, body=response.text)
468
+ data = response.json()
469
+ if isinstance(data, dict):
470
+ return data
471
+ raise ApiException(status=response.status_code, reason=response.reason_phrase, body=response.text)
472
+
473
+ async def _create_scenario_step_via_api(
474
+ self,
475
+ api: TestCaseScenarioControllerApi | SharedStepScenarioControllerApi,
476
+ step: ScenarioStepCreateDto,
477
+ *,
478
+ after_id: int | None = None,
479
+ with_expected_result: bool = False,
480
+ ) -> ScenarioStepCreatedResponseDto:
481
+ if isinstance(api, TestCaseScenarioControllerApi):
482
+ response = await self._call_api_raw(
483
+ api.create15_without_preload_content(
484
+ scenario_step_create_dto=step,
485
+ after_id=after_id,
486
+ with_expected_result=with_expected_result,
487
+ _request_timeout=self._timeout,
488
+ )
489
+ )
490
+ else:
491
+ response = await self._call_api_raw(
492
+ api.create20_without_preload_content(
493
+ scenario_step_create_dto=step,
494
+ _request_timeout=self._timeout,
495
+ )
496
+ )
497
+ data = self._extract_response_data(response)
498
+ raw_created_step_id = data.get("createdStepId")
499
+ created_step_id = raw_created_step_id if isinstance(raw_created_step_id, int) else None
500
+ return ScenarioStepCreatedResponseDto.model_construct(
501
+ created_step_id=created_step_id,
502
+ )
503
+
504
+ @overload
505
+ async def _upload_attachment_via_api(
506
+ self,
507
+ api: TestCaseAttachmentControllerApi,
508
+ *,
509
+ test_case_id: int,
510
+ shared_step_id: None = None,
511
+ file_data: list[bytes | str | tuple[str, bytes]],
512
+ ) -> list[TestCaseAttachmentRowDto]: ...
513
+
514
+ @overload
515
+ async def _upload_attachment_via_api(
516
+ self,
517
+ api: SharedStepAttachmentControllerApi,
518
+ *,
519
+ test_case_id: None = None,
520
+ shared_step_id: int,
521
+ file_data: list[bytes | str | tuple[str, bytes]],
522
+ ) -> list[SharedStepAttachmentRowDto]: ...
523
+
524
+ async def _upload_attachment_via_api(
525
+ self,
526
+ api: TestCaseAttachmentControllerApi | SharedStepAttachmentControllerApi,
527
+ *,
528
+ test_case_id: int | None = None,
529
+ shared_step_id: int | None = None,
530
+ file_data: list[bytes | str | tuple[str, bytes]],
531
+ ) -> list[TestCaseAttachmentRowDto] | list[SharedStepAttachmentRowDto]:
532
+ if isinstance(api, TestCaseAttachmentControllerApi):
533
+ if test_case_id is None:
534
+ raise AllureValidationError("test_case_id is required for test case attachment upload")
535
+ return await self._call_api(
536
+ api.create16(
537
+ test_case_id=test_case_id,
538
+ file=file_data,
539
+ _request_timeout=self._timeout,
540
+ )
541
+ )
542
+ if shared_step_id is None:
543
+ raise AllureValidationError("shared_step_id is required for shared step attachment upload")
544
+ return await self._call_api(
545
+ api.create21(
546
+ shared_step_id=shared_step_id,
547
+ file=file_data,
548
+ _request_timeout=self._timeout,
549
+ )
550
+ )
551
+
552
+ # ==========================================
553
+ # Test Case operations
554
+ # ==========================================
555
+
556
+ async def create_test_case(self, data: TestCaseCreateV2Dto) -> TestCaseOverviewDto:
557
+ """Create a new test case in the specified project.
558
+
559
+ Args:
560
+ data: Test case definition (name, scenario, etc.).
561
+
562
+ Returns:
563
+ The created test case overview.
564
+
565
+ Raises:
566
+ AllureNotFoundError: If project doesn't exist.
567
+ AllureValidationError: If input data fails validation.
568
+ AllureAuthError: If unauthorized.
569
+ AllureAPIError: If the server returns an error.
570
+ """
571
+ api = await self._get_api("_test_case_api")
572
+
573
+ # Ensure project_id is set in the body as required by the model
574
+ if hasattr(data, "project_id") and not data.project_id:
575
+ data.project_id = self._project
576
+ response = await self._call_api(api.create13(test_case_create_v2_dto=data, _request_timeout=self._timeout))
577
+ # Switch view from TestCaseDto to TestCaseOverviewDto
578
+ # Since fields are compatible (mostly optional), we can use model_dump/validate
579
+ return TestCaseOverviewDto.model_validate(response.model_dump())
580
+
581
+ @staticmethod
582
+ def _escape_rql_value(value: str) -> str:
583
+ return value.replace("\\", "\\\\").replace('"', '\\"')
584
+
585
+ @classmethod
586
+ def _build_rql_filters(cls, search: str | None, status: str | None, tags: list[str] | None) -> str:
587
+ parts: list[str] = []
588
+ if search:
589
+ parts.append(f'name~="{cls._escape_rql_value(search)}"')
590
+ if status:
591
+ parts.append(f'status="{cls._escape_rql_value(status)}"')
592
+ if tags:
593
+ for tag in tags:
594
+ parts.append(f'tag="{cls._escape_rql_value(tag)}"')
595
+ return " and ".join(parts)
596
+
597
+ async def list_test_cases(
598
+ self,
599
+ project_id: int,
600
+ page: int = 0,
601
+ size: int = 20,
602
+ search: str | None = None,
603
+ tags: list[str] | None = None,
604
+ status: str | None = None,
605
+ ) -> PageTestCaseDto:
606
+ """List test cases for a project.
607
+
608
+ Args:
609
+ project_id: Target project ID.
610
+ page: Zero-based page index.
611
+ size: Page size.
612
+ search: Optional name/description search.
613
+ tags: Optional list of tags to filter (AQL syntax).
614
+ status: Optional status filter for AQL query.
615
+
616
+ Returns:
617
+ Paginated test cases for the project.
618
+
619
+ Raises:
620
+ AllureNotFoundError: If project doesn't exist.
621
+ AllureValidationError: If input data fails validation.
622
+ AllureAuthError: If unauthorized.
623
+ AllureAPIError: If the server returns an error.
624
+ """
625
+ search_api = await self._get_api("_search_api", error_name="test_case search APIs")
626
+
627
+ if not isinstance(project_id, int) or project_id <= 0:
628
+ raise AllureValidationError("Project ID must be a positive integer")
629
+
630
+ if not isinstance(page, int) or page < 0:
631
+ raise AllureValidationError("Page must be a non-negative integer")
632
+ if not isinstance(size, int) or size <= 0 or size > 100:
633
+ raise AllureValidationError("Size must be between 1 and 100")
634
+
635
+ rql = self._build_rql_filters(search=search, status=status, tags=tags)
636
+
637
+ return await self._call_api(
638
+ search_api.search1(
639
+ project_id=project_id,
640
+ rql=rql,
641
+ page=page,
642
+ size=size,
643
+ _request_timeout=self._timeout,
644
+ )
645
+ )
646
+
647
+ async def search_test_cases_aql(
648
+ self,
649
+ project_id: int,
650
+ rql: str,
651
+ page: int = 0,
652
+ size: int = 20,
653
+ deleted: bool = False,
654
+ sort: list[str] | None = None,
655
+ ) -> PageTestCaseDto:
656
+ """Search test cases using raw AQL (Allure Query Language).
657
+
658
+ This method passes the AQL query directly to the Allure search endpoint,
659
+ supporting complex queries with operators like AND, OR, NOT, and field filters.
660
+
661
+ Args:
662
+ project_id: Target project ID.
663
+ rql: Raw AQL query string (e.g., 'status="failed" and tag="regression"').
664
+ page: Zero-based page index.
665
+ size: Page size (max 100).
666
+ deleted: If True, include deleted test cases.
667
+ sort: Optional sort criteria (e.g., ["id,DESC"]).
668
+
669
+ Returns:
670
+ Paginated test case results matching the AQL query.
671
+
672
+ Raises:
673
+ AllureValidationError: If AQL syntax is invalid or input fails validation.
674
+ AllureNotFoundError: If project doesn't exist.
675
+ AllureAuthError: If unauthorized.
676
+ AllureAPIError: If the server returns an error.
677
+ """
678
+ search_api = await self._get_api("_search_api", error_name="test_case search APIs")
679
+
680
+ if not isinstance(project_id, int) or project_id <= 0:
681
+ raise AllureValidationError("Project ID must be a positive integer")
682
+
683
+ if not isinstance(rql, str) or not rql.strip():
684
+ raise AllureValidationError("AQL query must be a non-empty string")
685
+
686
+ if not isinstance(page, int) or page < 0:
687
+ raise AllureValidationError("Page must be a non-negative integer")
688
+ if not isinstance(size, int) or size <= 0 or size > 100:
689
+ raise AllureValidationError("Size must be between 1 and 100")
690
+
691
+ return await self._call_api(
692
+ search_api.search1(
693
+ project_id=project_id,
694
+ rql=rql,
695
+ deleted=deleted,
696
+ page=page,
697
+ size=size,
698
+ sort=sort,
699
+ _request_timeout=self._timeout,
700
+ )
701
+ )
702
+
703
+ async def validate_test_case_query(
704
+ self,
705
+ project_id: int,
706
+ rql: str,
707
+ deleted: bool = False,
708
+ ) -> tuple[bool, int | None]:
709
+ """Validate an AQL query without executing it.
710
+
711
+ Use this to check AQL syntax and get an estimated count of matching
712
+ test cases before running an expensive search.
713
+
714
+ Args:
715
+ project_id: Target project ID.
716
+ rql: Raw AQL query string to validate.
717
+ deleted: If True, include deleted test cases in count.
718
+
719
+ Returns:
720
+ A tuple of (is_valid, count). If valid is True, count is the
721
+ estimated number of matching test cases. If valid is False,
722
+ count may be None.
723
+
724
+ Raises:
725
+ AllureValidationError: If input fails basic validation.
726
+ AllureNotFoundError: If project doesn't exist.
727
+ AllureAuthError: If unauthorized.
728
+ AllureAPIError: If the server returns an error.
729
+ """
730
+ search_api = await self._get_api("_search_api", error_name="test_case search APIs")
731
+
732
+ if not isinstance(project_id, int) or project_id <= 0:
733
+ raise AllureValidationError("Project ID must be a positive integer")
734
+
735
+ if not isinstance(rql, str) or not rql.strip():
736
+ raise AllureValidationError("AQL query must be a non-empty string")
737
+
738
+ response = await self._call_api(
739
+ search_api.validate_query1(
740
+ project_id=project_id,
741
+ rql=rql,
742
+ deleted=deleted,
743
+ _request_timeout=self._timeout,
744
+ )
745
+ )
746
+
747
+ return (response.valid or False, response.count)
748
+
749
+ async def upload_attachment(
750
+ self,
751
+ test_case_id: int,
752
+ file_data: list[bytes | str | tuple[str, bytes]],
753
+ ) -> list[TestCaseAttachmentRowDto]:
754
+ """Upload one or more attachments to a test case.
755
+
756
+ Args:
757
+ test_case_id: Target test case ID.
758
+ file_data: List of tuples containing (filename, content_bytes).
759
+
760
+ Returns:
761
+ List of successfully created attachment records.
762
+
763
+ Raises:
764
+ AllureValidationError: If file types or sizes are rejected.
765
+ AllureAuthError: If unauthorized.
766
+ AllureAPIError: If the server returns an error.
767
+ """
768
+ attachment_api = await self._get_api("_attachment_api")
769
+ return await self._upload_attachment_via_api(
770
+ attachment_api,
771
+ test_case_id=test_case_id,
772
+ file_data=file_data,
773
+ )
774
+
775
+ async def create_scenario_step(
776
+ self,
777
+ test_case_id: int,
778
+ step: ScenarioStepCreateDto,
779
+ after_id: int | None = None,
780
+ with_expected_result: bool = False,
781
+ ) -> ScenarioStepCreatedResponseDto:
782
+ """Create a scenario step for an existing test case.
783
+
784
+ Args:
785
+ test_case_id: The ID of the test case to add the step to.
786
+ step: The step data to create. Must have test_case_id set.
787
+ after_id: Optional ID of the step after which to insert the new step.
788
+ with_expected_result: If True, creates an expected result step below.
789
+
790
+ Returns:
791
+ The response containing the created step ID and updated scenario.
792
+
793
+ Raises:
794
+ AllureNotFoundError: If test case doesn't exist.
795
+ AllureValidationError: If input data fails validation.
796
+ AllureAuthError: If unauthorized.
797
+ AllureAPIError: If the server returns an error.
798
+ """
799
+ scenario_api = await self._get_api("_scenario_api")
800
+
801
+ # Ensure test_case_id is set
802
+ if step.test_case_id is None:
803
+ step = ScenarioStepCreateDto.model_validate(
804
+ {
805
+ "testCaseId": test_case_id,
806
+ "body": step.body,
807
+ "bodyJson": step.body_json,
808
+ "attachmentId": step.attachment_id,
809
+ "sharedStepId": step.shared_step_id,
810
+ "parentId": step.parent_id,
811
+ }
812
+ )
813
+
814
+ return await self._create_scenario_step_via_api(
815
+ scenario_api,
816
+ step,
817
+ after_id=after_id,
818
+ with_expected_result=with_expected_result,
819
+ )
820
+
821
+ async def delete_scenario_step(self, step_id: int) -> None:
822
+ """Delete a scenario step.
823
+
824
+ Args:
825
+ step_id: ID of the step to delete.
826
+
827
+ Raises:
828
+ AllureAPIError: If the API request fails.
829
+ """
830
+ scenario_api = await self._get_api("_scenario_api")
831
+ await self._call_api(
832
+ scenario_api.delete_by_id1(
833
+ id=step_id,
834
+ _request_timeout=self._timeout,
835
+ )
836
+ )
837
+
838
+ async def get_test_case(self, test_case_id: int) -> TestCaseDto:
839
+ """Retrieve a specific test case by its ID.
840
+
841
+ Args:
842
+ test_case_id: The unique ID of the test case.
843
+
844
+ Returns:
845
+ The test case data.
846
+
847
+ Raises:
848
+ AllureNotFoundError: If test case doesn't exist.
849
+ AllureAuthError: If unauthorized.
850
+ AllureAPIError: If the server returns an error.
851
+ """
852
+ test_case_api = await self._get_api("_test_case_api")
853
+
854
+ try:
855
+ # Use _without_preload_content to get raw JSON for missing fields (like customFields)
856
+ # Actually, for customFields we now use get_overview
857
+ response = await self._call_api_raw(
858
+ test_case_api.find_one11_without_preload_content(id=test_case_id, _request_timeout=self._timeout)
859
+ )
860
+ raw_data = self._extract_response_data(response)
861
+ # Use our subclass to support extra fields
862
+ case = TestCaseDtoWithCF.model_validate(raw_data)
863
+
864
+ # Fetch custom fields from overview
865
+ try:
866
+ overview = await self._overview_api.get_overview(
867
+ test_case_id=test_case_id, _request_timeout=self._timeout
868
+ )
869
+ if overview.custom_fields:
870
+ case.custom_fields = overview.custom_fields
871
+ except Exception as e:
872
+ logger.warning(f"Failed to fetch overview for test case {test_case_id}: {e}")
873
+
874
+ return case
875
+ except AllureNotFoundError as e:
876
+ raise TestCaseNotFoundError(
877
+ test_case_id=test_case_id,
878
+ status_code=getattr(e, "status_code", None),
879
+ response_body=getattr(e, "response_body", None),
880
+ ) from e
881
+ except ApiException as e:
882
+ try:
883
+ self._handle_api_exception(e)
884
+ except AllureNotFoundError as nf:
885
+ raise TestCaseNotFoundError(
886
+ test_case_id=test_case_id,
887
+ status_code=getattr(nf, "status_code", None),
888
+ response_body=getattr(nf, "response_body", None),
889
+ ) from nf
890
+ raise
891
+
892
+ async def update_test_case(self, test_case_id: int, data: TestCasePatchV2Dto) -> TestCaseDto:
893
+ """Update an existing test case with new data.
894
+
895
+ Args:
896
+ test_case_id: The ID of the test case to update.
897
+ data: The new data to apply.
898
+
899
+ Returns:
900
+ The updated test case.
901
+
902
+ Raises:
903
+ AllureNotFoundError: If test case doesn't exist.
904
+ AllureValidationError: If input data fails validation.
905
+ AllureAuthError: If unauthorized.
906
+ AllureAPIError: If the server returns an error.
907
+ """
908
+ test_case_api = await self._get_api("_test_case_api")
909
+ return await self._call_api(
910
+ test_case_api.patch13(
911
+ id=test_case_id,
912
+ test_case_patch_v2_dto=data,
913
+ _request_timeout=self._timeout,
914
+ )
915
+ )
916
+
917
+ async def get_test_case_scenario(self, test_case_id: int) -> TestCaseScenarioV2Dto:
918
+ """Retrieve the scenario (steps and attachments) for a test case.
919
+
920
+ Args:
921
+ test_case_id: The ID of the test case.
922
+
923
+ Returns:
924
+ The test case scenario including steps and attachments.
925
+
926
+ Raises:
927
+ AllureNotFoundError: If test case doesn't exist.
928
+ AllureAuthError: If unauthorized.
929
+ AllureAPIError: If the server returns an error.
930
+ """
931
+ scenario_api = await self._get_api("_scenario_api", error_name="test_case_scenario_api")
932
+
933
+ response = await self._call_api_raw(
934
+ scenario_api.get_normalized_scenario_without_preload_content(
935
+ id=test_case_id, _request_timeout=self._timeout
936
+ )
937
+ )
938
+ raw_data = self._extract_response_data(response)
939
+ # print(f"DEBUG Initial Raw Normalized Scenario: {raw_data}")
940
+ return self._denormalize_to_v2_from_dict(raw_data)
941
+
942
+ @staticmethod
943
+ def _denormalize_to_v2_from_dict(raw: dict[str, object]) -> TestCaseScenarioV2Dto:
944
+ """Convert a raw NormalizedScenarioDto dict into a TestCaseScenarioV2Dto tree.
945
+
946
+ This bypasses the generated from_dict which has broken oneOf deserialization.
947
+ """
948
+ raw_root = raw.get("root")
949
+ if not isinstance(raw_root, dict):
950
+ return TestCaseScenarioV2Dto(steps=[])
951
+
952
+ root_children = raw_root.get("children")
953
+ if not isinstance(root_children, list):
954
+ return TestCaseScenarioV2Dto(steps=[])
955
+
956
+ scenario_steps_raw = raw.get("scenarioSteps", {})
957
+ scenario_steps = scenario_steps_raw if isinstance(scenario_steps_raw, dict) else {}
958
+ attachments_raw = raw.get("attachments", {})
959
+ attachments_map = attachments_raw if isinstance(attachments_raw, dict) else {}
960
+
961
+ # Recursive helper to build steps
962
+ def build_steps(step_ids: list[int]) -> list[SharedStepScenarioDtoStepsInner]:
963
+ steps_list: list[SharedStepScenarioDtoStepsInner] = []
964
+ if not step_ids:
965
+ return steps_list
966
+
967
+ for sid in step_ids:
968
+ # Look up the step definition
969
+ step_def = scenario_steps.get(str(sid))
970
+
971
+ if not step_def:
972
+ continue
973
+
974
+ # Is it an attachment?
975
+ attachment_id = step_def.get("attachmentId")
976
+ shared_step_id = step_def.get("sharedStepId")
977
+
978
+ if attachment_id:
979
+ # Look up name in attachments map
980
+ # attachments map key is the attachment ID as string
981
+ att_info = attachments_map.get(str(attachment_id), {})
982
+ att_name = att_info.get("name") or step_def.get("name")
983
+
984
+ # Build AttachmentStepDtoWithName
985
+ steps_list.append(
986
+ SharedStepScenarioDtoStepsInner(
987
+ actual_instance=AttachmentStepDtoWithName.model_construct(
988
+ type="AttachmentStepDto",
989
+ attachment_id=attachment_id,
990
+ name=att_name,
991
+ id=sid,
992
+ )
993
+ )
994
+ )
995
+ elif shared_step_id:
996
+ # It's a Shared Step Reference
997
+ steps_list.append(
998
+ SharedStepScenarioDtoStepsInner(
999
+ actual_instance=SharedStepStepDtoWithId.model_construct(
1000
+ type="SharedStepStepDto",
1001
+ shared_step_id=shared_step_id,
1002
+ id=sid,
1003
+ )
1004
+ )
1005
+ )
1006
+ else:
1007
+ # It's a Body Step
1008
+ body = step_def.get("body")
1009
+ child_ids = step_def.get("children") or []
1010
+ child_steps = build_steps(child_ids) if child_ids else None
1011
+
1012
+ # Build BodyStepDtoWithSteps
1013
+ steps_list.append(
1014
+ SharedStepScenarioDtoStepsInner(
1015
+ actual_instance=BodyStepDtoWithSteps.model_construct(
1016
+ type="BodyStepDto",
1017
+ body=body,
1018
+ body_json=None, # Skip complex rich-text
1019
+ steps=child_steps,
1020
+ id=sid,
1021
+ )
1022
+ )
1023
+ )
1024
+ return steps_list
1025
+
1026
+ final_steps = build_steps(root_children)
1027
+ return TestCaseScenarioV2Dto(steps=final_steps)
1028
+
1029
+ async def delete_test_case(self, test_case_id: int) -> None:
1030
+ """Permanently delete a test case from the system.
1031
+
1032
+ Args:
1033
+ test_case_id: The ID of the test case to remove.
1034
+
1035
+ Raises:
1036
+ AllureAPIError: If the API request fails.
1037
+ """
1038
+ test_case_api = await self._get_api("_test_case_api")
1039
+ await self._call_api(test_case_api.delete13(id=test_case_id))
1040
+
1041
+ # ==========================================
1042
+ # Shared Step operations
1043
+ # ==========================================
1044
+
1045
+ async def create_shared_step(self, project_id: int, name: str) -> SharedStepDto:
1046
+ """Create a new shared step.
1047
+
1048
+ Args:
1049
+ project_id: Target project ID.
1050
+ name: Name of the shared step.
1051
+
1052
+ Returns:
1053
+ The created SharedStepDto.
1054
+
1055
+ Raises:
1056
+ AllureNotFoundError: If project doesn't exist.
1057
+ AllureValidationError: If input data fails validation.
1058
+ AllureAuthError: If unauthorized.
1059
+ AllureAPIError: If the server returns an error.
1060
+ """
1061
+ shared_step_api = await self._get_api("_shared_step_api")
1062
+ dto = SharedStepCreateDto(name=name, project_id=project_id)
1063
+ return await self._call_api(shared_step_api.create19(dto, _request_timeout=self._timeout))
1064
+
1065
+ async def list_shared_steps(
1066
+ self,
1067
+ project_id: int,
1068
+ page: int = 0,
1069
+ size: int = 100,
1070
+ search: str | None = None,
1071
+ archived: bool | None = None,
1072
+ ) -> PageSharedStepDto:
1073
+ """List shared steps in a project.
1074
+
1075
+ Args:
1076
+ project_id: Target project ID.
1077
+ page: Zero-based page index.
1078
+ size: Page size.
1079
+ search: Optional search query (by name).
1080
+ archived: Optional filter by archived status.
1081
+
1082
+ Returns:
1083
+ Paginated list of shared steps.
1084
+ """
1085
+ shared_step_api = await self._get_api("_shared_step_api")
1086
+ return await self._call_api(
1087
+ shared_step_api.find_all16(
1088
+ project_id,
1089
+ search,
1090
+ archived,
1091
+ page,
1092
+ size,
1093
+ None,
1094
+ _request_timeout=self._timeout,
1095
+ )
1096
+ )
1097
+
1098
+ async def create_shared_step_scenario_step(
1099
+ self,
1100
+ step: ScenarioStepCreateDto,
1101
+ ) -> ScenarioStepCreatedResponseDto:
1102
+ """Create a step within a shared step scenario.
1103
+
1104
+ Args:
1105
+ step: Step data (must include shared_step_id).
1106
+
1107
+ Returns:
1108
+ Response containing created step ID.
1109
+ """
1110
+ shared_step_scenario_api = await self._get_api("_shared_step_scenario_api")
1111
+
1112
+ if not step.shared_step_id:
1113
+ raise AllureValidationError("shared_step_id is required for shared step scenario steps")
1114
+
1115
+ return await self._create_scenario_step_via_api(shared_step_scenario_api, step)
1116
+
1117
+ async def upload_shared_step_attachment(
1118
+ self,
1119
+ shared_step_id: int,
1120
+ file_data: list[bytes | str | tuple[str, bytes]],
1121
+ ) -> list[SharedStepAttachmentRowDto]:
1122
+ """Upload attachment(s) to a shared step.
1123
+
1124
+ Args:
1125
+ shared_step_id: Target shared step ID.
1126
+ file_data: List of files to upload.
1127
+
1128
+ Returns:
1129
+ List of created attachment records.
1130
+ """
1131
+ shared_step_attachment_api = await self._get_api("_shared_step_attachment_api")
1132
+ return await self._upload_attachment_via_api(
1133
+ shared_step_attachment_api,
1134
+ shared_step_id=shared_step_id,
1135
+ file_data=file_data,
1136
+ )
1137
+
1138
+ async def archive_shared_step(self, shared_step_id: int) -> None:
1139
+ """Archive a shared step.
1140
+
1141
+ Args:
1142
+ shared_step_id: ID of the shared step to archive.
1143
+ """
1144
+ shared_step_api = await self._get_api("_shared_step_api")
1145
+ await self._call_api(shared_step_api.archive(id=shared_step_id, _request_timeout=self._timeout))
1146
+
1147
+ async def get_shared_step(self, shared_step_id: int) -> SharedStepDto:
1148
+ """Retrieve a specific shared step by its ID.
1149
+
1150
+ Args:
1151
+ shared_step_id: The unique ID of the shared step.
1152
+
1153
+ Returns:
1154
+ The shared step data.
1155
+
1156
+ Raises:
1157
+ AllureNotFoundError: If shared step doesn't exist.
1158
+ AllureAuthError: If unauthorized.
1159
+ AllureAPIError: If the server returns an error.
1160
+ """
1161
+ shared_step_api = await self._get_api("_shared_step_api")
1162
+ return await self._call_api(shared_step_api.find_one15(id=shared_step_id, _request_timeout=self._timeout))
1163
+
1164
+ async def update_shared_step(self, shared_step_id: int, data: SharedStepPatchDto) -> SharedStepDto:
1165
+ """Update an existing shared step with new data.
1166
+
1167
+ Args:
1168
+ shared_step_id: The ID of the shared step to update.
1169
+ data: The new data to apply (partial update supported).
1170
+
1171
+ Returns:
1172
+ The updated shared step.
1173
+
1174
+ Raises:
1175
+ AllureNotFoundError: If shared step doesn't exist.
1176
+ AllureValidationError: If input data fails validation.
1177
+ AllureAuthError: If unauthorized.
1178
+ AllureAPIError: If the server returns an error.
1179
+ """
1180
+ shared_step_api = await self._get_api("_shared_step_api")
1181
+ return await self._call_api(
1182
+ shared_step_api.patch18(
1183
+ id=shared_step_id,
1184
+ shared_step_patch_dto=data,
1185
+ _request_timeout=self._timeout,
1186
+ )
1187
+ )
1188
+
1189
+ async def delete_shared_step(self, shared_step_id: int) -> None:
1190
+ """Delete a shared step from the system.
1191
+
1192
+ This performs a soft delete by archiving the shared step.
1193
+
1194
+ Args:
1195
+ shared_step_id: The ID of the shared step to delete.
1196
+
1197
+ Raises:
1198
+ AllureNotFoundError: If shared step doesn't exist.
1199
+ AllureAPIError: If the API request fails.
1200
+ """
1201
+ shared_step_api = await self._get_api("_shared_step_api")
1202
+ # Soft delete via archive
1203
+ await self._call_api(shared_step_api.archive(id=shared_step_id, _request_timeout=self._timeout))