aignostics 0.2.34__tar.gz → 0.2.37__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 (148) hide show
  1. {aignostics-0.2.34 → aignostics-0.2.37}/PKG-INFO +5 -5
  2. {aignostics-0.2.34 → aignostics-0.2.37}/examples/notebook.py +1 -1
  3. {aignostics-0.2.34 → aignostics-0.2.37}/pyproject.toml +10 -9
  4. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/_service.py +4 -4
  5. aignostics-0.2.37/src/aignostics/bucket/_settings.py +86 -0
  6. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/annotate.groovy +1 -1
  7. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_settings.py +1 -1
  8. aignostics-0.2.34/src/aignostics/bucket/_settings.py +0 -53
  9. {aignostics-0.2.34 → aignostics-0.2.37}/.gitignore +0 -0
  10. {aignostics-0.2.34 → aignostics-0.2.37}/LICENSE +0 -0
  11. {aignostics-0.2.34 → aignostics-0.2.37}/README.md +0 -0
  12. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/.openapi-generator/FILES +0 -0
  13. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/.openapi-generator/VERSION +0 -0
  14. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/api/public_api.py +0 -0
  15. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/api_client.py +0 -0
  16. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/api_response.py +0 -0
  17. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/configuration.py +0 -0
  18. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/exceptions.py +0 -0
  19. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/__init__.py +0 -0
  20. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/application_read_response.py +0 -0
  21. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/application_run_status.py +0 -0
  22. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/application_version_read_response.py +0 -0
  23. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/http_validation_error.py +0 -0
  24. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/input_artifact_creation_request.py +0 -0
  25. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/input_artifact_read_response.py +0 -0
  26. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/item_creation_request.py +0 -0
  27. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/item_result_read_response.py +0 -0
  28. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/item_status.py +0 -0
  29. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/output_artifact_read_response.py +0 -0
  30. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/output_artifact_result_read_response.py +0 -0
  31. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/output_artifact_scope.py +0 -0
  32. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/payload_input_artifact.py +0 -0
  33. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/payload_item.py +0 -0
  34. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/payload_output_artifact.py +0 -0
  35. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/run_creation_request.py +0 -0
  36. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/run_creation_response.py +0 -0
  37. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/run_read_response.py +0 -0
  38. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/transfer_urls.py +0 -0
  39. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/user_payload.py +0 -0
  40. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/validation_error.py +0 -0
  41. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/models/validation_error_loc_inner.py +0 -0
  42. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/aignx/codegen/rest.py +0 -0
  43. {aignostics-0.2.34 → aignostics-0.2.37}/codegen/out/docs/PublicApi.md +0 -0
  44. {aignostics-0.2.34 → aignostics-0.2.37}/examples/__init__.py +0 -0
  45. {aignostics-0.2.34 → aignostics-0.2.37}/examples/e2e.py +0 -0
  46. {aignostics-0.2.34 → aignostics-0.2.37}/examples/notebook.ipynb +0 -0
  47. {aignostics-0.2.34 → aignostics-0.2.37}/examples/script.py +0 -0
  48. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/__init__.py +0 -0
  49. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/__init__.py +0 -0
  50. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_cli.py +0 -0
  51. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_frame.py +0 -0
  52. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_page_application_describe.py +0 -0
  53. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_page_application_run_describe.py +0 -0
  54. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_page_builder.py +0 -0
  55. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_page_index.py +0 -0
  56. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/_utils.py +0 -0
  57. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/canceled.lottie +0 -0
  58. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/done.lottie +0 -0
  59. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/empty.lottie +0 -0
  60. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/error.lottie +0 -0
  61. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/error_alt.lottie +0 -0
  62. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/home-card-1.png +0 -0
  63. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/home-card-2.png +0 -0
  64. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/home-card-3.png +0 -0
  65. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/home-card-4.png +0 -0
  66. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/home-card-5.png +0 -0
  67. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/image-not-found.png +0 -0
  68. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/pending.lottie +0 -0
  69. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/pending_alt.lottie +0 -0
  70. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/ruo.png +0 -0
  71. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_gui/assets/ruo.svg +0 -0
  72. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_service.py +0 -0
  73. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_settings.py +0 -0
  74. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/application/_utils.py +0 -0
  75. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/__init__.py +0 -0
  76. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/_cli.py +0 -0
  77. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/_gui.py +0 -0
  78. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/assets/Google-Cloud-logo.png +0 -0
  79. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/bucket/assets/Google-Cloud-logo.svg +0 -0
  80. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/cli.py +0 -0
  81. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/constants.py +0 -0
  82. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/__init__.py +0 -0
  83. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/_cli.py +0 -0
  84. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/_gui.py +0 -0
  85. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/_idc_index.py +0 -0
  86. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/_service.py +0 -0
  87. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/dataset/assets/NIH-IDC-logo.svg +0 -0
  88. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/gui/__init__.py +0 -0
  89. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/gui/_frame.py +0 -0
  90. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/gui/_theme.py +0 -0
  91. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/gui/assets/cabin-v27-latin-regular.woff2 +0 -0
  92. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/gui/assets/logo.png +0 -0
  93. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/notebook/__init__.py +0 -0
  94. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/notebook/_gui.py +0 -0
  95. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/notebook/_notebook.py +0 -0
  96. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/notebook/_service.py +0 -0
  97. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/notebook/assets/python.lottie +0 -0
  98. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/__init__.py +0 -0
  99. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_authentication.py +0 -0
  100. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_client.py +0 -0
  101. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_constants.py +0 -0
  102. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_messages.py +0 -0
  103. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_service.py +0 -0
  104. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_settings.py +0 -0
  105. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/_utils.py +0 -0
  106. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/resources/__init__.py +0 -0
  107. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/resources/applications.py +0 -0
  108. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/resources/runs.py +0 -0
  109. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/platform/resources/utils.py +0 -0
  110. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/__init__.py +0 -0
  111. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/_cli.py +0 -0
  112. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/_gui.py +0 -0
  113. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/_service.py +0 -0
  114. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/_settings.py +0 -0
  115. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/assets/download.lottie +0 -0
  116. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/assets/microscope.lottie +0 -0
  117. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/qupath/assets/update.lottie +0 -0
  118. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/__init__.py +0 -0
  119. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/_cli.py +0 -0
  120. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/_exceptions.py +0 -0
  121. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/_gui.py +0 -0
  122. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/_service.py +0 -0
  123. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/_settings.py +0 -0
  124. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/system/assets/system.lottie +0 -0
  125. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/.vendored/bottle.py +0 -0
  126. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/__init__.py +0 -0
  127. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_cli.py +0 -0
  128. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_console.py +0 -0
  129. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_constants.py +0 -0
  130. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_di.py +0 -0
  131. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_fs.py +0 -0
  132. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_gui.py +0 -0
  133. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_health.py +0 -0
  134. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_log.py +0 -0
  135. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_logfire.py +0 -0
  136. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_notebook.py +0 -0
  137. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_process.py +0 -0
  138. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_sentry.py +0 -0
  139. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/_service.py +0 -0
  140. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/utils/boot.py +0 -0
  141. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/__init__.py +0 -0
  142. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_cli.py +0 -0
  143. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_gui.py +0 -0
  144. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_openslide_handler.py +0 -0
  145. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_pydicom_handler.py +0 -0
  146. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_service.py +0 -0
  147. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/_utils.py +0 -0
  148. {aignostics-0.2.34 → aignostics-0.2.37}/src/aignostics/wsi/assets/fallback.png +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aignostics
