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.
- {aignostics-0.2.48 → aignostics-0.2.52}/PKG-INFO +1 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/examples/notebook.py +1 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/pyproject.toml +2 -2
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_cli.py +99 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_service.py +6 -3
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_service.py +6 -3
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_service.py +4 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_service.py +4 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_service.py +6 -3
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_service.py +14 -5
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/add.groovy +20 -2
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_service.py +2 -2
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_service.py +14 -3
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_service.py +4 -1
- {aignostics-0.2.48 → aignostics-0.2.52}/.gitignore +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/LICENSE +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/README.md +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/.openapi-generator/FILES +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/.openapi-generator/VERSION +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api/public_api.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api_client.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/api_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/configuration.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/exceptions.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_run_status.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_version_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/http_validation_error.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/input_artifact_creation_request.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/input_artifact_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_creation_request.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_result_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_status.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_result_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_scope.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_input_artifact.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_item.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_output_artifact.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_request.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_read_response.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/transfer_urls.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/user_payload.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/validation_error.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/validation_error_loc_inner.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/rest.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/docs/PublicApi.md +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-13/aignostics/_internal/boto3/examples/s3.rst +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-macos-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-ubuntu-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
- {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
- {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
- {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
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-11-arm/aignostics/_internal/boto3/examples/s3.rst +0 -0
- {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
- {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
- {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
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/cloudfront.rst +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/dist_native_all/dist_native-windows-latest/aignostics/_internal/boto3/examples/s3.rst +0 -0
- {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
- {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
- {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
- {aignostics-0.2.48 → aignostics-0.2.52}/examples/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/examples/notebook.ipynb +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/examples/script.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_frame.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_application_describe.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_application_run_describe.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_builder.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_page_index.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/_utils.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/canceled.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/done.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/empty.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/error.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/error_alt.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-1.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-2.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-3.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-4.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/home-card-5.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/image-not-found.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/pending.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/pending_alt.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/ruo.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_gui/assets/ruo.svg +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/application/_utils.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/assets/Google-Cloud-logo.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/bucket/assets/Google-Cloud-logo.svg +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/constants.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/dataset/assets/NIH-IDC-logo.svg +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/_frame.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/_theme.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/assets/cabin-v27-latin-regular.woff2 +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/gui/assets/logo.png +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/_notebook.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/notebook/assets/python.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_authentication.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_client.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_constants.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_messages.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/_utils.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/applications.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/runs.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/platform/resources/utils.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/download.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/microscope.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/assets/update.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/annotate.groovy +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/inspect.groovy +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/qupath/scripts/test.groovy +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_exceptions.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/system/assets/system.lottie +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/third_party/bottle.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/third_party/idc_index.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_console.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_constants.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_di.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_fs.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_health.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_log.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_logfire.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_notebook.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_process.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_sentry.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/_settings.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/utils/boot.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/__init__.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_cli.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_gui.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_openslide_handler.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_pydicom_handler.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/_utils.py +0 -0
- {aignostics-0.2.48 → aignostics-0.2.52}/src/aignostics/wsi/assets/fallback.png +0 -0
- {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.
|
|
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/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "aignostics"
|
|
3
|
-
version = "0.2.
|
|
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.
|
|
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
|
|
940
|
-
|
|
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
|
|
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("
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/application_run_status.py
RENAMED
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/http_validation_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/item_creation_request.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/output_artifact_scope.py
RENAMED
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_input_artifact.py
RENAMED
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/payload_output_artifact.py
RENAMED
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_request.py
RENAMED
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_creation_response.py
RENAMED
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/run_read_response.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aignostics-0.2.48 → aignostics-0.2.52}/codegen/out/aignx/codegen/models/validation_error.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|