benchling-sdk 1.17.1__py3-none-any.whl → 1.18.0__py3-none-any.whl

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.
@@ -11,7 +11,10 @@ from benchling_sdk.services.v2.base_service import BaseService
11
11
  from benchling_sdk.services.v2.beta.v2_beta_data_frame_service import V2BetaDataFrameService
12
12
 
13
13
  if TYPE_CHECKING:
14
+ from benchling_sdk.services.v2.beta.v2_beta_analysis_service import V2BetaAnalysisService
15
+ from benchling_sdk.services.v2.beta.v2_beta_app_definition_service import V2BetaAppDefinitionService
14
16
  from benchling_sdk.services.v2.beta.v2_beta_app_service import V2BetaAppService
17
+ from benchling_sdk.services.v2.beta.v2_beta_audit_service import V2BetaAuditService
15
18
  from benchling_sdk.services.v2.beta.v2_beta_collaboration_service import V2BetaCollaborationService
16
19
  from benchling_sdk.services.v2.beta.v2_beta_entry_service import V2BetaEntryService
17
20
  from benchling_sdk.services.v2.beta.v2_beta_folder_service import V2BetaFolderService
@@ -40,6 +43,19 @@ class V2BetaService(BaseService):
40
43
  super().__init__(client, retry_strategy)
41
44
  self._beta_client = v2_beta_client(self.client)
42
45
 
46
+ @cached_property
47
+ def analyses(self) -> V2BetaAnalysisService:
48
+ """
49
+ V2-Beta Analyses.
50
+
51
+ Analyses allow experimental data to be viewed, analyzed, and visualized.
52
+
53
+ https://benchling.com/api/v2-beta/reference#/Analyses
54
+ """
55
+ from .beta.v2_beta_analysis_service import V2BetaAnalysisService
56
+
57
+ return self._create_service(V2BetaAnalysisService)
58
+
43
59
  @cached_property
44
60
  def apps(self) -> V2BetaAppService:
45
61
  """
@@ -47,12 +63,38 @@ class V2BetaService(BaseService):
47
63
 
48
64
  Create and manage Apps on your tenant.
49
65
 
50
- https://benchling.com/api/v2-beta/reference?stability=not-available#/Apps
66
+ https://benchling.com/api/v2-beta/reference#/Apps
51
67
  """
52
68
  from .beta.v2_beta_app_service import V2BetaAppService
53
69
 
54
70
  return self._create_service(V2BetaAppService)
55
71
 
72
+ @cached_property
73
+ def app_definitions(self) -> V2BetaAppDefinitionService:
74
+ """
75
+ V2-Beta App Definitions.
76
+
77
+ Create and manage Benchling app definitions on your tenant.
78
+
79
+ https://benchling.com/api/v2-beta/reference#/App%20Definitions
80
+ """
81
+ from .beta.v2_beta_app_definition_service import V2BetaAppDefinitionService
82
+
83
+ return self._create_service(V2BetaAppDefinitionService)
84
+
85
+ @cached_property
86
+ def audit(self) -> V2BetaAuditService:
87
+ """
88
+ V2-Beta Audit.
89
+
90
+ Export audit log data for Benchling objects.
91
+
92
+ https://benchling.com/api/v2-beta/reference#/Audit
93
+ """
94
+ from .beta.v2_beta_audit_service import V2BetaAuditService
95
+
96
+ return self._create_service(V2BetaAuditService)
97
+
56
98
  @cached_property
57
99
  def collaborations(self) -> V2BetaCollaborationService:
58
100
  """
@@ -31,6 +31,7 @@ if TYPE_CHECKING:
31
31
  from benchling_sdk.services.v2.stable.export_service import ExportService
32
32
  from benchling_sdk.services.v2.stable.feature_library_service import FeatureLibraryService
33
33
  from benchling_sdk.services.v2.stable.folder_service import FolderService
34
+ from benchling_sdk.services.v2.stable.instrument_query_service import InstrumentQueryService
34
35
  from benchling_sdk.services.v2.stable.inventory_service import InventoryService
35
36
  from benchling_sdk.services.v2.stable.lab_automation_service import LabAutomationService
36
37
  from benchling_sdk.services.v2.stable.label_template_service import LabelTemplateService
@@ -407,6 +408,19 @@ class V2StableService(BaseService):
407
408
 
408
409
  return self._create_service(FolderService)
409
410
 
411
+ @cached_property
412
+ def instrument_queries(self) -> InstrumentQueryService:
413
+ """
414
+ Instrument Queries.
415
+
416
+ Instrument Queries are used to query the instrument service.
417
+
418
+ See https://benchling.com/api/reference#/Instrument%20Queries
419
+ """
420
+ from .stable.instrument_query_service import InstrumentQueryService
421
+
422
+ return self._create_service(InstrumentQueryService)
423
+
410
424
  @cached_property
411
425
  def inventory(self) -> InventoryService:
412
426
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: benchling-sdk
3
- Version: 1.17.1
3
+ Version: 1.18.0
4
4
  Summary: SDK for interacting with the Benchling Platform.
5
5
  License: Apache-2.0
6
6
  Author: Benchling Support
@@ -17,7 +17,7 @@ Provides-Extra: python-jose
17
17
  Requires-Dist: PyYAML (>=6.0,<7.0)
18
18
  Requires-Dist: attrs (>=20.1.0)
19
19
  Requires-Dist: backoff (>=1.10.0,<3)
20
- Requires-Dist: benchling-api-client (==2.0.317)
20
+ Requires-Dist: benchling-api-client (==2.0.336)
21
21
  Requires-Dist: certifi (>=2022.12.7)
22
22
  Requires-Dist: cryptography (>=42.0.0) ; extra == "cryptography"
23
23
  Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)
@@ -10,8 +10,6 @@ benchling_sdk/apps/config/cryptography_helpers.py,sha256=VCzgQURLAitYjcjdwFzMPSK
10
10
  benchling_sdk/apps/config/decryption_provider.py,sha256=-HgjkBto8mYlooV0LXFenfaiP7PDhHRnKEHkK1P6gh4,2184
11
11
  benchling_sdk/apps/config/errors.py,sha256=-qkfLdcUTuuRD-V4L2l7nzQWnWTRuifDtkNDv8tfHoo,800
12
12
  benchling_sdk/apps/config/framework.py,sha256=a2cIkPugEVUfBNtHm2cbE3Qu326xb-SpMuM0Gi6U-3Q,13337
13
- benchling_sdk/apps/config/helpers.py,sha256=LTLDR0GCDoo_8Sx4kepQnMmgVEQT7MHfKAxIoAvV9TM,7077
14
- benchling_sdk/apps/config/mock_config.py,sha256=EPUCxWiUSsWxWilnHAJIq-_f1q6ckZkXoIFv1S25hnM,26967
15
13
  benchling_sdk/apps/config/types.py,sha256=XKfSGv-75CU-j1XwfXBGq8zbtnkF-PQnuY6Z2U47-Tg,953
16
14
  benchling_sdk/apps/framework.py,sha256=G15mv20FH7FLHJrnXMPcuFdUsP3Va-grvb5A4eq0Qlk,3175
17
15
  benchling_sdk/apps/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -27,7 +25,7 @@ benchling_sdk/auth/__init__.py,sha256=N4pJYVUnTLzg5HO9ZldHaI-Am97i6AOCdQS0M5QcVp
27
25
  benchling_sdk/auth/api_key_auth.py,sha256=Ui-cnvGMjcwVPV_b2GdBaoTjEyHJIu9CjtZScVBEUvU,641
28
26
  benchling_sdk/auth/bearer_token_auth.py,sha256=nymI8V91evcnK-TWKkBXZwck8U1qSh4WaseyQbvF-Cg,1268
29
27
  benchling_sdk/auth/client_credentials_oauth2.py,sha256=auHj8FAJxUrDf1HJp9wfmcC_pJ-3rj4tdQbsUIvSUQs,5801
30
- benchling_sdk/benchling.py,sha256=7wzzcrX0S3IwKmadPFtzuGF7l2fTQr-kh5JQ-PqrsZA,28740
28
+ benchling_sdk/benchling.py,sha256=b6LGyX5j_Itp4WPJnaDCqgUcqtUrC1yWXs2rF1BlFys,29154
31
29
  benchling_sdk/docs/__init__.py,sha256=ySHo76PzLndmXOVWrF80VjB5Pi48G82CCQNdzUEzbCY,38
32
30
  benchling_sdk/docs/__main__.py,sha256=1ZlGXdn2gHGC0fAuan5i54mh35VkDf5mhY9VeKNyCRA,244
33
31
  benchling_sdk/errors.py,sha256=Vv3y7FcoLSqrO7ydKDeGbii4WuWUjjaTmJsNjeJmX-A,8263
@@ -43,20 +41,24 @@ benchling_sdk/helpers/response_helpers.py,sha256=vtmb9lEEKy3dRFre3Q0R4XaLBEaS_rr
43
41
  benchling_sdk/helpers/retry_helpers.py,sha256=Sd7F8HMGPs31svYW-1z-SujbWUBn3qlZUk52hZ5G7xw,2814
44
42
  benchling_sdk/helpers/serialization_helpers.py,sha256=IUS0uGU_EiZvb8O-bTViUaROmxKcvdX3JeR9iKsWAG8,3662
45
43
  benchling_sdk/helpers/transaction_manager.py,sha256=HcSDsgGK7Rb93bgv6fpb4HvQUT-tqP0lXgVa_bWCDh4,3663
46
- benchling_sdk/models/__init__.py,sha256=KZGDqdvBFtI7mjq3FMdf-AuHxCw-fyif3IdoXTra5Jk,368740
44
+ benchling_sdk/models/__init__.py,sha256=4m3QBFbghDfeU3hAf3h-DELjhcH1MUtvc0kJyGRG-q0,372428
47
45
  benchling_sdk/models/webhooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- benchling_sdk/models/webhooks/v0/__init__.py,sha256=jdRi03NRHffeW4EXkL2W7dbgSA_Hifpm1AojB9qheC0,48324
46
+ benchling_sdk/models/webhooks/v0/__init__.py,sha256=1wFW1YYOZ0ebYIcb_Tv72lnUFfVAYyJy4qCf1qZ8wAY,49147
49
47
  benchling_sdk/py.typed,sha256=8ZJUsxZiuOy1oJeVhsTWQhTG_6pTVHVXk5hJL79ebTk,25
50
48
  benchling_sdk/services/__init__.py,sha256=K7N-sxMKhIsFroLe_tJIRcKJJuoShTCxiD_bfUz9958,85
51
49
  benchling_sdk/services/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
50
  benchling_sdk/services/v2/alpha/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
51
  benchling_sdk/services/v2/alpha/v2_alpha_app_service.py,sha256=cR3nk6oxV2B-ewcUooQ4iqMZJQaj_wvwGyON2eL08Hc,1443
52
+ benchling_sdk/services/v2/alpha/v2_alpha_assembly_service.py,sha256=2qtaeiODSiAtZ9AhGKZ3JFmzrKy4p52SL86JjxZQwjU,2518
54
53
  benchling_sdk/services/v2/base_service.py,sha256=BoplYqaZCk_p9LAJ_U1doEdDD4HmvT9UPfGKeXW53dY,1254
55
54
  benchling_sdk/services/v2/beta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
- benchling_sdk/services/v2/beta/v2_beta_app_service.py,sha256=nVOEQ3ESkUo2e4p_MYMq-VUpEx2wNpJIY7ZZ8UuHnuQ,1385
55
+ benchling_sdk/services/v2/beta/v2_beta_analysis_service.py,sha256=TAvq1rcRFecL4YfJPYfk_b3B0bAkWujY5EbN53DmeUM,1664
56
+ benchling_sdk/services/v2/beta/v2_beta_app_definition_service.py,sha256=hL08s7YDrrXfA2CuXYonMC4UQT_ibF2IFl5ELDa4Qck,1788
57
+ benchling_sdk/services/v2/beta/v2_beta_app_service.py,sha256=9al78xzvxuzh39uPy6_HWRwBVwt2EIF8KXRNVI7rwng,1361
58
+ benchling_sdk/services/v2/beta/v2_beta_audit_service.py,sha256=LSCpl6xbl0XLh9oAsaHHXiJCNC7KWE3vgFcVnAnOha8,1815
57
59
  benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py,sha256=epLHLdDRfj8ni2-45WWFSpOgQG-kTmbxTffRP1mnim0,5753
58
60
  benchling_sdk/services/v2/beta/v2_beta_data_frame_service.py,sha256=oqCVyYBK7YECXYIDWJ5VIaiAO-W7GXC7xd0Wy1swTmU,14853
59
- benchling_sdk/services/v2/beta/v2_beta_entry_service.py,sha256=XP00N8NGuAMpJMkeiSTqDR-LFRvwRMVzFHIzQJvOfbA,1053
61
+ benchling_sdk/services/v2/beta/v2_beta_entry_service.py,sha256=lShn7mFVCf4z7alCSfqAPfEvuzgUZtUdtSZQgJEuki4,1339
60
62
  benchling_sdk/services/v2/beta/v2_beta_folder_service.py,sha256=b6-D_eDTF1e2l2YLhr4qkKtLXtH_BUVCcHhaB_CBNAM,4959
61
63
  benchling_sdk/services/v2/beta/v2_beta_project_service.py,sha256=8Wk0u6dtiewytfuJ2RaybMOfqih7YF74cJF_wsetJpM,4926
62
64
  benchling_sdk/services/v2/beta/v2_beta_worklist_service.py,sha256=tFMe-7Wbw3qISe-T5EsnYVsmcd1P8Aw1NoWmNA5MroU,5544
@@ -83,6 +85,7 @@ benchling_sdk/services/v2/stable/event_service.py,sha256=--j-oqKR-Ld5d4QiJ6aofOr
83
85
  benchling_sdk/services/v2/stable/export_service.py,sha256=T8ir9yRyA8rMUXagLAWYR4cYtOzxt6JxjlnQwExk_HU,1080
84
86
  benchling_sdk/services/v2/stable/feature_library_service.py,sha256=h3vdttbJzWWG-297FedtmDXSFEUP0KVGU5Y2D_VW-KA,9767
85
87
  benchling_sdk/services/v2/stable/folder_service.py,sha256=dgibCL02gFOJrIr5G6QUiKQoSy284RcDKk-vcOXus_I,5219
88
+ benchling_sdk/services/v2/stable/instrument_query_service.py,sha256=wk_mtpY3uOPVY1nP3XtLNwAER-1aWQqqiBB2bABbk68,961
86
89
  benchling_sdk/services/v2/stable/inventory_service.py,sha256=kHcRrR1Zp92XwpAN5iFdWbrTjEhPnhaHS8iSRYY3X4s,1761
87
90
  benchling_sdk/services/v2/stable/lab_automation_service.py,sha256=vfKLrH6eZn9v2uDYKaLroBeAcu_F6OjOuJIBm2L6-No,9869
88
91
  benchling_sdk/services/v2/stable/label_template_service.py,sha256=VS25LUpUsJnkU_AFTTKjwMruVgE5-izLoc-_wrqr4Pk,1300
@@ -110,11 +113,11 @@ benchling_sdk/services/v2/stable/workflow_flowchart_service.py,sha256=wkqk9fwIbO
110
113
  benchling_sdk/services/v2/stable/workflow_output_service.py,sha256=VD0RvOBCkgX_YwUoQYQPR_PyGJXuIau5beq9bK75VXM,9993
111
114
  benchling_sdk/services/v2/stable/workflow_task_group_service.py,sha256=SSfHDH-Eniz09HG_qSPSfSVHU3BpvTbgGhOQS4iWcAw,8848
112
115
  benchling_sdk/services/v2/stable/workflow_task_service.py,sha256=pOhwFmWVk1jh3A9C70LpLhYjlgk2DcGCfjO8Uup9ScQ,12819
113
- benchling_sdk/services/v2/v2_alpha_service.py,sha256=sGj6cG7IkoolrKSBI1AVNIL5te_X6QOPGXn_WmHuSDc,1600
114
- benchling_sdk/services/v2/v2_beta_service.py,sha256=extNpmdBP9yGQsE4k_CEPkwlqlTT9HGw7F3qiR11cJs,4651
115
- benchling_sdk/services/v2/v2_stable_service.py,sha256=sErnFhLJuzH3MbnamkxcSSCMHHrbJ4cSlnVi6pictsg,27723
116
+ benchling_sdk/services/v2/v2_alpha_service.py,sha256=rl4niKxjU-Rvdx5W6cjyXd4rUMod-QcWdfZdVHSnMb4,2190
117
+ benchling_sdk/services/v2/v2_beta_service.py,sha256=SEv2AsZG0phf_B4ORqjRO-3VBkYehu1hlUhRFHrpX3c,6093
118
+ benchling_sdk/services/v2/v2_stable_service.py,sha256=21TzqEFHygMUFv0z0z8_MtXpSHLgwYC7YbIIsHrljaw,28232
116
119
  benchling_sdk/services/v2_service.py,sha256=cGX-Ps0hu7Oh1M7a0tu2zDN8-QG63dNDoK7w4eYo_OQ,3093
117
- benchling_sdk-1.17.1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
118
- benchling_sdk-1.17.1.dist-info/METADATA,sha256=FIulgL4kaHa1PdX6hEZ7O9rpADqf9qzGaMZO6MJAolY,2108
119
- benchling_sdk-1.17.1.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
120
- benchling_sdk-1.17.1.dist-info/RECORD,,
120
+ benchling_sdk-1.18.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
121
+ benchling_sdk-1.18.0.dist-info/METADATA,sha256=fA4iDSxO-S_Kty11oC5D6eV4lCljcLzIGIb600MtoCI,2108
122
+ benchling_sdk-1.18.0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
123
+ benchling_sdk-1.18.0.dist-info/RECORD,,
@@ -1,157 +0,0 @@
1
- from datetime import datetime
2
- from typing import List, Optional, Union
3
-
4
- from benchling_api_client.v2.beta.models.base_manifest_config import BaseManifestConfig
5
- from benchling_api_client.v2.beta.models.dropdown_dependency import DropdownDependency
6
- from benchling_api_client.v2.beta.models.dropdown_dependency_types import DropdownDependencyTypes
7
- from benchling_api_client.v2.beta.models.entity_schema_dependency import EntitySchemaDependency
8
- from benchling_api_client.v2.beta.models.entity_schema_dependency_type import EntitySchemaDependencyType
9
- from benchling_api_client.v2.beta.models.field_definitions_manifest import FieldDefinitionsManifest
10
- from benchling_api_client.v2.beta.models.manifest_array_config import ManifestArrayConfig
11
- from benchling_api_client.v2.beta.models.manifest_float_scalar_config import ManifestFloatScalarConfig
12
- from benchling_api_client.v2.beta.models.manifest_integer_scalar_config import ManifestIntegerScalarConfig
13
- from benchling_api_client.v2.beta.models.manifest_scalar_config import ManifestScalarConfig
14
- from benchling_api_client.v2.beta.models.manifest_text_scalar_config import ManifestTextScalarConfig
15
- from benchling_api_client.v2.beta.models.resource_dependency import ResourceDependency
16
- from benchling_api_client.v2.beta.models.resource_dependency_types import ResourceDependencyTypes
17
- from benchling_api_client.v2.beta.models.scalar_config_types import ScalarConfigTypes
18
- from benchling_api_client.v2.beta.models.schema_dependency import SchemaDependency
19
- from benchling_api_client.v2.beta.models.schema_dependency_subtypes import SchemaDependencySubtypes
20
- from benchling_api_client.v2.beta.models.schema_dependency_types import SchemaDependencyTypes
21
- from benchling_api_client.v2.beta.models.workflow_task_schema_dependency import WorkflowTaskSchemaDependency
22
- from benchling_api_client.v2.beta.models.workflow_task_schema_dependency_output import (
23
- WorkflowTaskSchemaDependencyOutput,
24
- )
25
- from benchling_api_client.v2.beta.models.workflow_task_schema_dependency_type import (
26
- WorkflowTaskSchemaDependencyType,
27
- )
28
- from benchling_api_client.v2.extensions import UnknownType
29
- from benchling_api_client.v2.stable.extensions import NotPresentError
30
-
31
- _ArrayElementDependency = Union[
32
- SchemaDependency,
33
- EntitySchemaDependency,
34
- WorkflowTaskSchemaDependency,
35
- DropdownDependency,
36
- ResourceDependency,
37
- ManifestScalarConfig,
38
- ]
39
-
40
-
41
- class _UnsupportedSubTypeError(Exception):
42
- """Error when an unsupported subtype is encountered."""
43
-
44
- pass
45
-
46
-
47
- def _field_definitions_from_dependency(
48
- dependency: Union[
49
- EntitySchemaDependency,
50
- SchemaDependency,
51
- WorkflowTaskSchemaDependency,
52
- WorkflowTaskSchemaDependencyOutput,
53
- ]
54
- ) -> List[FieldDefinitionsManifest]:
55
- """Safely return a list of field definitions from a schema dependency or empty list."""
56
- try:
57
- if hasattr(dependency, "field_definitions"):
58
- return dependency.field_definitions
59
- # We can't seem to handle this programmatically by checking isinstance() or field truthiness
60
- except NotPresentError:
61
- pass
62
- return []
63
-
64
-
65
- def _element_definition_from_dependency(dependency: ManifestArrayConfig) -> List[_ArrayElementDependency]:
66
- """Safely return an element definition as a list of dependencies from an array dependency or empty list."""
67
- try:
68
- if hasattr(dependency, "element_definition"):
69
- return [
70
- _fix_element_definition_deserialization(element) for element in dependency.element_definition
71
- ]
72
- # We can't seem to handle this programmatically by checking isinstance() or field truthiness
73
- except NotPresentError:
74
- pass
75
- return []
76
-
77
-
78
- def _enum_from_dependency(
79
- dependency: Union[
80
- ManifestFloatScalarConfig,
81
- ManifestIntegerScalarConfig,
82
- ManifestTextScalarConfig,
83
- ]
84
- ) -> List:
85
- """Safely return an enum from a scalar config."""
86
- try:
87
- if hasattr(dependency, "enum"):
88
- return dependency.enum
89
- # We can't seem to handle this programmatically by checking isinstance() or field truthiness
90
- except NotPresentError:
91
- pass
92
- return []
93
-
94
-
95
- # TODO BNCH-57036 All element definitions currently deserialize to UnknownType. Hack around this temporarily
96
- def _fix_element_definition_deserialization(
97
- element: Union[UnknownType, _ArrayElementDependency]
98
- ) -> _ArrayElementDependency:
99
- if isinstance(element, UnknownType):
100
- if "type" in element.value:
101
- element_type = element.value["type"]
102
- if element_type == WorkflowTaskSchemaDependencyType.WORKFLOW_TASK_SCHEMA:
103
- return WorkflowTaskSchemaDependency.from_dict(element.value)
104
- elif element_type == EntitySchemaDependencyType.ENTITY_SCHEMA:
105
- return EntitySchemaDependency.from_dict(element.value)
106
- elif element_type in [member.value for member in SchemaDependencyTypes]:
107
- return SchemaDependency.from_dict(element.value)
108
- elif element_type == DropdownDependencyTypes.DROPDOWN:
109
- return DropdownDependency.from_dict(element.value)
110
- elif element_type in [member.value for member in ResourceDependencyTypes]:
111
- return ResourceDependency.from_dict(element.value)
112
- elif element_type in [member.value for member in ScalarConfigTypes]:
113
- return type(element_type).from_dict(element.value)
114
- raise NotImplementedError(f"No array deserialization fix for {element}")
115
- return element
116
-
117
-
118
- def _workflow_task_schema_output_from_dependency(
119
- dependency: WorkflowTaskSchemaDependency,
120
- ) -> Optional[WorkflowTaskSchemaDependencyOutput]:
121
- """Safely return a workflow task schema output from a workflow task schema or None."""
122
- try:
123
- if hasattr(dependency, "output"):
124
- return dependency.output
125
- # We can't seem to handle this programmatically by checking isinstance() or output truthiness
126
- except NotPresentError:
127
- pass
128
- return None
129
-
130
-
131
- def _options_from_dependency(dependency: DropdownDependency) -> List[BaseManifestConfig]:
132
- """Safely return a list of options from a dropdown dependency or empty list."""
133
- try:
134
- if hasattr(dependency, "options"):
135
- return dependency.options
136
- # We can't seem to handle this programmatically by checking isinstance() or field truthiness
137
- except NotPresentError:
138
- pass
139
- return []
140
-
141
-
142
- def _subtype_from_entity_schema_dependency(
143
- dependency: EntitySchemaDependency,
144
- ) -> Optional[SchemaDependencySubtypes]:
145
- """Safely return an entity schema dependency's subtype, if present."""
146
- try:
147
- if hasattr(dependency, "subtype") and dependency.subtype:
148
- return dependency.subtype
149
- # We can't seem to handle this programmatically by checking isinstance() or field truthiness
150
- except NotPresentError:
151
- pass
152
- return None
153
-
154
-
155
- def datetime_config_value_to_str(value: datetime) -> str:
156
- """Convert a datetime value to a valid string accepted by a datetime app config item."""
157
- return value.strftime("%Y-%m-%d %I:%M:%S %p")