benchling-sdk 1.18.0__tar.gz → 1.18.1__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.
Files changed (124) hide show
  1. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/PKG-INFO +1 -1
  2. benchling_sdk-1.18.1/benchling_sdk/apps/config/helpers.py +186 -0
  3. benchling_sdk-1.18.1/benchling_sdk/apps/config/mock_config.py +635 -0
  4. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/pyproject.toml +1 -1
  5. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/LICENSE +0 -0
  6. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/README.md +0 -0
  7. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/__init__.py +0 -0
  8. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/__init__.py +0 -0
  9. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/canvas/__init__.py +0 -0
  10. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/canvas/errors.py +0 -0
  11. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/canvas/framework.py +0 -0
  12. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/canvas/types.py +0 -0
  13. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/__init__.py +0 -0
  14. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/cryptography_helpers.py +0 -0
  15. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/decryption_provider.py +0 -0
  16. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/errors.py +0 -0
  17. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/framework.py +0 -0
  18. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/config/types.py +0 -0
  19. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/framework.py +0 -0
  20. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/helpers/__init__.py +0 -0
  21. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/helpers/manifest_helpers.py +0 -0
  22. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/helpers/webhook_helpers.py +0 -0
  23. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/status/__init__.py +0 -0
  24. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/status/errors.py +0 -0
  25. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/status/framework.py +0 -0
  26. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/status/helpers.py +0 -0
  27. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/status/types.py +0 -0
  28. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/apps/types.py +0 -0
  29. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/auth/__init__.py +0 -0
  30. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/auth/api_key_auth.py +0 -0
  31. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/auth/bearer_token_auth.py +0 -0
  32. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/auth/client_credentials_oauth2.py +0 -0
  33. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/benchling.py +0 -0
  34. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/docs/__init__.py +0 -0
  35. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/docs/__main__.py +0 -0
  36. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/errors.py +0 -0
  37. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/__init__.py +0 -0
  38. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/client_helpers.py +0 -0
  39. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/constants.py +0 -0
  40. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/decorators.py +0 -0
  41. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/file_helpers.py +0 -0
  42. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/logging_helpers.py +0 -0
  43. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/package_helpers.py +0 -0
  44. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/pagination_helpers.py +0 -0
  45. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/response_helpers.py +0 -0
  46. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/retry_helpers.py +0 -0
  47. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/serialization_helpers.py +0 -0
  48. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/helpers/transaction_manager.py +0 -0
  49. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/models/__init__.py +0 -0
  50. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/models/webhooks/__init__.py +0 -0
  51. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/models/webhooks/v0/__init__.py +0 -0
  52. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/py.typed +0 -0
  53. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/__init__.py +0 -0
  54. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/__init__.py +0 -0
  55. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/alpha/__init__.py +0 -0
  56. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/alpha/v2_alpha_app_service.py +0 -0
  57. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/alpha/v2_alpha_assembly_service.py +0 -0
  58. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/base_service.py +0 -0
  59. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/__init__.py +0 -0
  60. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_analysis_service.py +0 -0
  61. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_app_definition_service.py +0 -0
  62. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_app_service.py +0 -0
  63. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_audit_service.py +0 -0
  64. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py +0 -0
  65. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py +0 -0
  66. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_entry_service.py +0 -0
  67. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_folder_service.py +0 -0
  68. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_project_service.py +0 -0
  69. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/beta/v2_beta_worklist_service.py +0 -0
  70. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/__init__.py +0 -0
  71. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/aa_sequence_service.py +0 -0
  72. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/api_service.py +0 -0
  73. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/app_service.py +0 -0
  74. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/assay_result_service.py +0 -0
  75. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/assay_run_service.py +0 -0
  76. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/blob_service.py +0 -0
  77. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/box_service.py +0 -0
  78. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/codon_usage_table_service.py +0 -0
  79. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/container_service.py +0 -0
  80. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/custom_entity_service.py +0 -0
  81. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/custom_notation_service.py +0 -0
  82. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/dna_alignments_service.py +0 -0
  83. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/dna_oligo_service.py +0 -0
  84. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/dna_sequence_service.py +0 -0
  85. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/dropdown_service.py +0 -0
  86. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/entity_service.py +0 -0
  87. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/entry_service.py +0 -0
  88. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/enzyme_service.py +0 -0
  89. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/event_service.py +0 -0
  90. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/export_service.py +0 -0
  91. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/feature_library_service.py +0 -0
  92. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/folder_service.py +0 -0
  93. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/instrument_query_service.py +0 -0
  94. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/inventory_service.py +0 -0
  95. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/lab_automation_service.py +0 -0
  96. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/label_template_service.py +0 -0
  97. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/location_service.py +0 -0
  98. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/mixture_service.py +0 -0
  99. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/molecule_service.py +0 -0
  100. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/monomer_service.py +0 -0
  101. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +0 -0
  102. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/oligo_service.py +0 -0
  103. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/organization_service.py +0 -0
  104. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/plate_service.py +0 -0
  105. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/printer_service.py +0 -0
  106. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/project_service.py +0 -0
  107. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/registry_service.py +0 -0
  108. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/request_service.py +0 -0
  109. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/rna_oligo_service.py +0 -0
  110. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/rna_sequence_service.py +0 -0
  111. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/schema_service.py +0 -0
  112. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/task_service.py +0 -0
  113. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/team_service.py +0 -0
  114. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/user_service.py +0 -0
  115. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/warehouse_service.py +0 -0
  116. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/workflow_flowchart_config_version_service.py +0 -0
  117. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/workflow_flowchart_service.py +0 -0
  118. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/workflow_output_service.py +0 -0
  119. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/workflow_task_group_service.py +0 -0
  120. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/stable/workflow_task_service.py +0 -0
  121. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/v2_alpha_service.py +0 -0
  122. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/v2_beta_service.py +0 -0
  123. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2/v2_stable_service.py +0 -0
  124. {benchling_sdk-1.18.0 → benchling_sdk-1.18.1}/benchling_sdk/services/v2_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: benchling-sdk