3
- Version: 0.2.34
3
+ Version: 0.2.37
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/
@@ -49,7 +49,7 @@ Classifier: Programming Language :: Python :: 3.13
49
49
  Classifier: Typing :: Typed
50
50
  Requires-Python: <4.0,>=3.11
51
51
  Requires-Dist: appdirs>=1.4.4
52
- Requires-Dist: boto3>=1.38.27
52
+ Requires-Dist: boto3>=1.38.30
53
53
  Requires-Dist: click
54
54
  Requires-Dist: dicom-validator>=0.7.1
55
55
  Requires-Dist: dicomweb-client[gcp]>=0.59.2
@@ -64,8 +64,8 @@ Requires-Dist: idc-index-data==21.0.0
64
64
  Requires-Dist: ijson>=3.4.0
65
65
  Requires-Dist: jsf>=0.11.2
66
66
  Requires-Dist: jsonschema>=4.24.0
67
- Requires-Dist: logfire[system-metrics]>=3.16.1
68
- Requires-Dist: nicegui[native]>=2.18.0
67
+ Requires-Dist: logfire[system-metrics]>=3.17.0
68
+ Requires-Dist: nicegui[native]>=2.19.0
69
69
  Requires-Dist: openslide-bin>=4.0.0.8
70
70
  Requires-Dist: openslide-python>=1.4.2
