histomicsui 1.8.1.dev6__tar.gz → 1.8.1.dev145__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.
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/.circleci/config.yml +82 -4
- histomicsui-1.8.1.dev145/.circleci/get_version.py +19 -0
- histomicsui-1.8.1.dev145/.circleci/publish_pypi.sh +16 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/.git-blame-ignore-revs +4 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/.gitignore +1 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/.pre-commit-config.yaml +2 -1
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/MANIFEST.in +3 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/PKG-INFO +13 -6
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/README.rst +6 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/__init__.py +49 -129
- histomicsui-1.8.1.dev145/histomicsui/girder_worker_plugin.py +14 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/handlers.py +10 -163
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/hui_resource.py +4 -1
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/system.py +26 -1
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/tcga.py +2 -2
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui.egg-info/PKG-INFO +13 -6
- histomicsui-1.8.1.dev145/histomicsui.egg-info/SOURCES.txt +81 -0
- histomicsui-1.8.1.dev145/histomicsui.egg-info/entry_points.txt +5 -0
- histomicsui-1.8.1.dev145/histomicsui.egg-info/requires.txt +8 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/requirements-dev.txt +2 -2
- histomicsui-1.8.1.dev145/requirements-girder5.txt +3 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/ruff.toml +3 -0
- histomicsui-1.8.1.dev145/sample_data/Easy1.png +0 -0
- histomicsui-1.8.1.dev145/sample_data/sample_svs_image.TCGA-DU-6399-01A-01-TS1.e8eb65de-d63e-42db-af6f-14fefbbdf7bd.svs +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/setup.py +10 -6
- histomicsui-1.8.1.dev145/tests/conftest.py +31 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_handlers.py +3 -25
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_hui_rest.py +23 -19
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tox.ini +27 -12
- histomicsui-1.8.1.dev6/histomicsui/web_client/app.js +0 -119
- histomicsui-1.8.1.dev6/histomicsui/web_client/collections/StyleCollection.js +0 -17
- histomicsui-1.8.1.dev6/histomicsui/web_client/collections/UserCollection.js +0 -12
- histomicsui-1.8.1.dev6/histomicsui/web_client/collections/index.js +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/confirmDialog.js +0 -53
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/editElement.js +0 -141
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/editRegionOfInterest.js +0 -199
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/editStyleGroups.js +0 -327
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/index.js +0 -17
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/metadataPlot.js +0 -64
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/openAnnotatedImage.js +0 -179
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/openImage.js +0 -76
- histomicsui-1.8.1.dev6/histomicsui/web_client/dialogs/saveAnnotation.js +0 -573
- histomicsui-1.8.1.dev6/histomicsui/web_client/events.js +0 -3
- histomicsui-1.8.1.dev6/histomicsui/web_client/index.js +0 -20
- histomicsui-1.8.1.dev6/histomicsui/web_client/main.js +0 -28
- histomicsui-1.8.1.dev6/histomicsui/web_client/models/StyleModel.js +0 -38
- histomicsui-1.8.1.dev6/histomicsui/web_client/models/index.js +0 -5
- histomicsui-1.8.1.dev6/histomicsui/web_client/package.json +0 -118
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/AnnotationSelector.js +0 -674
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/DrawWidget.js +0 -1111
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/FrameSelectorWidget.js +0 -86
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/MetadataPlot.js +0 -748
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/MetadataWidget.js +0 -118
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/OverviewWidget.js +0 -197
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/RegionSelector.js +0 -36
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/ZoomWidget.js +0 -310
- histomicsui-1.8.1.dev6/histomicsui/web_client/panels/index.js +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/router.js +0 -50
- histomicsui-1.8.1.dev6/histomicsui/web_client/routes.js +0 -13
- histomicsui-1.8.1.dev6/histomicsui/web_client/static/favicon.png +0 -0
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/body/configView.styl +0 -18
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/body/image.styl +0 -79
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/dialogs/editStyleGroups.styl +0 -15
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/dialogs/metadataPlot.styl +0 -26
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/dialogs/openAnnotatedImage.styl +0 -15
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/dialogs/saveAnnotation.styl +0 -45
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/layout/header.styl +0 -57
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/layout/headerAnalyses.styl +0 -98
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/layout/headerImage.styl +0 -8
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/layout/layout.styl +0 -120
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/annotationSelector.styl +0 -114
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/drawWidget.styl +0 -176
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/frameSelectorWidget.styl +0 -151
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/metadataPlot.styl +0 -35
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/metadataWidget.styl +0 -48
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/overviewWidget.styl +0 -5
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/regionSelector.styl +0 -4
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/panels/zoomWidget.styl +0 -54
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/popover/annotationContextMenu.styl +0 -6
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/popover/annotationPopover.styl +0 -81
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/views/itemList.styl +0 -11
- histomicsui-1.8.1.dev6/histomicsui/web_client/stylesheets/views/searchResultsView.styl +0 -5
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/body/configView.pug +0 -106
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/body/image.pug +0 -21
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/annotatedImageList.pug +0 -15
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/confirmDialog.pug +0 -14
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/editElement.pug +0 -24
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/editRegionOfInterest.pug +0 -40
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/editStyleGroups.pug +0 -44
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/metadataPlot.pug +0 -58
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/openAnnotatedImage.pug +0 -20
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/openImage.pug +0 -10
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/dialogs/saveAnnotation.pug +0 -110
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/elementProps.pug +0 -44
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/layout/header.pug +0 -23
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/layout/headerAnalyses.pug +0 -97
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/layout/headerImage.pug +0 -40
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/layout/headerUser.pug +0 -24
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/layout/layout.pug +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/annotationSelector.pug +0 -104
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/drawWidget.pug +0 -113
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/drawWidgetElement.pug +0 -78
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/frameSelectorWidget.pug +0 -8
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/metadataPlot.pug +0 -13
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/metadataWidgetPanel.pug +0 -16
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/overviewWidget.pug +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/panel.pug +0 -18
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/regionSelector.pug +0 -9
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/panels/zoomWidget.pug +0 -32
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/popover/annotationContextMenu.pug +0 -16
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/popover/annotationPopover.pug +0 -50
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/popover/annotationPopoverMetadata.pug +0 -13
- histomicsui-1.8.1.dev6/histomicsui/web_client/templates/popover/pixelmapContextMenu.pug +0 -6
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/HierarchyWidget.js +0 -13
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/JobDetailsWidget.js +0 -18
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/View.js +0 -48
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/body/ConfigView.js +0 -190
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/body/ImageView.js +0 -1820
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/body/index.js +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/index.js +0 -11
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/itemList.js +0 -106
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/itemPage.js +0 -57
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/HeaderAnalysesView.js +0 -67
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/HeaderImageView.js +0 -83
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/HeaderUserView.js +0 -15
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/HeaderView.js +0 -56
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/LoginView.js +0 -15
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/layout/index.js +0 -9
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/popover/AnnotationContextMenu.js +0 -130
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/popover/AnnotationPopover.js +0 -370
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/popover/PixelmapContextMenu.js +0 -45
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/popover/index.js +0 -7
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/searchResultsView.js +0 -48
- histomicsui-1.8.1.dev6/histomicsui/web_client/views/utils.js +0 -82
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/AnnotationHistoryBrowser.vue +0 -107
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/AnnotationHistoryBrowserContainer.vue +0 -162
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/AnnotationHistoryGroup.vue +0 -128
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/ColorPickerInput.vue +0 -117
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue +0 -358
- histomicsui-1.8.1.dev6/histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue +0 -36
- histomicsui-1.8.1.dev6/histomicsui/web_client/webpack.helper.js +0 -45
- histomicsui-1.8.1.dev6/histomicsui/webroot.mako +0 -40
- histomicsui-1.8.1.dev6/histomicsui.egg-info/SOURCES.txt +0 -188
- histomicsui-1.8.1.dev6/histomicsui.egg-info/entry_points.txt +0 -2
- histomicsui-1.8.1.dev6/histomicsui.egg-info/requires.txt +0 -7
- histomicsui-1.8.1.dev6/tests/test_web_client.py +0 -152
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/.editorconfig +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/LICENSE +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/NOTICE +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/codecov.yml +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/config_options.rst +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/controls.rst +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/images/cut.gif +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/images/difference.gif +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/images/intersect.gif +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/images/union.gif +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/images/xor.gif +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/docs/slicer_cli_plugins.rst +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/constants.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/__init__.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/aperio.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/case.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/cohort.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/image.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/meta.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/pathology.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/models/slide.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/__init__.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/aperio.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui/rest/image_browse_resource.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui.egg-info/dependency_links.txt +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui.egg-info/not-zip-safe +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/histomicsui.egg-info/top_level.txt +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/pyproject.toml +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/setup.cfg +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/__init__.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/datastore.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/girder_utilities.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/.histomicsui_config.yaml +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/sample.anot +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/sample.meta +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/sample_girder_id.anot +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/test_analysis_detection.xml +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_files/test_analysis_features.xml +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_image_browse_endpoints.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_load.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/test_tcga.py +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/.eslintrc +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/analysisSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/annotationSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/girderUISpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/huiSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/huiTest.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/itemSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/metadataPanelSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/metadataPlotSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/overviewPanelSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/panelLayoutSpec.js +0 -0
- {histomicsui-1.8.1.dev6 → histomicsui-1.8.1.dev145}/tests/web_client_specs/pixelmapCategorySpec.js +0 -0
|
@@ -10,15 +10,59 @@ executors:
|
|
|
10
10
|
- image: rabbitmq
|
|
11
11
|
resource_class: large
|
|
12
12
|
commands:
|
|
13
|
+
use_nvm:
|
|
14
|
+
description: "Use nvm"
|
|
15
|
+
parameters:
|
|
16
|
+
node:
|
|
17
|
+
type: string
|
|
18
|
+
default: v20
|
|
19
|
+
steps:
|
|
20
|
+
- run:
|
|
21
|
+
name: Use nvm
|
|
22
|
+
# see https://discuss.circleci.com/t/nvm-does-not-change-node-version-on-machine/28973/14
|
|
23
|
+
command: |
|
|
24
|
+
echo 'export NVM_DIR="/root/.nvm"' >> $BASH_ENV
|
|
25
|
+
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV
|
|
26
|
+
- restore_cache:
|
|
27
|
+
name: Restore nvm cache
|
|
28
|
+
key: v1-nvm-cache-<< parameters.node >>
|
|
29
|
+
- run:
|
|
30
|
+
name: Switch node versions
|
|
31
|
+
command: |
|
|
32
|
+
nvm install << parameters.node >>
|
|
33
|
+
nvm alias default << parameters.node >>
|
|
34
|
+
NODE_DIR=$(dirname $(which node))
|
|
35
|
+
echo "export PATH=$NODE_DIR:\$PATH" >> $BASH_ENV
|
|
36
|
+
- run:
|
|
37
|
+
name: Check node versions
|
|
38
|
+
command: |
|
|
39
|
+
node --version
|
|
40
|
+
npm --version
|
|
41
|
+
build_client:
|
|
42
|
+
description: "Build HistomicsUI client"
|
|
43
|
+
steps:
|
|
44
|
+
- run:
|
|
45
|
+
name: Build client
|
|
46
|
+
command: |
|
|
47
|
+
pushd histomicsui/web_client
|
|
48
|
+
npm ci
|
|
49
|
+
npm run build
|
|
50
|
+
popd
|
|
51
|
+
install_playwright:
|
|
52
|
+
description: "Install playwright"
|
|
53
|
+
steps:
|
|
54
|
+
- run:
|
|
55
|
+
name: Install playwright with dependencies
|
|
56
|
+
command: |
|
|
57
|
+
pushd histomicsui/web_client
|
|
58
|
+
npx playwright install --with-deps
|
|
59
|
+
popd
|
|
13
60
|
tox:
|
|
14
61
|
description: "Run tox"
|
|
15
62
|
parameters:
|
|
16
63
|
env:
|
|
17
64
|
type: string
|
|
18
65
|
steps:
|
|
19
|
-
- run:
|
|
20
|
-
name: Preinstall phantomjs to work around an npm permission issue
|
|
21
|
-
command: npm install -g phantomjs-prebuilt --unsafe-perm
|
|
22
66
|
- run:
|
|
23
67
|
name: Run tests via tox
|
|
24
68
|
# Piping through cat does less buffering of the output but can
|
|
@@ -42,6 +86,8 @@ jobs:
|
|
|
42
86
|
executor: toxandnode
|
|
43
87
|
steps:
|
|
44
88
|
- checkout
|
|
89
|
+
- use_nvm
|
|
90
|
+
- build_client
|
|
45
91
|
- tox:
|
|
46
92
|
env: py310
|
|
47
93
|
- coverage
|
|
@@ -49,6 +95,8 @@ jobs:
|
|
|
49
95
|
executor: toxandnode
|
|
50
96
|
steps:
|
|
51
97
|
- checkout
|
|
98
|
+
- use_nvm
|
|
99
|
+
- build_client
|
|
52
100
|
- tox:
|
|
53
101
|
env: py311
|
|
54
102
|
- coverage
|
|
@@ -56,6 +104,8 @@ jobs:
|
|
|
56
104
|
executor: toxandnode
|
|
57
105
|
steps:
|
|
58
106
|
- checkout
|
|
107
|
+
- use_nvm
|
|
108
|
+
- build_client
|
|
59
109
|
- tox:
|
|
60
110
|
env: py312
|
|
61
111
|
- coverage
|
|
@@ -63,13 +113,30 @@ jobs:
|
|
|
63
113
|
executor: toxandnode
|
|
64
114
|
steps:
|
|
65
115
|
- checkout
|
|
116
|
+
- use_nvm
|
|
117
|
+
- build_client
|
|
66
118
|
- tox:
|
|
67
119
|
env: py313
|
|
68
120
|
- coverage
|
|
121
|
+
web_client:
|
|
122
|
+
executor: toxandnode
|
|
123
|
+
environment:
|
|
124
|
+
CI: "true"
|
|
125
|
+
HEADLESS: "true"
|
|
126
|
+
GIRDER_CLIENT_TESTING_MONGO_URI: mongodb://localhost:27017
|
|
127
|
+
steps:
|
|
128
|
+
- checkout
|
|
129
|
+
- use_nvm
|
|
130
|
+
- build_client
|
|
131
|
+
- install_playwright
|
|
132
|
+
- tox:
|
|
133
|
+
env: webtest
|
|
69
134
|
noanalysis:
|
|
70
135
|
executor: toxandnode
|
|
71
136
|
steps:
|
|
72
137
|
- checkout
|
|
138
|
+
- use_nvm
|
|
139
|
+
- build_client
|
|
73
140
|
- tox:
|
|
74
141
|
env: noanalysis
|
|
75
142
|
- coverage
|
|
@@ -84,6 +151,8 @@ jobs:
|
|
|
84
151
|
- image: girder/tox-and-node
|
|
85
152
|
steps:
|
|
86
153
|
- checkout
|
|
154
|
+
- use_nvm
|
|
155
|
+
- build_client
|
|
87
156
|
- deploy:
|
|
88
157
|
name: Run tests via tox
|
|
89
158
|
# Piping through cat does less buffering of the output but can
|
|
@@ -136,6 +205,13 @@ workflows:
|
|
|
136
205
|
branches:
|
|
137
206
|
ignore:
|
|
138
207
|
- gh-pages
|
|
208
|
+
- web_client:
|
|
209
|
+
filters:
|
|
210
|
+
tags:
|
|
211
|
+
only: /^v.*/
|
|
212
|
+
branches:
|
|
213
|
+
ignore:
|
|
214
|
+
- gh-pages
|
|
139
215
|
- release:
|
|
140
216
|
requires:
|
|
141
217
|
- py310
|
|
@@ -147,4 +223,6 @@ workflows:
|
|
|
147
223
|
tags:
|
|
148
224
|
only: /^v.*/
|
|
149
225
|
branches:
|
|
150
|
-
only:
|
|
226
|
+
only:
|
|
227
|
+
- master
|
|
228
|
+
- girder-5
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
3
|
+
import setuptools_scm
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main():
|
|
7
|
+
version = setuptools_scm.get_version()
|
|
8
|
+
expected_version_regex = r'(\d+\.\d+\.\d+)a(\d+).+$'
|
|
9
|
+
match = re.match(expected_version_regex, version)
|
|
10
|
+
if not match:
|
|
11
|
+
error_message = f'Version {version} does not match the expected format'
|
|
12
|
+
raise ValueError(error_message)
|
|
13
|
+
base_version = match.group(1)
|
|
14
|
+
alpha_version = match.group(2)
|
|
15
|
+
print(f'{base_version}a{alpha_version}')
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
if __name__ == '__main__':
|
|
19
|
+
main()
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION=`python -m setuptools_scm | sed "s/.* //"`
|
|
6
|
+
if [ "${CIRCLE_BRANCH-:}" = "master" ]; then
|
|
7
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION=`echo $SETUPTOOLS_SCM_PRETEND_VERSION | sed "s/\+.*$//"`
|
|
8
|
+
elif [ "${CIRCLE_BRANCH-:}" = "girder-5" ]; then
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
+
pip install setuptools-scm
|
|
11
|
+
export SETUPTOOLS_SCM_PRETEND_VERSION=$(python "$SCRIPT_DIR/get_version.py")
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
python -m build
|
|
15
|
+
twine check dist/*
|
|
16
|
+
twine upload --skip-existing dist/*
|
|
@@ -13,3 +13,7 @@ f1c2190ab04ab867c655b4217f807e9f567772c8
|
|
|
13
13
|
9475b89640a6de84788b79ba68d5ed9aeb1a9ff4
|
|
14
14
|
# PR 359: Apply ruff formatting and linting
|
|
15
15
|
97b21f031e4769043b2c3a464ea4cf8e9a60c219
|
|
16
|
+
# PR 443: Format Girder 5
|
|
17
|
+
d184bf1c2d5c12e643f8e5536c7707744c72e7ba
|
|
18
|
+
0e0e6009391bcbf9bde7be6ebbb121cf84ae1f32
|
|
19
|
+
cbc3c3952acef976b7b0be732e9ebb7686e98c8e
|
|
@@ -48,7 +48,8 @@ repos:
|
|
|
48
48
|
- id: codespell
|
|
49
49
|
args:
|
|
50
50
|
- --ignore-words-list
|
|
51
|
-
- "hist,indext,pixelx,thex,subtile"
|
|
51
|
+
- "hist,indext,pixelx,thex,subtile,afterAll"
|
|
52
|
+
- --exclude-file=histomicsui/web_client/package-lock.json
|
|
52
53
|
- repo: https://github.com/syntaqx/git-hooks
|
|
53
54
|
rev: v0.0.18
|
|
54
55
|
hooks:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: histomicsui
|
|
3
|
-
Version: 1.8.1.
|
|
3
|
+
Version: 1.8.1.dev145
|
|
4
4
|
Summary: Organize, visualize, and analyze histology images.
|
|
5
5
|
Home-page: https://github.com/DigitalSlideArchive/histomicsui
|
|
6
6
|
Author: Kitware, Inc.
|
|
@@ -20,11 +20,12 @@ Requires-Python: >=3.10
|
|
|
20
20
|
Description-Content-Type: text/x-rst
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
License-File: NOTICE
|
|
23
|
-
Requires-Dist: girder
|
|
24
|
-
Requires-Dist: girder-
|
|
25
|
-
Requires-Dist: girder-
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: girder>=5.0.0a13
|
|
24
|
+
Requires-Dist: girder-jobs>=5.0.0a13
|
|
25
|
+
Requires-Dist: girder-large-image==1.33.6a155
|
|
26
|
+
Requires-Dist: girder-large-image-annotation==1.33.6a155
|
|
27
|
+
Requires-Dist: large-image-tasks==1.33.6a155
|
|
28
|
+
Requires-Dist: large-image-converter==1.33.6a155
|
|
28
29
|
Provides-Extra: analysis
|
|
29
30
|
Dynamic: author
|
|
30
31
|
Dynamic: author-email
|
|
@@ -110,6 +111,12 @@ Now install the histomicsui package, have Girder build its UI, and start the Gir
|
|
|
110
111
|
girder build
|
|
111
112
|
girder serve
|
|
112
113
|
|
|
114
|
+
Note that ``girder serve`` should only be used in development. In production, use a WSGI server such as gunicorn, e.g.::
|
|
115
|
+
|
|
116
|
+
.. code-block:: bash
|
|
117
|
+
|
|
118
|
+
gunicorn girder.wsgi:app --bind=localhost:8080 --workers=4 --preload
|
|
119
|
+
|
|
113
120
|
To use Girder Worker:
|
|
114
121
|
|
|
115
122
|
.. code-block:: bash
|
|
@@ -68,6 +68,12 @@ Now install the histomicsui package, have Girder build its UI, and start the Gir
|
|
|
68
68
|
girder build
|
|
69
69
|
girder serve
|
|
70
70
|
|
|
71
|
+
Note that ``girder serve`` should only be used in development. In production, use a WSGI server such as gunicorn, e.g.::
|
|
72
|
+
|
|
73
|
+
.. code-block:: bash
|
|
74
|
+
|
|
75
|
+
gunicorn girder.wsgi:app --bind=localhost:8080 --workers=4 --preload
|
|
76
|
+
|
|
71
77
|
To use Girder Worker:
|
|
72
78
|
|
|
73
79
|
.. code-block:: bash
|
|
@@ -1,29 +1,14 @@
|
|
|
1
|
-
#############################################################################
|
|
2
|
-
# Copyright Kitware Inc.
|
|
3
|
-
#
|
|
4
|
-
# Licensed under the Apache License, Version 2.0 ( the "License" );
|
|
5
|
-
# you may not use this file except in compliance with the License.
|
|
6
|
-
# You may obtain a copy of the License at
|
|
7
|
-
#
|
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
-
#
|
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
-
# See the License for the specific language governing permissions and
|
|
14
|
-
# limitations under the License.
|
|
15
|
-
#############################################################################
|
|
16
|
-
|
|
17
1
|
import importlib.metadata
|
|
18
2
|
import json
|
|
19
3
|
import logging
|
|
20
4
|
import os
|
|
21
5
|
import re
|
|
22
6
|
from functools import wraps
|
|
7
|
+
from pathlib import Path
|
|
23
8
|
|
|
24
9
|
import cherrypy
|
|
25
10
|
from bson import json_util
|
|
26
|
-
from girder import events,
|
|
11
|
+
from girder import events, plugin
|
|
27
12
|
from girder.api import access
|
|
28
13
|
from girder.api.rest import getCurrentToken
|
|
29
14
|
from girder.constants import AssetstoreType
|
|
@@ -33,13 +18,11 @@ from girder.models.file import File
|
|
|
33
18
|
from girder.models.folder import Folder
|
|
34
19
|
from girder.models.item import Item
|
|
35
20
|
from girder.models.setting import Setting
|
|
36
|
-
from girder.
|
|
37
|
-
from girder.settings import SettingDefault, SettingKey
|
|
21
|
+
from girder.settings import SettingDefault
|
|
38
22
|
from girder.utility import config
|
|
39
23
|
from girder.utility import path as path_util
|
|
40
24
|
from girder.utility import setting_utilities
|
|
41
25
|
from girder.utility.model_importer import ModelImporter
|
|
42
|
-
from girder.utility.webroot import Webroot
|
|
43
26
|
|
|
44
27
|
from . import handlers, rest
|
|
45
28
|
from .constants import PluginSettings
|
|
@@ -56,16 +39,7 @@ except importlib.metadata.PackageNotFoundError:
|
|
|
56
39
|
# package is not installed
|
|
57
40
|
pass
|
|
58
41
|
|
|
59
|
-
|
|
60
|
-
# system very noisy. Stop that.
|
|
61
|
-
while logging.root.hasHandlers():
|
|
62
|
-
logging.root.removeHandler(logging.root.handlers[0])
|
|
63
|
-
logging.root.addHandler(logging.NullHandler())
|
|
64
|
-
|
|
65
|
-
_template = os.path.join(
|
|
66
|
-
os.path.dirname(__file__),
|
|
67
|
-
'webroot.mako',
|
|
68
|
-
)
|
|
42
|
+
logger = logging.getLogger(__name__)
|
|
69
43
|
|
|
70
44
|
|
|
71
45
|
def patchCookieParsing():
|
|
@@ -99,42 +73,6 @@ def patchCookieParsing():
|
|
|
99
73
|
pass
|
|
100
74
|
|
|
101
75
|
|
|
102
|
-
def betterInvalidateJSandCSSCaches(root):
|
|
103
|
-
from girder import constants
|
|
104
|
-
|
|
105
|
-
origRenderHTML = root._renderHTML
|
|
106
|
-
|
|
107
|
-
def _renderHTML(self):
|
|
108
|
-
topBuiltDir = os.path.join(constants.STATIC_ROOT_DIR, 'built')
|
|
109
|
-
result = origRenderHTML()
|
|
110
|
-
lastUpdate = 0
|
|
111
|
-
for filename in {
|
|
112
|
-
'girder_lib.min.js', 'girder_app.min.js', 'girder_lib.min.css',
|
|
113
|
-
'Girder_Favicon.png'}:
|
|
114
|
-
filepath = os.path.join(topBuiltDir, filename)
|
|
115
|
-
if os.path.exists(filepath):
|
|
116
|
-
lastUpdate = max(lastUpdate, os.path.getmtime(filepath))
|
|
117
|
-
builtDir = os.path.join(constants.STATIC_ROOT_DIR, 'built', 'plugins')
|
|
118
|
-
for pluginName in self.vars['plugins']:
|
|
119
|
-
for filepath in [
|
|
120
|
-
os.path.join(builtDir, pluginName, 'plugin.min.css'),
|
|
121
|
-
os.path.join(builtDir, pluginName, 'plugin.min.js'),
|
|
122
|
-
]:
|
|
123
|
-
if os.path.exists(filepath):
|
|
124
|
-
lastUpdate = max(lastUpdate, os.path.getmtime(filepath))
|
|
125
|
-
luParam = '?_=%d' % int(lastUpdate * 1000)
|
|
126
|
-
while True:
|
|
127
|
-
match = re.search(
|
|
128
|
-
r'<(link rel="(icon|stylesheet)" [^>]*href="[^>?"]*\.(css|png)|'
|
|
129
|
-
r'script src="[^>?"]*.js)">', result)
|
|
130
|
-
if not match:
|
|
131
|
-
break
|
|
132
|
-
result = result[:match.span()[1] - 2] + luParam + result[match.span()[1] - 2:]
|
|
133
|
-
return result
|
|
134
|
-
|
|
135
|
-
root._renderHTML = _renderHTML.__get__(root)
|
|
136
|
-
|
|
137
|
-
|
|
138
76
|
@setting_utilities.validator({
|
|
139
77
|
PluginSettings.HUI_DEFAULT_DRAW_STYLES,
|
|
140
78
|
PluginSettings.HUI_PANEL_LAYOUT,
|
|
@@ -276,37 +214,6 @@ def _saveJob(event):
|
|
|
276
214
|
pass
|
|
277
215
|
|
|
278
216
|
|
|
279
|
-
class WebrootHistomicsUI(Webroot):
|
|
280
|
-
def _renderHTML(self):
|
|
281
|
-
self.updateHtmlVars({
|
|
282
|
-
'title': Setting().get(PluginSettings.HUI_BRAND_NAME),
|
|
283
|
-
'huiBrandName': Setting().get(PluginSettings.HUI_BRAND_NAME),
|
|
284
|
-
'huiBrandColor': Setting().get(PluginSettings.HUI_BRAND_COLOR),
|
|
285
|
-
'huiBannerColor': Setting().get(PluginSettings.HUI_BANNER_COLOR),
|
|
286
|
-
'huiHelpURL': Setting().get(PluginSettings.HUI_HELP_URL),
|
|
287
|
-
'huiHelpTooltip': Setting().get(PluginSettings.HUI_HELP_TOOLTIP),
|
|
288
|
-
'huiHelpText': Setting().get(PluginSettings.HUI_HELP_TEXT),
|
|
289
|
-
})
|
|
290
|
-
return super()._renderHTML()
|
|
291
|
-
|
|
292
|
-
def GET(self, **params):
|
|
293
|
-
print(params)
|
|
294
|
-
if params.get('token'):
|
|
295
|
-
try:
|
|
296
|
-
token = Token().load(params['token'], force=True, objectId=False)
|
|
297
|
-
if token:
|
|
298
|
-
cookie = cherrypy.response.cookie
|
|
299
|
-
cookie['girderToken'] = str(token['_id'])
|
|
300
|
-
cookie['girderToken']['path'] = '/'
|
|
301
|
-
days = float(Setting().get(SettingKey.COOKIE_LIFETIME))
|
|
302
|
-
cookie['girderToken']['expires'] = int(days * 3600 * 24)
|
|
303
|
-
cookie['girderToken']['sameSite'] = 'None'
|
|
304
|
-
cookie['girderToken']['secure'] = True
|
|
305
|
-
except Exception:
|
|
306
|
-
pass
|
|
307
|
-
return self._renderHTML()
|
|
308
|
-
|
|
309
|
-
|
|
310
217
|
def restrict_downloads(info):
|
|
311
218
|
"""
|
|
312
219
|
If restrict_downloads is configured, modify endpoints to do that.
|
|
@@ -395,9 +302,18 @@ def cleanupFSAssetstores():
|
|
|
395
302
|
assetstore['name'], count, fullcount, total)
|
|
396
303
|
|
|
397
304
|
|
|
305
|
+
class RootHandler:
|
|
306
|
+
@cherrypy.expose
|
|
307
|
+
def index(*args, **kwargs):
|
|
308
|
+
path = Path(__file__).parent / 'web_client' / 'dist-app' / 'index.html'
|
|
309
|
+
with open(path) as f:
|
|
310
|
+
content = f.read()
|
|
311
|
+
modified_content = content.replace('root=""', f'root="{os.getenv("GIRDER_URL_ROOT")}"')
|
|
312
|
+
return modified_content
|
|
313
|
+
|
|
314
|
+
|
|
398
315
|
class GirderPlugin(plugin.GirderPlugin):
|
|
399
316
|
DISPLAY_NAME = 'HistomicsUI'
|
|
400
|
-
CLIENT_SOURCE_PATH = 'web_client'
|
|
401
317
|
|
|
402
318
|
def load(self, info): # noqa
|
|
403
319
|
plugin.getPlugin('jobs').load(info)
|
|
@@ -422,8 +338,8 @@ class GirderPlugin(plugin.GirderPlugin):
|
|
|
422
338
|
ModelImporter.registerModel('slide', Slide, 'histomicsui')
|
|
423
339
|
|
|
424
340
|
rest.addEndpoints(info['apiRoot'])
|
|
425
|
-
info['serverRoot'].updateHtmlVars({
|
|
426
|
-
|
|
341
|
+
# info['serverRoot'].updateHtmlVars({
|
|
342
|
+
# 'brandName': Setting().get(SettingKey.BRAND_NAME)})
|
|
427
343
|
# Better virtual folder support
|
|
428
344
|
if not getattr(Folder, '_childItemsBeforeHUI', None):
|
|
429
345
|
Folder._childItemsBeforeHUI = Folder.childItems
|
|
@@ -443,24 +359,39 @@ class GirderPlugin(plugin.GirderPlugin):
|
|
|
443
359
|
|
|
444
360
|
path_util.lookUpToken = lookUpToken
|
|
445
361
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
362
|
+
plugin.registerPluginStaticContent(
|
|
363
|
+
'histomicsui',
|
|
364
|
+
css=['/style.css'],
|
|
365
|
+
js=[
|
|
366
|
+
'/girder-plugin-histomics-ui.umd.cjs',
|
|
367
|
+
'/extra/plotly.js',
|
|
368
|
+
],
|
|
369
|
+
staticDir=Path(__file__).parent / 'web_client' / 'dist',
|
|
370
|
+
tree=info['serverRoot'],
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
webroot = os.getenv('HUI_WEBROOT_PATH', False)
|
|
374
|
+
if webroot:
|
|
375
|
+
Setting().set(PluginSettings.HUI_WEBROOT_PATH, webroot)
|
|
376
|
+
else:
|
|
377
|
+
webroot = Setting().get(PluginSettings.HUI_WEBROOT_PATH)
|
|
378
|
+
custom_api_root = os.getenv('GIRDER_URL_ROOT')
|
|
379
|
+
custom_api_root = None if not custom_api_root or custom_api_root == '/' else custom_api_root
|
|
380
|
+
static_opts = {
|
|
381
|
+
'tools.staticdir.on': True,
|
|
382
|
+
'tools.staticdir.dir': Path(__file__).parent / 'web_client' / 'dist-app',
|
|
383
|
+
}
|
|
384
|
+
if not custom_api_root:
|
|
385
|
+
static_opts['tools.staticdir.index'] = 'index.html'
|
|
386
|
+
|
|
387
|
+
info['serverRoot'].mount(RootHandler if custom_api_root else None, f'/{webroot}', {
|
|
388
|
+
'/': static_opts,
|
|
389
|
+
})
|
|
390
|
+
altroot = Setting().get(PluginSettings.HUI_ALTERNATE_WEBROOT_PATH)
|
|
391
|
+
if altroot and altroot != webroot:
|
|
392
|
+
info['serverRoot'].mount(RootHandler if custom_api_root else None, f'/{altroot}', {
|
|
393
|
+
'/': static_opts,
|
|
394
|
+
})
|
|
464
395
|
|
|
465
396
|
# Auto-ingest annotations into database when a file with an identifier
|
|
466
397
|
# ending in 'AnnotationFile' is uploaded (usually .anot files).
|
|
@@ -473,16 +404,5 @@ class GirderPlugin(plugin.GirderPlugin):
|
|
|
473
404
|
|
|
474
405
|
handlers.json_nans_as_nulls()
|
|
475
406
|
|
|
476
|
-
def updateWebroot(event):
|
|
477
|
-
"""
|
|
478
|
-
If the webroot path setting is changed, bind the new path to the
|
|
479
|
-
hui webroot resource. Note that a change to the alternate webroot
|
|
480
|
-
requires a restart.
|
|
481
|
-
"""
|
|
482
|
-
if event.info.get('key') == PluginSettings.HUI_WEBROOT_PATH:
|
|
483
|
-
setattr(info['serverRoot'], event.info['value'], huiRoot)
|
|
484
|
-
|
|
485
|
-
events.bind('model.setting.save.after', 'histomicsui', updateWebroot)
|
|
486
|
-
|
|
487
407
|
restrict_downloads(info)
|
|
488
408
|
cleanupFSAssetstores()
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from girder_worker import GirderWorkerPluginABC
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class HistomicsUIWorkerPlugin(GirderWorkerPluginABC):
|
|
7
|
+
def __init__(self, app, *args, **kwargs):
|
|
8
|
+
if os.getenv('CELERY_TASK_ALWAYS_EAGER', False):
|
|
9
|
+
app.conf.task_always_eager = True
|
|
10
|
+
app.conf.task_eager_propagates = True
|
|
11
|
+
self.app = app
|
|
12
|
+
|
|
13
|
+
def task_imports(self):
|
|
14
|
+
return ['histomicsui.handlers']
|