sapiopycommons 2024.10.24a342__tar.gz → 2024.10.25a345__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 (73) hide show
  1. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/PKG-INFO +1 -1
  2. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/pyproject.toml +1 -1
  3. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/chem/Molecules.py +1 -1
  4. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/customreport/column_builder.py +2 -2
  5. sapiopycommons-2024.10.25a345/src/sapiopycommons/datatype/pseudo_data_types.py +440 -0
  6. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/eln/experiment_handler.py +44 -20
  7. sapiopycommons-2024.10.25a345/src/sapiopycommons/eln/experiment_report_util.py +245 -0
  8. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/aliases.py +50 -3
  9. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/audit_log.py +40 -47
  10. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/time_util.py +6 -40
  11. sapiopycommons-2024.10.25a345/src/sapiopycommons/sftpconnect/sftp_builder.py +69 -0
  12. sapiopycommons-2024.10.25a345/tests/_do_not_add_init_py_here +0 -0
  13. sapiopycommons-2024.10.24a342/src/sapiopycommons/eln/experiment_report_util.py +0 -118
  14. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/.gitignore +0 -0
  15. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/LICENSE +0 -0
  16. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/README.md +0 -0
  17. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/__init__.py +0 -0
  18. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/callbacks/__init__.py +0 -0
  19. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/callbacks/callback_util.py +0 -0
  20. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/chem/IndigoMolecules.py +0 -0
  21. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/chem/__init__.py +0 -0
  22. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/customreport/__init__.py +0 -0
  23. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/customreport/custom_report_builder.py +0 -0
  24. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/customreport/term_builder.py +0 -0
  25. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/datatype/__init__.py +0 -0
  26. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/datatype/attachment_util.py +0 -0
  27. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/eln/__init__.py +0 -0
  28. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/eln/plate_designer.py +0 -0
  29. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/__init__.py +0 -0
  30. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/complex_data_loader.py +0 -0
  31. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_bridge.py +0 -0
  32. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_bridge_handler.py +0 -0
  33. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_data_handler.py +0 -0
  34. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_util.py +0 -0
  35. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_validator.py +0 -0
  36. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/files/file_writer.py +0 -0
  37. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/flowcyto/flow_cyto.py +0 -0
  38. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/flowcyto/flowcyto_data.py +0 -0
  39. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/__init__.py +0 -0
  40. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/accession_service.py +0 -0
  41. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/custom_report_util.py +0 -0
  42. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/exceptions.py +0 -0
  43. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/popup_util.py +0 -0
  44. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/sapio_links.py +0 -0
  45. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/general/storage_util.py +0 -0
  46. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/multimodal/multimodal.py +0 -0
  47. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/multimodal/multimodal_data.py +0 -0
  48. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/processtracking/__init__.py +0 -0
  49. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/processtracking/endpoints.py +0 -0
  50. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/recordmodel/__init__.py +0 -0
  51. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/recordmodel/record_handler.py +0 -0
  52. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/rules/__init__.py +0 -0
  53. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/rules/eln_rule_handler.py +0 -0
  54. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/rules/on_save_rule_handler.py +0 -0
  55. {sapiopycommons-2024.10.24a342/src/sapiopycommons/webhook → sapiopycommons-2024.10.25a345/src/sapiopycommons/sftpconnect}/__init__.py +0 -0
  56. /sapiopycommons-2024.10.24a342/tests/_do_not_add_init_py_here → /sapiopycommons-2024.10.25a345/src/sapiopycommons/webhook/__init__.py +0 -0
  57. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/webhook/webhook_handlers.py +0 -0
  58. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/src/sapiopycommons/webhook/webservice_handlers.py +0 -0
  59. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/accession_test.py +0 -0
  60. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/bio_reg_test.py +0 -0
  61. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/chem_test.py +0 -0
  62. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/chem_test_curation_queue.py +0 -0
  63. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/curation_queue_test.sdf +0 -0
  64. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/data_type_models.py +0 -0
  65. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto/101_DEN084Y5_15_E01_008_clean.fcs +0 -0
  66. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto/101_DEN084Y5_15_E03_009_clean.fcs +0 -0
  67. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto/101_DEN084Y5_15_E05_010_clean.fcs +0 -0
  68. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto/8_color_ICS.wsp +0 -0
  69. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto/COVID19_W_001_O.fcs +0 -0
  70. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/flowcyto_test.py +0 -0
  71. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/kappa.chains.fasta +0 -0
  72. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/mafft_test.py +0 -0
  73. {sapiopycommons-2024.10.24a342 → sapiopycommons-2024.10.25a345}/tests/test.gb +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sapiopycommons
