aignostics 0.2.87__tar.gz → 0.2.92__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. {aignostics-0.2.87 → aignostics-0.2.92}/PKG-INFO +1 -1
  2. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/api/public_api.py +0 -2
  3. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/application_read_response.py +0 -2
  4. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/application_run_status.py +0 -2
  5. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/application_version_read_response.py +0 -2
  6. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/http_validation_error.py +0 -2
  7. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/input_artifact_creation_request.py +0 -2
  8. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/input_artifact_read_response.py +0 -2
  9. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/item_creation_request.py +0 -2
  10. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/item_result_read_response.py +0 -2
  11. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/item_status.py +0 -2
  12. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/output_artifact_read_response.py +0 -2
  13. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/output_artifact_result_read_response.py +0 -2
  14. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/output_artifact_scope.py +0 -2
  15. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/payload_input_artifact.py +0 -2
  16. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/payload_item.py +0 -2
  17. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/payload_output_artifact.py +0 -2
  18. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/run_creation_request.py +0 -2
  19. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/run_creation_response.py +0 -2
  20. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/run_read_response.py +0 -2
  21. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/transfer_urls.py +0 -2
  22. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/user_payload.py +0 -2
  23. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/validation_error.py +0 -2
  24. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/validation_error_loc_inner.py +0 -2
  25. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/docs/PublicApi.md +0 -1
  26. {aignostics-0.2.87 → aignostics-0.2.92}/examples/notebook.py +1 -1
  27. {aignostics-0.2.87 → aignostics-0.2.92}/pyproject.toml +6 -7
  28. aignostics-0.2.92/src/aignostics/application/_gui/assets/.gitignore +1 -0
  29. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_service.py +147 -35
  30. aignostics-0.2.87/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/boto3/examples/cloudfront.rst +0 -35
  31. aignostics-0.2.87/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/boto3/examples/s3.rst +0 -185
  32. aignostics-0.2.87/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -35
  33. aignostics-0.2.87/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/s3.rst +0 -185
  34. aignostics-0.2.87/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/cloudfront.rst +0 -35
  35. aignostics-0.2.87/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/s3.rst +0 -185
  36. aignostics-0.2.87/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -35
  37. aignostics-0.2.87/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/s3.rst +0 -185
  38. aignostics-0.2.87/src/aignostics/application/_gui/assets/.gitignore +0 -1
  39. {aignostics-0.2.87 → aignostics-0.2.92}/.gitignore +0 -0
  40. {aignostics-0.2.87 → aignostics-0.2.92}/LICENSE +0 -0
  41. {aignostics-0.2.87 → aignostics-0.2.92}/README.md +0 -0
  42. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/.openapi-generator/FILES +0 -0
  43. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/.openapi-generator/VERSION +0 -0
  44. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/api_client.py +0 -0
  45. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/api_response.py +0 -0
  46. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/configuration.py +0 -0
  47. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/exceptions.py +0 -0
  48. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/models/__init__.py +0 -0
  49. {aignostics-0.2.87 → aignostics-0.2.92}/codegen/out/aignx/codegen/rest.py +0 -0
  50. {aignostics-0.2.87/dist_native_all/dist_native-macos-13 → aignostics-0.2.92/dist_native_all/dist_native-macos-13/extracted}/aignostics.app/Contents/Frameworks/boto3/examples/cloudfront.rst +0 -0
  51. {aignostics-0.2.87/dist_native_all/dist_native-macos-13 → aignostics-0.2.92/dist_native_all/dist_native-macos-13/extracted}/aignostics.app/Contents/Frameworks/boto3/examples/s3.rst +0 -0
  52. {aignostics-0.2.87/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources → aignostics-0.2.92/dist_native_all/dist_native-macos-latest/extracted/aignostics.app/Contents/Frameworks}/boto3/examples/cloudfront.rst +0 -0
  53. {aignostics-0.2.87/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources → aignostics-0.2.92/dist_native_all/dist_native-macos-latest/extracted/aignostics.app/Contents/Frameworks}/boto3/examples/s3.rst +0 -0
  54. {aignostics-0.2.87/dist_native_all/dist_native-macos-13 → aignostics-0.2.92/dist_native_all/dist_native-ubuntu-24.04-arm/extracted}/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  55. {aignostics-0.2.87/dist_native_all/dist_native-macos-13 → aignostics-0.2.92/dist_native_all/dist_native-ubuntu-24.04-arm/extracted}/aignostics/_internal/boto3/examples/s3.rst +0 -0
  56. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks → aignostics-0.2.92/dist_native_all/dist_native-ubuntu-latest/extracted/aignostics/_internal}/boto3/examples/cloudfront.rst +0 -0
  57. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks → aignostics-0.2.92/dist_native_all/dist_native-ubuntu-latest/extracted/aignostics/_internal}/boto3/examples/s3.rst +0 -0
  58. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources → aignostics-0.2.92/dist_native_all/dist_native-windows-11-arm/extracted/aignostics/_internal}/boto3/examples/cloudfront.rst +0 -0
  59. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources → aignostics-0.2.92/dist_native_all/dist_native-windows-11-arm/extracted/aignostics/_internal}/boto3/examples/s3.rst +0 -0
  60. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest → aignostics-0.2.92/dist_native_all/dist_native-windows-latest/extracted}/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  61. {aignostics-0.2.87/dist_native_all/dist_native-macos-latest → aignostics-0.2.92/dist_native_all/dist_native-windows-latest/extracted}/aignostics/_internal/boto3/examples/s3.rst +0 -0
  62. {aignostics-0.2.87 → aignostics-0.2.92}/examples/__init__.py +0 -0
  63. {aignostics-0.2.87 → aignostics-0.2.92}/examples/notebook.ipynb +0 -0
  64. {aignostics-0.2.87 → aignostics-0.2.92}/examples/script.py +0 -0
  65. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/__init__.py +0 -0
  66. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/__init__.py +0 -0
  67. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_cli.py +0 -0
  68. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_frame.py +0 -0
  69. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_page_application_describe.py +0 -0
  70. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_page_application_run_describe.py +0 -0
  71. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_page_builder.py +0 -0
  72. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_page_index.py +0 -0
  73. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/_utils.py +0 -0
  74. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/canceled.lottie +0 -0
  75. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/done.lottie +0 -0
  76. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/empty.lottie +0 -0
  77. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/error.lottie +0 -0
  78. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/error_alt.lottie +0 -0
  79. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/home-card-1.png +0 -0
  80. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/home-card-2.png +0 -0
  81. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/home-card-3.png +0 -0
  82. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/home-card-4.png +0 -0
  83. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/home-card-5.png +0 -0
  84. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/image-not-found.png +0 -0
  85. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/pending.lottie +0 -0
  86. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/pending_alt.lottie +0 -0
  87. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/ruo.png +0 -0
  88. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_gui/assets/ruo.svg +0 -0
  89. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_settings.py +0 -0
  90. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/application/_utils.py +0 -0
  91. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/__init__.py +0 -0
  92. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/_cli.py +0 -0
  93. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/_gui.py +0 -0
  94. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/_service.py +0 -0
  95. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/_settings.py +0 -0
  96. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/assets/Google-Cloud-logo.png +0 -0
  97. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/bucket/assets/Google-Cloud-logo.svg +0 -0
  98. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/cli.py +0 -0
  99. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/constants.py +0 -0
  100. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/dataset/__init__.py +0 -0
  101. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/dataset/_cli.py +0 -0
  102. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/dataset/_gui.py +0 -0
  103. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/dataset/_service.py +0 -0
  104. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/dataset/assets/NIH-IDC-logo.svg +0 -0
  105. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/gui/__init__.py +0 -0
  106. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/gui/_frame.py +0 -0
  107. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/gui/_theme.py +0 -0
  108. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/gui/assets/cabin-v27-latin-regular.woff2 +0 -0
  109. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/gui/assets/logo.png +0 -0
  110. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/notebook/__init__.py +0 -0
  111. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/notebook/_gui.py +0 -0
  112. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/notebook/_notebook.py +0 -0
  113. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/notebook/_service.py +0 -0
  114. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/notebook/assets/python.lottie +0 -0
  115. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/__init__.py +0 -0
  116. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_authentication.py +0 -0
  117. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_cli.py +0 -0
  118. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_client.py +0 -0
  119. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_constants.py +0 -0
  120. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_messages.py +0 -0
  121. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_service.py +0 -0
  122. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_settings.py +0 -0
  123. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/_utils.py +0 -0
  124. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/resources/__init__.py +0 -0
  125. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/resources/applications.py +0 -0
  126. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/resources/runs.py +0 -0
  127. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/platform/resources/utils.py +0 -0
  128. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/__init__.py +0 -0
  129. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/_cli.py +0 -0
  130. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/_gui.py +0 -0
  131. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/_service.py +0 -0
  132. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/_settings.py +0 -0
  133. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/assets/download.lottie +0 -0
  134. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/assets/microscope.lottie +0 -0
  135. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/assets/update.lottie +0 -0
  136. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/scripts/add.groovy +0 -0
  137. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/scripts/annotate.groovy +0 -0
  138. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/scripts/inspect.groovy +0 -0
  139. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/qupath/scripts/test.groovy +0 -0
  140. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/__init__.py +0 -0
  141. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/_cli.py +0 -0
  142. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/_exceptions.py +0 -0
  143. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/_gui.py +0 -0
  144. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/_service.py +0 -0
  145. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/_settings.py +0 -0
  146. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/system/assets/system.lottie +0 -0
  147. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/third_party/bottle.py +0 -0
  148. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/third_party/idc_index.py +0 -0
  149. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/__init__.py +0 -0
  150. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_cli.py +0 -0
  151. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_console.py +0 -0
  152. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_constants.py +0 -0
  153. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_di.py +0 -0
  154. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_fs.py +0 -0
  155. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_gui.py +0 -0
  156. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_health.py +0 -0
  157. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_log.py +0 -0
  158. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_logfire.py +0 -0
  159. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_notebook.py +0 -0
  160. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_process.py +0 -0
  161. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_sentry.py +0 -0
  162. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_service.py +0 -0
  163. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/_settings.py +0 -0
  164. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/utils/boot.py +0 -0
  165. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/__init__.py +0 -0
  166. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_cli.py +0 -0
  167. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_gui.py +0 -0
  168. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_openslide_handler.py +0 -0
  169. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_pydicom_handler.py +0 -0
  170. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_service.py +0 -0
  171. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/_utils.py +0 -0
  172. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics/wsi/assets/fallback.png +0 -0
  173. {aignostics-0.2.87 → aignostics-0.2.92}/src/aignostics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aignostics