71
71
  Requires-Dist: opentelemetry-instrumentation-fastapi>=0.53b0
@@ -77,7 +77,7 @@ Requires-Dist: opentelemetry-instrumentation-tornado>=0.53b0
77
77
  Requires-Dist: opentelemetry-instrumentation-urllib3>=0.53b0
78
78
  Requires-Dist: opentelemetry-instrumentation-urllib>=0.53b0
79
79
  Requires-Dist: packaging
80
- Requires-Dist: pandas<=2.2.4
80
+ Requires-Dist: pandas<=2.3.0
81
81
  Requires-Dist: platformdirs
82
82
  Requires-Dist: psutil
83
83
  Requires-Dist: psutil>=7.0.0
@@ -2,7 +2,7 @@
2
2
  # requires-python = ">=3.13"
3
3
  # dependencies = [
4
4
  # "marimo",
5
- # "aignostics==0.2.34",
5
+ # "aignostics==0.2.37",
6
6
  # ]
7
7
  # ///
8
8
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aignostics"
3
- version = "0.2.34"
3
+ version = "0.2.37"
4
4
  description = "🔬 Python SDK providing access to the Aignostics Platform. Includes Aignostics Launchpad (Desktop Application), Aignostics CLI (Command-Line Interface), example notebooks, and Aignostics Client Library."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -75,8 +75,8 @@ requires-python = ">=3.11, <4.0"
