sapiopycommons 2025.2.6a418__tar.gz → 2025.2.6a420__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 (81) hide show
  1. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/PKG-INFO +1 -1
  2. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/pyproject.toml +1 -1
  3. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/elain/tool_of_tools.py +13 -4
  4. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/.gitignore +0 -0
  5. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/LICENSE +0 -0
  6. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/README.md +0 -0
  7. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/__init__.py +0 -0
  8. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/callbacks/__init__.py +0 -0
  9. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  10. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/callbacks/field_builder.py +0 -0
  11. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  12. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/chem/Molecules.py +0 -0
  13. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/chem/__init__.py +0 -0
  14. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/customreport/__init__.py +0 -0
  15. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/customreport/auto_pagers.py +0 -0
  16. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/customreport/column_builder.py +0 -0
  17. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  18. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/customreport/term_builder.py +0 -0
  19. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/datatype/__init__.py +0 -0
  20. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  21. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/datatype/data_fields.py +0 -0
  22. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/datatype/pseudo_data_types.py +0 -0
  23. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/elain/__init__.py +0 -0
  24. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/eln/__init__.py +0 -0
  25. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/eln/experiment_handler.py +0 -0
  26. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/eln/experiment_report_util.py +0 -0
  27. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/eln/plate_designer.py +0 -0
  28. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/__init__.py +0 -0
  29. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  30. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_bridge.py +0 -0
  31. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  32. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_data_handler.py +0 -0
  33. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_util.py +0 -0
  34. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_validator.py +0 -0
  35. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/files/file_writer.py +0 -0
  36. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  37. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  38. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/__init__.py +0 -0
  39. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/accession_service.py +0 -0
  40. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/aliases.py +0 -0
  41. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/audit_log.py +0 -0
  42. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/custom_report_util.py +0 -0
  43. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/directive_util.py +0 -0
  44. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/exceptions.py +0 -0
  45. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/popup_util.py +0 -0
  46. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/sapio_links.py +0 -0
  47. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/storage_util.py +0 -0
  48. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/general/time_util.py +0 -0
  49. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  50. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  51. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/processtracking/__init__.py +0 -0
  52. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/processtracking/custom_workflow_handler.py +0 -0
  53. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  54. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  55. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  56. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/rules/__init__.py +0 -0
  57. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  58. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  59. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/sftpconnect/__init__.py +0 -0
  60. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/sftpconnect/sftp_builder.py +0 -0
  61. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/webhook/__init__.py +0 -0
  62. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/webhook/webhook_context.py +0 -0
  63. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  64. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  65. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/AF-A0A009IHW8-F1-model_v4.cif +0 -0
  66. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/_do_not_add_init_py_here +0 -0
  67. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/accession_test.py +0 -0
  68. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/bio_reg_test.py +0 -0
  69. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/chem_test.py +0 -0
  70. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/chem_test_curation_queue.py +0 -0
  71. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/curation_queue_test.sdf +0 -0
  72. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/data_type_models.py +0 -0
  73. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  74. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  75. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  76. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto/8_color_ICS.wsp +0 -0
  77. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  78. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/flowcyto_test.py +0 -0
  79. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/kappa.chains.fasta +0 -0
  80. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/mafft_test.py +0 -0
  81. {sapiopycommons-2025.2.6a418 → sapiopycommons-2025.2.6a420}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2025.2.6a418
3
+ Version: 2025.2.6a420
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.06a418'
7
+ version='2025.02.06a420'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -9,7 +9,7 @@ from sapiopylib.rest.pojo.DataRecord import DataRecord
9
9
  from sapiopylib.rest.pojo.chartdata.DashboardDefinition import GaugeChartDefinition
10
10
  from sapiopylib.rest.pojo.chartdata.DashboardEnums import ChartGroupingType, ChartOperationType, ChartType
11
11
  from sapiopylib.rest.pojo.chartdata.DashboardSeries import GaugeChartSeries
12
- from sapiopylib.rest.pojo.datatype.FieldDefinition import AbstractVeloxFieldDefinition
12
+ from sapiopylib.rest.pojo.datatype.FieldDefinition import AbstractVeloxFieldDefinition, FieldType
13
13
  from sapiopylib.rest.pojo.eln.ElnExperiment import ElnExperiment
14
14
  from sapiopylib.rest.pojo.eln.ExperimentEntry import ExperimentEntry
15
15
  from sapiopylib.rest.pojo.eln.ExperimentEntryCriteria import ElnEntryCriteria, ElnFormEntryUpdateCriteria, \
@@ -124,16 +124,21 @@ def create_experiment_details_from_json(user: SapioUser,
124
124
  # Determine which fields in the JSON can be used to create field definitions.
125
125
  fb = FieldBuilder()
126
126
  fields: list[AbstractVeloxFieldDefinition] = []
127
+ fields_by_name: dict[str, AbstractVeloxFieldDefinition] = {}
127
128
  valid_keys: list[str] = []
128
129
  display_to_field_name: dict[str, str] = {}
129
130
  for key, value in json_list[0].items():
130
131
  field_name: str = key.replace(" ", "_")
131
132
  display_to_field_name[key] = field_name
132
133
  if isinstance(value, str):
133
- fields.append(fb.string_field(field_name, display_name=key))
134
+ field = fb.string_field(field_name, display_name=key)
135
+ fields.append(field)
136
+ fields_by_name[field_name] = field
134
137
  valid_keys.append(key)
135
138
  elif isinstance(value, (int, float)):
136
- fields.append(fb.double_field(field_name, display_name=key))
139
+ field = fb.double_field(field_name, display_name=key, precision=3)
140
+ fields.append(field)
141
+ fields_by_name[field_name] = field
137
142
  valid_keys.append(key)
138
143
 
139
144
  # Extract the valid field values from the JSON.
@@ -141,7 +146,11 @@ def create_experiment_details_from_json(user: SapioUser,
141
146
  for json_dict in json_list:
142
147
  field_map: dict[str, Any] = {}
143
148
  for key in valid_keys:
144
- field_map[display_to_field_name[key]] = json_dict.get(key)
149
+ # Watch out for NaN values or other special values.
150
+ val: Any = json_dict.get(key)
151
+ if fields_by_name[key].data_field_type == FieldType.DOUBLE and not isinstance(val, (int, float)):
152
+ val = None
153
+ field_map[display_to_field_name[key]] = val
145
154
  field_maps.append(field_map)
146
155
 
147
156
  detail_entry = ElnEntryCriteria(ElnEntryType.Table, entry_name,