sapiopycommons 2025.8.15a706__py3-none-any.whl → 2025.8.18a709__py3-none-any.whl
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.
Potentially problematic release.
This version of sapiopycommons might be problematic. Click here for more details.
- sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.py +43 -0
- sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.pyi +31 -0
- sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py +123 -0
- sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi +598 -0
- sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/plan/converter/proto/converter_pb2.py +50 -0
- sapiopycommons/ai/api/plan/converter/proto/converter_pb2.pyi +61 -0
- sapiopycommons/ai/api/plan/converter/proto/converter_pb2_grpc.py +149 -0
- sapiopycommons/ai/api/plan/item/proto/item_container_pb2.py +55 -0
- sapiopycommons/ai/api/plan/item/proto/item_container_pb2.pyi +88 -0
- sapiopycommons/ai/api/plan/item/proto/item_container_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/plan/proto/step_output_pb2.py +45 -0
- sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi +42 -0
- sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/plan/proto/step_pb2.py +43 -0
- sapiopycommons/ai/api/plan/proto/step_pb2.pyi +43 -0
- sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/plan/script/proto/script_pb2.py +59 -0
- sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi +102 -0
- sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py +153 -0
- sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py +41 -0
- sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi +35 -0
- sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py +24 -0
- sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py +75 -0
- sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi +237 -0
- sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py +154 -0
- sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py +39 -0
- sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi +32 -0
- sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py +24 -0
- sapiopycommons/ai/converter_service_base.py +116 -0
- sapiopycommons/ai/protobuf_utils.py +504 -0
- sapiopycommons/ai/server.py +104 -0
- sapiopycommons/ai/test_client.py +341 -0
- sapiopycommons/ai/tool_service_base.py +923 -0
- sapiopycommons/callbacks/callback_util.py +16 -26
- sapiopycommons/flowcyto/flow_cyto.py +24 -2
- sapiopycommons/general/accession_service.py +28 -2
- sapiopycommons/multimodal/multimodal.py +24 -2
- sapiopycommons/webhook/webservice_handlers.py +1 -1
- {sapiopycommons-2025.8.15a706.dist-info → sapiopycommons-2025.8.18a709.dist-info}/METADATA +2 -2
- {sapiopycommons-2025.8.15a706.dist-info → sapiopycommons-2025.8.18a709.dist-info}/RECORD +44 -12
- sapiopycommons/ai/tool_of_tools.py +0 -917
- sapiopycommons/files/assay_plate_reader.py +0 -93
- sapiopycommons/files/file_text_converter.py +0 -207
- {sapiopycommons-2025.8.15a706.dist-info → sapiopycommons-2025.8.18a709.dist-info}/WHEEL +0 -0
- {sapiopycommons-2025.8.15a706.dist-info → sapiopycommons-2025.8.18a709.dist-info}/licenses/LICENSE +0 -0
|
@@ -1765,11 +1765,8 @@ class CallbackUtil:
|
|
|
1765
1765
|
blank_result_handling = BlankResultHandling.REPEAT
|
|
1766
1766
|
def not_blank_func(r: list[DataRecord]) -> bool:
|
|
1767
1767
|
return bool(r)
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
not_blank_func, blank_result_handling,
|
|
1771
|
-
repeat_message, cancel_message)
|
|
1772
|
-
return self.rec_handler.wrap_models(response, wrapper_type)
|
|
1768
|
+
return self.__send_dialog_blank_results(request, self.callback.show_input_selection_dialog, not_blank_func,
|
|
1769
|
+
blank_result_handling, repeat_message, cancel_message)
|
|
1773
1770
|
|
|
1774
1771
|
# FR-47690: Deprecated the require_authentication parameter.
|
|
1775
1772
|
# noinspection PyUnusedLocal
|
|
@@ -1815,8 +1812,7 @@ class CallbackUtil:
|
|
|
1815
1812
|
return response
|
|
1816
1813
|
|
|
1817
1814
|
def request_file(self, title: str, exts: Iterable[str] | None = None,
|
|
1818
|
-
show_image_editor: bool = False, show_camera_button: bool = False,
|
|
1819
|
-
*, enforce_file_extensions: bool = True) -> tuple[str, bytes]:
|
|
1815
|
+
show_image_editor: bool = False, show_camera_button: bool = False) -> tuple[str, bytes]:
|
|
1820
1816
|
"""
|
|
1821
1817
|
Request a single file from the user.
|
|
1822
1818
|
|
|
@@ -1826,8 +1822,6 @@ class CallbackUtil:
|
|
|
1826
1822
|
:param show_image_editor: Whether the user will see an image editor when image is uploaded in this file prompt.
|
|
1827
1823
|
:param show_camera_button: Whether the user will be able to use camera to take a picture as an upload request,
|
|
1828
1824
|
rather than selecting an existing file.
|
|
1829
|
-
:param enforce_file_extensions: If true, then the file extensions provided in the exts parameter will be
|
|
1830
|
-
enforced. If false, then the user may upload any file type.
|
|
1831
1825
|
:return: The file name and bytes of the uploaded file.
|
|
1832
1826
|
"""
|
|
1833
1827
|
# If no extensions were provided, use an empty list for the extensions instead.
|
|
@@ -1847,12 +1841,11 @@ class CallbackUtil:
|
|
|
1847
1841
|
file_path: str = self.__send_dialog(request, self.callback.show_file_dialog, data_sink=do_consume)
|
|
1848
1842
|
|
|
1849
1843
|
# Verify that each of the file given matches the expected extension(s).
|
|
1850
|
-
self.__verify_file(file_path, sink.data, exts
|
|
1844
|
+
self.__verify_file(file_path, sink.data, exts)
|
|
1851
1845
|
return file_path, sink.data
|
|
1852
1846
|
|
|
1853
1847
|
def request_files(self, title: str, exts: Iterable[str] | None = None,
|
|
1854
|
-
show_image_editor: bool = False, show_camera_button: bool = False,
|
|
1855
|
-
*, enforce_file_extensions: bool = True) -> dict[str, bytes]:
|
|
1848
|
+
show_image_editor: bool = False, show_camera_button: bool = False) -> dict[str, bytes]:
|
|
1856
1849
|
"""
|
|
1857
1850
|
Request multiple files from the user.
|
|
1858
1851
|
|
|
@@ -1862,8 +1855,6 @@ class CallbackUtil:
|
|
|
1862
1855
|
:param show_image_editor: Whether the user will see an image editor when image is uploaded in this file prompt.
|
|
1863
1856
|
:param show_camera_button: Whether the user will be able to use camera to take a picture as an upload request,
|
|
1864
1857
|
rather than selecting an existing file.
|
|
1865
|
-
:param enforce_file_extensions: If true, then the file extensions provided in the exts parameter will be
|
|
1866
|
-
enforced. If false, then the user may upload any file type.
|
|
1867
1858
|
:return: A dictionary of file name to file bytes for each file the user uploaded.
|
|
1868
1859
|
"""
|
|
1869
1860
|
# If no extensions were provided, use an empty list for the extensions instead.
|
|
@@ -1879,7 +1870,7 @@ class CallbackUtil:
|
|
|
1879
1870
|
for file_path in file_paths:
|
|
1880
1871
|
sink = InMemoryRecordDataSink(self.user)
|
|
1881
1872
|
sink.consume_client_callback_file_path_data(file_path)
|
|
1882
|
-
self.__verify_file(file_path, sink.data, exts
|
|
1873
|
+
self.__verify_file(file_path, sink.data, exts)
|
|
1883
1874
|
ret_dict.update({file_path: sink.data})
|
|
1884
1875
|
|
|
1885
1876
|
return ret_dict
|
|
@@ -1896,17 +1887,16 @@ class CallbackUtil:
|
|
|
1896
1887
|
"""
|
|
1897
1888
|
if file_path is None or len(file_path) == 0 or file_bytes is None or len(file_bytes) == 0:
|
|
1898
1889
|
raise SapioUserErrorException("Empty file provided or file unable to be read.")
|
|
1899
|
-
if
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
+ (",".join(allowed_extensions)))
|
|
1890
|
+
if allowed_extensions:
|
|
1891
|
+
matches: bool = False
|
|
1892
|
+
for ext in allowed_extensions:
|
|
1893
|
+
# FR-47690: Changed to a case-insensitive match.
|
|
1894
|
+
if file_path.casefold().endswith("." + ext.lstrip(".").casefold()):
|
|
1895
|
+
matches = True
|
|
1896
|
+
break
|
|
1897
|
+
if matches is False:
|
|
1898
|
+
raise SapioUserErrorException("Unsupported file type. Expecting the following extension(s): "
|
|
1899
|
+
+ (",".join(allowed_extensions)))
|
|
1910
1900
|
|
|
1911
1901
|
def write_file(self, file_name: str, file_data: str | bytes) -> None:
|
|
1912
1902
|
"""
|
|
@@ -4,16 +4,38 @@ from weakref import WeakValueDictionary
|
|
|
4
4
|
|
|
5
5
|
from databind.json import dumps
|
|
6
6
|
from sapiopylib.rest.User import SapioUser
|
|
7
|
-
from sapiopylib.rest.utils.singletons import SapioContextManager
|
|
8
7
|
|
|
9
8
|
from sapiopycommons.flowcyto.flowcyto_data import FlowJoWorkspaceInputJson, UploadFCSInputJson, \
|
|
10
9
|
ComputeFlowStatisticsInputJson
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
class FlowCytoManager
|
|
12
|
+
class FlowCytoManager:
|
|
14
13
|
"""
|
|
15
14
|
This manager includes flow cytometry analysis tools that would require FlowCyto license to use.
|
|
16
15
|
"""
|
|
16
|
+
_user: SapioUser
|
|
17
|
+
|
|
18
|
+
__instances: WeakValueDictionary[SapioUser, FlowCytoManager] = WeakValueDictionary()
|
|
19
|
+
__initialized: bool
|
|
20
|
+
|
|
21
|
+
def __new__(cls, user: SapioUser):
|
|
22
|
+
"""
|
|
23
|
+
Observes singleton pattern per record model manager object.
|
|
24
|
+
|
|
25
|
+
:param user: The user that will make the webservice request to the application.
|
|
26
|
+
"""
|
|
27
|
+
obj = cls.__instances.get(user)
|
|
28
|
+
if not obj:
|
|
29
|
+
obj = object.__new__(cls)
|
|
30
|
+
obj.__initialized = False
|
|
31
|
+
cls.__instances[user] = obj
|
|
32
|
+
return obj
|
|
33
|
+
|
|
34
|
+
def __init__(self, user: SapioUser):
|
|
35
|
+
if self.__initialized:
|
|
36
|
+
return
|
|
37
|
+
self._user = user
|
|
38
|
+
self.__initialized = True
|
|
17
39
|
|
|
18
40
|
def create_flowjo_workspace(self, workspace_input: FlowJoWorkspaceInputJson) -> int:
|
|
19
41
|
"""
|
|
@@ -5,7 +5,6 @@ from typing import Any
|
|
|
5
5
|
from weakref import WeakValueDictionary
|
|
6
6
|
|
|
7
7
|
from sapiopylib.rest.User import SapioUser
|
|
8
|
-
from sapiopylib.rest.utils.singletons import SapioContextManager
|
|
9
8
|
|
|
10
9
|
_STR_JAVA_TYPE = "java.lang.String"
|
|
11
10
|
_INT_JAVA_TYPE = "java.lang.Integer"
|
|
@@ -275,10 +274,37 @@ class AccessionServiceDescriptor:
|
|
|
275
274
|
}
|
|
276
275
|
|
|
277
276
|
|
|
278
|
-
class AccessionService
|
|
277
|
+
class AccessionService:
|
|
279
278
|
"""
|
|
280
279
|
Provides Sapio Foundations Accession Service functionalities.
|
|
281
280
|
"""
|
|
281
|
+
_user: SapioUser
|
|
282
|
+
|
|
283
|
+
__instances: WeakValueDictionary[SapioUser, AccessionService] = WeakValueDictionary()
|
|
284
|
+
__initialized: bool
|
|
285
|
+
|
|
286
|
+
@property
|
|
287
|
+
def user(self) -> SapioUser:
|
|
288
|
+
return self._user
|
|
289
|
+
|
|
290
|
+
def __new__(cls, user: SapioUser):
|
|
291
|
+
"""
|
|
292
|
+
Observes singleton pattern per record model manager object.
|
|
293
|
+
|
|
294
|
+
:param user: The user that will make the webservice request to the application.
|
|
295
|
+
"""
|
|
296
|
+
obj = cls.__instances.get(user)
|
|
297
|
+
if not obj:
|
|
298
|
+
obj = object.__new__(cls)
|
|
299
|
+
obj.__initialized = False
|
|
300
|
+
cls.__instances[user] = obj
|
|
301
|
+
return obj
|
|
302
|
+
|
|
303
|
+
def __init__(self, user: SapioUser):
|
|
304
|
+
if self.__initialized:
|
|
305
|
+
return
|
|
306
|
+
self._user = user
|
|
307
|
+
self.__initialized = True
|
|
282
308
|
|
|
283
309
|
def accession_with_config(self, data_type_name: str, data_field_name: str, num_ids: int) -> list[str]:
|
|
284
310
|
"""
|
|
@@ -7,13 +7,35 @@ from weakref import WeakValueDictionary
|
|
|
7
7
|
from databind.json import dumps, loads
|
|
8
8
|
from sapiopylib.rest.User import SapioUser
|
|
9
9
|
from sapiopylib.rest.pojo.DataRecord import DataRecord
|
|
10
|
-
from sapiopylib.rest.utils.singletons import SapioContextManager
|
|
11
10
|
|
|
12
11
|
from sapiopycommons.general.exceptions import SapioException
|
|
13
12
|
from sapiopycommons.multimodal.multimodal_data import *
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
class MultiModalManager
|
|
15
|
+
class MultiModalManager:
|
|
16
|
+
_user: SapioUser
|
|
17
|
+
|
|
18
|
+
__instances: WeakValueDictionary[SapioUser, MultiModalManager] = WeakValueDictionary()
|
|
19
|
+
__initialized: bool
|
|
20
|
+
|
|
21
|
+
def __new__(cls, user: SapioUser):
|
|
22
|
+
"""
|
|
23
|
+
Observes singleton pattern per record model manager object.
|
|
24
|
+
|
|
25
|
+
:param user: The user that will make the webservice request to the application.
|
|
26
|
+
"""
|
|
27
|
+
obj = cls.__instances.get(user)
|
|
28
|
+
if not obj:
|
|
29
|
+
obj = object.__new__(cls)
|
|
30
|
+
obj.__initialized = False
|
|
31
|
+
cls.__instances[user] = obj
|
|
32
|
+
return obj
|
|
33
|
+
|
|
34
|
+
def __init__(self, user:SapioUser):
|
|
35
|
+
if self.__initialized:
|
|
36
|
+
return
|
|
37
|
+
self._user = user
|
|
38
|
+
self.__initialized = True
|
|
17
39
|
|
|
18
40
|
def load_image_data(self, request: ImageDataRequestPojo) -> list[str]:
|
|
19
41
|
"""
|
|
@@ -140,7 +140,7 @@ class AbstractWebserviceHandler(AbstractWebhookHandler):
|
|
|
140
140
|
# Get the login credentials from the headers.
|
|
141
141
|
auth: str = headers.get("Authorization")
|
|
142
142
|
if auth and auth.startswith("Basic "):
|
|
143
|
-
credentials: list[str] = b64decode(auth.split("Basic ")[1]).decode().split(":")
|
|
143
|
+
credentials: list[str] = b64decode(auth.split("Basic ")[1]).decode().split(":", 1)
|
|
144
144
|
user = self.basic_auth(url, credentials[0], credentials[1])
|
|
145
145
|
elif auth and auth.startswith("Bearer "):
|
|
146
146
|
user = self.bearer_token_auth(url, auth.split("Bearer ")[1])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: sapiopycommons
|
|
3
|
-
Version: 2025.8.
|
|
3
|
+
Version: 2025.8.18a709
|
|
4
4
|
Summary: Official Sapio Python API Utilities Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/sapiosciences
|
|
6
6
|
Author-email: Jonathan Steck <jsteck@sapiosciences.com>, Yechen Qiao <yqiao@sapiosciences.com>
|
|
@@ -17,7 +17,7 @@ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
|
17
17
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
18
|
Requires-Python: >=3.10
|
|
19
19
|
Requires-Dist: databind>=4.5
|
|
20
|
-
Requires-Dist: sapiopylib>=2025.
|
|
20
|
+
Requires-Dist: sapiopylib>=2025.4.17.264
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
22
|
|
|
23
23
|
|
|
@@ -1,8 +1,42 @@
|
|
|
1
1
|
sapiopycommons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
sapiopycommons/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
sapiopycommons/ai/
|
|
3
|
+
sapiopycommons/ai/converter_service_base.py,sha256=w4_PXjlk7_F5AUMlPUhKJ9gZlxY9RNG6yH9cDDFROuo,4620
|
|
4
|
+
sapiopycommons/ai/protobuf_utils.py,sha256=QdYcelIvOIKBV5u_KR_Fh06kZ0eJDIb5ZVnfqV01FeE,24601
|
|
5
|
+
sapiopycommons/ai/server.py,sha256=2-Q49-JJgiymOdRJ4EWj0aKGXnly5D2Hrjo3fklNl_8,4222
|
|
6
|
+
sapiopycommons/ai/test_client.py,sha256=gWmY4rT0F9hzXv0hQ_iQqDBfTRKWh_QKwWeGyU-E9ks,14582
|
|
7
|
+
sapiopycommons/ai/tool_service_base.py,sha256=GR1z9qxvStlLYhBLu0W-6OI9TfNDVtYQX-I_BJiRYCg,43921
|
|
8
|
+
sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.py,sha256=YcZjb_YM-XeLErM8hEC_S7vGMVGvcXAMGs2b-u5zvOE,2377
|
|
9
|
+
sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2.pyi,sha256=FwtXmNAf7iYGEFm4kbqb04v77jNHbZg18ZmEDhle_bU,1444
|
|
10
|
+
sapiopycommons/ai/api/fielddefinitions/proto/fields_pb2_grpc.py,sha256=wPImJPdCUZNVEVoUWzsba9kGIXjEKPdUkawP5SnVyiU,932
|
|
11
|
+
sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.py,sha256=nWC91vR2pMgMUyNOZRZ0YiuL1-8ntnjXLqt1daxsD34,20869
|
|
12
|
+
sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2.pyi,sha256=U5zXrbBxsWilLTsRWJd1TqjdjLKFsr3enF9OJ8GfyWw,34028
|
|
13
|
+
sapiopycommons/ai/api/fielddefinitions/proto/velox_field_def_pb2_grpc.py,sha256=4vD4jWanaJ4uclSkFmS7JIz_lwYXDWBE3DomuPjUyII,941
|
|
14
|
+
sapiopycommons/ai/api/plan/converter/proto/converter_pb2.py,sha256=dT8X_D18RRAMY5PA7tHVGlbwhH2JIH6CrkuXb6iwL4E,3401
|
|
15
|
+
sapiopycommons/ai/api/plan/converter/proto/converter_pb2.pyi,sha256=LazSPiQ0fCmI_lZ5lm-871XMU-PTlAtfbjta8Aqp3Mk,4104
|
|
16
|
+
sapiopycommons/ai/api/plan/converter/proto/converter_pb2_grpc.py,sha256=EvhojTeQHuLNrK1HVolQbcOsa-sJDM8ExLqqu4F_a6U,6515
|
|
17
|
+
sapiopycommons/ai/api/plan/item/proto/item_container_pb2.py,sha256=qph1v5-16l_87aKH-aQixGjQthg_xXF7Lm66DCfFWIA,3822
|
|
18
|
+
sapiopycommons/ai/api/plan/item/proto/item_container_pb2.pyi,sha256=K8Y0dvNY7V0MLOegC1ODXqc1g4lH1NY70EGH2UWN9vQ,4118
|
|
19
|
+
sapiopycommons/ai/api/plan/item/proto/item_container_pb2_grpc.py,sha256=nNTWRJEg7MglgC1AsVBsdXo0Q1sYvvsucwX3KpzYiOw,933
|
|
20
|
+
sapiopycommons/ai/api/plan/proto/step_output_pb2.py,sha256=JpBZSyoYyPTEaaXjW664PeJNK0zxV1mly_kp5re42z4,2661
|
|
21
|
+
sapiopycommons/ai/api/plan/proto/step_output_pb2.pyi,sha256=yuxOYnDZ9DRuu-TLzaKOW_B4LUiYxTrNc2AbssXg4kE,2022
|
|
22
|
+
sapiopycommons/ai/api/plan/proto/step_output_pb2_grpc.py,sha256=vDRY_pIIshQ4UpdW-ra1F5zBmntdsW2scySkMAA-zfc,925
|
|
23
|
+
sapiopycommons/ai/api/plan/proto/step_pb2.py,sha256=nL976oTFdX4ih4gg7_J-8eFoGB69tFvERB2gT3L2-6s,2439
|
|
24
|
+
sapiopycommons/ai/api/plan/proto/step_pb2.pyi,sha256=QPIcsjcUvEGQkdZMUMiVzFFNDl8yOUe_qJtf5XEp5Ck,2062
|
|
25
|
+
sapiopycommons/ai/api/plan/proto/step_pb2_grpc.py,sha256=DgiBYFvTNiDG_2a9Tpt5iel2fRUfePZWP41fZTC-KWk,918
|
|
26
|
+
sapiopycommons/ai/api/plan/script/proto/script_pb2.py,sha256=iUjALwM3e-mwuwVTc_N0k9CF4KkwniIPcxLiQK3fOR0,5200
|
|
27
|
+
sapiopycommons/ai/api/plan/script/proto/script_pb2.pyi,sha256=IsaOnZVLD91PQwQcjDxMpfcYlI6U9cwEIMl770m6HgI,6204
|
|
28
|
+
sapiopycommons/ai/api/plan/script/proto/script_pb2_grpc.py,sha256=RkShHpe_d5EJHk3qp-or1JpvSEqShb7cCiaXnJ2YSww,6931
|
|
29
|
+
sapiopycommons/ai/api/plan/tool/proto/entry_pb2.py,sha256=2q87XYhq_SOADuhoIyr1CHQC3SZiupjSjJLNp1np-hA,2141
|
|
30
|
+
sapiopycommons/ai/api/plan/tool/proto/entry_pb2.pyi,sha256=R5apvEaENIKKG2DbqwxjgI9arkqYq928xe04WNtTniM,2365
|
|
31
|
+
sapiopycommons/ai/api/plan/tool/proto/entry_pb2_grpc.py,sha256=YKkX2kexERUx4asLCShufSnZhgf339Zk8Xw1FAgLfHQ,924
|
|
32
|
+
sapiopycommons/ai/api/plan/tool/proto/tool_pb2.py,sha256=WzE4-S1KXJC26RlubLkiDa3GnEhZ0pbxE3V4AuFicZM,8255
|
|
33
|
+
sapiopycommons/ai/api/plan/tool/proto/tool_pb2.pyi,sha256=YU7CJkij037QJNR8VhheC-ouukUD13vyLt18YXR1HYA,16763
|
|
34
|
+
sapiopycommons/ai/api/plan/tool/proto/tool_pb2_grpc.py,sha256=68u5E1ZKha5frP5GuY8Ad-c0c79vBhtfnj5Q4u-8xOY,6982
|
|
35
|
+
sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.py,sha256=WKzNi-d5dqeJbmEXUVE5qJ4Qm34HmsqRXRtXih382g8,2100
|
|
36
|
+
sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2.pyi,sha256=vLYA8Tkzq2AwgVadoUp5vAg4HgGlgga0kzeS3e_XkCQ,1621
|
|
37
|
+
sapiopycommons/ai/api/session/proto/sapio_conn_info_pb2_grpc.py,sha256=2W0YzT4SfnGTLq98AdvkyNM0n75Tkl8DervPS1ryGao,932
|
|
4
38
|
sapiopycommons/callbacks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
sapiopycommons/callbacks/callback_util.py,sha256=
|
|
39
|
+
sapiopycommons/callbacks/callback_util.py,sha256=OuPJ1o6jcDQ7qV-dxrjAkJerGbVI9_9P-xu0r3ODaMM,153008
|
|
6
40
|
sapiopycommons/callbacks/field_builder.py,sha256=rnIP-RJafk3mZlAx1eJ8a0eSW9Ps_L6_WadCmusnENw,38772
|
|
7
41
|
sapiopycommons/chem/IndigoMolecules.py,sha256=7ucCaRMLu1zfH2uPIvXwRTSdpNcS03O1P9p_O-5B4xQ,5110
|
|
8
42
|
sapiopycommons/chem/Molecules.py,sha256=mVqPn32MPMjF0iZas-5MFkS-upIdoW5OB72KKZmJRJA,12523
|
|
@@ -25,19 +59,17 @@ sapiopycommons/eln/experiment_tags.py,sha256=7-fpOiSqrjbXmWIJhEhaxMgLsVCPAtKqH8x
|
|
|
25
59
|
sapiopycommons/eln/plate_designer.py,sha256=XFazSvhTbSy47t80-jc2tyx_-fQ_IUjKd18JQKEFcsY,13939
|
|
26
60
|
sapiopycommons/eln/step_creation.py,sha256=CFkGC-SxwAQpQlcs_obqLAVgmsNxKSGMqMtO_E6IVmw,10171
|
|
27
61
|
sapiopycommons/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
sapiopycommons/files/assay_plate_reader.py,sha256=3c2PQiiAbc2QJU9ZfNLzcTmvJrUwsbkIHO7R6R52xGU,3020
|
|
29
62
|
sapiopycommons/files/complex_data_loader.py,sha256=T39veNhvYl6j_uZjIIJ8Mk5Aa7otR5RB-g8XlAdkksA,1421
|
|
30
63
|
sapiopycommons/files/file_bridge.py,sha256=vKbqxPexi15epr_-_qLrEfYoxNxB031mXN92iVtOMqE,9511
|
|
31
64
|
sapiopycommons/files/file_bridge_handler.py,sha256=SEYDIQhSCmjI6qyLdDJE8JVKSd0WYvF7JvAq_Ahp9Do,25503
|
|
32
65
|
sapiopycommons/files/file_data_handler.py,sha256=f96MlkMuQhUCi4oLnzJK5AiuElCp5jLI8_sJkZVwpws,36779
|
|
33
|
-
sapiopycommons/files/file_text_converter.py,sha256=Gaj_divTiKXWd6flDOgrxNXpcn9fDWqxX6LUG0joePk,7516
|
|
34
66
|
sapiopycommons/files/file_util.py,sha256=djouyGjsYgWzjz2OBRnSeMDgj6NrsJUm1a2J93J8Wco,31915
|
|
35
67
|
sapiopycommons/files/file_validator.py,sha256=ryg22-93csmRO_Pv0ZpWphNkB74xWZnHyJ23K56qLj0,28761
|
|
36
68
|
sapiopycommons/files/file_writer.py,sha256=hACVl0duCjP28gJ1NPljkjagNCLod0ygUlPbvUmRDNM,17605
|
|
37
|
-
sapiopycommons/flowcyto/flow_cyto.py,sha256=
|
|
69
|
+
sapiopycommons/flowcyto/flow_cyto.py,sha256=vs9WhXXKz3urpjL8QKSk56B-NSmQR3O3x_WFBKoeO10,3227
|
|
38
70
|
sapiopycommons/flowcyto/flowcyto_data.py,sha256=mYKFuLbtpJ-EsQxLGtu4tNHVlygTxKixgJxJqD68F58,2596
|
|
39
71
|
sapiopycommons/general/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
-
sapiopycommons/general/accession_service.py,sha256=
|
|
72
|
+
sapiopycommons/general/accession_service.py,sha256=3e__bVs7CYZ1CduLlGA9plnK7nCtdy7GXjCrNObPFgo,13484
|
|
41
73
|
sapiopycommons/general/aliases.py,sha256=VwnWf_P803pcteoAIs0DkLScVChCS5XNgryTp8FzaNc,14696
|
|
42
74
|
sapiopycommons/general/audit_log.py,sha256=sQAMcJx0cNkgZm7nTZSaGPxWvHG0_x6dBtU0jESavb4,9131
|
|
43
75
|
sapiopycommons/general/custom_report_util.py,sha256=9elLEUSgfM0gli8nRPz1uYkhaXN4Vnx3piSiNHv5IBs,19156
|
|
@@ -49,7 +81,7 @@ sapiopycommons/general/popup_util.py,sha256=HKILegU1uCL_6abNlNL0Wn3xgX2JNa_kJeq7
|
|
|
49
81
|
sapiopycommons/general/sapio_links.py,sha256=YkcVKNLrSGoM7tCCXBAsIbIxylctwdcEyhePrRMODe0,2859
|
|
50
82
|
sapiopycommons/general/storage_util.py,sha256=ovmK_jN7v09BoX07XxwShpBUC5WYQOM7dbKV_VeLXJU,8892
|
|
51
83
|
sapiopycommons/general/time_util.py,sha256=jU1urPoZRv6evNucR0-288EyT4PrsDpCr-H1-7BKq9A,12363
|
|
52
|
-
sapiopycommons/multimodal/multimodal.py,sha256=
|
|
84
|
+
sapiopycommons/multimodal/multimodal.py,sha256=PFaGJPbKvW__tnxb8KkgkJZOKjQdgxF_kGfD5chet1s,6779
|
|
53
85
|
sapiopycommons/multimodal/multimodal_data.py,sha256=0BeVPr9HaC0hNTF1v1phTIKGruvNnwerHsD994qJKBg,15099
|
|
54
86
|
sapiopycommons/processtracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
87
|
sapiopycommons/processtracking/custom_workflow_handler.py,sha256=eYKdYlwo8xx-6AkB_iPUBNV9yDoNvW2h_Sm3i8JpmRU,25844
|
|
@@ -65,8 +97,8 @@ sapiopycommons/sftpconnect/sftp_builder.py,sha256=lFK3FeXk-sFLefW0hqY8WGUQDeYiGa
|
|
|
65
97
|
sapiopycommons/webhook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
98
|
sapiopycommons/webhook/webhook_context.py,sha256=D793uLsb1691SalaPnBUk3rOSxn_hYLhdvkaIxjNXss,1909
|
|
67
99
|
sapiopycommons/webhook/webhook_handlers.py,sha256=7o_wXOruhT9auNh8OfhJAh4WhhiPKij67FMBSpGPICc,39939
|
|
68
|
-
sapiopycommons/webhook/webservice_handlers.py,sha256=
|
|
69
|
-
sapiopycommons-2025.8.
|
|
70
|
-
sapiopycommons-2025.8.
|
|
71
|
-
sapiopycommons-2025.8.
|
|
72
|
-
sapiopycommons-2025.8.
|
|
100
|
+
sapiopycommons/webhook/webservice_handlers.py,sha256=cvW6Mk_110BzYqkbk63Kg7jWrltBCDALOlkJRu8h4VQ,14300
|
|
101
|
+
sapiopycommons-2025.8.18a709.dist-info/METADATA,sha256=4LuB8NKufCC7kpqgpmUVicDfKGk_xrNUsnNzBtgE2ws,3143
|
|
102
|
+
sapiopycommons-2025.8.18a709.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
103
|
+
sapiopycommons-2025.8.18a709.dist-info/licenses/LICENSE,sha256=HyVuytGSiAUQ6ErWBHTqt1iSGHhLmlC8fO7jTCuR8dU,16725
|
|
104
|
+
sapiopycommons-2025.8.18a709.dist-info/RECORD,,
|