3
- Version: 1.18.0
3
+ Version: 1.18.1
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -0,0 +1,186 @@
1
+ from datetime import datetime
2
+ from enum import Enum
3
+ from functools import lru_cache
4
+ from typing import cast, List, Optional, Union
5
+
6
+ from benchling_api_client.v2.beta.extensions import Enums
7
+ from benchling_api_client.v2.beta.models.base_manifest_config import BaseManifestConfig
8
+ from benchling_api_client.v2.beta.models.dropdown_dependency import DropdownDependency
9
+ from benchling_api_client.v2.beta.models.dropdown_dependency_types import DropdownDependencyTypes
10
+ from benchling_api_client.v2.beta.models.entity_schema_dependency import EntitySchemaDependency
11
+ from benchling_api_client.v2.beta.models.entity_schema_dependency_type import EntitySchemaDependencyType
12
+ from benchling_api_client.v2.beta.models.field_definitions_manifest import FieldDefinitionsManifest
13
+ from benchling_api_client.v2.beta.models.manifest_array_config import ManifestArrayConfig
14
+ from benchling_api_client.v2.beta.models.manifest_float_scalar_config import ManifestFloatScalarConfig
15
+ from benchling_api_client.v2.beta.models.manifest_integer_scalar_config import ManifestIntegerScalarConfig
16
+ from benchling_api_client.v2.beta.models.manifest_scalar_config import ManifestScalarConfig
17
+ from benchling_api_client.v2.beta.models.manifest_text_scalar_config import ManifestTextScalarConfig
18
+ from benchling_api_client.v2.beta.models.resource_dependency import ResourceDependency
19
+ from benchling_api_client.v2.beta.models.resource_dependency_types import ResourceDependencyTypes
20
+ from benchling_api_client.v2.beta.models.schema_dependency import SchemaDependency
21
+ from benchling_api_client.v2.beta.models.schema_dependency_subtypes import SchemaDependencySubtypes
22
+ from benchling_api_client.v2.beta.models.schema_dependency_types import SchemaDependencyTypes
23
+ from benchling_api_client.v2.beta.models.workflow_task_schema_dependency import WorkflowTaskSchemaDependency
24
+ from benchling_api_client.v2.beta.models.workflow_task_schema_dependency_output import (
25
+ WorkflowTaskSchemaDependencyOutput,
26
+ )
27
+ from benchling_api_client.v2.beta.models.workflow_task_schema_dependency_type import (
28
+ WorkflowTaskSchemaDependencyType,
29
+ )
30
+ from benchling_api_client.v2.extensions import UnknownType
31
+ from benchling_api_client.v2.stable.extensions import NotPresentError
32
+
33
+ _ArrayElementDependency = Union[
34
+ SchemaDependency,
35
+ EntitySchemaDependency,
36
+ WorkflowTaskSchemaDependency,
37
+ DropdownDependency,
38
+ ResourceDependency,
39
+ ManifestScalarConfig,
40
+ ]
41
+
42
+
43
+ class _UnsupportedSubTypeError(Exception):
44
+ """Error when an unsupported subtype is encountered."""
45
+
46
+ pass
47
+
48
+
49
+ class _ScalarConfigTypes(Enums.KnownString):
50
+ """Enum type copied from an earlier version of benchling-api-client, for internal use only.
51
+
52
+ See BNCH-108704.
53
+ """
54
+
55
+ TEXT = "text"
56
+ FLOAT = "float"
57
+ INTEGER = "integer"
58
+ BOOLEAN = "boolean"
59
+ DATE = "date"
60
+ DATETIME = "datetime"
61
+ SECURE_TEXT = "secure_text"
62
+ JSON = "json"
63
+
64
+ def __str__(self) -> str:
65
+ return str(self.value)
66
+
67
+ @staticmethod
68
+ @lru_cache(maxsize=None)
69
+ def of_unknown(val: str) -> "_ScalarConfigTypes":
70
+ if not isinstance(val, str):
71
+ raise ValueError(f"Value of _ScalarConfigTypes must be a string (encountered: {val})")
72
+ newcls = Enum("_ScalarConfigTypes", {"_UNKNOWN": val}, type=Enums.UnknownString) # type: ignore
73
+ return cast(_ScalarConfigTypes, getattr(newcls, "_UNKNOWN"))
74
+
75
+
76
+ def _field_definitions_from_dependency(
77
+ dependency: Union[
78
+ EntitySchemaDependency,
79
+ SchemaDependency,
80
+ WorkflowTaskSchemaDependency,
81
+ WorkflowTaskSchemaDependencyOutput,
82
+ ]
83
+ ) -> List[FieldDefinitionsManifest]:
84
+ """Safely return a list of field definitions from a schema dependency or empty list."""
85
+ try:
86
+ if hasattr(dependency, "field_definitions"):
87
+ return dependency.field_definitions
88
+ # We can't seem to handle this programmatically by checking isinstance() or field truthiness
89
+ except NotPresentError:
90
+ pass
91
+ return []
92
+
93
+
94
+ def _element_definition_from_dependency(dependency: ManifestArrayConfig) -> List[_ArrayElementDependency]:
95
+ """Safely return an element definition as a list of dependencies from an array dependency or empty list."""
96
+ try:
97
+ if hasattr(dependency, "element_definition"):
98
+ return [
99
+ _fix_element_definition_deserialization(element) for element in dependency.element_definition
100
+ ]
101
+ # We can't seem to handle this programmatically by checking isinstance() or field truthiness
102
+ except NotPresentError:
103
+ pass
104
+ return []
105
+
106
+
107
+ def _enum_from_dependency(
108
+ dependency: Union[
109
+ ManifestFloatScalarConfig,
110
+ ManifestIntegerScalarConfig,
111
+ ManifestTextScalarConfig,
112
+ ]
113
+ ) -> List:
114
+ """Safely return an enum from a scalar config."""
115
+ try:
116
+ if hasattr(dependency, "enum"):
117
+ return dependency.enum
118
+ # We can't seem to handle this programmatically by checking isinstance() or field truthiness
119
+ except NotPresentError:
120
+ pass
121
+ return []
122
+
123
+
124
+ # TODO BNCH-57036 All element definitions currently deserialize to UnknownType. Hack around this temporarily
125
+ def _fix_element_definition_deserialization(
126
+ element: Union[UnknownType, _ArrayElementDependency]
127
+ ) -> _ArrayElementDependency:
128
+ if isinstance(element, UnknownType):
129
+ if "type" in element.value:
130
+ element_type = element.value["type"]
131
+ if element_type == WorkflowTaskSchemaDependencyType.WORKFLOW_TASK_SCHEMA:
132
+ return WorkflowTaskSchemaDependency.from_dict(element.value)
133
+ elif element_type == EntitySchemaDependencyType.ENTITY_SCHEMA:
134
+ return EntitySchemaDependency.from_dict(element.value)
135
+ elif element_type in [member.value for member in SchemaDependencyTypes]:
136
+ return SchemaDependency.from_dict(element.value)
137
+ elif element_type == DropdownDependencyTypes.DROPDOWN:
138
+ return DropdownDependency.from_dict(element.value)
139
+ elif element_type in [member.value for member in ResourceDependencyTypes]:
140
+ return ResourceDependency.from_dict(element.value)
141
+ elif element_type in [member.value for member in _ScalarConfigTypes]:
142
+ return type(element_type).from_dict(element.value)
143
+ raise NotImplementedError(f"No array deserialization fix for {element}")
144
+ return element
145
+
146
+
147
+ def _workflow_task_schema_output_from_dependency(
148
+ dependency: WorkflowTaskSchemaDependency,
149
+ ) -> Optional[WorkflowTaskSchemaDependencyOutput]:
150
+ """Safely return a workflow task schema output from a workflow task schema or None."""
151
+ try:
152
+ if hasattr(dependency, "output"):
153
+ return dependency.output
154
+ # We can't seem to handle this programmatically by checking isinstance() or output truthiness
155
+ except NotPresentError:
156
+ pass
157
+ return None
158
+
159
+
160
+ def _options_from_dependency(dependency: DropdownDependency) -> List[BaseManifestConfig]:
161
+ """Safely return a list of options from a dropdown dependency or empty list."""
162
+ try:
163
+ if hasattr(dependency, "options"):
164
+ return dependency.options
165
+ # We can't seem to handle this programmatically by checking isinstance() or field truthiness
166
+ except NotPresentError:
167
+ pass
168
+ return []
169
+
170
+
171
+ def _subtype_from_entity_schema_dependency(
172
+ dependency: EntitySchemaDependency,
173
+ ) -> Optional[SchemaDependencySubtypes]:
174
+ """Safely return an entity schema dependency's subtype, if present."""
175
+ try:
176
+ if hasattr(dependency, "subtype") and dependency.subtype:
177
+ return dependency.subtype
178
+ # We can't seem to handle this programmatically by checking isinstance() or field truthiness
179
+ except NotPresentError:
180
+ pass
181
+ return None
182
+
183
+
184
+ def datetime_config_value_to_str(value: datetime) -> str:
185
+ """Convert a datetime value to a valid string accepted by a datetime app config item."""
186
+ return value.strftime("%Y-%m-%d %I:%M:%S %p")