sapiopycommons 2025.2.21a446__tar.gz → 2025.2.25a448__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.

Potentially problematic release.


This version of sapiopycommons might be problematic. Click here for more details.

Files changed (85) hide show
  1. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/ai/tool_of_tools.py +10 -6
  4. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/.gitignore +0 -0
  5. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/LICENSE +0 -0
  6. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/README.md +0 -0
  7. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/__init__.py +0 -0
  8. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/ai/__init__.py +0 -0
  9. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/ai/biopython_helper.py +0 -0
  10. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/ai/rdkit_helper.py +0 -0
  11. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/callbacks/__init__.py +0 -0
  12. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  13. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  14. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  15. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/chem/Molecules.py +0 -0
  16. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/chem/__init__.py +0 -0
  17. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/customreport/__init__.py +0 -0
  18. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  19. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/customreport/column_builder.py +0 -0
  20. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  21. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/customreport/term_builder.py +0 -0
  22. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/datatype/__init__.py +0 -0
  23. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  24. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/datatype/data_fields.py +0 -0
  25. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  26. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/eln/__init__.py +0 -0
  27. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  28. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  29. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/eln/plate_designer.py +0 -0
  30. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/__init__.py +0 -0
  31. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  32. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_bridge.py +0 -0
  33. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  34. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_data_handler.py +0 -0
  35. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_util.py +0 -0
  36. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_validator.py +0 -0
  37. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/files/file_writer.py +0 -0
  38. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  39. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  40. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/__init__.py +0 -0
  41. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/accession_service.py +0 -0
  42. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/aliases.py +0 -0
  43. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/audit_log.py +0 -0
  44. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/custom_report_util.py +0 -0
  45. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/directive_util.py +0 -0
  46. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/exceptions.py +0 -0
  47. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/popup_util.py +0 -0
  48. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/sapio_links.py +0 -0
  49. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/storage_util.py +0 -0
  50. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/general/time_util.py +0 -0
  51. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  52. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  53. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/processtracking/__init__.py +0 -0
  54. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  55. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  56. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  57. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  58. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/rules/__init__.py +0 -0
  59. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  60. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  61. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/samples/aliquot.py +0 -0
  62. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  63. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  64. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/webhook/__init__.py +0 -0
  65. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  66. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  67. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  68. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  69. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/_do_not_add_init_py_here +0 -0
  70. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/accession_test.py +0 -0
  71. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/aliquot_test.py +0 -0
  72. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/bio_reg_test.py +0 -0
  73. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/chem_test.py +0 -0
  74. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/chem_test_curation_queue.py +0 -0
  75. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/curation_queue_test.sdf +0 -0
  76. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/data_type_models.py +0 -0
  77. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  78. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  79. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  80. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto/8_color_ICS.wsp +0 -0
  81. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  82. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/flowcyto_test.py +0 -0
  83. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/kappa.chains.fasta +0 -0
  84. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/mafft_test.py +0 -0
  85. {sapiopycommons-2025.2.21a446 → sapiopycommons-2025.2.25a448}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.2.21a446
3
+ Version: 2025.2.25a448
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>
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sapiopycommons"
7
- version='2025.02.21a446'
7
+ version='2025.02.25a448'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -190,19 +190,22 @@ class AiHelper:
190
190
  # Contextual info.
191
191
  user: SapioUser
192
192
  exp_id: int
193
+ timeout: int
193
194
 
194
195
  # Managers.
195
196
  dr_man: DataRecordManager
196
197
  eln_man: ElnManager
197
198
  dt_man: DataTypeManager
198
199
 
199
- def __init__(self, user: SapioUser, exp_id: int):
200
+ def __init__(self, user: SapioUser, exp_id: int, timeout: int = 120):
200
201
  """
201
202
  :param user: The user to send the requests from.
202
203
  :param exp_id: The ID of the experiment to create the entries in.
204
+ :param timeout: The timeout in seconds to use for requests.
203
205
  """
204
206
  self.user = user
205
207
  self.exp_id = exp_id
208
+ self.timeout = timeout
206
209
 
207
210
  self.dr_man = DataRecordManager(self.user)
208
211
  self.eln_man = ElnManager(self.user)
@@ -218,7 +221,7 @@ class AiHelper:
218
221
  :return: The Response object returned by the endpoint.
219
222
  """
220
223
  headers = create_tot_headers(self.user.url, self.user.username, self.user.password, self.exp_id, tab_prefix)
221
- response = requests.post(url, json=payload, headers=headers)
224
+ response = requests.post(url, json=payload, headers=headers, timeout=self.timeout)
222
225
  response.raise_for_status()
223
226
  return response
224
227
 
@@ -232,7 +235,7 @@ class AiHelper:
232
235
  :return: The Response object returned by the endpoint.
233
236
  """
234
237
  headers = create_tot_headers(self.user.url, self.user.username, self.user.password, self.exp_id, tab_prefix)
235
- response = requests.get(url, params=params, headers=headers)
238
+ response = requests.get(url, params=params, headers=headers, timeout=self.timeout)
236
239
  response.raise_for_status()
237
240
  return response
238
241
 
@@ -331,8 +334,9 @@ class AiHelper:
331
334
  :param n: The unique name of the field.
332
335
  """
333
336
  link_out: dict[str, str] = {}
334
- if v.startswith("https://") or v.startswith("http://"):
335
- link_out["Link"] = "[[LINK_OUT]]"
337
+ if isinstance(v, str):
338
+ if v.startswith("https://") or v.startswith("http://"):
339
+ link_out["Link"] = "[[LINK_OUT]]"
336
340
  return fb.string_field(n, display_name=k, link_out=link_out)
337
341
 
338
342
  def update_field_length(k: str, v: Any, lengths: dict[str, int]) -> None:
@@ -390,7 +394,7 @@ class AiHelper:
390
394
  if field_type == FieldType.BOOLEAN and isinstance(value, bool):
391
395
  continue
392
396
  # Integers and floats both fit in DOUBLE fields, but floats can't be NaN or infinity.
393
- if field_type == FieldType.DOUBLE:
397
+ if field_type == FieldType.DOUBLE and not isinstance(value, bool):
394
398
  if isinstance(value, int):
395
399
  continue
396
400
  if isinstance(value, float) and not math.isnan(value) and not math.isinf(value):