plexora 0.0.17__tar.gz → 0.0.20__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 (562) hide show
  1. {plexora-0.0.17 → plexora-0.0.20}/PKG-INFO +75 -2
  2. plexora-0.0.17/plexora.egg-info/PKG-INFO → plexora-0.0.20/README.md +480 -458
  3. {plexora-0.0.17 → plexora-0.0.20}/plexora/__init__.py +29 -1
  4. plexora-0.0.20/plexora/_transient_locks.py +99 -0
  5. plexora-0.0.20/plexora/api/__init__.py +124 -0
  6. {plexora-0.0.17 → plexora-0.0.20}/plexora/api/dataset.py +27 -12
  7. {plexora-0.0.17 → plexora-0.0.20}/plexora/api/plugin.py +159 -76
  8. {plexora-0.0.17 → plexora-0.0.20}/plexora/askpass.py +119 -5
  9. {plexora-0.0.17 → plexora-0.0.20}/plexora/cli.py +578 -15
  10. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/vendor_bundle.js +1 -1
  11. plexora-0.0.20/plexora/client/dist/vendors-node_modules_canvg_lib_index_es_js_bundle.js +1922 -0
  12. plexora-0.0.20/plexora/client/dist/vendors-node_modules_dompurify_dist_purify_es_mjs_bundle.js +22 -0
  13. plexora-0.0.20/plexora/client/dist/vendors-node_modules_html2canvas_dist_html2canvas_js_bundle.js +21 -0
  14. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/import.css +41 -141
  15. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/main.css +6806 -4790
  16. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/openProject.css +286 -0
  17. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/quickView.css +42 -2
  18. plexora-0.0.20/plexora/client/src/css/viewer.css +2969 -0
  19. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/main.js +1736 -1023
  20. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/pluginRegistry.js +30 -0
  21. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/appRouter.js +34 -3
  22. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/browsePicker.js +9 -2
  23. plexora-0.0.20/plexora/client/src/js/services/carryOver.js +373 -0
  24. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/connectionModal.js +33 -9
  25. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/dataLayer.js +48 -0
  26. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/dataLocation.js +16 -6
  27. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/pathPicker.js +2 -1
  28. plexora-0.0.20/plexora/client/src/js/services/toast.js +175 -0
  29. plexora-0.0.20/plexora/client/src/js/services/viewerLoader.js +156 -0
  30. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/brightfieldAdjust.js +77 -34
  31. plexora-0.0.20/plexora/client/src/js/views/cardList.js +258 -0
  32. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/channelNamesUpload.js +25 -2
  33. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/colorSwatchPicker.js +4 -0
  34. plexora-0.0.20/plexora/client/src/js/views/confirmDialog.js +191 -0
  35. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/dataSourceField.js +25 -4
  36. plexora-0.0.20/plexora/client/src/js/views/datasetNav.js +259 -0
  37. plexora-0.0.20/plexora/client/src/js/views/datasetPicker.js +220 -0
  38. plexora-0.0.20/plexora/client/src/js/views/fileSourceRow.js +469 -0
  39. plexora-0.0.20/plexora/client/src/js/views/glInit.js +267 -0
  40. plexora-0.0.20/plexora/client/src/js/views/gradientRange.js +523 -0
  41. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/imageViewer.js +3128 -3443
  42. plexora-0.0.20/plexora/client/src/js/views/importHelp.js +561 -0
  43. plexora-0.0.20/plexora/client/src/js/views/importSample.js +1154 -0
  44. plexora-0.0.20/plexora/client/src/js/views/labelTile.js +154 -0
  45. plexora-0.0.20/plexora/client/src/js/views/layerChannelPanel.js +396 -0
  46. plexora-0.0.20/plexora/client/src/js/views/layerManager.js +1660 -0
  47. plexora-0.0.20/plexora/client/src/js/views/layerSections.js +128 -0
  48. plexora-0.0.20/plexora/client/src/js/views/layerStack.js +957 -0
  49. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/navbarControls.js +5 -4
  50. plexora-0.0.20/plexora/client/src/js/views/openProjectPage.js +887 -0
  51. plexora-0.0.20/plexora/client/src/js/views/panCursor.js +57 -0
  52. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/popoverPortal.js +66 -0
  53. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/projectEdit.js +38 -0
  54. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/quickViewLanding.js +51 -7
  55. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/requirementsModal.js +101 -15
  56. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/rgbImageViewer.js +12 -6
  57. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/searchableSelect.js +5 -0
  58. plexora-0.0.20/plexora/client/src/js/views/slider.js +831 -0
  59. plexora-0.0.20/plexora/client/src/js/views/tileColorize.js +321 -0
  60. plexora-0.0.20/plexora/client/src/js/views/tileDecode.js +317 -0
  61. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/toolLoader.js +420 -144
  62. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/viewerControls.js +287 -43
  63. plexora-0.0.20/plexora/client/src/js/views/viewerErrorState.js +139 -0
  64. plexora-0.0.20/plexora/client/src/js/views/viewerManager.js +2324 -0
  65. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/viewerSidebar.js +427 -128
  66. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/shaders/frag.glsl +29 -2
  67. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/base.html +98 -34
  68. plexora-0.0.20/plexora/client/templates/index.html +596 -0
  69. plexora-0.0.20/plexora/client/templates/open_project.html +118 -0
  70. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/project_edit.html +68 -10
  71. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/settings.html +365 -352
  72. {plexora-0.0.17 → plexora-0.0.20}/plexora/connect.py +149 -9
  73. plexora-0.0.20/plexora/datasets.py +753 -0
  74. {plexora-0.0.17 → plexora-0.0.20}/plexora/datasource.py +258 -11
  75. {plexora-0.0.17 → plexora-0.0.20}/plexora/nodes.py +19 -0
  76. {plexora-0.0.17 → plexora-0.0.20}/plexora/paths.py +313 -8
  77. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/__init__.py +105 -105
  78. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/server/routes.py +167 -167
  79. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerColors.js +17 -72
  80. plexora-0.0.20/plexora/plugins/cell_explorer/static/cellExplorerContinuous.js +141 -0
  81. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerSidebarController.js +46 -4
  82. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cell_explorer.css +3 -178
  83. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/templates/cell_explorer/panel.html +8 -9
  84. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/__init__.py +173 -161
  85. plexora-0.0.20/plexora/plugins/figure_builder/server/captures.py +482 -0
  86. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/pixels.py +261 -246
  87. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/render.py +48 -2
  88. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/repository.py +38 -1
  89. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/routes.py +161 -1
  90. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/schema.py +34 -0
  91. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/sources.py +120 -120
  92. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureBuilderApi.js +70 -0
  93. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureCanvas.js +26 -1
  94. plexora-0.0.20/plexora/plugins/figure_builder/static/figureCaptureBin.js +246 -0
  95. plexora-0.0.20/plexora/plugins/figure_builder/static/figureCaptureBinGrid.js +310 -0
  96. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureCaptureDock.js +93 -43
  97. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureCaptureTool.js +28 -2
  98. plexora-0.0.20/plexora/plugins/figure_builder/static/figureDestinationPicker.js +283 -0
  99. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureLinePanel.js +30 -12
  100. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureQuickEdit.js +61 -11
  101. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureSceneSnapshot.js +14 -0
  102. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureShapePanel.js +30 -12
  103. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureSidebarController.js +463 -426
  104. plexora-0.0.20/plexora/plugins/figure_builder/static/figureThumbnail.js +231 -0
  105. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureWorkspace.js +230 -2
  106. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figure_builder.css +721 -58
  107. plexora-0.0.20/plexora/plugins/figure_builder/templates/figure_builder/captures.html +45 -0
  108. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/templates/figure_builder/library.html +89 -83
  109. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/templates/figure_builder/workspace.html +1 -1
  110. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/templates/figure_builder/workspace_body.html +10 -1
  111. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/__init__.py +1 -1
  112. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/model.py +29 -72
  113. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/routes.py +18 -27
  114. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/tableops.py +7 -24
  115. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/static/csvGatingList.js +17 -43
  116. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/static/gating.css +62 -103
  117. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/static/gatingApi.js +16 -25
  118. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/static/gatingSidebarController.js +357 -62
  119. plexora-0.0.20/plexora/plugins/gating/templates/gating/panel.html +88 -0
  120. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/__init__.py +6 -5
  121. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/adapters.py +21 -9
  122. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/geojson.py +2 -0
  123. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/operations.py +4 -0
  124. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/repository.py +215 -215
  125. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/routes.py +416 -416
  126. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/schema.py +5 -1
  127. plexora-0.0.20/plexora/plugins/roi/static/roi.css +898 -0
  128. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiRenderer.js +53 -64
  129. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiSidebarController.js +287 -262
  130. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiState.js +4 -0
  131. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiTools.js +49 -13
  132. plexora-0.0.20/plexora/plugins/roi/static/roiTree.js +756 -0
  133. plexora-0.0.20/plexora/plugins/roi/templates/roi/panel.html +216 -0
  134. plexora-0.0.20/plexora/plugins/transcripts/__init__.py +99 -0
  135. plexora-0.0.20/plexora/plugins/transcripts/server/__init__.py +8 -0
  136. plexora-0.0.20/plexora/plugins/transcripts/server/routes.py +585 -0
  137. plexora-0.0.20/plexora/plugins/transcripts/server/xenium.py +261 -0
  138. plexora-0.0.20/plexora/plugins/transcripts/static/transcriptGroupModal.js +635 -0
  139. plexora-0.0.20/plexora/plugins/transcripts/static/transcriptLayer.js +1529 -0
  140. plexora-0.0.20/plexora/plugins/transcripts/static/transcriptPoints.js +892 -0
  141. plexora-0.0.20/plexora/plugins/transcripts/static/transcripts.css +1355 -0
  142. plexora-0.0.20/plexora/plugins/transcripts/static/transcriptsApi.js +127 -0
  143. plexora-0.0.20/plexora/plugins/transcripts/static/transcriptsSidebarController.js +1213 -0
  144. plexora-0.0.20/plexora/plugins/transcripts/templates/transcripts/panel.html +236 -0
  145. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/__init__.py +33 -9
  146. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/csv_adapter.py +25 -12
  147. plexora-0.0.20/plexora/server/models/adapters/flat_table.py +75 -0
  148. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/inspection.py +21 -12
  149. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/centroid_tiles.py +51 -0
  150. plexora-0.0.20/plexora/server/models/consistency.py +215 -0
  151. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/data_model.py +387 -9
  152. plexora-0.0.20/plexora/server/models/datasets.py +430 -0
  153. plexora-0.0.20/plexora/server/models/import_proposal.py +1778 -0
  154. plexora-0.0.20/plexora/server/models/import_sample.py +533 -0
  155. plexora-0.0.20/plexora/server/models/layer_jobs.py +281 -0
  156. plexora-0.0.20/plexora/server/models/layer_sources.py +697 -0
  157. plexora-0.0.20/plexora/server/models/manifest.py +350 -0
  158. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/project.py +799 -48
  159. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/recipes.py +52 -0
  160. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/remote_sessions.py +2 -2
  161. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/remotes.py +7 -0
  162. plexora-0.0.20/plexora/server/models/transcript_tiles.py +1260 -0
  163. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/node/api.py +28 -3
  164. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/node/resources.py +61 -2
  165. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/plugins.py +30 -3
  166. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/__init__.py +9 -1
  167. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/local.py +69 -4
  168. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/operations.py +9 -5
  169. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/data_routes.py +229 -9
  170. plexora-0.0.20/plexora/server/routes/dataset_routes.py +116 -0
  171. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/import_routes.py +292 -362
  172. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/page_routes.py +50 -54
  173. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/project_routes.py +233 -7
  174. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/tool_routes.py +127 -22
  175. plexora-0.0.20/plexora/server/utils/boundary_mask.py +413 -0
  176. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/brightfield.py +7 -0
  177. plexora-0.0.20/plexora/server/utils/colormaps.py +86 -0
  178. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/dicom_wsi.py +3 -0
  179. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/native_dialog.py +1 -1
  180. plexora-0.0.20/plexora/server/utils/ngff_transform.py +399 -0
  181. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/ome_zarr.py +42 -1
  182. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/segmentation_pyramid.py +218 -102
  183. plexora-0.0.20/plexora/server/utils/spatial_scene.py +638 -0
  184. plexora-0.0.20/plexora/server/utils/tiff_series.py +275 -0
  185. plexora-0.0.20/plexora/server/utils/xenium_cells.py +160 -0
  186. plexora-0.0.20/plexora/server/utils/xenium_focus.py +301 -0
  187. plexora-0.0.17/README.md → plexora-0.0.20/plexora.egg-info/PKG-INFO +531 -410
  188. {plexora-0.0.17 → plexora-0.0.20}/plexora.egg-info/SOURCES.txt +106 -7
  189. {plexora-0.0.17 → plexora-0.0.20}/plexora.egg-info/requires.txt +4 -0
  190. {plexora-0.0.17 → plexora-0.0.20}/pyproject.toml +20 -1
  191. {plexora-0.0.17 → plexora-0.0.20}/tests/test_api_dataset.py +186 -160
  192. {plexora-0.0.17 → plexora-0.0.20}/tests/test_app_router.py +36 -0
  193. {plexora-0.0.17 → plexora-0.0.20}/tests/test_app_shell.py +24 -1
  194. plexora-0.0.20/tests/test_blank_frame.py +143 -0
  195. plexora-0.0.20/tests/test_boundary_mask.py +327 -0
  196. {plexora-0.0.17 → plexora-0.0.20}/tests/test_brightfield_routes.py +38 -14
  197. {plexora-0.0.17 → plexora-0.0.20}/tests/test_browse_routes.py +20 -10
  198. plexora-0.0.20/tests/test_carry_over.py +91 -0
  199. {plexora-0.0.17 → plexora-0.0.20}/tests/test_cell_color_layer.py +17 -2
  200. {plexora-0.0.17 → plexora-0.0.20}/tests/test_cell_mode_control.py +142 -3
  201. {plexora-0.0.17 → plexora-0.0.20}/tests/test_centroid_tiles.py +61 -0
  202. plexora-0.0.20/tests/test_channel_auto_revert.py +135 -0
  203. {plexora-0.0.17 → plexora-0.0.20}/tests/test_channel_names_upload.py +125 -0
  204. {plexora-0.0.17 → plexora-0.0.20}/tests/test_cli.py +348 -1
  205. plexora-0.0.20/tests/test_colormaps.py +73 -0
  206. {plexora-0.0.17 → plexora-0.0.20}/tests/test_connect.py +194 -1
  207. {plexora-0.0.17 → plexora-0.0.20}/tests/test_connection_modal.py +7 -6
  208. plexora-0.0.20/tests/test_consistency.py +296 -0
  209. {plexora-0.0.17 → plexora-0.0.20}/tests/test_data_location.py +17 -5
  210. plexora-0.0.20/tests/test_dataset_nav.py +68 -0
  211. plexora-0.0.20/tests/test_dataset_routes.py +317 -0
  212. plexora-0.0.20/tests/test_datasets_api.py +399 -0
  213. plexora-0.0.20/tests/test_datasets_registry.py +294 -0
  214. {plexora-0.0.17 → plexora-0.0.20}/tests/test_dicom_routes.py +5 -4
  215. plexora-0.0.20/tests/test_home_landing.py +243 -0
  216. plexora-0.0.20/tests/test_image_status.py +260 -0
  217. plexora-0.0.20/tests/test_import_costs_nothing.py +164 -0
  218. plexora-0.0.20/tests/test_import_entry_points.py +190 -0
  219. plexora-0.0.20/tests/test_import_from_a_node.py +239 -0
  220. plexora-0.0.20/tests/test_import_help.py +301 -0
  221. plexora-0.0.20/tests/test_import_proposal.py +435 -0
  222. plexora-0.0.20/tests/test_import_sample_routes.py +315 -0
  223. {plexora-0.0.17 → plexora-0.0.20}/tests/test_launch_state.py +5 -0
  224. plexora-0.0.20/tests/test_layer_channel_panel.py +170 -0
  225. plexora-0.0.20/tests/test_layer_draw.py +161 -0
  226. plexora-0.0.20/tests/test_layer_jobs.py +177 -0
  227. plexora-0.0.20/tests/test_layer_sources.py +490 -0
  228. plexora-0.0.20/tests/test_layer_spec.py +408 -0
  229. plexora-0.0.20/tests/test_layer_state.py +83 -0
  230. plexora-0.0.20/tests/test_layer_transform.py +335 -0
  231. plexora-0.0.20/tests/test_layer_visibility.py +125 -0
  232. plexora-0.0.20/tests/test_manifest.py +250 -0
  233. {plexora-0.0.17 → plexora-0.0.20}/tests/test_marker_split.py +42 -40
  234. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_dynamic.py +18 -0
  235. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_routes.py +90 -64
  236. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_table.py +7 -21
  237. plexora-0.0.20/tests/test_open_project.py +207 -0
  238. {plexora-0.0.17 → plexora-0.0.20}/tests/test_page_assets.py +0 -2
  239. {plexora-0.0.17 → plexora-0.0.20}/tests/test_page_routes.py +1 -1
  240. plexora-0.0.20/tests/test_parquet_tables.py +438 -0
  241. {plexora-0.0.17 → plexora-0.0.20}/tests/test_path_picker.py +62 -29
  242. {plexora-0.0.17 → plexora-0.0.20}/tests/test_paths.py +214 -0
  243. {plexora-0.0.17 → plexora-0.0.20}/tests/test_plugin_boundary.py +47 -2
  244. {plexora-0.0.17 → plexora-0.0.20}/tests/test_plugin_css_boundary.py +4 -4
  245. plexora-0.0.20/tests/test_plugin_layers.py +203 -0
  246. {plexora-0.0.17 → plexora-0.0.20}/tests/test_plugins.py +69 -0
  247. {plexora-0.0.17 → plexora-0.0.20}/tests/test_project_edit_routes.py +142 -11
  248. plexora-0.0.20/tests/test_project_layer_routes.py +280 -0
  249. {plexora-0.0.17 → plexora-0.0.20}/tests/test_recipes.py +55 -1
  250. {plexora-0.0.17 → plexora-0.0.20}/tests/test_remote_connect.py +62 -3
  251. {plexora-0.0.17 → plexora-0.0.20}/tests/test_requirements_routes.py +835 -729
  252. {plexora-0.0.17 → plexora-0.0.20}/tests/test_segmentation_mode_routes.py +28 -41
  253. {plexora-0.0.17 → plexora-0.0.20}/tests/test_segmentation_pyramid.py +47 -0
  254. {plexora-0.0.17 → plexora-0.0.20}/tests/test_segmentation_wait.py +13 -9
  255. {plexora-0.0.17 → plexora-0.0.20}/tests/test_settings_page.py +33 -0
  256. {plexora-0.0.17 → plexora-0.0.20}/tests/test_settings_remotes_page.py +22 -9
  257. plexora-0.0.20/tests/test_sidebar_scoping.py +73 -0
  258. plexora-0.0.20/tests/test_single_image_import.py +420 -0
  259. plexora-0.0.20/tests/test_slider.py +259 -0
  260. plexora-0.0.20/tests/test_slider_css.py +231 -0
  261. plexora-0.0.20/tests/test_spatial_scene.py +464 -0
  262. {plexora-0.0.17 → plexora-0.0.20}/tests/test_spatialdata_image_import.py +26 -19
  263. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tiff_hyperstack.py +193 -0
  264. plexora-0.0.20/tests/test_tile_colorize.py +66 -0
  265. plexora-0.0.20/tests/test_toast.py +70 -0
  266. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tool_cards.py +22 -4
  267. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tool_switching.py +10 -5
  268. plexora-0.0.20/tests/test_transcript_tiles.py +912 -0
  269. plexora-0.0.20/tests/test_viewer_error_state.py +64 -0
  270. plexora-0.0.20/tests/test_viewer_loader.py +94 -0
  271. plexora-0.0.20/tests/test_xenium_cells.py +130 -0
  272. plexora-0.0.20/tests/test_xenium_focus.py +195 -0
  273. plexora-0.0.20/tests/test_zarr_write_retry.py +163 -0
  274. plexora-0.0.17/plexora/api/__init__.py +0 -66
  275. plexora-0.0.17/plexora/client/src/css/viewer.css +0 -1827
  276. plexora-0.0.17/plexora/client/src/js/services/importFormValidation.js +0 -618
  277. plexora-0.0.17/plexora/client/src/js/views/openProjectPage.js +0 -231
  278. plexora-0.0.17/plexora/client/src/js/views/segmentationProgress.js +0 -100
  279. plexora-0.0.17/plexora/client/src/js/views/viewerManager.js +0 -636
  280. plexora-0.0.17/plexora/client/templates/index.html +0 -384
  281. plexora-0.0.17/plexora/client/templates/open_project.html +0 -96
  282. plexora-0.0.17/plexora/client/templates/project_columns.html +0 -89
  283. plexora-0.0.17/plexora/client/templates/upload.html +0 -237
  284. plexora-0.0.17/plexora/plugins/cell_explorer/static/cellExplorerContinuous.js +0 -403
  285. plexora-0.0.17/plexora/plugins/gating/templates/gating/panel.html +0 -69
  286. plexora-0.0.17/plexora/plugins/roi/static/roi.css +0 -583
  287. plexora-0.0.17/plexora/plugins/roi/templates/roi/panel.html +0 -240
  288. plexora-0.0.17/plexora/server/routes/quick_view_routes.py +0 -148
  289. plexora-0.0.17/plexora/server/utils/tiff_series.py +0 -98
  290. plexora-0.0.17/tests/test_quick_view_routes.py +0 -296
  291. {plexora-0.0.17 → plexora-0.0.20}/LICENSE +0 -0
  292. {plexora-0.0.17 → plexora-0.0.20}/MANIFEST.in +0 -0
  293. {plexora-0.0.17 → plexora-0.0.20}/plexora/__main__.py +0 -0
  294. {plexora-0.0.17 → plexora-0.0.20}/plexora/_resources.py +0 -0
  295. {plexora-0.0.17 → plexora-0.0.20}/plexora/_url.py +0 -0
  296. {plexora-0.0.17 → plexora-0.0.20}/plexora/api/http.py +0 -0
  297. {plexora-0.0.17 → plexora-0.0.20}/plexora/api/store.py +0 -0
  298. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/354_bundle.js +0 -0
  299. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/354_bundle.js.LICENSE.txt +0 -0
  300. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/418_bundle.js +0 -0
  301. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/418_bundle.js.LICENSE.txt +0 -0
  302. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/693b935cb1f907814be9c6199a68c217.svg +0 -0
  303. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/713c134ff47cd328a5b711526f151082.svg +0 -0
  304. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/770_bundle.js +0 -0
  305. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/ff743f408972e0e96ca9153ed5ae4c83.svg +0 -0
  306. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/dist/vendor_bundle.js.LICENSE.txt +0 -0
  307. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/LICENSE.txt +0 -0
  308. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/canvas-overlay-hd.js +0 -0
  309. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/changelog.txt +0 -0
  310. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/.gitattributes +0 -0
  311. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/LICENSE.txt +0 -0
  312. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/Toolbar.png +0 -0
  313. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/fullpage.psd +0 -0
  314. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/home.psd +0 -0
  315. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/next.psd +0 -0
  316. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/previous.psd +0 -0
  317. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateleft.psd +0 -0
  318. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/rotateright.psd +0 -0
  319. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/Photoshop/zoom.psd +0 -0
  320. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/README.md +0 -0
  321. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_grouphover.png +0 -0
  322. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_hover.png +0 -0
  323. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_pressed.png +0 -0
  324. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/fullpage_rest.png +0 -0
  325. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_grouphover.png +0 -0
  326. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_hover.png +0 -0
  327. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_pressed.png +0 -0
  328. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/home_rest.png +0 -0
  329. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_grouphover.png +0 -0
  330. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_hover.png +0 -0
  331. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_pressed.png +0 -0
  332. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/next_rest.png +0 -0
  333. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_grouphover.png +0 -0
  334. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_hover.png +0 -0
  335. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_pressed.png +0 -0
  336. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/previous_rest.png +0 -0
  337. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_grouphover.png +0 -0
  338. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_hover.png +0 -0
  339. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_pressed.png +0 -0
  340. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateleft_rest.png +0 -0
  341. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_grouphover.png +0 -0
  342. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_hover.png +0 -0
  343. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_pressed.png +0 -0
  344. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/rotateright_rest.png +0 -0
  345. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_grouphover.png +0 -0
  346. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_hover.png +0 -0
  347. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_pressed.png +0 -0
  348. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomin_rest.png +0 -0
  349. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_grouphover.png +0 -0
  350. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_hover.png +0 -0
  351. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_pressed.png +0 -0
  352. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-flat-toolbar-icons-master/images/zoomout_rest.png +0 -0
  353. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/external/openseadragon-bin-2.4.0/openseadragon-scalebar.js +0 -0
  354. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/settings.css +0 -0
  355. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/css/tokens.css +0 -0
  356. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/apple-touch-icon.png +0 -0
  357. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/favicon.ico +0 -0
  358. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/logo.ai +0 -0
  359. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/logo.svg +0 -0
  360. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/logo_with_text.ai +0 -0
  361. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/img/logo_with_text.svg +0 -0
  362. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/appStatus.js +0 -0
  363. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/datasetContext.js +0 -0
  364. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/fileLocation.js +0 -0
  365. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/glRenderer.js +0 -0
  366. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/keyboardShortcuts.js +0 -0
  367. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/logTerminal.js +0 -0
  368. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/numericData.js +0 -0
  369. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/pageBoot.js +0 -0
  370. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/passVariablesToFrontend.js +0 -0
  371. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/placePicker.js +0 -0
  372. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/remoteGlobe.js +0 -0
  373. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/remoteState.js +0 -0
  374. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/resourceRouting.js +0 -0
  375. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/resourceStatus.js +0 -0
  376. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/sessionExpiry.js +0 -0
  377. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/services/simpleEventHandler.js +0 -0
  378. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/vendor.js +0 -0
  379. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/channelList.js +0 -0
  380. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/columnClassifier.js +0 -0
  381. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/coordinateField.js +0 -0
  382. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/jobProgress.js +0 -0
  383. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/miniMap.js +0 -0
  384. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/rainbow.js +0 -0
  385. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/scaleCalibration.js +0 -0
  386. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/segmentationWait.js +0 -0
  387. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/settingsPage.js +0 -0
  388. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/views/tableProgress.js +0 -0
  389. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/js/workers/tileDecoder.js +0 -0
  390. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/src/shaders/vert.glsl +0 -0
  391. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/_fragment.html +0 -0
  392. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/_scale_calibration.html +0 -0
  393. {plexora-0.0.17 → plexora-0.0.20}/plexora/client/templates/_scale_calibration_float.html +0 -0
  394. {plexora-0.0.17 → plexora-0.0.20}/plexora/gcloud.py +0 -0
  395. {plexora-0.0.17 → plexora-0.0.20}/plexora/jupyter.py +0 -0
  396. {plexora-0.0.17 → plexora-0.0.20}/plexora/memory.py +0 -0
  397. {plexora-0.0.17 → plexora-0.0.20}/plexora/notebook_env.py +0 -0
  398. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/__init__.py +0 -0
  399. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/server/__init__.py +0 -0
  400. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/server/state.py +0 -0
  401. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/server/values.py +0 -0
  402. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/server/variables.py +0 -0
  403. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerApi.js +0 -0
  404. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerFigureBridge.js +0 -0
  405. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerLegend.js +0 -0
  406. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerRoiBridge.js +0 -0
  407. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/cell_explorer/static/cellExplorerState.js +0 -0
  408. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/__init__.py +0 -0
  409. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/compose.py +0 -0
  410. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/export.py +0 -0
  411. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/export_jobs.py +0 -0
  412. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/operations.py +0 -0
  413. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/provenance.py +0 -0
  414. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/shapegeom.py +0 -0
  415. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/strokegeom.py +0 -0
  416. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/server/textmetrics.py +0 -0
  417. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureActions.js +0 -0
  418. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureCaptureBoxes.js +0 -0
  419. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureChoiceField.js +0 -0
  420. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureColorField.js +0 -0
  421. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureConfirm.js +0 -0
  422. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureContextBar.js +0 -0
  423. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureContextMenu.js +0 -0
  424. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureDocumentState.js +0 -0
  425. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureExportUi.js +0 -0
  426. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureImagePanel.js +0 -0
  427. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureLibrary.js +0 -0
  428. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureLineDefs.js +0 -0
  429. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figurePanelCompositor.js +0 -0
  430. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figurePointEditor.js +0 -0
  431. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureRichText.js +0 -0
  432. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureSchema.js +0 -0
  433. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureShapeDefs.js +0 -0
  434. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureShapeDrawing.js +0 -0
  435. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureShapeGeometry.js +0 -0
  436. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureStrokeGeometry.js +0 -0
  437. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureTextEditor.js +0 -0
  438. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureTextPanel.js +0 -0
  439. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/figure_builder/static/figureViewOptions.js +0 -0
  440. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/__init__.py +0 -0
  441. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/anndata_gates.py +0 -0
  442. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/server/database.py +0 -0
  443. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/gating/templates/gating/legacy.html +0 -0
  444. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/__init__.py +0 -0
  445. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/geometry.py +0 -0
  446. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/mapping.py +0 -0
  447. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/server/tableops.py +0 -0
  448. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiApi.js +0 -0
  449. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiFigureBridge.js +0 -0
  450. {plexora-0.0.17 → plexora-0.0.20}/plexora/plugins/roi/static/roiGeometry.js +0 -0
  451. {plexora-0.0.17 → plexora-0.0.20}/plexora/proxy.py +0 -0
  452. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/anndata_adapter.py +0 -0
  453. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/base.py +0 -0
  454. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/classify.py +0 -0
  455. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/memory_adapter.py +0 -0
  456. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/adapters/spatialdata_adapter.py +0 -0
  457. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/data_migration.py +0 -0
  458. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/database_model.py +0 -0
  459. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/nodes.py +0 -0
  460. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/models/secret_store.py +0 -0
  461. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/node/app.py +0 -0
  462. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/base.py +0 -0
  463. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/http.py +0 -0
  464. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/memory.py +0 -0
  465. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/node.py +0 -0
  466. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/providers/wire.py +0 -0
  467. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/browse_routes.py +0 -0
  468. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/gcloud_routes.py +0 -0
  469. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/settings_routes.py +0 -0
  470. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/system_routes.py +0 -0
  471. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/routes/transfer_routes.py +0 -0
  472. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/addHEColumns.py +0 -0
  473. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/channel_file.py +0 -0
  474. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/dir_listing.py +0 -0
  475. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/fast_png.py +0 -0
  476. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/file_transfer.py +0 -0
  477. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/fullConversion.py +0 -0
  478. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/memory_pyramid.py +0 -0
  479. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/pre_normalization.py +0 -0
  480. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/smallestenclosingcircle.py +0 -0
  481. {plexora-0.0.17 → plexora-0.0.20}/plexora/server/utils/tiffsurgeon.py +0 -0
  482. {plexora-0.0.17 → plexora-0.0.20}/plexora/server_cli.py +0 -0
  483. {plexora-0.0.17 → plexora-0.0.20}/plexora/test.py +0 -0
  484. {plexora-0.0.17 → plexora-0.0.20}/plexora.egg-info/dependency_links.txt +0 -0
  485. {plexora-0.0.17 → plexora-0.0.20}/plexora.egg-info/entry_points.txt +0 -0
  486. {plexora-0.0.17 → plexora-0.0.20}/plexora.egg-info/top_level.txt +0 -0
  487. {plexora-0.0.17 → plexora-0.0.20}/setup.cfg +0 -0
  488. {plexora-0.0.17 → plexora-0.0.20}/tests/test_anndata_adapter.py +0 -0
  489. {plexora-0.0.17 → plexora-0.0.20}/tests/test_api_store.py +0 -0
  490. {plexora-0.0.17 → plexora-0.0.20}/tests/test_auth_token.py +0 -0
  491. {plexora-0.0.17 → plexora-0.0.20}/tests/test_brightfield_detection.py +0 -0
  492. {plexora-0.0.17 → plexora-0.0.20}/tests/test_brightfield_pipeline.py +0 -0
  493. {plexora-0.0.17 → plexora-0.0.20}/tests/test_brightfield_reader.py +0 -0
  494. {plexora-0.0.17 → plexora-0.0.20}/tests/test_channel_names_modal.py +0 -0
  495. {plexora-0.0.17 → plexora-0.0.20}/tests/test_channel_names_sidecar.py +0 -0
  496. {plexora-0.0.17 → plexora-0.0.20}/tests/test_channel_overview.py +0 -0
  497. {plexora-0.0.17 → plexora-0.0.20}/tests/test_channel_rename_state.py +0 -0
  498. {plexora-0.0.17 → plexora-0.0.20}/tests/test_classify_columns.py +0 -0
  499. {plexora-0.0.17 → plexora-0.0.20}/tests/test_column_classifier_css.py +0 -0
  500. {plexora-0.0.17 → plexora-0.0.20}/tests/test_config_store.py +0 -0
  501. {plexora-0.0.17 → plexora-0.0.20}/tests/test_csv_adapter.py +0 -0
  502. {plexora-0.0.17 → plexora-0.0.20}/tests/test_database_model.py +0 -0
  503. {plexora-0.0.17 → plexora-0.0.20}/tests/test_datalayer_requests.py +0 -0
  504. {plexora-0.0.17 → plexora-0.0.20}/tests/test_derive_anndata_channel_names.py +0 -0
  505. {plexora-0.0.17 → plexora-0.0.20}/tests/test_detect_data_type.py +0 -0
  506. {plexora-0.0.17 → plexora-0.0.20}/tests/test_dicom_assembly.py +0 -0
  507. {plexora-0.0.17 → plexora-0.0.20}/tests/test_dicom_detection.py +0 -0
  508. {plexora-0.0.17 → plexora-0.0.20}/tests/test_dicom_pyramid.py +0 -0
  509. {plexora-0.0.17 → plexora-0.0.20}/tests/test_dicom_registration.py +0 -0
  510. {plexora-0.0.17 → plexora-0.0.20}/tests/test_file_location.py +0 -0
  511. {plexora-0.0.17 → plexora-0.0.20}/tests/test_file_transfer_node.py +0 -0
  512. {plexora-0.0.17 → plexora-0.0.20}/tests/test_gcloud.py +0 -0
  513. {plexora-0.0.17 → plexora-0.0.20}/tests/test_hd_slider_domain.py +0 -0
  514. {plexora-0.0.17 → plexora-0.0.20}/tests/test_icon_names.py +0 -0
  515. {plexora-0.0.17 → plexora-0.0.20}/tests/test_jupyter_viewer.py +0 -0
  516. {plexora-0.0.17 → plexora-0.0.20}/tests/test_label_outlines.py +0 -0
  517. {plexora-0.0.17 → plexora-0.0.20}/tests/test_label_tile_lifecycle.py +0 -0
  518. {plexora-0.0.17 → plexora-0.0.20}/tests/test_mask_without_table.py +0 -0
  519. {plexora-0.0.17 → plexora-0.0.20}/tests/test_memory_adapter.py +0 -0
  520. {plexora-0.0.17 → plexora-0.0.20}/tests/test_memory_datasource.py +0 -0
  521. {plexora-0.0.17 → plexora-0.0.20}/tests/test_memory_pyramid.py +0 -0
  522. {plexora-0.0.17 → plexora-0.0.20}/tests/test_metadata_columns.py +0 -0
  523. {plexora-0.0.17 → plexora-0.0.20}/tests/test_mini_map.py +0 -0
  524. {plexora-0.0.17 → plexora-0.0.20}/tests/test_nav_shortcuts.py +0 -0
  525. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_direct_routing.py +0 -0
  526. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_disconnect.py +0 -0
  527. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_image.py +0 -0
  528. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_image_type.py +0 -0
  529. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_reconnect.py +0 -0
  530. {plexora-0.0.17 → plexora-0.0.20}/tests/test_node_warm_and_cache.py +0 -0
  531. {plexora-0.0.17 → plexora-0.0.20}/tests/test_notebook_env.py +0 -0
  532. {plexora-0.0.17 → plexora-0.0.20}/tests/test_notebook_mode.py +0 -0
  533. {plexora-0.0.17 → plexora-0.0.20}/tests/test_ome_zarr_reader.py +0 -0
  534. {plexora-0.0.17 → plexora-0.0.20}/tests/test_optional_segmentation.py +0 -0
  535. {plexora-0.0.17 → plexora-0.0.20}/tests/test_pixel_size.py +0 -0
  536. {plexora-0.0.17 → plexora-0.0.20}/tests/test_popover_portal.py +0 -0
  537. {plexora-0.0.17 → plexora-0.0.20}/tests/test_prime_hot_code.py +0 -0
  538. {plexora-0.0.17 → plexora-0.0.20}/tests/test_project_record.py +0 -0
  539. {plexora-0.0.17 → plexora-0.0.20}/tests/test_reconnect.py +0 -0
  540. {plexora-0.0.17 → plexora-0.0.20}/tests/test_refresh_dataset.py +0 -0
  541. {plexora-0.0.17 → plexora-0.0.20}/tests/test_register_anndata_datasource.py +0 -0
  542. {plexora-0.0.17 → plexora-0.0.20}/tests/test_register_image_datasource.py +0 -0
  543. {plexora-0.0.17 → plexora-0.0.20}/tests/test_register_zarr_image_datasource.py +0 -0
  544. {plexora-0.0.17 → plexora-0.0.20}/tests/test_remote_globe.py +0 -0
  545. {plexora-0.0.17 → plexora-0.0.20}/tests/test_remote_health.py +0 -0
  546. {plexora-0.0.17 → plexora-0.0.20}/tests/test_remote_state.py +0 -0
  547. {plexora-0.0.17 → plexora-0.0.20}/tests/test_rename_channels.py +0 -0
  548. {plexora-0.0.17 → plexora-0.0.20}/tests/test_resource_status_banner.py +0 -0
  549. {plexora-0.0.17 → plexora-0.0.20}/tests/test_segmentation_mapping.py +0 -0
  550. {plexora-0.0.17 → plexora-0.0.20}/tests/test_session_expiry.py +0 -0
  551. {plexora-0.0.17 → plexora-0.0.20}/tests/test_session_walltime.py +0 -0
  552. {plexora-0.0.17 → plexora-0.0.20}/tests/test_shared_roots.py +0 -0
  553. {plexora-0.0.17 → plexora-0.0.20}/tests/test_spatialdata_adapter.py +0 -0
  554. {plexora-0.0.17 → plexora-0.0.20}/tests/test_staged_progress.py +0 -0
  555. {plexora-0.0.17 → plexora-0.0.20}/tests/test_table_progress.py +0 -0
  556. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tile_url.py +0 -0
  557. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tool_assets.py +0 -0
  558. {plexora-0.0.17 → plexora-0.0.20}/tests/test_tool_coexistence.py +0 -0
  559. {plexora-0.0.17 → plexora-0.0.20}/tests/test_transfer_routes.py +0 -0
  560. {plexora-0.0.17 → plexora-0.0.20}/tests/test_unreachable_node.py +0 -0
  561. {plexora-0.0.17 → plexora-0.0.20}/tests/test_url_helpers.py +0 -0
  562. {plexora-0.0.17 → plexora-0.0.20}/tests/test_view_menu.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexora
3
- Version: 0.0.17
3
+ Version: 0.0.20
4
4
  Summary: OpenSeadragon-based cellular image viewing and analysis tool.
5
5
  License-Expression: LicenseRef-Plexora-Academic-1.0
6
6
  Requires-Python: <3.14,>=3.12
@@ -14,6 +14,7 @@ Requires-Dist: itsdangerous>=2.2
14
14
  Requires-Dist: Jinja2>=3.1
15
15
  Requires-Dist: numpy>=2.0
16
16
  Requires-Dist: ome-types>=0.6.3
17
+ Requires-Dist: opencv-python-headless>=5.0.0.93
17
18
  Requires-Dist: openpyxl>=3.1
18
19
  Requires-Dist: orjson>=3.11
19
20
  Requires-Dist: pandas>=3.0.5
@@ -39,6 +40,8 @@ Requires-Dist: jupyter-server-proxy; extra == "jupyter"
39
40
  Provides-Extra: dev
40
41
  Requires-Dist: pytest; extra == "dev"
41
42
  Requires-Dist: pytest-randomly>=4.1.0; extra == "dev"
43
+ Provides-Extra: spatial
44
+ Requires-Dist: pyarrow>=14; extra == "spatial"
42
45
  Provides-Extra: wsi
43
46
  Requires-Dist: openslide-python>=1.3; extra == "wsi"