3
- Version: 0.2.87
3
+ Version: 0.2.92
4
4
  Summary: 🔬 Python SDK providing access to the Aignostics Platform. Includes Aignostics Launchpad (Desktop Application), Aignostics CLI (Command-Line Interface), example notebooks, and Aignostics Client Library.
5
5
  Project-URL: Homepage, https://aignostics.readthedocs.io/en/latest/
6
6
  Project-URL: Documentation, https://aignostics.readthedocs.io/en/latest/
@@ -2521,5 +2521,3 @@ class PublicApi:
2521
2521
  _host=_host,
2522
2522
  _request_auth=_request_auth
2523
2523
  )
2524
-
2525
-
@@ -89,5 +89,3 @@ class ApplicationReadResponse(BaseModel):
89
89
  "description": obj.get("description")
90
90
  })
91
91
  return _obj
92
-
93
-
@@ -39,5 +39,3 @@ class ApplicationRunStatus(str, Enum):
39
39
  def from_json(cls, json_str: str) -> Self:
40
40
  """Create an instance of ApplicationRunStatus from a JSON string"""
41
41
  return cls(json.loads(json_str))
42
-
43
-
@@ -119,5 +119,3 @@ class ApplicationVersionReadResponse(BaseModel):
119
119
  "created_at": obj.get("created_at")