3
- Version: 2024.10.24a342
3
+ Version: 2024.10.25a345
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='2024.10.24a342'
7
+ version='2024.10.25a345'
8
8
  authors = [
9
9
  { name="Jonathan Steck", email="jsteck@sapiosciences.com" },
10
10
  { name="Yechen Qiao", email="yqiao@sapiosciences.com" },
@@ -231,7 +231,7 @@ def mol_to_sapio_substance(mol: Mol, include_stereoisomers=False,
231
231
  indigo_mol.aromatize()
232
232
  if enhanced_stereo:
233
233
  # Remove enhanced stereo layer when generating InChI as the stereo hash is generated separately for reg.
234
- mol_copy: Mol = Chem.MolFromMolBlock(Chem.MolToMolBlock(mol))
234
+ mol_copy: Mol = Chem.Mol(mol)
235
235
  Chem.CanonicalizeEnhancedStereo(mol_copy)
236
236
  molecule["inchi"] = Chem.MolToInchi(mol_copy)
237
237
  molecule["inchiKey"] = Chem.MolToInchiKey(mol_copy)
@@ -52,9 +52,9 @@ class ColumnBuilder:
52
52
  :param field: The field name to return the type of.
53
53
  :return: The field type of the given field name.
54
54
  """
55
- # Check if the field name is a system field. If it us, use the field type defined in this file.
55
+ # Check if the field name is a system field. If it is, use the field type defined in this file.
56
56
  field_name: str = AliasUtil.to_data_field_name(field)
57
57
  if field_name in SYSTEM_FIELDS:
58
58
  return SYSTEM_FIELDS.get(field_name)
59
59
  # Otherwise, check if the field type can be found from the wrapper.
60
- return AliasUtil.to_field_type(field_name, data_type)
60
+ return AliasUtil.to_field_type(field, data_type)
@@ -0,0 +1,440 @@
1
+ from sapiopylib.rest.pojo.datatype.FieldDefinition import FieldType
2
+ from sapiopylib.rest.utils.recordmodel.RecordModelWrapper import WrapperField
3
+
4
+
5
+ class ActiveTaskPseudoDef:
6
+ DATA_TYPE_NAME: str = "ActiveTask"
7
+ ACTIVE_TASK_ID__FIELD_NAME = WrapperField("ActiveTaskId", FieldType.LONG)
8
+ ACTIVE_WORKFLOW_ID__FIELD_NAME = WrapperField("ActiveWorkflowId", FieldType.LONG)
9
+ DATE_EDITED__FIELD_NAME = WrapperField("DateEdited", FieldType.DATE)
10
+ EDITED_BY__FIELD_NAME = WrapperField("EditedBy", FieldType.STRING)
11
+ STATUS__FIELD_NAME = WrapperField("Status", FieldType.ENUM)
12
+ TASK_USAGE_ID__FIELD_NAME = WrapperField("TaskUsageId", FieldType.LONG)
13
+
14
+
15
+ class ActiveWorkflowPseudoDef:
16
+ DATA_TYPE_NAME: str = "ActiveWorkflow"
17
+ ACTIVE_WORKFLOW_ID__FIELD_NAME = WrapperField("ActiveWorkflowId", FieldType.LONG)
18
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
19
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
20
+ DATE_EDITED__FIELD_NAME = WrapperField("DateEdited", FieldType.STRING)
21
+ EDITED_BY__FIELD_NAME = WrapperField("EditedBy", FieldType.STRING)
22
+ ESTIMATED_ATTACHMENTS__FIELD_NAME = WrapperField("EstimatedAttachments", FieldType.LONG)
23
+ NAME__FIELD_NAME = WrapperField("Name", FieldType.STRING)
24
+ RELATED_RECORD_ID__FIELD_NAME = WrapperField("RelatedRecordId", FieldType.LONG)
25
+ STATUS__FIELD_NAME = WrapperField("Status", FieldType.ENUM)
26
+ WORKFLOW_ID__FIELD_NAME = WrapperField("WorkflowId", FieldType.LONG)
27
+
28
+
29
+ class AuditLogPseudoDef:
30
+ DATA_TYPE_NAME: str = "AuditLog"
31
+ DATA_FIELD_NAME__FIELD_NAME = WrapperField("DataFieldName", FieldType.STRING)
32
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
33
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
34
+ EVENT_TYPE__FIELD_NAME = WrapperField("EventType", FieldType.ENUM)
35
+ FULL_NAME__FIELD_NAME = WrapperField("FullName", FieldType.STRING)
36
+ NEW_VALUE__FIELD_NAME = WrapperField("NewValue", FieldType.STRING)
37
+ ORIGINAL_VALUE__FIELD_NAME = WrapperField("OriginalValue", FieldType.STRING)
38
+ RECORD_ID__FIELD_NAME = WrapperField("RecordId", FieldType.LONG)
39
+ RECORD_NAME__FIELD_NAME = WrapperField("RecordName", FieldType.STRING)
40
+ TIME_STAMP__FIELD_NAME = WrapperField("TimeStamp", FieldType.DATE)
41
+ USER_COMMENT__FIELD_NAME = WrapperField("UserComment", FieldType.STRING)
42
+ USER_NAME__FIELD_NAME = WrapperField("UserName", FieldType.STRING)
43
+
44
+
45
+ class DataFieldDefinitionPseudoDef:
46
+ DATA_TYPE_NAME: str = "DataFieldDefinition"
47
+ APPROVE_EDIT__FIELD_NAME = WrapperField("ApproveEdit", FieldType.BOOLEAN)
48
+ AUTO_CLEAR_FIELD_LIST__FIELD_NAME = WrapperField("AutoClearFieldList", FieldType.STRING)
49
+ AUTO_SORT__FIELD_NAME = WrapperField("AutoSort", FieldType.BOOLEAN)
50
+ COLOR_MAPPING_ID__FIELD_NAME = WrapperField("ColorMappingId", FieldType.LONG)
51
+ DATA_FIELD_NAME__FIELD_NAME = WrapperField("DataFieldName", FieldType.STRING)
52
+ DATA_FIELD_TAG__FIELD_NAME = WrapperField("DataFieldTag", FieldType.STRING)
53
+ DATA_FIELD_TYPE__FIELD_NAME = WrapperField("DataFieldType", FieldType.STRING)
54
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
55
+ DECIMAL_DIGITS__FIELD_NAME = WrapperField("DecimalDigits", FieldType.INTEGER)
56
+ DEFAULT_VALUE__FIELD_NAME = WrapperField("DefaultValue", FieldType.STRING)
57
+ DEPENDENT_FIELDS__FIELD_NAME = WrapperField("Dependent_Fields", FieldType.STRING)
58
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
59
+ DIRECT_EDIT__FIELD_NAME = WrapperField("DirectEdit", FieldType.BOOLEAN)
60
+ DISPLAY_NAME__FIELD_NAME = WrapperField("DisplayName", FieldType.STRING)
61
+ EDITABLE__FIELD_NAME = WrapperField("Editable", FieldType.BOOLEAN)
62
+ ENUM_VALUES__FIELD_NAME = WrapperField("EnumValues", FieldType.STRING)
63
+ FORM_COL__FIELD_NAME = WrapperField("FormCol", FieldType.SHORT)
64
+ FORM_COL_SPAN__FIELD_NAME = WrapperField("FormColSpan", FieldType.SHORT)
65
+ FORM_NAME__FIELD_NAME = WrapperField("FormName", FieldType.STRING)
66
+ HTML_EDITOR__FIELD_NAME = WrapperField("HtmlEditor", FieldType.BOOLEAN)
67
+ IDENTIFIER__FIELD_NAME = WrapperField("Identifier", FieldType.BOOLEAN)
68
+ INDEX_FOR_SEARCH__FIELD_NAME = WrapperField("IndexForSearch", FieldType.BOOLEAN)
69
+ LINK_OUT__FIELD_NAME = WrapperField("LinkOut", FieldType.BOOLEAN)
70
+ LINK_OUT_URL__FIELD_NAME = WrapperField("LinkOutUrl", FieldType.BOOLEAN)
71
+ MAX_LENGTH__FIELD_NAME = WrapperField("MaxLength", FieldType.INTEGER)
72
+ MAXIMUM_VALUE__FIELD_NAME = WrapperField("MaximumValue", FieldType.DOUBLE)
73
+ MINIMUM_VALUE__FIELD_NAME = WrapperField("MinimumValue", FieldType.DOUBLE)
74
+ MULT_SELECT__FIELD_NAME = WrapperField("MultSelect", FieldType.BOOLEAN)
75
+ NUM_LINES__FIELD_NAME = WrapperField("NumLines", FieldType.INTEGER)
76
+ REQUIRED__FIELD_NAME = WrapperField("Required", FieldType.BOOLEAN)
77
+ SORT_KEY__FIELD_NAME = WrapperField("SortKey", FieldType.BOOLEAN)
78
+ STATIC_DATE__FIELD_NAME = WrapperField("StaticDate", FieldType.BOOLEAN)
79
+ UNIQUE_VALUE__FIELD_NAME = WrapperField("UniqueValue", FieldType.BOOLEAN)
80
+ VISIBLE__FIELD_NAME = WrapperField("Visible", FieldType.BOOLEAN)
81
+ WORKFLOW_ONLY_EDITING__FIELD_NAME = WrapperField("WorkflowOnlyEditing", FieldType.BOOLEAN)
82
+
83
+
84
+ class DataTypeDefinitionPseudoDef:
85
+ DATA_TYPE_NAME: str = "DataTypeDefinition"
86
+ ADDABLE__FIELD_NAME = WrapperField("Addable", FieldType.BOOLEAN)
87
+ ATTACHMENT__FIELD_NAME = WrapperField("Attachment", FieldType.BOOLEAN)
88
+ ATTACHMENT_TYPE__FIELD_NAME = WrapperField("AttachmentType", FieldType.STRING)
89
+ DATA_TYPE_TAG__FIELD_NAME = WrapperField("DATA_TYPE_TAG", FieldType.STRING)
90
+ DATA_TYPE_ID__FIELD_NAME = WrapperField("DataTypeId", FieldType.LONG)
91
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
92
+ DELETABLE__FIELD_NAME = WrapperField("Deletable", FieldType.BOOLEAN)
93
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
94
+ DISPLAY_NAME__FIELD_NAME = WrapperField("DisplayName", FieldType.STRING)
95
+ EXTENSION_TYPE__FIELD_NAME = WrapperField("ExtensionType", FieldType.BOOLEAN)
96
+ GROUP_ADDABLE__FIELD_NAME = WrapperField("GroupAddable", FieldType.BOOLEAN)
97
+ HIDE_DATA_RECORDS__FIELD_NAME = WrapperField("HideDataRecords", FieldType.BOOLEAN)
98
+ HIGH_VOLUME__FIELD_NAME = WrapperField("HighVolume", FieldType.BOOLEAN)
99
+ IS_HIDE_IN_MOBILE__FIELD_NAME = WrapperField("IS_HIDE_IN_MOBILE", FieldType.BOOLEAN)
100
+ IS_HVDT_ON_SAVE_ENABLED__FIELD_NAME = WrapperField("IS_HVDT_ON_SAVE_ENABLED", FieldType.BOOLEAN)
101
+ IS_PUBLIC_ATTACHMENT__FIELD_NAME = WrapperField("IS_PUBLIC_ATTACHMENT", FieldType.BOOLEAN)
102
+ ICON_COLOR__FIELD_NAME = WrapperField("IconColor", FieldType.STRING)
103
+ ICON_NAME__FIELD_NAME = WrapperField("IconName", FieldType.STRING)
104
+ IMPORTABLE__FIELD_NAME = WrapperField("Importable", FieldType.BOOLEAN)
105
+ IS_ACTIVE__FIELD_NAME = WrapperField("IsActive", FieldType.BOOLEAN)
106
+ IS_HIDDEN__FIELD_NAME = WrapperField("IsHidden", FieldType.BOOLEAN)
107
+ MAX_TABLE_ROW_COUNT__FIELD_NAME = WrapperField("MaxTableRowCount", FieldType.LONG)
108
+ PLURAL_DISPLAY_NAME__FIELD_NAME = WrapperField("PluralDisplayName", FieldType.STRING)
109
+ RECORD_ASSIGNABLE__FIELD_NAME = WrapperField("RecordAssignable", FieldType.BOOLEAN)
110
+ RECORD_IMAGE_ASSIGNABLE__FIELD_NAME = WrapperField("RecordImageAssignable", FieldType.BOOLEAN)
111
+ RECORD_IMAGE_MANUALLY_ADDABLE__FIELD_NAME = WrapperField("RecordImageManuallyAddable", FieldType.BOOLEAN)
112
+ REMOVABLE__FIELD_NAME = WrapperField("Removable", FieldType.BOOLEAN)
113
+ RESTRICTED__FIELD_NAME = WrapperField("Restricted", FieldType.BOOLEAN)
114
+ SHOW_ON_HOME_SCREEN__FIELD_NAME = WrapperField("ShowOnHomeScreen", FieldType.BOOLEAN)
115
+ SHOW_SUB_TABLES__FIELD_NAME = WrapperField("ShowSubTables", FieldType.BOOLEAN)
116
+ SHOW_TABS__FIELD_NAME = WrapperField("ShowTabs", FieldType.BOOLEAN)
117
+ SINGLE_PARENT__FIELD_NAME = WrapperField("SingleParent", FieldType.BOOLEAN)
118
+ UNDER_CONTAINER__FIELD_NAME = WrapperField("UnderContainer", FieldType.BOOLEAN)
119
+
120
+
121
+ class EnbDataTypeDefinitionPseudoDef:
122
+ DATA_TYPE_NAME: str = "EnbDataTypeDefinition"
123
+ DATA_TYPE_ID__FIELD_NAME = WrapperField("DataTypeId", FieldType.LONG)
124
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
125
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
126
+ DISPLAY_NAME__FIELD_NAME = WrapperField("DisplayName", FieldType.STRING)
127
+ ENB_DATA_TYPE_NAME__FIELD_NAME = WrapperField("EnbDataTypeName", FieldType.STRING)
128
+ ICON_COLOR__FIELD_NAME = WrapperField("IconColor", FieldType.STRING)
129
+ ICON_NAME__FIELD_NAME = WrapperField("IconName", FieldType.STRING)
130
+ NOTEBOOK_EXPERIMENT_ID__FIELD_NAME = WrapperField("Notebook_Experiment_ID", FieldType.LONG)
131
+ PLURAL_DISPLAY_NAME__FIELD_NAME = WrapperField("PluralDisplayName", FieldType.STRING)
132
+
133
+
134
+ class EnbEntryPseudoDef:
135
+ DATA_TYPE_NAME: str = "EnbEntry"
136
+ APPROVAL_DUE_DATE__FIELD_NAME = WrapperField("ApprovalDueDate", FieldType.DATE)
137
+ COLUMN_ORDER__FIELD_NAME = WrapperField("ColumnOrder", FieldType.INTEGER)
138
+ COLUMN_SPAN__FIELD_NAME = WrapperField("ColumnSpan", FieldType.INTEGER)
139
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
140
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
141
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
142
+ DEPENDENT_ENTRY_ID_LIST__FIELD_NAME = WrapperField("DependentEntryIdList", FieldType.STRING)
143
+ ENTRY_DESCRIPTION__FIELD_NAME = WrapperField("EntryDescription", FieldType.STRING)
144
+ ENTRY_HEIGHT__FIELD_NAME = WrapperField("EntryHeight", FieldType.INTEGER)
145
+ ENTRY_ID__FIELD_NAME = WrapperField("EntryId", FieldType.LONG)
146
+ ENTRY_NAME__FIELD_NAME = WrapperField("EntryName", FieldType.STRING)
147
+ ENTRY_ORDER__FIELD_NAME = WrapperField("EntryOrder", FieldType.INTEGER)
148
+ ENTRY_REQUIRES_E_SIGN__FIELD_NAME = WrapperField("EntryRequiresESign", FieldType.BOOLEAN)
149
+ ENTRY_SINGLETON_ID__FIELD_NAME = WrapperField("EntrySingletonId", FieldType.STRING)
150
+ ENTRY_STATUS__FIELD_NAME = WrapperField("EntryStatus", FieldType.STRING)
151
+ ENTRY_TYPE__FIELD_NAME = WrapperField("EntryType", FieldType.STRING)
152
+ EXPERIMENT_ID__FIELD_NAME = WrapperField("ExperimentId", FieldType.LONG)
153
+ HAS_COMMENTS__FIELD_NAME = WrapperField("HasComments", FieldType.BOOLEAN)
154
+ IS_CREATED_FROM_TEMPLATE__FIELD_NAME = WrapperField("IsCreatedFromTemplate", FieldType.BOOLEAN)
155
+ IS_REQUIRED_ENTRY__FIELD_NAME = WrapperField("IsRequiredEntry", FieldType.BOOLEAN)
156
+ IS_SHOWN_IN_TEMPLATE__FIELD_NAME = WrapperField("IsShownInTemplate", FieldType.BOOLEAN)
157
+ LAST_MODIFIED_BY__FIELD_NAME = WrapperField("LastModifiedBy", FieldType.STRING)
158
+ LAST_MODIFIED_DATE__FIELD_NAME = WrapperField("LastModifiedDate", FieldType.DATE)
159
+ RELATED_ENTRY_ID_LIST__FIELD_NAME = WrapperField("RelatedEntryIdList", FieldType.STRING)
160
+ REQUIRES_GRABBER_PLUGIN__FIELD_NAME = WrapperField("RequriesGrabberPlugin", FieldType.BOOLEAN)
161
+ SOURCE_ENTRY_ID__FIELD_NAME = WrapperField("SourceEntryId", FieldType.LONG)
162
+ SUBMITTED_BY__FIELD_NAME = WrapperField("SubmittedBy", FieldType.STRING)
163
+ SUBMITTED_DATE__FIELD_NAME = WrapperField("SubmittedDate", FieldType.DATE)
164
+ TAB_ID__FIELD_NAME = WrapperField("TabId", FieldType.LONG)
165
+ TEMPLATE_ITEM_FULFILLED_TIME_STAMP__FIELD_NAME = WrapperField("TemplateItemFulfilledTimeStamp", FieldType.LONG)
166
+
167
+
168
+ class EnbEntryOptionsPseudoDef:
169
+ DATA_TYPE_NAME: str = "EnbEntryOptions"
170
+ ENTRY_ID__FIELD_NAME = WrapperField("EntryId", FieldType.LONG)
171
+ ENTRY_OPTION_VALUE__FIELD_NAME = WrapperField("EntryOptionValue", FieldType.STRING)
172
+ ENTRY_OPTION_KEY__FIELD_NAME = WrapperField("EntryOptionkey", FieldType.STRING)
173
+
174
+
175
+ class ExperimentEntryRecordPseudoDef:
176
+ DATA_TYPE_NAME: str = "ExperimentEntryRecord"
177
+ ENTRY_ID__FIELD_NAME = WrapperField("EntryId", FieldType.LONG)
178
+ RECORD_ID__FIELD_NAME = WrapperField("RecordId", FieldType.LONG)
179
+
180
+
181
+ class LimsUserPseudoDef:
182
+ DATA_TYPE_NAME: str = "LimsUser"
183
+ API_USER__FIELD_NAME = WrapperField("ApiUser", FieldType.BOOLEAN)
184
+ EMAIL_ADDRESS__FIELD_NAME = WrapperField("EmailAddress", FieldType.STRING)
185
+ FIRST_NAME__FIELD_NAME = WrapperField("FirstName", FieldType.STRING)
186
+ LAST_NAME__FIELD_NAME = WrapperField("LastName", FieldType.STRING)
187
+ MIDDLE_NAME__FIELD_NAME = WrapperField("MiddleName", FieldType.STRING)
188
+ PWD_EXPIRE_DATE__FIELD_NAME = WrapperField("PwdExpireDate", FieldType.DATE)
189
+ PWD_EXPIRE_INTERVAL__FIELD_NAME = WrapperField("PwdExpireInterval", FieldType.INTEGER)
190
+ USER_NAME__FIELD_NAME = WrapperField("UserName", FieldType.STRING)
191
+
192
+
193
+ class NotebookExperimentPseudoDef:
194
+ DATA_TYPE_NAME: str = "NotebookExperiment"
195
+ ACCESS_LEVEL__FIELD_NAME = WrapperField("AccessLevel", FieldType.STRING)
196
+ APPROVAL_DUE_DATE__FIELD_NAME = WrapperField("ApprovalDueDate", FieldType.DATE)
197
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
198
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
199
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
200
+ EXPERIMENT_ID__FIELD_NAME = WrapperField("ExperimentId", FieldType.LONG)
201
+ EXPERIMENT_NAME__FIELD_NAME = WrapperField("ExperimentName", FieldType.STRING)
202
+ EXPERIMENT_OWNER__FIELD_NAME = WrapperField("ExperimentOwner", FieldType.STRING)
203
+ EXPERIMENT_RECORD_ID__FIELD_NAME = WrapperField("ExperimentRecordId", FieldType.LONG)
204
+ EXPERIMENT_TYPE_NAME__FIELD_NAME = WrapperField("ExperimentTypeName", FieldType.STRING)
205
+ IS_ACTIVE__FIELD_NAME = WrapperField("IsActive", FieldType.BOOLEAN)
206
+ IS_MODIFIABLE__FIELD_NAME = WrapperField("IsModifiable", FieldType.BOOLEAN)
207
+ IS_TEMPLATE__FIELD_NAME = WrapperField("IsTemplate", FieldType.BOOLEAN)
208
+ IS_PROTOCOL_TEMPLATE__FIELD_NAME = WrapperField("Is_Protocol_Template", FieldType.BOOLEAN)
209
+ LAST_MODIFIED_BY__FIELD_NAME = WrapperField("LastModifiedBy", FieldType.STRING)
210
+ LAST_MODIFIED_DATE__FIELD_NAME = WrapperField("LastModifiedDate", FieldType.DATE)
211
+ SOURCE_TEMPLATE_ID__FIELD_NAME = WrapperField("SourceTemplateId", FieldType.LONG)
212
+ STATUS__FIELD_NAME = WrapperField("Status", FieldType.STRING)
213
+
214
+
215
+ class NotebookExperimentOptionPseudoDef:
216
+ DATA_TYPE_NAME: str = "NotebookExperimentOption"
217
+ EXPERIMENT_ID__FIELD_NAME = WrapperField("ExperimentId", FieldType.LONG)
218
+ OPTION_KEY__FIELD_NAME = WrapperField("OptionKey", FieldType.STRING)
219
+ OPTION_VALUE__FIELD_NAME = WrapperField("OptionValue", FieldType.STRING)
220
+
221
+
222
+ class SystemLogPseudoDef:
223
+ DATA_TYPE_NAME: str = "SystemLog"
224
+ DATA_FIELD_NAME__FIELD_NAME = WrapperField("DataFieldName", FieldType.STRING)
225
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("DataTypeName", FieldType.STRING)
226
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
227
+ EVENT_ID__FIELD_NAME = WrapperField("EventId", FieldType.LONG)
228
+ EVENT_TYPE__FIELD_NAME = WrapperField("EventType", FieldType.STRING)
229
+ FULL_NAME__FIELD_NAME = WrapperField("FullName", FieldType.STRING)
230
+ NEW_VALUE__FIELD_NAME = WrapperField("NewValue", FieldType.STRING)
231
+ ORIGINAL_VALUE__FIELD_NAME = WrapperField("OriginalValue", FieldType.STRING)
232
+ RECORD_ID__FIELD_NAME = WrapperField("RecordId", FieldType.LONG)
233
+ RECORD_NAME__FIELD_NAME = WrapperField("RecordName", FieldType.STRING)
234
+ TIMESTAMP__FIELD_NAME = WrapperField("Timestamp", FieldType.DATE)
235
+ USER_COMMENT__FIELD_NAME = WrapperField("UserComment", FieldType.STRING)
236
+ USERNAME__FIELD_NAME = WrapperField("Username", FieldType.STRING)
237
+
238
+
239
+ class SystemObjectChangeLogPseudoDef:
240
+ DATA_TYPE_NAME: str = "System_Object_Change_Log"
241
+ ALT_ID__FIELD_NAME = WrapperField("Alt_Id", FieldType.STRING)
242
+ ATTRIBUTE_NAME__FIELD_NAME = WrapperField("Attribute_Name", FieldType.STRING)
243
+ CHANGE_TYPE__FIELD_NAME = WrapperField("Change_Type", FieldType.STRING)
244
+ DATA_FIELD_NAME__FIELD_NAME = WrapperField("Data_Field_Name", FieldType.STRING)
245
+ DATA_TYPE_NAME__FIELD_NAME = WrapperField("Data_Type_Name", FieldType.STRING)
246
+ EVENT_ID__FIELD_NAME = WrapperField("Event_Id", FieldType.STRING)
247
+ NEW_VALUE__FIELD_NAME = WrapperField("New_Value", FieldType.STRING)
248
+ OBJECT_ID__FIELD_NAME = WrapperField("Object_Id", FieldType.STRING)
249
+ OBJECT_TYPE__FIELD_NAME = WrapperField("Object_Type", FieldType.STRING)
250
+ OLD_VALUE__FIELD_NAME = WrapperField("Old_Value", FieldType.STRING)
251
+ TIMESTAMP__FIELD_NAME = WrapperField("Timestamp", FieldType.DATE)
252
+ USERNAME__FIELD_NAME = WrapperField("Username", FieldType.STRING)
253
+
254
+
255
+ class TaskPseudoDef:
256
+ DATA_TYPE_NAME: str = "Task"
257
+ ATTACHMENT_REQUIRED__FIELD_NAME = WrapperField("AttachmentRequired", FieldType.BOOLEAN)
258
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
259
+ CUSTOM_ACTION__FIELD_NAME = WrapperField("CustomAction", FieldType.STRING)
260
+ DATA_TYPE_NAME_LIST__FIELD_NAME = WrapperField("DataTypeNameList", FieldType.STRING)
261
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
262
+ DATE_EDITED__FIELD_NAME = WrapperField("DateEdited", FieldType.DATE)
263
+ DISPLAY_TYPE__FIELD_NAME = WrapperField("DisplayType", FieldType.ENUM)
264
+ EDITED_BY__FIELD_NAME = WrapperField("EditedBy", FieldType.STRING)
265
+ INPUT_DATA_TYPE_NAME__FIELD_NAME = WrapperField("InputDataTypeName", FieldType.STRING)
266
+ IS_TEMPLATE__FIELD_NAME = WrapperField("IsTemplate", FieldType.BOOLEAN)
267
+ LONG_DESC__FIELD_NAME = WrapperField("LongDesc", FieldType.STRING)
268
+ MENU_TASK_ID__FIELD_NAME = WrapperField("MenuTaskId", FieldType.ENUM)
269
+ NAME__FIELD_NAME = WrapperField("Name", FieldType.STRING)
270
+ SHORT_DESC__FIELD_NAME = WrapperField("ShortDesc", FieldType.STRING)
271
+ TASK_ID__FIELD_NAME = WrapperField("TaskId", FieldType.LONG)
272
+ TASK_VERSION__FIELD_NAME = WrapperField("TaskVersion", FieldType.LONG)
273
+ TEMPLATE_TASK_ID__FIELD_NAME = WrapperField("TemplateTaskId", FieldType.LONG)
274
+ TYPE__FIELD_NAME = WrapperField("Type", FieldType.ENUM)
275
+
276
+
277
+ class TaskAttachmentPseudoDef:
278
+ DATA_TYPE_NAME: str = "TaskAttachment"
279
+ ACTIVE_TASK_ID__FIELD_NAME = WrapperField("ActiveTaskId", FieldType.LONG)
280
+ RECORD_ID__FIELD_NAME = WrapperField("RecordId", FieldType.LONG)
281
+
282
+
283
+ class TaskOptionPseudoDef:
284
+ DATA_TYPE_NAME: str = "TaskOption"
285
+ OPTION_KEY__FIELD_NAME = WrapperField("OptionKey", FieldType.STRING)
286
+ OPTION_VALUE__FIELD_NAME = WrapperField("OptionValue", FieldType.STRING)
287
+ TASK_ID__FIELD_NAME = WrapperField("TaskId", FieldType.LONG)
288
+
289
+
290
+ class TaskUsagePseudoDef:
291
+ DATA_TYPE_NAME: str = "TaskUsage"
292
+ FORCE_ATTACH__FIELD_NAME = WrapperField("ForceAttach", FieldType.BOOLEAN)
293
+ IS_TEMPLATE__FIELD_NAME = WrapperField("IsTemplate", FieldType.BOOLEAN)
294
+ TASK_ID__FIELD_NAME = WrapperField("TaskId", FieldType.LONG)
295
+ TASK_ORDER__FIELD_NAME = WrapperField("TaskOrder", FieldType.INTEGER)
296
+ TASK_USAGE_ID__FIELD_NAME = WrapperField("TaskUsageId", FieldType.LONG)
297
+ WORKFLOW_ID__FIELD_NAME = WrapperField("WorkflowId", FieldType.LONG)
298
+
299
+
300
+ class VeloxWebhookPseudoDef:
301
+ DATA_TYPE_NAME: str = "VELOXWEBHOOK"
302
+ CUSTOM_PLUGIN_POINT__FIELD_NAME = WrapperField("CUSTOM_PLUGIN_POINT", FieldType.STRING)
303
+ DATA_TYPE_NAME_SET__FIELD_NAME = WrapperField("DATA_TYPE_NAME_SET", FieldType.STRING)
304
+ DESCRIPTION__FIELD_NAME = WrapperField("DESCRIPTION", FieldType.STRING)
305
+ ENB_ENTRY_TYPE__FIELD_NAME = WrapperField("ENB_ENTRY_TYPE", FieldType.STRING)
306
+ EXPERIMENT_ENTRY_NAME__FIELD_NAME = WrapperField("EXPERIMENT_ENTRY_NAME", FieldType.STRING)
307
+ GUID__FIELD_NAME = WrapperField("GUID", FieldType.STRING)
308
+ ICON_COLOR__FIELD_NAME = WrapperField("ICON_COLOR", FieldType.STRING)
309
+ ICON_GUID__FIELD_NAME = WrapperField("ICON_GUID", FieldType.STRING)
310
+ IS_RETRY_ON_FAILURE__FIELD_NAME = WrapperField("IS_RETRY_ON_FAILURE", FieldType.BOOLEAN)
311
+ IS_TRANSACTIONAL__FIELD_NAME = WrapperField("IS_TRANSACTIONAL", FieldType.BOOLEAN)
312
+ LINE_1_TEXT__FIELD_NAME = WrapperField("LINE_1_TEXT", FieldType.STRING)
313
+ LINE_2_TEXT__FIELD_NAME = WrapperField("LINE_2_TEXT", FieldType.STRING)
314
+ PLUGIN_ORDER__FIELD_NAME = WrapperField("PLUGIN_ORDER", FieldType.INTEGER)
315
+ PLUGIN_POINT__FIELD_NAME = WrapperField("PLUGIN_POINT", FieldType.STRING)
316
+ SECTION_NAME_PATH__FIELD_NAME = WrapperField("SECTION_NAME_PATH", FieldType.STRING)
317
+ TEMPLATE_NAME__FIELD_NAME = WrapperField("TEMPLATE_NAME", FieldType.STRING)
318
+ WEBHOOK_URL__FIELD_NAME = WrapperField("WEBHOOK_URL", FieldType.STRING)
319
+
320
+
321
+ class VeloxWebhookExecutionPseudoDef:
322
+ DATA_TYPE_NAME: str = "VELOXWEBHOOK_EXECUTION"
323
+ EXECUTION_TIMESTAMP__FIELD_NAME = WrapperField("EXECUTION_TIMESTAMP", FieldType.DATE)
324
+ EXECUTION_USERNAME__FIELD_NAME = WrapperField("EXECUTION_USERNAME", FieldType.STRING)
325
+ GUID__FIELD_NAME = WrapperField("GUID", FieldType.STRING)
326
+ LAST_ATTEMPT_NUMBER__FIELD_NAME = WrapperField("LAST_ATTEMPT_NUMBER", FieldType.INTEGER)
327
+ LAST_ATTEMPT_RESULT__FIELD_NAME = WrapperField("LAST_ATTEMPT_RESULT", FieldType.STRING)
328
+ REQUEST_BODY__FIELD_NAME = WrapperField("REQUEST_BODY", FieldType.STRING)
329
+ WEBHOOK_GUID__FIELD_NAME = WrapperField("WEBHOOK_GUID", FieldType.STRING)
330
+ WEBHOOK_URL__FIELD_NAME = WrapperField("WEBHOOK_URL", FieldType.STRING)
331
+
332
+
333
+ class VeloxWebhookExecutionAttemptPseudoDef:
334
+ DATA_TYPE_NAME: str = "VELOXWEBHOOK_EXECUTION_ATTEMPT"
335
+ ATTEMPT_DURATION__FIELD_NAME = WrapperField("ATTEMPT_DURATION", FieldType.INTEGER)
336
+ ATTEMPT_NUMBER__FIELD_NAME = WrapperField("ATTEMPT_NUMBER", FieldType.INTEGER)
337
+ ATTEMPT_RESULT__FIELD_NAME = WrapperField("ATTEMPT_RESULT", FieldType.STRING)
338
+ ATTEMPT_TIMESTAMP__FIELD_NAME = WrapperField("ATTEMPT_TIMESTAMP", FieldType.DATE)
339
+ EXECUTION_GUID__FIELD_NAME = WrapperField("EXECUTION_GUID", FieldType.STRING)
340
+ GUID__FIELD_NAME = WrapperField("GUID", FieldType.STRING)
341
+ RESPONSE_BODY__FIELD_NAME = WrapperField("RESPONSE_BODY", FieldType.STRING)
342
+ RESPONSE_CODE__FIELD_NAME = WrapperField("RESPONSE_CODE", FieldType.INTEGER)
343
+ WEBHOOK_GUID__FIELD_NAME = WrapperField("WEBHOOK_GUID", FieldType.STRING)
344
+ WEBHOOK_URL__FIELD_NAME = WrapperField("WEBHOOK_URL", FieldType.STRING)
345
+
346
+
347
+ class VeloxWebhookExecutionLogPseudoDef:
348
+ DATA_TYPE_NAME: str = "VELOXWEBHOOK_EXECUTION_LOG"
349
+ ATTEMPT_GUID__FIELD_NAME = WrapperField("ATTEMPT_GUID", FieldType.STRING)
350
+ LOG_LEVEL__FIELD_NAME = WrapperField("LOG_LEVEL", FieldType.STRING)
351
+ LOG_LINE_NUM__FIELD_NAME = WrapperField("LOG_LINE_NUM", FieldType.INTEGER)
352
+ LOG_MESSAGE__FIELD_NAME = WrapperField("LOG_MESSAGE", FieldType.STRING)
353
+ LOG_TIMESTAMP__FIELD_NAME = WrapperField("LOG_TIMESTAMP", FieldType.DATE)
354
+
355
+
356
+ class VeloxRuleCostPseudoDef:
357
+ DATA_TYPE_NAME: str = "VELOX_RULE_COST"
358
+ ACTION_COST__FIELD_NAME = WrapperField("ACTION_COST", FieldType.LONG)
359
+ ACTION_COUNT__FIELD_NAME = WrapperField("ACTION_COUNT", FieldType.LONG)
360
+ ANCESTOR_DESCENDANT_COUNT__FIELD_NAME = WrapperField("ANCESTOR_DESCENDANT_COUNT", FieldType.LONG)
361
+ PARENT_CHILD_COUNT__FIELD_NAME = WrapperField("PARENT_CHILD_COUNT", FieldType.LONG)
362
+ PROCESSING_TIME__FIELD_NAME = WrapperField("PROCESSING_TIME", FieldType.LONG)
363
+ RULE_GUID__FIELD_NAME = WrapperField("RULE_GUID", FieldType.STRING)
364
+ SOURCE_RECORD_COUNT__FIELD_NAME = WrapperField("SOURCE_RECORD_COUNT", FieldType.LONG)
365
+ TIMESTAMP__FIELD_NAME = WrapperField("TIMESTAMP", FieldType.DATE)
366
+ TOTAL_COST__FIELD_NAME = WrapperField("TOTAL_COST", FieldType.LONG)
367
+ TRANSACTION_GUID__FIELD_NAME = WrapperField("TRANSACTION_GUID", FieldType.STRING)
368
+ USERNAME__FIELD_NAME = WrapperField("USERNAME", FieldType.STRING)
369
+
370
+
371
+ class VeloxConversationPseudoDef:
372
+ DATA_TYPE_NAME: str = "VeloxConversation"
373
+ CONVERSATION_DESCRIPTION__FIELD_NAME = WrapperField("ConversationDescription", FieldType.STRING)
374
+ CONVERSATION_GUID__FIELD_NAME = WrapperField("ConversationGuid", FieldType.STRING)
375
+ CONVERSATION_NAME__FIELD_NAME = WrapperField("ConversationName", FieldType.STRING)
376
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
377
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
378
+ SERVER_PLUGIN_PATH__FIELD_NAME = WrapperField("Server_Plugin_Path", FieldType.STRING)
379
+
380
+
381
+ class VeloxConversationMessagePseudoDef:
382
+ DATA_TYPE_NAME: str = "VeloxConversationMessage"
383
+ CONVERSATION_GUID__FIELD_NAME = WrapperField("ConversationGuid", FieldType.STRING)
384
+ MESSAGE__FIELD_NAME = WrapperField("Message", FieldType.STRING)
385
+ MESSAGE_GUID__FIELD_NAME = WrapperField("MessageGuid", FieldType.STRING)
386
+ MESSAGE_SENDER__FIELD_NAME = WrapperField("MessageSender", FieldType.STRING)
387
+ MESSAGE_TIMESTAMP__FIELD_NAME = WrapperField("MessageTimestamp", FieldType.DATE)
388
+
389
+
390
+ class VeloxScriptPseudoDef:
391
+ DATA_TYPE_NAME: str = "VeloxScript"
392
+ CODE__FIELD_NAME = WrapperField("Code", FieldType.STRING)
393
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
394
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.LONG)
395
+ LAST_MODIFIED_BY__FIELD_NAME = WrapperField("LastModifiedBy", FieldType.STRING)
396
+ LAST_MODIFIED_DATE__FIELD_NAME = WrapperField("LastModifiedDate", FieldType.LONG)
397
+ PATH__FIELD_NAME = WrapperField("Path", FieldType.STRING)
398
+ PLUGIN_DESCRIPTION__FIELD_NAME = WrapperField("PluginDescription", FieldType.STRING)
399
+ PLUGIN_LINE1_TEXT__FIELD_NAME = WrapperField("PluginLine1Text", FieldType.STRING)
400
+ PLUGIN_LINE2_TEXT__FIELD_NAME = WrapperField("PluginLine2Text", FieldType.STRING)
401
+ PLUGIN_ORDER__FIELD_NAME = WrapperField("PluginOrder", FieldType.INTEGER)
402
+ PLUGIN_POINT__FIELD_NAME = WrapperField("PluginPoint", FieldType.STRING)
403
+ PROJECT_GUID__FIELD_NAME = WrapperField("ProjectGuid", FieldType.STRING)
404
+ SCRIPT_GUID__FIELD_NAME = WrapperField("ScriptGuid", FieldType.STRING)
405
+
406
+
407
+ class VeloxScriptProjectPseudoDef:
408
+ DATA_TYPE_NAME: str = "VeloxScriptProject"
409
+ CLASS_PATH__FIELD_NAME = WrapperField("ClassPath", FieldType.STRING)
410
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
411
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.LONG)
412
+ DEPLOYMENT_OUT_OF_DATE__FIELD_NAME = WrapperField("DeploymentOutOfDate", FieldType.BOOLEAN)
413
+ DESCRIPTION__FIELD_NAME = WrapperField("Description", FieldType.STRING)
414
+ PROJECT_GUID__FIELD_NAME = WrapperField("ProjectGuid", FieldType.STRING)
415
+ PROJECT_NAME__FIELD_NAME = WrapperField("ProjectName", FieldType.STRING)
416
+ SCRIPT_LANGUAGE__FIELD_NAME = WrapperField("ScriptLanguage", FieldType.STRING)
417
+
418
+
419
+ class WorkflowPseudoDef:
420
+ DATA_TYPE_NAME: str = "Workflow"
421
+ ALL_ACCESS__FIELD_NAME = WrapperField("AllAccess", FieldType.BOOLEAN)
422
+ CATEGORY__FIELD_NAME = WrapperField("Category", FieldType.STRING)
423
+ CREATED_BY__FIELD_NAME = WrapperField("CreatedBy", FieldType.STRING)
424
+ DATE_CREATED__FIELD_NAME = WrapperField("DateCreated", FieldType.DATE)
425
+ DATE_EDITED__FIELD_NAME = WrapperField("DateEdited", FieldType.DATE)
426
+ DIRECT_LAUNCH__FIELD_NAME = WrapperField("DirectLaunch", FieldType.BOOLEAN)
427
+ EDITED_BY__FIELD_NAME = WrapperField("EditedBy", FieldType.STRING)
428
+ IS_TEMPLATE__FIELD_NAME = WrapperField("IsTemplate", FieldType.BOOLEAN)
429
+ LONG_DESC__FIELD_NAME = WrapperField("LongDesc", FieldType.STRING)
430
+ NAME__FIELD_NAME = WrapperField("Name", FieldType.STRING)
431
+ SHORT_DESC__FIELD_NAME = WrapperField("ShortDesc", FieldType.STRING)
432
+ WORKFLOW_ID__FIELD_NAME = WrapperField("WorkflowId", FieldType.LONG)
433
+ WORKFLOW_VERSION__FIELD_NAME = WrapperField("WorkflowVersion", FieldType.LONG)
434
+
435
+
436
+ class WorkflowOptionPseudoDef:
437
+ DATA_TYPE_NAME: str = "WorkflowOption"
438
+ OPTION_KEY__FIELD_NAME = WrapperField("OptionKey", FieldType.STRING)
439
+ OPTION_VALUE__FIELD_NAME = WrapperField("OptionValue", FieldType.STRING)
440
+ WORKFLOW_ID__FIELD_NAME = WrapperField("WorkflowId", FieldType.LONG)
@@ -23,6 +23,7 @@ from sapiopylib.rest.utils.recordmodel.RecordModelManager import RecordModelInst
23
23
  from sapiopylib.rest.utils.recordmodel.RecordModelWrapper import WrappedType
24
24
  from sapiopylib.rest.utils.recordmodel.properties import Child
25
25
 
26
+ from sapiopycommons.eln.experiment_report_util import ExperimentReportUtil
26
27
  from sapiopycommons.general.aliases import AliasUtil, SapioRecord, ExperimentIdentifier, UserIdentifier, \
27
28
  DataTypeIdentifier, RecordModel
28
29
  from sapiopycommons.general.exceptions import SapioException
@@ -67,9 +68,9 @@ class ExperimentHandler:
67
68
  """Whether this ExperimentHandler has queried the system for all steps in the experiment."""
68
69
  __steps: dict[str, ElnEntryStep]
69
70
  """Steps from this experiment. All steps are cached the first time any individual step is accessed."""
70
- __step_options: dict[ElnEntryStep, dict[str, str]]
71
- """Entry options for each step in this experiment. Only cached for each individual step when they are first accessed.
72
- The cache is updated whenever the entry options for a step are changed by this handler."""
71
+ __step_options: dict[int, dict[str, str]]
72
+ """Entry options for each step in this experiment. All entry options are cached the first time any individual step's
73
+ options are queried. The cache is updated whenever the entry options for a step are changed by this handler."""
73
74
 
74
75
  # Constants
75
76
  __ENTRY_COMPLETE_STATUSES = [ExperimentEntryStatus.Completed, ExperimentEntryStatus.CompletedApproved]
@@ -549,6 +550,39 @@ class ExperimentHandler:
549
550
  data_type: str = AliasUtil.to_data_type_name(data_type)
550
551
  return [x for x in all_steps if data_type in x.get_data_type_names()]
551
552
 
553
+ def get_step_by_option(self, key: str, value: str | None = None) -> ElnEntryStep:
554
+ """
555
+ Retrieve the step in this experiment that contains an entry option with the provided key and value.
556
+ Throws an exception if no entries or multiple entries in the experiment match.
557
+
558
+ :param key: The key of the entry option to match on.
559
+ :param value: The value of the entry option to match on. If not provided, then only matches on key.
560
+ :return: The entry in this experiment that matches the provided entry option key and value.
561
+ """
562
+ steps: list[ElnEntryStep] = self.get_steps_by_option(key, value)
563
+ count: int = len(steps)
564
+ if count != 1:
565
+ option = key + ("::" + value if value is not None else "")
566
+ raise SapioException(f"{('No' if count == 0 else 'Multiple')} entries in this experiment match the "
567
+ f"provided option: {option}")
568
+ return steps[0]
569
+
570
+ def get_steps_by_option(self, key: str, value: str | None = None) -> list[ElnEntryStep]:
571
+ """
572
+ Retrieve every step in this experiment that contains an entry option with the provided key and value.
573
+
574
+ :param key: The key of the entry option to match on.
575
+ :param value: The value of the entry option to match on. If not provided, then only matches on key.
576
+ :return: The entries in this experiment that match the provided entry option key and value.
577
+ """
578
+ ret_list: list[ElnEntryStep] = []
579
+ for step in self.get_all_steps():
580
+ options: dict[str, str] = self.get_step_options(step)
581
+ if key in options:
582
+ if value is None or options[key] == value:
583
+ ret_list.append(step)
584
+ return ret_list
585
+
552
586
  def get_step_records(self, step: Step) -> list[DataRecord]:
553
587
  """
554
588
  Query for the data records for the given step. The returned records are not cached by the ExperimentHandler.
@@ -966,7 +1000,7 @@ class ExperimentHandler:
966
1000
  if clear_template_item_fulfilled_timestamp is True:
967
1001
  entry.template_item_fulfilled_timestamp = None
968
1002
  if entry_options_map is not None:
969
- self.__step_options.update({step: entry_options_map})
1003
+ self.__step_options.update({step.get_id(): entry_options_map})
970
1004
 
971
1005
  def get_step_option(self, step: Step, option: str) -> str:
972
1006
  """
@@ -996,8 +1030,8 @@ class ExperimentHandler:
996
1030
  list of steps in the experiment and caches them.
997
1031
 
998
1032
  Getting the step options requires a webservice query, which is made the first time any step option
999
- method is called for a specific step. The step options are cached so that subsequent calls of this
1000
- method for that step don't make a webservice call.
1033
+ method is called for any step in this experiment. The step options are cached so that subsequent calls of this
1034
+ method don't make a webservice call.
1001
1035
 
1002
1036
  :param step:
1003
1037
  The step to get the options of.
@@ -1005,7 +1039,10 @@ class ExperimentHandler:
1005
1039
  If given a name, throws an exception if no step of the given name exists in the experiment.
1006
1040
  :return: The map of options for the input step.
1007
1041
  """
1008
- return self.__get_step_options(step)
1042
+ step = self.__to_eln_step(step)
1043
+ if step not in self.__step_options:
1044
+ self.__step_options.update(ExperimentReportUtil.get_experiment_entry_options(self.user, self.get_all_steps()))
1045
+ return self.__step_options[step.get_id()]
1009
1046
 
1010
1047
  def add_step_options(self, step: Step, mapping: Mapping[str, str]):
1011
1048
  """
@@ -1175,16 +1212,3 @@ class ExperimentHandler:
1175
1212
  return self.__exp_options
1176
1213
  self.__exp_options = self.__eln_man.get_notebook_experiment_options(self.__exp_id)
1177
1214
  return self.__exp_options
1178
-
1179
- def __get_step_options(self, step: Step) -> dict[str, str]:
1180
- """
1181
- Cache the options for the input step if they haven't been cached yet.
1182
-
1183
- :return: The entry options for the input step.
1184
- """
1185
- step = self.__to_eln_step(step)
1186
- if step in self.__step_options:
1187
- return self.__step_options.get(step)
1188
- options: dict[str, str] = step.get_options()
1189
- self.__step_options.update({step: options})
1190
- return options