75
75
  dependencies = [
76
76
  # From Template
77
77
  "fastapi[standard,all]>=0.115.12",
78
- "logfire[system-metrics]>=3.16.1",
79
- "nicegui[native]>=2.18.0",
78
+ "logfire[system-metrics]>=3.17.0",
79
+ "nicegui[native]>=2.19.0",
80
80
  "opentelemetry-instrumentation-fastapi>=0.53b0",
81
81
  "opentelemetry-instrumentation-httpx>=0.53b0",
82
82
  "opentelemetry-instrumentation-jinja2>=0.53b0",
@@ -93,7 +93,7 @@ dependencies = [
93
93
  "uptime>=3.0.1",
94
94
  # Custom
95
95
  "appdirs>=1.4.4",
96
- "boto3>=1.38.27",
96
+ "boto3>=1.38.30",
97
97
  "dicom-validator>=0.7.1",
98
98
  "dicomweb-client[gcp]>=0.59.2",
99
99
  "google-cloud-storage>=2.12.0",
@@ -122,7 +122,7 @@ dependencies = [
122
122
  'duckdb>=0.10.0,<=1.2.1',
123
123
  "idc-index-data==21.0.0",
124
124
  "packaging",
125
- "pandas<=2.2.4",
125
+ "pandas<=2.3.0",
126
126
  "platformdirs",
127
127
  "psutil",
128
128
  "pyarrow",
@@ -150,7 +150,7 @@ dev = [
150
150
  "detect-secrets>=1.5.0",
151
151
  "enum-tools>=0.13.0",
152
152
  "furo>=2024.8.6",
153
- "git-cliff>=2.8.0",
153
+ "git-cliff>=2.9.1",
154
154
  "matplotlib>=3.10.1",
155
155
  "mypy>=1.16.0",
156
156
  "nox[uv]>=2025.5.1",
@@ -158,7 +158,7 @@ dev = [
158
158
  "pip-licenses @ git+https://github.com/neXenio/pip-licenses.git@master", # https://github.com/raimon49/pip-licenses/pull/224
159
159
  "pre-commit>=4.1.0",
160
160
  "pyright>=1.1.401",
161
- "pytest>=8.3.5",
161
+ "pytest>=8.4.0",
162
162
  "pytest-asyncio>=1.0.0",
163
163
  "pytest-cov>=6.1.1",
164
164
  "pytest-docker>=3.2.2",
@@ -184,7 +184,7 @@ dev = [
184
184
  "swagger-plugin-for-sphinx>=5.1.0",
185
185
  "tomli>=2.1.0",
186
186
  "types-pyyaml>=6.0.12.20250516",
187
- "types-requests>=2.32.0.20250515",
187
+ "types-requests>=2.32.0.20250602",
188
188
  "watchdog>=6.0.0",
189
189
  ]
190
190
 
@@ -216,6 +216,7 @@ override-dependencies = [ # https://github.com/astral-sh/uv/issues/4422
216
216
  "h11>=0.16.0", # CVE-2025-47287
217
217
  "rfc3987; sys_platform == 'never'", # GPLv3
218
218
  "tornado>=6.5.0", # CVE-2025-47287
219
+ "jupyter-core>=5.8.1", # CVE-2025-30167
219
220
  ]
220
221
 
221
222
  [tool.ruff]
@@ -355,7 +356,7 @@ source = ["src/"]
355
356
 
356
357
 
357
358
  [tool.bumpversion]
358
- current_version = "0.2.34"
359
+ current_version = "0.2.37"
359
360
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
360
361
  serialize = ["{major}.{minor}.{patch}"]
361
362
  search = "{current_version}"
@@ -28,13 +28,13 @@ class Service(BaseService):
28
28
  """Initialize service."""
29
29
  super().__init__(Settings)
30
30
 
31
- def info(self) -> dict[str, Any]: # noqa: PLR6301
31
+ def info(self) -> dict[str, Any]:
32
32
  """Determine info of this service.
33
33
 
34
34
  Returns:
35
35
  dict[str,Any]: The info of this service.
36
36
  """
37
- return {}
37
+ return {"settings": self._settings.model_dump()}
38
38
 
39
39
  def health(self) -> Health: # noqa: PLR6301
40
40
  """Determine health of this service.
@@ -97,7 +97,7 @@ class Service(BaseService):
97
97
  url = self._get_s3_client().generate_presigned_url(
98
98
  ClientMethod="put_object",
99
99
  Params={"Bucket": self._settings.name if bucket_name is None else bucket_name, "Key": object_key},
100
- ExpiresIn=3600,
100
+ ExpiresIn=self._settings.upload_signed_url_expiration_seconds,
101
101
  )
102
102
  return cast("str", url)
103
103
 
@@ -163,7 +163,7 @@ class Service(BaseService):
163
163
  url = self._get_s3_client().generate_presigned_url(
164
164
  ClientMethod="get_object",
165
165
  Params={"Bucket": self._settings.name if bucket_name is None else bucket_name, "Key": object_key},
166
- ExpiresIn=3600,
166
+ ExpiresIn=self._settings.download_signed_url_expiration_seconds,
167
167
  )
168
168
  return cast("str", url)
169
169
 
@@ -0,0 +1,86 @@
1
+ """Settings of the bucket module."""
2
+
3
+ from enum import StrEnum
4
+ from typing import Annotated
5
+
6
+ from pydantic import Field, PlainSerializer, SecretStr
7
+ from pydantic_settings import SettingsConfigDict
8
+
9
+ from ..utils import OpaqueSettings, __env_file__, __project_name__ # noqa: TID252
10
+
11
+
12
+ class BucketProtocol(StrEnum):
13
+ GS = "gs"
14
+ S3 = "s3"
15
+
16
+
17
+ class Settings(OpaqueSettings):
18
+ """Settings."""
19
+
20
+ model_config = SettingsConfigDict(
21
+ env_prefix=f"{__project_name__.upper()}_BUCKET_",
22
+ extra="ignore",
23
+ env_file=__env_file__,
24
+ env_file_encoding="utf-8",
25
+ )
26
+
27
+ protocol: Annotated[
28
+ BucketProtocol,
29
+ Field(
30
+ description=("Protocol to access the cloud bucket, default is gs"),
31
+ default="gs",
32
+ ),
33
+ ]
34
+
35
+ name: Annotated[
36
+ str,
37
+ Field(description=("Name of the cloud bucket")),
38
+ ]
39
+
40
+ region_name: Annotated[
41
+ str,
42
+ Field(description=("Region of the cloud bucket"), default="EUROPE-WEST3"),
43
+ ]
44
+
45
+ hmac_access_key_id: Annotated[
46
+ SecretStr,
47
+ PlainSerializer(func=OpaqueSettings.serialize_sensitive_info, return_type=str, when_used="always"),
48
+ Field(description=("HMAC access key ID of the cloud bucket")),
49
+ ]
50
+
51
+ hmac_secret_access_key: Annotated[
52
+ SecretStr,
53
+ PlainSerializer(func=OpaqueSettings.serialize_sensitive_info, return_type=str, when_used="always"),
54
+ Field(description=("HMAC secret access key of the cloud bucket")),
55
+ ]
56
+
57
+ upload_signed_url_expiration_seconds: Annotated[
58
+ int,
59
+ Field(
60
+ description=("Expiration time for signed URLs created and used by the Python SDK to upload to the bucket."),
61
+ default=2
62
+ * 60
63
+ * 60, # The Python SDK creates the signed upload URLs immediately before uploading, so 2h is sufficient.
64
+ ge=60, # Minimum expiration time is 60 seconds, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html
65
+ le=7
66
+ * 24
67
+ * 60
68
+ * 60, # Limit to 7 days as this is the max e.g. at AWS, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html
69
+ ),
70
+ ]
71
+
72
+ download_signed_url_expiration_seconds: Annotated[
73
+ int,
74
+ Field(
75
+ description=(
76
+ "Expiration time of the signed URLs provided by the Python SDK to the platform on submitting "
77
+ "application runs."
78
+ ),
79
+ default=7 * 24 * 60 * 60, # The platform queues application runs, so we set a gracious default of 7d.
80
+ ge=60, # Minimum expiration time is 60 seconds, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html
81
+ le=7
82
+ * 24
83
+ * 60
84
+ * 60, # Limit to 7 days as this is the max e.g. at AWS, see https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html
85
+ ),
86
+ ]
@@ -76,4 +76,4 @@ features.each { feature ->
76
76
 
77
77
  // Add objects to hierarchy
78
78
  addObjects(newObjects)
79
- println("Added " + newObjects.size() + " annotations from GeoJSON")
79
+ println("Added " + newObjects.size() + " annotations from GeoJSON")
@@ -34,7 +34,7 @@ class OpaqueSettings(BaseSettings):
34
34
  def serialize_sensitive_info(input_value: SecretStr, info: FieldSerializationInfo) -> str | None:
35
35
  if not input_value:
36
36
  return None
37
- if info.context.get(UNHIDE_SENSITIVE_INFO, False): # type: ignore
37
+ if info.context and info.context.get(UNHIDE_SENSITIVE_INFO, False):
38
38
  return input_value.get_secret_value()
39
39
  return str(input_value)
40
40
 
@@ -1,53 +0,0 @@
1
- """Settings of the bucket module."""
2
-
3
- from enum import StrEnum
4
- from typing import Annotated
5
-
6
- from pydantic import Field, SecretStr
7
- from pydantic_settings import SettingsConfigDict
8
-
9
- from ..utils import OpaqueSettings, __env_file__, __project_name__ # noqa: TID252
10
-
11
-
12
- class BucketProtocol(StrEnum):
13
- GS = "gs"
14
- S3 = "s3"
15
-
16
-
17
- class Settings(OpaqueSettings):
18
- """Settings."""
19
-
20
- model_config = SettingsConfigDict(
21
- env_prefix=f"{__project_name__.upper()}_BUCKET_",
22
- extra="ignore",
23
- env_file=__env_file__,
24
- env_file_encoding="utf-8",
25
- )
26
-
27
- protocol: Annotated[
28
- BucketProtocol,
29
- Field(
30
- description=("Protocol to access the cloud bucket, default is gs"),
31
- default="gs",
32
- ),
33
- ]
34
-
35
- name: Annotated[
36
- str,
37
- Field(description=("Name of the cloud bucket")),
38
- ]
39
-
40
- region_name: Annotated[
41
- str,
42
- Field(description=("Region of the cloud bucket"), default="EUROPE-WEST3"),
43
- ]
44
-
45
- hmac_access_key_id: Annotated[
46
- SecretStr,
47
- Field(description=("HMAC access key ID of the cloud bucket")),
48
- ]
49
-
50
- hmac_secret_access_key: Annotated[
51
- SecretStr,
52
- Field(description=("HMAC secret access key of the cloud bucket")),
53
- ]
File without changes
File without changes
File without changes
File without changes