120
120
  })
121
121
  return _obj
122
-
123
-
@@ -91,5 +91,3 @@ class HTTPValidationError(BaseModel):
91
91
  "detail": [ValidationError.from_dict(_item) for _item in obj["detail"]] if obj.get("detail") is not None else None
92
92
  })
93
93
  return _obj
94
-
95
-
@@ -88,5 +88,3 @@ class InputArtifactCreationRequest(BaseModel):
88
88
  "metadata": obj.get("metadata")
89
89
  })
90
90
  return _obj
91
-
92
-
@@ -95,5 +95,3 @@ class InputArtifactReadResponse(BaseModel):
95
95
  "metadata_schema": obj.get("metadata_schema")
96
96
  })
97
97
  return _obj
98
-
99
-
@@ -93,5 +93,3 @@ class ItemCreationRequest(BaseModel):
93
93
  "input_artifacts": [InputArtifactCreationRequest.from_dict(_item) for _item in obj["input_artifacts"]] if obj.get("input_artifacts") is not None else None
94
94
  })
95
95
  return _obj
96
-
97
-
@@ -107,5 +107,3 @@ class ItemResultReadResponse(BaseModel):
107
107
  "output_artifacts": [OutputArtifactResultReadResponse.from_dict(_item) for _item in obj["output_artifacts"]] if obj.get("output_artifacts") is not None else None
108
108
  })
109
109
  return _obj
110
-
111
-
@@ -37,5 +37,3 @@ class ItemStatus(str, Enum):
37
37
  def from_json(cls, json_str: str) -> Self:
38
38
  """Create an instance of ItemStatus from a JSON string"""
