aignostics 0.2.48__tar.gz → 0.2.52__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 (200) hide show
  1. {aignostics-0.2.48 → aignostics-0.2.52}/PKG-INFO +1 -1
  2. {aignostics-0.2.48 → aignostics-0.2.52}/examples/notebook.py +1 -1
  3. {aignostics-0.2.48 → aignostics-0.2.52}/pyproject.toml +2 -2
  4. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_cli.py +99 -1
  5. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_service.py +6 -3
  6. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_service.py +6 -3
  7. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_service.py +4 -1
  8. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_service.py +4 -1
  9. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_service.py +6 -3
  10. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_service.py +14 -5
  11. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/add.groovy +20 -2
  12. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_service.py +2 -2
  13. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_service.py +14 -3
  14. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_service.py +4 -1
  15. {aignostics-0.2.48 → aignostics-0.2.52}/.gitignore +0 -0
  16. {aignostics-0.2.48 → aignostics-0.2.52}/LICENSE +0 -0
  17. {aignostics-0.2.48 → aignostics-0.2.52}/README.md +0 -0
  18. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/.openapi-generator/FILES +0 -0
  19. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/.openapi-generator/VERSION +0 -0
  20. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api/public_api.py +0 -0
  21. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api_client.py +0 -0
  22. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api_response.py +0 -0
  23. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/configuration.py +0 -0
  24. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/exceptions.py +0 -0
  25. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/__init__.py +0 -0
  26. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_read_response.py +0 -0
  27. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_run_status.py +0 -0
  28. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_version_read_response.py +0 -0
  29. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/http_validation_error.py +0 -0
  30. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/input_artifact_creation_request.py +0 -0
  31. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/input_artifact_read_response.py +0 -0
  32. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_creation_request.py +0 -0
  33. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_result_read_response.py +0 -0
  34. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_status.py +0 -0
  35. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_read_response.py +0 -0
  36. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_result_read_response.py +0 -0
  37. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_scope.py +0 -0
  38. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_input_artifact.py +0 -0
  39. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_item.py +0 -0
  40. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_output_artifact.py +0 -0
  41. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_request.py +0 -0
  42. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_response.py +0 -0
  43. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_read_response.py +0 -0
  44. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/transfer_urls.py +0 -0
  45. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/user_payload.py +0 -0
  46. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/validation_error.py +0 -0
  47. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/validation_error_loc_inner.py +0 -0
  48. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/rest.py +0 -0
  49. {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/docs/PublicApi.md +0 -0
  50. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  51. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/boto3/examples/s3.rst +0 -0
  52. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  53. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  54. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  55. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Frameworks/boto3/examples/cloudfront.rst +0 -0
  56. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Frameworks/boto3/examples/s3.rst +0 -0
  57. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  58. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  59. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  60. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources/boto3/examples/cloudfront.rst +0 -0
  61. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources/boto3/examples/s3.rst +0 -0
  62. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  63. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  64. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  65. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  66. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
  67. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  68. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  69. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  70. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks/boto3/examples/cloudfront.rst +0 -0
  71. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks/boto3/examples/s3.rst +0 -0
  72. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  73. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  74. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Frameworks/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  75. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources/boto3/examples/cloudfront.rst +0 -0
  76. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources/boto3/examples/s3.rst +0 -0
  77. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  78. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  79. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics.app/Contents/Resources/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  80. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  81. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/boto3/examples/s3.rst +0 -0
  82. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  83. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  84. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-24.04-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  85. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  86. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
  87. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  88. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  89. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  90. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  91. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/s3.rst +0 -0
  92. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  93. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  94. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  95. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
  96. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
  97. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.jquery +0 -0
  98. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon +0 -0
  99. {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/openslide_python-1.4.2.dist-info/licenses/examples/deepzoom/licenses/LICENSE.openseadragon-scalebar +0 -0
  100. {aignostics-0.2.48 → aignostics-0.2.52}/examples/__init__.py +0 -0
  101. {aignostics-0.2.48 → aignostics-0.2.52}/examples/notebook.ipynb +0 -0
  102. {aignostics-0.2.48 → aignostics-0.2.52}/examples/script.py +0 -0
  103. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/__init__.py +0 -0
  104. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/__init__.py +0 -0
  105. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_frame.py +0 -0
  106. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_application_describe.py +0 -0
  107. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_application_run_describe.py +0 -0
  108. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_builder.py +0 -0
  109. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_index.py +0 -0
  110. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_utils.py +0 -0
  111. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/canceled.lottie +0 -0
  112. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/done.lottie +0 -0
  113. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/empty.lottie +0 -0
  114. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/error.lottie +0 -0
  115. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/error_alt.lottie +0 -0
  116. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-1.png +0 -0
  117. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-2.png +0 -0
  118. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-3.png +0 -0
  119. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-4.png +0 -0
  120. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-5.png +0 -0
  121. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/image-not-found.png +0 -0
  122. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/pending.lottie +0 -0
  123. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/pending_alt.lottie +0 -0
  124. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/ruo.png +0 -0
  125. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/ruo.svg +0 -0
  126. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_settings.py +0 -0
  127. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_utils.py +0 -0
  128. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/__init__.py +0 -0
  129. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_cli.py +0 -0
  130. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_gui.py +0 -0
  131. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_settings.py +0 -0
  132. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/assets/Google-Cloud-logo.png +0 -0
  133. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/assets/Google-Cloud-logo.svg +0 -0
  134. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/cli.py +0 -0
  135. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/constants.py +0 -0
  136. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/__init__.py +0 -0
  137. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_cli.py +0 -0
  138. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_gui.py +0 -0
  139. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/assets/NIH-IDC-logo.svg +0 -0
  140. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/__init__.py +0 -0
  141. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/_frame.py +0 -0
  142. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/_theme.py +0 -0
  143. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/assets/cabin-v27-latin-regular.woff2 +0 -0
  144. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/assets/logo.png +0 -0
  145. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/__init__.py +0 -0
  146. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_gui.py +0 -0
  147. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_notebook.py +0 -0
  148. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/assets/python.lottie +0 -0
  149. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/__init__.py +0 -0
  150. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_authentication.py +0 -0
  151. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_client.py +0 -0
  152. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_constants.py +0 -0
  153. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_messages.py +0 -0
  154. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_settings.py +0 -0
  155. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_utils.py +0 -0
  156. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/__init__.py +0 -0
  157. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/applications.py +0 -0
  158. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/runs.py +0 -0
  159. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/utils.py +0 -0
  160. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/__init__.py +0 -0
  161. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_cli.py +0 -0
  162. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_gui.py +0 -0
  163. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_settings.py +0 -0
  164. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/download.lottie +0 -0
  165. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/microscope.lottie +0 -0
  166. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/update.lottie +0 -0
  167. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/annotate.groovy +0 -0
  168. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/inspect.groovy +0 -0
  169. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/test.groovy +0 -0
  170. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/__init__.py +0 -0
  171. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_cli.py +0 -0
  172. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_exceptions.py +0 -0
  173. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_gui.py +0 -0
  174. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_settings.py +0 -0
  175. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/assets/system.lottie +0 -0
  176. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/third_party/bottle.py +0 -0
  177. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/third_party/idc_index.py +0 -0
  178. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/__init__.py +0 -0
  179. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_cli.py +0 -0
  180. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_console.py +0 -0
  181. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_constants.py +0 -0
  182. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_di.py +0 -0
  183. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_fs.py +0 -0
  184. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_gui.py +0 -0
  185. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_health.py +0 -0
  186. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_log.py +0 -0
  187. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_logfire.py +0 -0
  188. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_notebook.py +0 -0
  189. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_process.py +0 -0
  190. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_sentry.py +0 -0
  191. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_settings.py +0 -0
  192. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/boot.py +0 -0
  193. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/__init__.py +0 -0
  194. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_cli.py +0 -0
  195. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_gui.py +0 -0
  196. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_openslide_handler.py +0 -0
  197. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_pydicom_handler.py +0 -0
  198. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_utils.py +0 -0
  199. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/assets/fallback.png +0 -0
  200. {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aignostics
3
- Version: 0.2.48
3
+ Version: 0.2.52
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/
@@ -2,7 +2,7 @@
2
2
  # requires-python = ">=3.13"
3
3
  # dependencies = [
4
4
  # "marimo",
5
- # "aignostics==0.2.48",
5
+ # "aignostics==0.2.52",
6
6
  # ]
7
7
  # ///
8
8
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aignostics"
3
- version = "0.2.48"
3
+ version = "0.2.52"
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 = [
@@ -355,7 +355,7 @@ source = ["src/"]
355
355
 
356
356
 
357
357
  [tool.bumpversion]
358
- current_version = "0.2.48"
358
+ current_version = "0.2.52"
359
359
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
360
360
  serialize = ["{major}.{minor}.{patch}"]
361
361
  search = "{current_version}"
@@ -1,7 +1,9 @@
1
1
  """CLI of application module."""
2
2
 
3
+ import json
3
4
  import sys
4
5
  import time
6
+ import zipfile
5
7
  from pathlib import Path
6
8
  from typing import Annotated
7
9
 
@@ -9,7 +11,7 @@ import typer
9
11
 
10
12
  from aignostics.bucket import Service as BucketService
11
13
  from aignostics.platform import NotFoundException
12
- from aignostics.utils import console, get_logger, get_user_data_directory
14
+ from aignostics.utils import console, get_logger, get_user_data_directory, sanitize_path
13
15
 
14
16
  from ._service import DownloadProgress, DownloadProgressState, Service
15
17
  from ._utils import (
@@ -96,6 +98,102 @@ def application_list(
96
98
  console.print("No applications available.")
97
99
 
98
100
 
101
+ @cli.command("dump-schemata")
102
+ def application_dump_schemata( # noqa: C901
103
+ id: Annotated[ # noqa: A002
104
+ str,
105
+ typer.Argument(
106
+ help="Id of the application or application_version to dump the output schema for. "
107
+ "If application id is given the latest version of the application will be used."
108
+ ),
109
+ ],
110
+ destination: Annotated[
111
+ Path,
112
+ typer.Option(
113
+ help="Path pointing to directory where the input and output schemata will be dumped.",
114
+ exists=False,
115
+ file_okay=False,
116
+ dir_okay=True,
117
+ writable=True,
118
+ readable=True,
119
+ resolve_path=True,
120
+ ),
121
+ ] = Path().cwd(), # noqa: B008,
122
+ zip: Annotated[ # noqa: A002
123
+ bool,
124
+ typer.Option(
125
+ help="If set, the schema files will be zipped into a single file, with the schema files deleted.",
126
+ ),
127
+ ] = False,
128
+ ) -> None:
129
+ """Output the input schema of the application in JSON format."""
130
+ try:
131
+ application_version = Service().application_version(id, True)
132
+ application = Service().application(application_version.application_id)
133
+ except (NotFoundException, ValueError) as e:
134
+ message = f"Failed to load application version with ID '{id}', check your input: : {e!s}."
135
+ logger.warning(message)
136
+ console.print(f"[warning]Warning:[/warning] {message}")
137
+ sys.exit(2)
138
+ except (Exception, RuntimeError) as e:
139
+ message = f"Failed to load application version with ID '{id}': {e!s}."
140
+ logger.exception(message)
141
+ console.print(f"[warning]Error:[/warning] {message}")
142
+ sys.exit(1)
143
+ try:
144
+ destination.mkdir(parents=True, exist_ok=True)
145
+ except OSError as e:
146
+ console.print(f"[error]Error:[/error] Failed to create directory '{destination}': {e}")
147
+ sys.exit(1)
148
+
149
+ created_files: list[Path] = []
150
+
151
+ for input_artifact in application_version.input_artifacts:
152
+ if input_artifact.metadata_schema:
153
+ file_path: Path = sanitize_path(
154
+ Path(destination / f"{application_version.application_version_id}_input_{input_artifact.name}.json")
155
+ ) # type: ignore
156
+ file_path.write_text(data=json.dumps(input_artifact.metadata_schema, indent=2), encoding="utf-8")
157
+ created_files.append(file_path)
158
+
159
+ for output_artifact in application_version.output_artifacts:
160
+ if output_artifact.metadata_schema:
161
+ file_path = sanitize_path(
162
+ Path(destination / f"{application_version.application_version_id}_output_{output_artifact.name}.json")
163
+ ) # type: ignore
164
+ file_path.write_text(data=json.dumps(output_artifact.metadata_schema, indent=2), encoding="utf-8")
165
+ created_files.append(file_path)
166
+
167
+ md_file_path: Path = sanitize_path(Path(destination / f"{application_version.application_version_id}_schemata.md")) # type: ignore
168
+ with md_file_path.open("w", encoding="utf-8") as md_file:
169
+ md_file.write(f"# Schemata for Aignostics Application {application.name}\n")
170
+ md_file.write(f"* ID: {application.application_id}\n")
171
+ md_file.write(f"* Version ID: {application_version.application_version_id}\n")
172
+ md_file.write(f"\n## Description: \n{application.description}\n\n")
173
+ md_file.write("\n## Input Artifacts\n")
174
+ for input_artifact in application_version.input_artifacts:
175
+ md_file.write(
176
+ f"- {input_artifact.name}: "
177
+ f"{application_version.application_version_id}_input_{input_artifact.name}.json\n"
178
+ )
179
+ md_file.write("\n## Output Artifacts\n")
180
+ for output_artifact in application_version.output_artifacts:
181
+ md_file.write(
182
+ f"- {output_artifact.name}: "
183
+ f"{application_version.application_version_id}_output_{output_artifact.name}.json\n"
184
+ )
185
+ created_files.append(md_file_path)
186
+
187
+ if zip:
188
+ zip_filename = sanitize_path(Path(destination / f"{application_version.application_version_id}_schemata.zip"))
189
+ with zipfile.ZipFile(zip_filename, "w", zipfile.ZIP_DEFLATED) as zipf:
190
+ for file_path in created_files:
191
+ zipf.write(file_path, arcname=file_path.name)
192
+ console.print(f"Zipped {len(created_files)} files to [bold]{zip_filename}[/bold]")
193
+ for file_path in created_files:
194
+ file_path.unlink()
195
+
196
+
99
197
  @cli.command("describe")
100
198
  def application_describe(
101
199
  application_id: Annotated[str, typer.Argument(help="Id of the application to describe")],
@@ -32,7 +32,7 @@ from aignostics.platform import (
32
32
  NotFoundException,
33
33
  OutputArtifactElement,
34
34
  )
35
- from aignostics.utils import BaseService, Health, get_logger, sanitize_path_component
35
+ from aignostics.utils import UNHIDE_SENSITIVE_INFO, BaseService, Health, get_logger, sanitize_path_component
36
36
  from aignostics.wsi import Service as WSIService
37
37
 
38
38
  from ._settings import Settings
@@ -155,13 +155,16 @@ class Service(BaseService):
155
155
  """Initialize service."""
156
156
  super().__init__(Settings) # automatically loads and validates the settings
157
157
 
158
- def info(self) -> dict[str, Any]:
158
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]:
159
159
  """Determine info of this service.
160
160
 
161
+ Args:
162
+ mask_secrets (bool): If True, mask sensitive information in the output.
163
+
161
164
  Returns:
162
165
  dict[str,Any]: The info of this service.
163
166
  """
164
- return {"settings": self._settings.model_dump()}
167
+ return {"settings": self._settings.model_dump(context={UNHIDE_SENSITIVE_INFO: not mask_secrets})}
165
168
 
166
169
  def health(self) -> Health: # noqa: PLR6301
167
170
  """Determine health of this service.
@@ -8,7 +8,7 @@ import requests
8
8
  from botocore.client import BaseClient, Config
9
9
  from botocore.exceptions import ClientError
10
10
 
11
- from aignostics.utils import BaseService, Health, get_logger
11
+ from aignostics.utils import UNHIDE_SENSITIVE_INFO, BaseService, Health, get_logger
12
12
 
13
13
  from ._settings import Settings
14
14
 
@@ -28,13 +28,16 @@ class Service(BaseService):
28
28
  """Initialize service."""
29
29
  super().__init__(Settings)
30
30
 
31
- def info(self) -> dict[str, Any]:
31
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]:
32
32
  """Determine info of this service.
33
33
 
34
+ Args:
35
+ mask_secrets (bool): If True, mask sensitive information in the output.
36
+
34
37
  Returns:
35
38
  dict[str,Any]: The info of this service.
36
39
  """
37
- return {"settings": self._settings.model_dump()}
40
+ return {"settings": self._settings.model_dump(context={UNHIDE_SENSITIVE_INFO: not mask_secrets})}
38
41
 
39
42
  def health(self) -> Health: # noqa: PLR6301
40
43
  """Determine health of this service.
@@ -59,9 +59,12 @@ atexit.register(_cleanup_processes)
59
59
  class Service(BaseService):
60
60
  """Service of the IDC module."""
61
61
 
62
- def info(self) -> dict[str, Any]: # noqa: PLR6301
62
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]: # noqa: ARG002, PLR6301
63
63
  """Determine info of this service.
64
64
 
65
+ Args:
66
+ mask_secrets (bool): Whether to mask sensitive information in the output.
67
+
65
68
  Returns:
66
69
  dict[str,Any]: The info of this service.
67
70
  """
@@ -220,9 +220,12 @@ def _get_runner() -> _Runner:
220
220
  class Service(BaseService):
221
221
  """Service of the Marimo module."""
222
222
 
223
- def info(self) -> dict[str, Any]: # noqa: PLR6301
223
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]: # noqa: ARG002, PLR6301
224
224
  """Determine info of this service.
225
225
 
226
+ Args:
227
+ mask_secrets (bool): Whether to mask sensitive information in the output.
228
+
226
229
  Returns:
227
230
  dict[str,Any]: The info of this service.
228
231
  """
@@ -6,7 +6,7 @@ from typing import Any
6
6
  import urllib3
7
7
 
8
8
  from aignostics.platform import Client
9
- from aignostics.utils import BaseService, Health, __version__, get_logger
9
+ from aignostics.utils import UNHIDE_SENSITIVE_INFO, BaseService, Health, __version__, get_logger
10
10
 
11
11
  from ._settings import Settings
12
12
 
@@ -24,13 +24,16 @@ class Service(BaseService):
24
24
  """Initialize service."""
25
25
  super().__init__(Settings) # automatically loads and validates the settings
26
26
 
27
- def info(self) -> dict[str, Any]:
27
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]:
28
28
  """Determine info of this service.
29
29
 
30
+ Args:
31
+ mask_secrets (bool): Whether to mask sensitive information in the output.
32
+
30
33
  Returns:
31
34
  dict[str,Any]: The info of this service.
32
35
  """
33
- return {"settings": self._settings.model_dump()}
36
+ return {"settings": self._settings.model_dump(context={UNHIDE_SENSITIVE_INFO: not mask_secrets})}
34
37
 
35
38
  def _determine_api_public_health(self) -> Health:
36
39
  """Determine healthiness and reachability of Aignostics Platform API.
@@ -25,7 +25,7 @@ from packaging.version import Version
25
25
  from psutil import Process, wait_procs
26
26
  from pydantic import BaseModel, computed_field
27
27
 
28
- from aignostics.utils import BaseService, Health, __project_name__, get_logger
28
+ from aignostics.utils import UNHIDE_SENSITIVE_INFO, BaseService, Health, __project_name__, get_logger
29
29
 
30
30
  from ._settings import Settings
31
31
 
@@ -34,6 +34,7 @@ logger = get_logger(__name__)
34
34
  QUPATH_VERSION = "0.6.0-rc5"
35
35
  DOWNLOAD_CHUNK_SIZE = 10 * 1024 * 1024
36
36
  QUPATH_LAUNCH_MAX_WAIT_TIME = 30 # seconds, maximum wait time for QuPath to start
37
+ QUPATH_SCRIPT_MAX_EXECUTION_TIME = 60 * 60 * 2 # seconds, maximum wait time for QuPath to run a script
37
38
 
38
39
  PROJECT_FILENAME = "project.qpproj"
39
40
  ANNOTATIONS_BATCH_SIZE = 500000
@@ -203,13 +204,16 @@ class Service(BaseService):
203
204
  """Initialize service."""
204
205
  super().__init__(Settings)
205
206
 
206
- def info(self) -> dict[str, Any]:
207
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]:
207
208
  """Determine info of this service.
208
209
 
210
+ Args:
211
+ mask_secrets (bool): Whether to mask sensitive information in the output.
212
+
209
213
  Returns:
210
214
  dict[str,Any]: The info of this service.
211
215
  """
212
- settings = self._settings.model_dump()
216
+ settings = self._settings.model_dump(context={UNHIDE_SENSITIVE_INFO: not mask_secrets})
213
217
  executable = Service.find_qupath_executable()
214
218
  version = Service.get_version()
215
219
  return {
@@ -936,8 +940,13 @@ class Service(BaseService):
936
940
  start_time = time.time()
937
941
  while True:
938
942
  waited = time.time() - start_time
939
- if time.time() - start_time > QUPATH_LAUNCH_MAX_WAIT_TIME:
940
- message = f"Timed out after {waited:.2f} seconds waiting for QuPath to start"
943
+ if script:
944
+ if waited > QUPATH_SCRIPT_MAX_EXECUTION_TIME:
945
+ message = f"Timed out after {waited:.2f} seconds waiting for QuPath script to complete"
946
+ logger.error(message)
947
+ return None
948
+ elif waited > QUPATH_LAUNCH_MAX_WAIT_TIME:
949
+ message = f"Timed out after {waited:.2f} seconds waiting for QuPath to launch"
941
950
  logger.error(message)
942
951
  return None
943
952
 
@@ -169,28 +169,46 @@ try {
169
169
 
170
170
  // Add image to project
171
171
  println("Calling addImage... ")
172
+ def addImageStart = System.currentTimeMillis()
172
173
  def entry = project.addImage(builder)
174
+ def addImageDuration = (System.currentTimeMillis() - addImageStart) / 1000.0
175
+ println("addImage took ${addImageDuration} seconds")
173
176
 
174
177
  println("Calling setImageName... "+imageFile.getName())
178
+ def setImageNameStart = System.currentTimeMillis()
175
179
  entry.setImageName(imageFile.getName())
180
+ def setImageNameDuration = (System.currentTimeMillis() - setImageNameStart) / 1000.0
181
+ println("setImageName took ${setImageNameDuration} seconds")
176
182
 
177
183
  // Set a particular image type
178
184
  println("Calling readImageData... ")
185
+ def readImageDataStart = System.currentTimeMillis()
179
186
  def imageData = entry.readImageData()
187
+ def readImageDataDuration = (System.currentTimeMillis() - readImageDataStart) / 1000.0
188
+ println("readImageData took ${readImageDataDuration} seconds")
180
189
 
181
190
  println("Calling setImageType... ")
191
+ def setImageTypeStart = System.currentTimeMillis()
182
192
  imageData.setImageType(ImageData.ImageType.BRIGHTFIELD_H_DAB)
193
+ def setImageTypeDuration = (System.currentTimeMillis() - setImageTypeStart) / 1000.0
194
+ println("setImageType took ${setImageTypeDuration} seconds")
183
195
 
184
- println("Calling setImageData... ")
196
+ println("Calling saveImageData... ")
197
+ def saveImageDataStart = System.currentTimeMillis()
185
198
  entry.saveImageData(imageData)
199
+ def saveImageDataDuration = (System.currentTimeMillis() - saveImageDataStart) / 1000.0
200
+ println("saveImageData took ${saveImageDataDuration} seconds")
186
201
 
187
202
  // Write a thumbnail if we can
188
203
  println("Calling getThumbnailRGB... ")
189
204
  var img = ProjectCommands.getThumbnailRGB(imageData.getServer());
205
+ def setThumbnailStart = System.currentTimeMillis()
190
206
  entry.setThumbnail(img)
207
+ def setThumbnailDuration = (System.currentTimeMillis() - setThumbnailStart) / 1000.0
208
+ println("setThumbnail took ${setThumbnailDuration} seconds")
191
209
 
192
210
  addedCount++
193
- println("Done for image " + addedCount + " " + imageFile.getName())
211
+ println("Adding image completed for image " + addedCount + ", " + imageFile.getName())
194
212
 
195
213
  } catch (Exception e) {
196
214
  def errorMsg = "Error adding image '" + imageFile.getAbsolutePath() + "': " + e.getMessage()
@@ -244,7 +244,7 @@ class Service(BaseService):
244
244
  return any(term in key_lower for term in string_match_terms)
245
245
 
246
246
  @staticmethod
247
- def info(include_environ: bool = False, mask_secrets: bool = True) -> dict[str, Any]:
247
+ def info(include_environ: bool = False, mask_secrets: bool = True) -> dict[str, Any]: # type: ignore[override]
248
248
  """
249
249
  Get info about configuration of service.
250
250
 
@@ -377,7 +377,7 @@ class Service(BaseService):
377
377
  for service_class in locate_subclasses(BaseService):
378
378
  if service_class is not Service:
379
379
  service = service_class()
380
- result_dict[service.key()] = service.info()
380
+ result_dict[service.key()] = service.info(mask_secrets=mask_secrets)
381
381
 
382
382
  logger.info("Service info: %s", result_dict)
383
383
  return result_dict
@@ -32,8 +32,19 @@ class BaseService(ABC):
32
32
 
33
33
  @abstractmethod
34
34
  def health(self) -> Health:
35
- """Get health of this service. Override in subclass."""
35
+ """Get health of this service. Override in subclass.
36
+
37
+ Returns:
38
+ Health: Health status of the service.
39
+ """
36
40
 
37
41
  @abstractmethod
38
- def info(self) -> dict[str, Any]:
39
- """Get info of this service. Override in subclass."""
42
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]:
43
+ """Get info of this service. Override in subclass.
44
+
45
+ Args:
46
+ mask_secrets: Whether to mask sensitive information in the output.
47
+
48
+ Returns:
49
+ dict[str, Any]: Information about the service.
50
+ """
@@ -17,9 +17,12 @@ TIMEOUT = 60 # 1 minutes
17
17
  class Service(BaseService):
18
18
  """Service of the application module."""
19
19
 
20
- def info(self) -> dict[str, Any]: # noqa: PLR6301
20
+ def info(self, mask_secrets: bool = True) -> dict[str, Any]: # noqa: ARG002, PLR6301
21
21
  """Determine info of this service.
22
22
 
23
+ Args:
24
+ mask_secrets (bool): Whether to mask sensitive information in the output.
25
+
23
26
  Returns:
24
27
  dict[str,Any]: The info of this service.
25
28
  """
File without changes
File without changes
File without changes