sapiopycommons 2025.3.6a451__tar.gz → 2025.3.6a453__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 (84) hide show
  1. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/ai/tool_of_tools.py +12 -0
  4. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/recordmodel/record_handler.py +14 -4
  5. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/.gitignore +0 -0
  6. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/LICENSE +0 -0
  7. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/README.md +0 -0
  8. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/__init__.py +0 -0
  9. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/ai/__init__.py +0 -0
  10. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/callbacks/__init__.py +0 -0
  11. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  12. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  13. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  14. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/chem/Molecules.py +0 -0
  15. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/chem/__init__.py +0 -0
  16. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/customreport/__init__.py +0 -0
  17. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  18. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/customreport/column_builder.py +0 -0
  19. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  20. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/customreport/term_builder.py +0 -0
  21. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/datatype/__init__.py +0 -0
  22. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  23. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/datatype/data_fields.py +0 -0
  24. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  25. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/eln/__init__.py +0 -0
  26. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  27. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  28. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/eln/plate_designer.py +0 -0
  29. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/__init__.py +0 -0
  30. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  31. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_bridge.py +0 -0
  32. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  33. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_data_handler.py +0 -0
  34. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_util.py +0 -0
  35. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_validator.py +0 -0
  36. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/files/file_writer.py +0 -0
  37. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  38. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  39. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/__init__.py +0 -0
  40. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/accession_service.py +0 -0
  41. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/aliases.py +0 -0
  42. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/audit_log.py +0 -0
  43. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/custom_report_util.py +0 -0
  44. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/directive_util.py +0 -0
  45. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/exceptions.py +0 -0
  46. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/html_formatter.py +0 -0
  47. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/popup_util.py +0 -0
  48. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/sapio_links.py +0 -0
  49. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/storage_util.py +0 -0
  50. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/general/time_util.py +0 -0
  51. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  52. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  53. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/processtracking/__init__.py +0 -0
  54. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  55. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  56. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  57. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/rules/__init__.py +0 -0
  58. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  59. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  60. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/samples/aliquot.py +0 -0
  61. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  62. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  63. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/webhook/__init__.py +0 -0
  64. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  65. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  66. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  67. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  68. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/_do_not_add_init_py_here +0 -0
  69. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/accession_test.py +0 -0
  70. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/aliquot_test.py +0 -0
  71. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/bio_reg_test.py +0 -0
  72. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/chem_test.py +0 -0
  73. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/chem_test_curation_queue.py +0 -0
  74. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/curation_queue_test.sdf +0 -0
  75. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/data_type_models.py +0 -0
  76. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  77. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  78. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  79. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto/8_color_ICS.wsp +0 -0
  80. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  81. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/flowcyto_test.py +0 -0
  82. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/kappa.chains.fasta +0 -0
  83. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/mafft_test.py +0 -0
  84. {sapiopycommons-2025.3.6a451 → sapiopycommons-2025.3.6a453}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.3.6a451
3
+ Version: 2025.3.6a453
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.03.06a451'
7
+ version='2025.03.06a453'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -529,6 +529,8 @@ class ToolOfToolsHelper:
529
529
  # Stuff created by this helper.
530
530
  _initialized: bool
531
531
  """Whether a tab for this tool has been initialized."""
532
+ _new_tab: bool
533
+ """Whether a new tab was created for this tool."""
532
534
  tab: ElnExperimentTab
533
535
  """The tab that contains the tool's entries."""
534
536
  description_entry: ElnEntryStep | None
@@ -567,6 +569,15 @@ class ToolOfToolsHelper:
567
569
  self.eln_man = ElnManager(self.user)
568
570
 
569
571
  self._initialized = False
572
+ self._new_tab = False
573
+
574
+ @property
575
+ def is_initialized(self) -> bool:
576
+ return self._initialized
577
+
578
+ @property
579
+ def is_new_tab(self) -> bool:
580
+ return self._new_tab
570
581
 
571
582
  def initialize_tab(self) -> ElnExperimentTab:
572
583
  if self._initialized:
@@ -619,6 +630,7 @@ class ToolOfToolsHelper:
619
630
 
620
631
  # Otherwise, create the tab for the tool progress and results.
621
632
  self.tab = self.helper.create_tab(tab_name)
633
+ self._new_tab = True
622
634
 
623
635
  # Create a hidden entry for tracking the progress of the tool.
624
636
  field_sets: list[ElnFieldSetInfo] = self.eln_man.get_field_set_info_list()
@@ -189,7 +189,9 @@ class RecordHandler:
189
189
  :return: The record models for the queried records and the final paging criteria. If a data type name was used
190
190
  instead of a model wrapper, then the returned records will be PyRecordModels instead of WrappedRecordModels.
191
191
  """
192
- dt: str = wrapper_type.get_wrapper_data_type_name()
192
+ dt: str = AliasUtil.to_data_type_name(wrapper_type)
193
+ if isinstance(wrapper_type, str):
194
+ wrapper_type = None
193
195
  field: str = AliasUtil.to_data_field_name(field)
194
196
  pager = QueryDataRecordsAutoPager(dt, field, list(value_list), self.user, paging_criteria)
195
197
  pager.max_page = page_limit
@@ -233,6 +235,8 @@ class RecordHandler:
233
235
  instead of a model wrapper, then the returned records will be PyRecordModels instead of WrappedRecordModels.
234
236
  """
235
237
  dt: str = AliasUtil.to_data_type_name(wrapper_type)
238
+ if isinstance(wrapper_type, str):
239
+ wrapper_type = None
236
240
  pager = QueryDataRecordByIdListAutoPager(dt, list(ids), self.user, paging_criteria)
237
241
  pager.max_page = page_limit
238
242
  return self.wrap_models(pager.get_all_at_once(), wrapper_type), pager.next_page_criteria
@@ -289,7 +293,9 @@ class RecordHandler:
289
293
  :return: The record models for the queried records and the final paging criteria. If a data type name was used
290
294
  instead of a model wrapper, then the returned records will be PyRecordModels instead of WrappedRecordModels.
291
295
  """
292
- dt: str = wrapper_type.get_wrapper_data_type_name()
296
+ dt: str = AliasUtil.to_data_type_name(wrapper_type)
297
+ if isinstance(wrapper_type, str):
298
+ wrapper_type = None
293
299
  pager = QueryAllRecordsOfTypeAutoPager(dt, self.user, paging_criteria)
294
300
  pager.max_page = page_limit
295
301
  return self.wrap_models(pager.get_all_at_once(), wrapper_type), pager.next_page_criteria
@@ -444,7 +450,9 @@ class RecordHandler:
444
450
  :return: The newly created record models. If a data type name was used instead of a model wrapper, then the
445
451
  returned records will be PyRecordModels instead of WrappedRecordModels.
446
452
  """
447
- dt: str = wrapper_type.get_wrapper_data_type_name()
453
+ dt: str = AliasUtil.to_data_type_name(wrapper_type)
454
+ if isinstance(wrapper_type, str):
455
+ wrapper_type = None
448
456
  return self.wrap_models(self.dr_man.add_data_records(dt, num), wrapper_type)
449
457
 
450
458
  def create_models_with_data(self, wrapper_type: type[WrappedType] | str, fields: list[FieldIdentifierMap]) \
@@ -461,7 +469,9 @@ class RecordHandler:
461
469
  :return: The newly created record models. If a data type name was used instead of a model wrapper, then the
462
470
  returned records will be PyRecordModels instead of WrappedRecordModels.
463
471
  """
464
- dt: str = wrapper_type.get_wrapper_data_type_name()
472
+ dt: str = AliasUtil.to_data_type_name(wrapper_type)
473
+ if isinstance(wrapper_type, str):
474
+ wrapper_type = None
465
475
  fields: list[FieldMap] = AliasUtil.to_data_field_names_list_dict(fields)
466
476
  return self.wrap_models(self.dr_man.add_data_records_with_data(dt, fields), wrapper_type)
467
477