39
39
  return cls(json.loads(json_str))
40
-
41
-
@@ -98,5 +98,3 @@ class OutputArtifactReadResponse(BaseModel):
98
98
  "scope": obj.get("scope")
99
99
  })
100
100
  return _obj
101
-
102
-
@@ -95,5 +95,3 @@ class OutputArtifactResultReadResponse(BaseModel):
95
95
  "download_url": obj.get("download_url")
96
96
  })
97
97
  return _obj
98
-
99
-
@@ -33,5 +33,3 @@ class OutputArtifactScope(str, Enum):
33
33
  def from_json(cls, json_str: str) -> Self:
34
34
  """Create an instance of OutputArtifactScope from a JSON string"""
35
35
  return cls(json.loads(json_str))
36
-
37
-
@@ -88,5 +88,3 @@ class PayloadInputArtifact(BaseModel):
88
88
  "download_url": obj.get("download_url")
89
89
  })
90
90
  return _obj
91
-
92
-
@@ -113,5 +113,3 @@ class PayloadItem(BaseModel):
113
113
  else None
114
114
  })
115
115
  return _obj
116
-
117
-
@@ -94,5 +94,3 @@ class PayloadOutputArtifact(BaseModel):
94
94
  "metadata": TransferUrls.from_dict(obj["metadata"]) if obj.get("metadata") is not None else None
95
95
  })
96
96
  return _obj
97
-
98
-
@@ -93,5 +93,3 @@ class RunCreationRequest(BaseModel):
93
93
  "items": [ItemCreationRequest.from_dict(_item) for _item in obj["items"]] if obj.get("items") is not None else None
94
94
  })
95
95
  return _obj
96
-
97
-
@@ -83,5 +83,3 @@ class RunCreationResponse(BaseModel):
83
83
  "application_run_id": obj.get("application_run_id") if obj.get("application_run_id") is not None else 'Application run id'
84
84
  })
85
85
  return _obj
86
-
87
-
@@ -106,5 +106,3 @@ class RunReadResponse(BaseModel):
106
106
  "triggered_by": obj.get("triggered_by")
107
107
  })
108
108
  return _obj
109
-
110
-
@@ -86,5 +86,3 @@ class TransferUrls(BaseModel):
86
86
  "download_url": obj.get("download_url")
87
87
  })
88
88
  return _obj
89
-
90
-
@@ -115,5 +115,3 @@ class UserPayload(BaseModel):
115
115
  "items": [PayloadItem.from_dict(_item) for _item in obj["items"]] if obj.get("items") is not None else None
116
116
  })
117
117
  return _obj
118
-
119
-
@@ -95,5 +95,3 @@ class ValidationError(BaseModel):
95
95
  "type": obj.get("type")
96
96
  })
97
97
  return _obj
98
-
99
-
@@ -134,5 +134,3 @@ class ValidationErrorLocInner(BaseModel):
134
134
  def to_str(self) -> str:
135
135
  """Returns the string representation of the actual instance"""
136
136
  return pprint.pformat(self.model_dump())
137
-
138
-
@@ -663,4 +663,3 @@ Name | Type | Description | Notes
663
663
  **422** | Validation Error | - |
664
664
 