44
47
  Requires-Dist: openslide-bin>=4.0; extra == "wsi"
@@ -109,8 +112,9 @@ order:
109
112
 
110
113
  | Rule | Location |
111
114
  | --- | --- |
112
- | `--data-dir` / `PLEXORA_DATA_PATH` | whatever you pass |
115
+ | `--data-dir` / `PLEXORA_DATA_PATH` | whatever you pass, for that one command |
113
116
  | a recorded setting | `plexora config set data-dir <path>` |
117
+ | a directory suggested by a connection | the saved profile that launched the session, used only if nothing above answered |
114
118
  | default | `%LOCALAPPDATA%\plexora`, `~/Library/Application Support/plexora`, or `~/.local/share/plexora` |
115
119
 
116
120
  It never depends on the directory you started from, and never lives inside the
@@ -126,6 +130,75 @@ derived image pyramids are large, and the default sits on your home or system
126
130
  volume. `plexora config set data-dir` records the choice permanently; the
127
131
  environment variable overrides it for one run.
128
132
 
133
+ ### Datasets: grouping projects that belong together
134
+
135
+ One image is one project. A **dataset** is the folder above that -- a patient
136
+ cohort, a TMA series, one imaging run -- and it is nothing more than a grouping:
137
+ it holds project names, not data. Deleting a dataset releases the projects in
138
+ it and touches no file of theirs, and taking a project out of one is not
139
+ deleting the project.
140
+
141
+ On the Open Project page, datasets appear as folders. Open one to see what is
142
+ in it, drag cards onto one to move them, and drag them onto *All projects* to
143
+ take them out again. Select several with the tick in a card's corner, or with
144
+ ctrl-click and shift-click, and move them together. Searching looks everywhere
145
+ and tells you which dataset each result lives in.
146
+
147
+ The same thing from Python or the terminal:
148
+
149
+ ```python
150
+ import plexora
151
+
152
+ plexora.create_dataset("Melanoma Cohort", images=[
153
+ "sample1.ome.tif", "sample2.ome.tif", "sample3.ome.tif",
154
+ ])
155
+ ```
156
+
157
+ ```bash
158
+ plexora dataset create melanoma_cohort --images sample1.tif sample2.tif
159
+ plexora dataset list
160
+ plexora dataset show melanoma_cohort
161
+ ```
162
+
163
+ ### Register first, configure as you go
164
+
165
+ **An image is the only thing a project must have.** Everything else -- a
166
+ segmentation mask, a feature table, which table inside a `.zarr` store, which
167
+ column holds the cell id -- is optional at registration, and Plexora asks for
168
+ what it needs at the moment something needs it rather than up front:
169
+
170
+ ```python
171
+ plexora.create_project("slide.ome.tif") # complete already
172
+ plexora.create_project("slide.ome.tif", data="store.zarr") # table undecided
173
+ ```
174
+
175
+ The second is a valid project: it opens, it shows the image, and the first
176
+ tool that wants a table asks which one to load, with the path already filled
177
+ in. Answer once and nothing asks again.
178
+
179
+ Anything you *do* know can be said at registration, and is then recorded as an
180
+ answer rather than a guess -- so nothing asks you to confirm it later:
181
+
182
+ ```python
183
+ plexora.create_dataset("Melanoma Cohort", projects=[
184
+ {"image": "sample1.ome.tif", "segmentation": "sample1_mask.tif",
185
+ "data": "sample1.csv", "cell_id": "CellID",
186
+ "x": "X_centroid", "y": "Y_centroid"},
187
+ {"image": "sample2.ome.tif"},
188
+ ])
189
+
190
+ plexora.configure_project("sample2", data="sample2.csv", cell_id="CellID")
191
+ plexora.project_manifest("sample2") # what it has, and what is still open
192
+ ```
193
+
194
+ The same options exist as flags:
195
+
196
+ ```bash
197
+ plexora project create slide.ome.tif --data cells.csv --cell-id CellID \
198
+ --markers CD3 CD8 --dataset melanoma_cohort
199
+ plexora project show slide # every question, and whether it is answered
200
+ ```
201
+
129
202
  ### Shared projects
130
203
 
131
204
  Several people on one workstation or login node can share a directory of common