665
665
  [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
666
-
@@ -2,7 +2,7 @@
2
2
  # requires-python = ">=3.13"
3
3
  # dependencies = [
4
4
  # "marimo",
5
- # "aignostics==0.2.87",
5
+ # "aignostics==0.2.92",
6
6
  # ]
7
7
  # ///
8
8
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aignostics"
3
- version = "0.2.87"
3
+ version = "0.2.92"
4
4
  description = "🔬 Python SDK providing access to the Aignostics Platform. Includes Aignostics Launchpad (Desktop Application), Aignostics CLI (Command-Line Interface), example notebooks, and Aignostics Client Library."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -75,6 +75,7 @@ requires-python = ">=3.11, <4.0"
75
75
  dependencies = [
76
76
  # From Template
77
77
  "fastapi[standard,all]>=0.115.13",
78
+ "humanize>=4.12.3",
78
79
  "logfire[system-metrics]>=3.21.1",
79
80
  "nicegui[native]>=2.20.0",
80
81
  "opentelemetry-instrumentation-fastapi>=0.53b0",
@@ -85,9 +86,12 @@ dependencies = [
85
86
  "opentelemetry-instrumentation-tornado>=0.53b0",
86
87
  "opentelemetry-instrumentation-urllib>=0.53b0",
87
88
  "opentelemetry-instrumentation-urllib3>=0.53b0",
89
+ "packaging>=25.0",
90
+ "platformdirs>=4.3.8",
88
91
  "psutil>=7.0.0",
89
92
  "pydantic-settings>=2.9.1",
90
93
  "pywin32>=310 ; sys_platform == 'win32'",
94
+ "pyyaml>=6.0",
91
95
  "sentry-sdk>=2.30.0",
92
96
  "typer>=0.16.0",
93
97
  "uptime>=3.0.1",
@@ -103,21 +107,16 @@ dependencies = [
103
107
  "google-crc32c>=1.7.1",
104
108
  "highdicom>=0.25.1",
105
109
  "httpx>=0.28.1",
106
- "humanize>=4.12.3",
107
110
  "idc-index-data==21.0.0",
108
111
  "ijson>=3.4.0",
109
112
  "jsf>=0.11.2",
110
113
  "jsonschema>=4.24.0",
111
114
  "openslide-bin>=4.0.0.8",
112
115
  "openslide-python>=1.4.2",
113
- "packaging>=25.0",
114
116
  "pandas<=2.3.0",
115
- "platformdirs>=4.3.8",
116
- "psutil>=7.0.0",
117
117
  "pyjwt[crypto]>=2.10.1",
118
118
  "python-dateutil>=2.9.0.post0",
119
119
  # "pywebview[qt6]>=5.4; sys_platform == 'linux'",
120
- "pyyaml>=6.0",
121
120
  "requests>=2.32.3",
122
121
  "requests-oauthlib>=2.0.0",
123
122
  "s5cmd>=0.2.0",
@@ -353,7 +352,7 @@ source = ["src/"]
353
352
 
354
353
 
355
354
  [tool.bumpversion]
356
- current_version = "0.2.87"
355
+ current_version = "0.2.92"
357
356
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
358
357
  serialize = ["{major}.{minor}.{patch}"]
359
358
  search = "{current_version}"
@@ -241,9 +241,18 @@ class Service(BaseService):
241
241
 
242
242
  Raises:
243
243
  NotFoundException: If the application with the given ID is not found.
244
- Exception: If the application cannot be retrieved.
244
+ RuntimeError: If the application cannot be retrieved unexpectedly.
245
245
  """
246
- return self._get_platform_client().application(application_id)
246
+ try:
247
+ return self._get_platform_client().application(application_id)
248
+ except NotFoundException as e:
249
+ message = f"Application with ID '{application_id}' not found: {e}"
250
+ logger.warning(message)
251
+ raise NotFoundException(message) from e
252
+ except Exception as e:
253
+ message = f"Failed to retrieve application with ID '{application_id}': {e}"
254
+ logger.exception(message)
255
+ raise RuntimeError(message) from e
247
256
 
248
257
  def application_version(
249
258
  self, application_version_id: str, use_latest_if_no_version_given: bool = False
@@ -260,7 +269,7 @@ class Service(BaseService):
260
269
  Raises:
261
270
  ValueError: If the application version ID is invalid.
262
271
  NotFoundException: If the application with the given ID is not found.
263
- Exception: If the application cannot be retrieved.
272
+ RuntimeError: If the application cannot be retrieved unexpectedly.
264
273
  """
265
274
  # Validate format: application_id:vX.Y.Z (where X.Y.Z is a semver)
266
275
  # This checks for proper format like "he-tme:v0.50.0" where "he-tme" is the application id
@@ -299,9 +308,19 @@ class Service(BaseService):
299
308
  list[ApplicationVersion]: A list of all application versions.
300
309
 
301
310
  Raises:
302
- Exception: If version list cannot be retrieved
311
+ NotFoundException: If the application with the given ID is not found.
312
+ RuntimeError: If version list cannot be retrieved unexpectedly.
303
313
  """
304
- return self._get_platform_client().applications.versions.list_sorted(application=application)
314
+ try:
315
+ return self._get_platform_client().applications.versions.list_sorted(application=application)
316
+ except NotFoundException as e:
317
+ message = f"Application with ID '{application.application_id}' not found: {e}"
318
+ logger.warning(message)
319
+ raise NotFoundException(message) from e
320
+ except Exception as e:
321
+ message = f"Failed to retrieve application versions for application '{application.application_id}': {e}"
322
+ logger.exception(message)
323
+ raise RuntimeError(message) from e
305
324
 
306
325
  def application_version_latest(self, application: Application) -> ApplicationVersion | None:
307
326
  """Get a latest application version.
@@ -313,7 +332,8 @@ class Service(BaseService):
313
332
  ApplicationVersion | None: A list of all application versions.
314
333
 
315
334
  Raises:
316
- Exception: If version list cannot be retrieved
335
+ NotFoundException: If the application with the given ID is not found.
336
+ RuntimeError: If version list cannot be retrieved unexpectedly.
317
337
  """
318
338
  versions = self.application_versions(application)
319
339
  return versions[0] if versions else None
@@ -403,12 +423,14 @@ class Service(BaseService):
403
423
  Exception: If the metadata cannot be generated.
404
424
 
405
425
  Raises:
426
+ NotFoundError: If the application version with the given ID is not found.
406
427
  ValueError: If the source directory does not exist or is not a directory.
428
+ RuntimeError: If the metadata generation fails unexpectedly.
407
429
  """
408
430
  logger.debug("Generating metadata from source directory: %s", source_directory)
409
431
 
410
432
  # TODO(Helmut): Use it
411
- application_version = Service().application_version(application_version_id, use_latest_if_no_version_given=True) # noqa: F841
433
+ _ = Service().application_version(application_version_id, use_latest_if_no_version_given=True)
412
434
 
413
435
  metadata = []
414
436
 
@@ -453,17 +475,18 @@ class Service(BaseService):
453
475
  Service._apply_mappings_to_entry(entry, mappings)
454
476
 
455
477
  metadata.append(entry)
456
- except Exception:
457
- message = f"Failed to process file '{file_path}'"
458
- logger.exception(message)
478
+ except Exception as e: # noqa: BLE001
479
+ message = f"Failed to process file '{file_path}': {e}"
480
+ logger.warning(message)
459
481
  continue
460
482
 
461
483
  logger.debug("Generated metadata for %d files", len(metadata))
462
484
  return metadata
463
485
 
464
- except Exception:
465
- logger.exception("Failed to generate metadata from source directory: %s", source_directory)
466
- raise
486
+ except Exception as e:
487
+ message = f"Failed to generate metadata from source directory '{source_directory}': {e}"
488
+ logger.exception(message)
489
+ raise RuntimeError(message) from e
467
490
 
468
491
  @staticmethod
469
492
  def application_run_upload(
@@ -485,6 +508,11 @@ class Service(BaseService):
485
508
 
486
509
  Returns:
487
510
  bool: True if the upload was successful, False otherwise.
511
+
512
+ Raises:
513
+ NotFoundException: If the application version with the given ID is not found.
514
+ RuntimeError: If fetching the application version fails unexpectedly.
515
+ requests.HTTPError: If the upload fails with an HTTP error.
488
516
  """
489
517
  import psutil # noqa: PLC0415
490
518
 
@@ -555,6 +583,18 @@ class Service(BaseService):
555
583
 
556
584
  @staticmethod
557
585
  def application_runs_static(limit: int | None = None, completed_only: bool = False) -> list[dict[str, Any]]:
586
+ """Get a list of all application runs, static variant.
587
+
588
+ Args:
589
+ limit (int | None): The maximum number of runs to retrieve. If None, all runs are retrieved.
590
+ completed_only (bool): If True, only completed runs are retrieved.
591
+
592
+ Returns:
593
+ list[ApplicationRunData]: A list of all application runs.
594
+
595
+ Raises:
596
+ RuntimeError: If the application run list cannot be retrieved.
597
+ """
558
598
  return [
559
599
  {
560
600
  "application_run_id": run.application_run_id,
@@ -580,20 +620,25 @@ class Service(BaseService):
580
620
  list[ApplicationRunData]: A list of all application runs.
581
621
 
582
622
  Raises:
583
- Exception: If the application run list cannot be retrieved.
623
+ RuntimeError: If the application run list cannot be retrieved.
584
624
  """
585
625
  if limit is not None and limit <= 0:
586
626
  return []
587
627
  runs = []
588
628
  page_size = LIST_APPLICATION_RUNS_MAX_PAGE_SIZE
589
- run_iterator = self._get_platform_client().runs.list_data(sort="-triggered_at", page_size=page_size)
590
- for run in run_iterator:
591
- if status is not None and run.status != status:
592
- continue
593
- runs.append(run)
594
- if limit is not None and len(runs) >= limit:
595
- break
596
- return runs
629
+ try:
630
+ run_iterator = self._get_platform_client().runs.list_data(sort="-triggered_at", page_size=page_size)
631
+ for run in run_iterator:
632
+ if status is not None and run.status != status:
633
+ continue
634
+ runs.append(run)
635
+ if limit is not None and len(runs) >= limit:
636
+ break
637
+ return runs
638
+ except Exception as e:
639
+ message = f"Failed to retrieve application runs: {e}"
640
+ logger.exception(message)
641
+ raise RuntimeError(message) from e
597
642
 
598
643
  def application_run(self, run_id: str) -> ApplicationRun:
599
644
  """Find a run by its ID.
@@ -605,9 +650,14 @@ class Service(BaseService):
605
650
  ApplicationRun: The run that can be fetched using the .details() call.
606
651
 
607
652
  Raises:
608
- Exception: If initializing the client fails.
653
+ RuntimeError: If initializing the client fails or the run cannot be retrieved.
609
654
  """
610
- return self._get_platform_client().run(run_id)
655
+ try:
656
+ return self._get_platform_client().run(run_id)
657
+ except Exception as e:
658
+ message = f"Failed to retrieve application run with ID '{run_id}': {e}"
659
+ logger.exception(message)
660
+ raise RuntimeError(message) from e
611
661
 
612
662
  def application_run_submit_from_metadata(
613
663
  self, application_version_id: str, metadata: list[dict[str, Any]]
@@ -623,8 +673,10 @@ class Service(BaseService):
623
673
  ApplicationRun: The submitted run.
624
674
 
625
675
  Raises:
626
- ValueError: If platform bucket URL is missing or has unsupported protocol.
627
- Exception: If submitting the run failed unexpectedly.
676
+ NotFoundException: If the application version with the given ID is not found.
677
+ ValueError: If platform bucket URL is missing or has unsupported protocol,
678
+ or if the application version ID is invalid.
679
+ RuntimeError: If submitting the run failed unexpectedly.
628
680
  """
629
681
  logger.debug("Submitting application run with metadata: %s", metadata)
630
682
  items = []
@@ -677,9 +729,14 @@ class Service(BaseService):
677
729
  "Submitted application run with items: %s, application run id %s", items, run.application_run_id
678
730
  )
679
731
  return run
680
- except Exception:
681
- logger.exception("Failed to submit application run.")
682
- raise
732
+ except ValueError as e:
733
+ message = f"Failed to submit application run for version '{application_version_id}': {e}"
734
+ logger.warning(message)
735
+ raise ValueError(message) from e
736
+ except Exception as e:
737
+ message = f"Failed to submit application run for version '{application_version_id}': {e}"
738
+ logger.exception(message)
739
+ raise RuntimeError(message) from e
683
740
 
684
741
  def application_run_submit(self, application_version_id: str, items: list[InputItem]) -> ApplicationRun:
685
742
  """Submit a run for the given application.
@@ -692,9 +749,20 @@ class Service(BaseService):
692
749
  ApplicationRun: The submitted run.
693
750
 
694
751
  Raises:
695
- Exception: If submitting the run failed unexpectedly.
752
+ NotFoundException: If the application version with the given ID is not found.
753
+ ValueError: If the application version ID is invalid or items invalid.
754
+ RuntimeError: If submitting the run failed unexpectedly.
696
755
  """
697
- return self._get_platform_client().runs.create(application_version=application_version_id, items=items)
756
+ try:
757
+ return self._get_platform_client().runs.create(application_version=application_version_id, items=items)
758
+ except ValueError as e:
759
+ message = f"Failed to submit application run for version '{application_version_id}': {e}"
760
+ logger.warning(message)
761
+ raise ValueError(message) from e
762
+ except Exception as e:
763
+ message = f"Failed to submit application run for version '{application_version_id}': {e}"
764
+ logger.exception(message)
765
+ raise RuntimeError(message) from e
698
766
 
699
767
  def application_run_cancel(self, run_id: str) -> None:
700
768
  """Cancel a run by its ID.
@@ -706,9 +774,24 @@ class Service(BaseService):
706
774
  Exception: If the client cannot be created.
707
775
 
708
776
  Raises:
709
- Exception: If canceling the run failed unexpectedly.
777
+ NotFoundException: If the application run with the given ID is not found.
778
+ ValueError: If the run ID is invalid or the run cannot be canceled given its current status.
779
+ RuntimeError: If canceling the run fails unexpectedly.
710
780
  """
711
- self.application_run(run_id).cancel()
781
+ try:
782
+ self.application_run(run_id).cancel()
783
+ except ValueError as e:
784
+ message = f"Failed to cancel application run with ID '{run_id}': ValueError {e}"
785
+ logger.warning(message)
786
+ raise ValueError(message) from e
787
+ except NotFoundException as e:
788
+ message = f"Application run with ID '{run_id}' not found: {e}"
789
+ logger.warning(message)
790
+ raise NotFoundException(message) from e
791
+ except Exception as e:
792
+ message = f"Failed to cancel application run with ID '{run_id}': {e}"
793
+ logger.exception(message)
794
+ raise RuntimeError(message) from e
712
795
 
713
796
  @staticmethod
714
797
  def application_run_download_static( # noqa: PLR0913, PLR0917
@@ -720,6 +803,30 @@ class Service(BaseService):
720
803
  qupath_project: bool = False,
721
804
  download_progress_queue: Any | None = None, # noqa: ANN401
722
805
  ) -> Path:
806
+ """Download application run results with progress tracking, static variant.
807
+
808
+ Args:
809
+ run_id (str): The ID of the application run to download.
810
+ destination_directory (Path): Directory to save downloaded files.
811
+ create_subdirectory_for_run (bool): Whether to create a subdirectory for the run.
812
+ create_subdirectory_per_item (bool): Whether to create a subdirectory for each item,
813
+ if not set, all items will be downloaded to the same directory but prefixed
814
+ with the item reference and underscore.
815
+ wait_for_completion (bool): Whether to wait for run completion. Defaults to True.
816
+ qupath_project (bool): If True, create QuPath project referencing input slides and results.
817
+ This requires QuPath to be installed. The QuPath project will be created in a subfolder
818
+ of the destination directory.
819
+ download_progress_queue (Queue | None): Queue for GUI progress updates.
820
+
821
+ Returns:
822
+ Path: The directory containing downloaded results.
823
+
824
+ Raises:
825
+ ValueError: If the run ID is invalid or destination directory cannot be created.
826
+ NotFoundException: If the application run with the given ID is not found.
827
+ RuntimeError: If run details cannot be retrieved or download fails unexpectedly.
828
+ requests.HTTPError: If the download fails with an HTTP error.
829
+ """
723
830
  return Service().application_run_download(
724
831
  run_id,
725
832
  destination_directory,
@@ -763,8 +870,9 @@ class Service(BaseService):
763
870
 
764
871
  Raises:
765
872
  ValueError: If the run ID is invalid or destination directory cannot be created.
766
- RuntimeError: If run details cannot be retrieved or download fails.
767
- Exception: If run cannot be retrieved, destination directory cannot be created, or download fails.
873
+ NotFoundException: If the application run with the given ID is not found.
874
+ RuntimeError: If run details cannot be retrieved or download fails unexpectedly.
875
+ requests.HTTPError: If the download fails with an HTTP error.
768
876
  """
769
877
  if qupath_project and not has_qupath_extra:
770
878
  message = "QuPath project creation requested, but 'qupath' extra is not installed."
@@ -778,6 +886,10 @@ class Service(BaseService):
778
886
  final_destination_directory = destination_directory
779
887
  try:
780
888
  details = application_run.details()
889
+ except NotFoundException as e:
890
+ message = f"Application run with ID '{run_id}' not found: {e}"
891
+ logger.warning(message)
892
+ raise NotFoundException(message) from e
781
893
  except ApiException as e:
782
894
  if e.status == HTTPStatus.UNPROCESSABLE_ENTITY: # Don't use UNPROCESSABLE_CONTENT
783
895
  message = f"Run ID '{run_id}' invalid: {e!s}."
@@ -1,35 +0,0 @@
1
- Generate a signed URL for Amazon CloudFront
2
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3
-
4
- The following example shows how to generate a signed URL for Amazon CloudFront.
5
- Note that you will need the ``cryptography`` `library <https://cryptography.io/en/latest/>`__ to follow this example::
6
-
7
- import datetime
8
-
9
- from cryptography.hazmat.backends import default_backend
10
- from cryptography.hazmat.primitives import hashes
11
- from cryptography.hazmat.primitives import serialization
12
- from cryptography.hazmat.primitives.asymmetric import padding
13
- from botocore.signers import CloudFrontSigner
14
-
15
-
16
- def rsa_signer(message):
17
- with open('path/to/key.pem', 'rb') as key_file:
18
- private_key = serialization.load_pem_private_key(
19
- key_file.read(),
20
- password=None,
21
- backend=default_backend()
22
- )
23
- return private_key.sign(message, padding.PKCS1v15(), hashes.SHA1())
24
-
25
- key_id = 'AKIAIOSFODNN7EXAMPLE'
26
- url = 'http://d2949o5mkkp72v.cloudfront.net/hello.txt'
27
- expire_date = datetime.datetime(2017, 1, 1)
28
-
29
- cloudfront_signer = CloudFrontSigner(key_id, rsa_signer)
30
-
31
- # Create a signed url that will be valid until the specific expiry date
32
- # provided using a canned policy.
33
- signed_url = cloudfront_signer.generate_presigned_url(
34
- url, date_less_than=expire_date)
35
- print(signed_url)