benchling-sdk 1.10.0a5__tar.gz → 1.10.0a7__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.
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/PKG-INFO +2 -2
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/canvas/framework.py +34 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/decryption_provider.py +0 -3
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/framework.py +12 -11
- benchling_sdk-1.10.0a5/benchling_sdk/apps/helpers/config_helpers.py → benchling_sdk-1.10.0a7/benchling_sdk/apps/config/helpers.py +16 -97
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/mock_config.py +68 -68
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/status/framework.py +1 -21
- benchling_sdk-1.10.0a7/benchling_sdk/apps/status/helpers.py +20 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/status/types.py +1 -1
- benchling_sdk-1.10.0a7/benchling_sdk/apps/types.py +3 -0
- benchling_sdk-1.10.0a7/benchling_sdk/services/v2/stable/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/assay_result_service.py +18 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/pyproject.toml +2 -2
- benchling_sdk-1.10.0a5/benchling_sdk/apps/config/__init__.py +0 -3
- benchling_sdk-1.10.0a5/benchling_sdk/apps/config/scalars.py +0 -190
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/LICENSE +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/README.md +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/canvas/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/canvas/errors.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/canvas/types.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/apps/helpers → benchling_sdk-1.10.0a7/benchling_sdk/apps/config}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/cryptography_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/errors.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/types.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/framework.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/apps/status → benchling_sdk-1.10.0a7/benchling_sdk/apps/helpers}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/helpers/manifest_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/helpers/webhook_helpers.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/helpers → benchling_sdk-1.10.0a7/benchling_sdk/apps/status}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/status/errors.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/auth/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/auth/api_key_auth.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/auth/bearer_token_auth.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/auth/client_credentials_oauth2.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/benchling.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/docs/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/docs/__main__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/errors.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/models/webhooks → benchling_sdk-1.10.0a7/benchling_sdk/helpers}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/client_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/constants.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/decorators.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/file_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/logging_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/package_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/pagination_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/response_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/retry_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/serialization_helpers.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/helpers/transaction_manager.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/models/__init__.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/services/v2 → benchling_sdk-1.10.0a7/benchling_sdk/models/webhooks}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/models/webhooks/v0/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/py.typed +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/__init__.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/services/v2/alpha → benchling_sdk-1.10.0a7/benchling_sdk/services/v2}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/services/v2/beta → benchling_sdk-1.10.0a7/benchling_sdk/services/v2/alpha}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/alpha/v2_alpha_app_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/alpha/v2_alpha_dna_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/base_service.py +0 -0
- {benchling_sdk-1.10.0a5/benchling_sdk/services/v2/stable → benchling_sdk-1.10.0a7/benchling_sdk/services/v2/beta}/__init__.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_aa_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_app_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_collaboration_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_custom_entity_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_dataset_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_dna_oligo_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_dna_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_entity_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_entry_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_folder_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_project_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_rna_oligo_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/beta/v2_beta_worklist_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/aa_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/api_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/app_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/assay_run_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/blob_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/box_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/container_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/custom_entity_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/custom_notation_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/dna_alignments_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/dna_oligo_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/dna_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/dropdown_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/entry_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/event_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/export_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/feature_library_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/folder_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/inventory_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/lab_automation_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/label_template_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/location_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/mixture_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/molecule_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/nucleotide_alignments_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/oligo_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/organization_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/plate_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/printer_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/project_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/registry_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/request_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/rna_oligo_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/rna_sequence_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/schema_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/task_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/team_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/user_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/warehouse_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/workflow_output_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/workflow_task_group_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/stable/workflow_task_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/v2_alpha_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/v2_beta_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/services/v2/v2_stable_service.py +0 -0
- {benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/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.10.
|
3
|
+
Version: 1.10.0a7
|
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,<23)
|
19
19
|
Requires-Dist: backoff (>=1.10.0,<2.0.0)
|
20
|
-
Requires-Dist: benchling-api-client (==2.0.
|
20
|
+
Requires-Dist: benchling-api-client (==2.0.243)
|
21
21
|
Requires-Dist: certifi (>=2022.12.7)
|
22
22
|
Requires-Dist: cryptography (>=41.0.3,<42.0.0) ; extra == "cryptography"
|
23
23
|
Requires-Dist: dataclasses-json (>=0.5.2,<0.6.0)
|
@@ -1,5 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import json
|
3
4
|
from typing import cast, Dict, Generic, List, Optional, Protocol, Set, Type, TypeVar, Union
|
4
5
|
|
5
6
|
from benchling_api_client.v2.extensions import UnknownType
|
@@ -13,6 +14,7 @@ from benchling_sdk.apps.canvas.types import (
|
|
13
14
|
UiBlock,
|
14
15
|
UiBlockType,
|
15
16
|
)
|
17
|
+
from benchling_sdk.apps.types import JsonType
|
16
18
|
from benchling_sdk.models import (
|
17
19
|
AppCanvas,
|
18
20
|
AppCanvasApp,
|
@@ -366,6 +368,7 @@ class CanvasBuilder:
|
|
366
368
|
enabled: bool = True,
|
367
369
|
session_id: Optional[str] = None,
|
368
370
|
blocks: Optional[List[UiBlock]] = None,
|
371
|
+
data: Optional[JsonType] = None,
|
369
372
|
):
|
370
373
|
"""
|
371
374
|
Init AppCanvas.
|
@@ -379,6 +382,7 @@ class CanvasBuilder:
|
|
379
382
|
enabled=enabled,
|
380
383
|
session_id=session_id,
|
381
384
|
blocks=blocks if blocks else [],
|
385
|
+
data=json.dumps(data) if data is not None else None,
|
382
386
|
)
|
383
387
|
|
384
388
|
@classmethod
|
@@ -395,6 +399,7 @@ class CanvasBuilder:
|
|
395
399
|
enabled=canvas.enabled,
|
396
400
|
session_id=canvas.session_id,
|
397
401
|
blocks=canvas.blocks,
|
402
|
+
data=json.loads(canvas.data) if canvas.data is not None else None,
|
398
403
|
)
|
399
404
|
|
400
405
|
def _with_enabled(self, value: bool) -> CanvasBuilder:
|
@@ -406,6 +411,7 @@ class CanvasBuilder:
|
|
406
411
|
enabled=value,
|
407
412
|
session_id=self._source_canvas.session_id,
|
408
413
|
blocks=self._source_canvas.blocks,
|
414
|
+
data=self._source_canvas.data,
|
409
415
|
)
|
410
416
|
|
411
417
|
def with_enabled(self, enabled: bool = True) -> CanvasBuilder:
|
@@ -430,6 +436,23 @@ class CanvasBuilder:
|
|
430
436
|
enabled=self._source_canvas.enabled,
|
431
437
|
session_id=self._source_canvas.session_id,
|
432
438
|
blocks=new_blocks,
|
439
|
+
data=self._source_canvas.data,
|
440
|
+
)
|
441
|
+
|
442
|
+
def with_data(self, new_data: Optional[JsonType]) -> CanvasBuilder:
|
443
|
+
"""
|
444
|
+
Return a new CanvasBuilder with the underlying data replaced.
|
445
|
+
|
446
|
+
This does not call the API, it only assigns state in the CanvasBuilder.
|
447
|
+
"""
|
448
|
+
return CanvasBuilder(
|
449
|
+
app_id=self._source_canvas.app.id,
|
450
|
+
feature_id=self._source_canvas.feature_id,
|
451
|
+
resource_id=self._source_canvas.resource_id,
|
452
|
+
enabled=self._source_canvas.enabled,
|
453
|
+
session_id=self._source_canvas.session_id,
|
454
|
+
blocks=self._source_canvas.blocks,
|
455
|
+
data=new_data,
|
433
456
|
)
|
434
457
|
|
435
458
|
def with_session_id(self, session_id: Optional[str]) -> CanvasBuilder:
|
@@ -445,6 +468,7 @@ class CanvasBuilder:
|
|
445
468
|
enabled=self._source_canvas.enabled,
|
446
469
|
session_id=session_id,
|
447
470
|
blocks=self._source_canvas.blocks,
|
471
|
+
data=self._source_canvas.data,
|
448
472
|
)
|
449
473
|
|
450
474
|
def inputs_to_dict(self) -> Dict[str, Union[str, List[str]]]:
|
@@ -574,6 +598,7 @@ class CanvasBuilder:
|
|
574
598
|
enabled=self._source_canvas.enabled,
|
575
599
|
session_id=self._source_canvas.session_id,
|
576
600
|
blocks=[_ui_block_to_update(block) for block in self._source_canvas.blocks],
|
601
|
+
data=self._source_canvas.data,
|
577
602
|
)
|
578
603
|
|
579
604
|
def to_create(self) -> AppCanvasCreate:
|
@@ -585,6 +610,7 @@ class CanvasBuilder:
|
|
585
610
|
enabled=self._source_canvas.enabled,
|
586
611
|
session_id=self._source_canvas.session_id,
|
587
612
|
blocks=[_ui_block_to_create(block) for block in self._source_canvas.blocks],
|
613
|
+
data=self._source_canvas.data,
|
588
614
|
)
|
589
615
|
|
590
616
|
@property
|
@@ -597,6 +623,14 @@ class CanvasBuilder:
|
|
597
623
|
"""
|
598
624
|
return CanvasBuilderBlockStream.from_builder(self)
|
599
625
|
|
626
|
+
def data_to_json(self) -> Optional[JsonType]:
|
627
|
+
"""
|
628
|
+
Convert Canvas data to JSON.
|
629
|
+
|
630
|
+
Return a JSON object parsed from the string of the canvas's `data`, if present. Otherwise, return None.
|
631
|
+
"""
|
632
|
+
return json.loads(self._source_canvas.data) if self._source_canvas.data is not None else None
|
633
|
+
|
600
634
|
|
601
635
|
def _is_included_class(included_classes: Set[Type[UiBlock]], target_class: UiBlock) -> bool:
|
602
636
|
return isinstance(target_class, tuple(c for c in included_classes))
|
{benchling_sdk-1.10.0a5 → benchling_sdk-1.10.0a7}/benchling_sdk/apps/config/decryption_provider.py
RENAMED
@@ -11,9 +11,6 @@ class BaseDecryptionProvider(ABC):
|
|
11
11
|
Various implementations might use AWS KMS, Azure, etc.
|
12
12
|
"""
|
13
13
|
|
14
|
-
# TODO BNCH-52772 should we loosen this method to accept None and not attempt decryption,
|
15
|
-
# now that config is no longer type safe?
|
16
|
-
|
17
14
|
@abstractmethod
|
18
15
|
def decrypt(self, ciphertext: str) -> str:
|
19
16
|
"""
|
@@ -77,7 +77,8 @@ class BenchlingConfigProvider(ConfigProvider):
|
|
77
77
|
|
78
78
|
# Eager load all config items for now since we don't yet have a way of lazily querying by path
|
79
79
|
all_config_pages = list(app_pages)
|
80
|
-
# Punt on UnknownType for now as apps using manifests with new types +
|
80
|
+
# Punt on UnknownType for now as apps using manifests with new types +
|
81
|
+
# older client could lead to unpredictable results
|
81
82
|
all_config_items = [
|
82
83
|
_supported_config_item(config_item) for page in all_config_pages for config_item in page
|
83
84
|
]
|
@@ -220,13 +221,13 @@ class ConfigItemStore:
|
|
220
221
|
"""
|
221
222
|
Dependency Link Store.
|
222
223
|
|
223
|
-
Marshals an app configuration from the configuration provider into an
|
224
|
+
Marshals an app configuration from the configuration provider into an indexed structure.
|
224
225
|
Only retrieves app configuration once unless its cache is invalidated.
|
225
226
|
"""
|
226
227
|
|
227
228
|
_configuration_provider: ConfigProvider
|
228
229
|
_configuration: Optional[List[ConfigurationReference]] = None
|
229
|
-
|
230
|
+
_configuration_dict: Optional[Dict[ConfigItemPath, ConfigItemWrapper]] = None
|
230
231
|
_array_path_row_names: Dict[Tuple[str, ...], OrderedSet[str]] = dict()
|
231
232
|
|
232
233
|
def __init__(self, configuration_provider: ConfigProvider):
|
@@ -252,17 +253,17 @@ class ConfigItemStore:
|
|
252
253
|
return self._configuration
|
253
254
|
|
254
255
|
@property
|
255
|
-
def
|
256
|
+
def configuration_path_dict(self) -> Dict[ConfigItemPath, ConfigItemWrapper]:
|
256
257
|
"""
|
257
258
|
Config links.
|
258
259
|
|
259
|
-
Return a
|
260
|
+
Return a dict of configuration item paths to their corresponding configuration items.
|
260
261
|
"""
|
261
|
-
if not self.
|
262
|
-
self.
|
262
|
+
if not self._configuration_dict:
|
263
|
+
self._configuration_dict = {
|
263
264
|
tuple(item.path): ConfigItemWrapper(item, item.path) for item in self.configuration
|
264
265
|
}
|
265
|
-
return self.
|
266
|
+
return self._configuration_dict
|
266
267
|
|
267
268
|
def config_by_path(self, path: List[str]) -> ConfigItemWrapper:
|
268
269
|
"""
|
@@ -272,7 +273,7 @@ class ConfigItemStore:
|
|
272
273
|
"""
|
273
274
|
# Since we eager load all config now, we know that missing path means it's not configured in Benchling
|
274
275
|
# Later if we support lazy loading, we'll need to differentiate what's in our cache versus missing
|
275
|
-
return self.
|
276
|
+
return self.configuration_path_dict.get(tuple(path), ConfigItemWrapper(None, path))
|
276
277
|
|
277
278
|
def config_keys_by_path(self, path: List[str]) -> OrderedSet[str]:
|
278
279
|
"""
|
@@ -296,7 +297,7 @@ class ConfigItemStore:
|
|
296
297
|
self._array_path_row_names[path_tuple] = OrderedSet(
|
297
298
|
[
|
298
299
|
config_item.path[len(path)]
|
299
|
-
# Use the list instead of
|
300
|
+
# Use the list instead of configuration_dict to preserve order
|
300
301
|
for config_item in self.configuration
|
301
302
|
# The +1 is the name of the array row
|
302
303
|
if len(config_item.path) >= len(path) + 1
|
@@ -330,7 +331,7 @@ class ConfigItemStore:
|
|
330
331
|
Will force retrieval of configuration from the ConfigProvider the next time the link store is accessed.
|
331
332
|
"""
|
332
333
|
self._configuration = None
|
333
|
-
self.
|
334
|
+
self._configuration_dict = None
|
334
335
|
self._array_path_row_names = dict()
|
335
336
|
|
336
337
|
|
@@ -1,7 +1,6 @@
|
|
1
|
-
from datetime import
|
1
|
+
from datetime import datetime
|
2
2
|
from typing import List, Optional, Union
|
3
3
|
|
4
|
-
from benchling_api_client.v2.beta.models.app_config_field_type import AppConfigFieldType
|
5
4
|
from benchling_api_client.v2.beta.models.base_manifest_config import BaseManifestConfig
|
6
5
|
from benchling_api_client.v2.beta.models.dropdown_dependency import DropdownDependency
|
7
6
|
from benchling_api_client.v2.beta.models.dropdown_dependency_types import DropdownDependencyTypes
|
@@ -29,92 +28,7 @@ from benchling_api_client.v2.beta.models.workflow_task_schema_dependency_type im
|
|
29
28
|
from benchling_api_client.v2.extensions import UnknownType
|
30
29
|
from benchling_api_client.v2.stable.extensions import NotPresentError
|
31
30
|
|
32
|
-
|
33
|
-
from benchling_sdk.models import (
|
34
|
-
AaSequence,
|
35
|
-
AssayResult,
|
36
|
-
AssayRun,
|
37
|
-
Box,
|
38
|
-
Container,
|
39
|
-
CustomEntity,
|
40
|
-
DnaOligo,
|
41
|
-
DnaSequence,
|
42
|
-
Entry,
|
43
|
-
Location,
|
44
|
-
Mixture,
|
45
|
-
Molecule,
|
46
|
-
Plate,
|
47
|
-
Request,
|
48
|
-
RnaOligo,
|
49
|
-
RnaSequence,
|
50
|
-
WorkflowTask,
|
51
|
-
)
|
52
|
-
|
53
|
-
_MODEL_TYPES_FROM_SCHEMA_TYPE = {
|
54
|
-
SchemaDependencyTypes.CONTAINER_SCHEMA: Container,
|
55
|
-
SchemaDependencyTypes.PLATE_SCHEMA: Plate,
|
56
|
-
SchemaDependencyTypes.BOX_SCHEMA: Box,
|
57
|
-
SchemaDependencyTypes.LOCATION_SCHEMA: Location,
|
58
|
-
SchemaDependencyTypes.ENTRY_SCHEMA: Entry,
|
59
|
-
SchemaDependencyTypes.REQUEST_SCHEMA: Request,
|
60
|
-
SchemaDependencyTypes.RESULT_SCHEMA: AssayResult,
|
61
|
-
SchemaDependencyTypes.RUN_SCHEMA: AssayRun,
|
62
|
-
SchemaDependencyTypes.WORKFLOW_TASK_SCHEMA: WorkflowTask,
|
63
|
-
}
|
64
|
-
|
65
|
-
|
66
|
-
_SCALAR_TYPES_FROM_CONFIG = {
|
67
|
-
ScalarConfigTypes.BOOLEAN: bool,
|
68
|
-
ScalarConfigTypes.DATE: date,
|
69
|
-
ScalarConfigTypes.DATETIME: datetime,
|
70
|
-
ScalarConfigTypes.FLOAT: float,
|
71
|
-
ScalarConfigTypes.INTEGER: int,
|
72
|
-
ScalarConfigTypes.JSON: JsonType,
|
73
|
-
ScalarConfigTypes.TEXT: str,
|
74
|
-
}
|
75
|
-
|
76
|
-
|
77
|
-
_FIELD_SCALAR_TYPES_FROM_CONFIG = {
|
78
|
-
AppConfigFieldType.BOOLEAN: bool,
|
79
|
-
AppConfigFieldType.DATE: date,
|
80
|
-
AppConfigFieldType.DATETIME: datetime,
|
81
|
-
AppConfigFieldType.FLOAT: float,
|
82
|
-
AppConfigFieldType.INTEGER: int,
|
83
|
-
AppConfigFieldType.JSON: JsonType,
|
84
|
-
AppConfigFieldType.TEXT: str,
|
85
|
-
}
|
86
|
-
|
87
|
-
|
88
|
-
ModelType = Union[AssayResult, AssayRun, Box, Container, Entry, Location, Plate, Request]
|
89
|
-
|
90
|
-
_INSTANCE_FROM_SCHEMA_SUBTYPE = {
|
91
|
-
SchemaDependencySubtypes.AA_SEQUENCE: AaSequence,
|
92
|
-
SchemaDependencySubtypes.CUSTOM_ENTITY: CustomEntity,
|
93
|
-
SchemaDependencySubtypes.DNA_SEQUENCE: DnaSequence,
|
94
|
-
SchemaDependencySubtypes.DNA_OLIGO: DnaOligo,
|
95
|
-
SchemaDependencySubtypes.MIXTURE: Mixture,
|
96
|
-
SchemaDependencySubtypes.MOLECULE: Molecule,
|
97
|
-
SchemaDependencySubtypes.RNA_OLIGO: RnaOligo,
|
98
|
-
SchemaDependencySubtypes.RNA_SEQUENCE: RnaSequence,
|
99
|
-
}
|
100
|
-
|
101
|
-
EntitySubtype = Union[
|
102
|
-
AaSequence, CustomEntity, DnaOligo, DnaSequence, Mixture, Molecule, RnaOligo, RnaSequence
|
103
|
-
]
|
104
|
-
|
105
|
-
AnyDependency = Union[
|
106
|
-
BaseManifestConfig,
|
107
|
-
DropdownDependency,
|
108
|
-
EntitySchemaDependency,
|
109
|
-
FieldDefinitionsManifest,
|
110
|
-
ManifestArrayConfig,
|
111
|
-
ManifestScalarConfig,
|
112
|
-
ResourceDependency,
|
113
|
-
SchemaDependency,
|
114
|
-
WorkflowTaskSchemaDependency,
|
115
|
-
]
|
116
|
-
|
117
|
-
ArrayElementDependency = Union[
|
31
|
+
_ArrayElementDependency = Union[
|
118
32
|
SchemaDependency,
|
119
33
|
EntitySchemaDependency,
|
120
34
|
WorkflowTaskSchemaDependency,
|
@@ -124,13 +38,13 @@ ArrayElementDependency = Union[
|
|
124
38
|
]
|
125
39
|
|
126
40
|
|
127
|
-
class
|
41
|
+
class _UnsupportedSubTypeError(Exception):
|
128
42
|
"""Error when an unsupported subtype is encountered."""
|
129
43
|
|
130
44
|
pass
|
131
45
|
|
132
46
|
|
133
|
-
def
|
47
|
+
def _field_definitions_from_dependency(
|
134
48
|
dependency: Union[
|
135
49
|
EntitySchemaDependency,
|
136
50
|
SchemaDependency,
|
@@ -148,7 +62,7 @@ def field_definitions_from_dependency(
|
|
148
62
|
return []
|
149
63
|
|
150
64
|
|
151
|
-
def
|
65
|
+
def _element_definition_from_dependency(dependency: ManifestArrayConfig) -> List[_ArrayElementDependency]:
|
152
66
|
"""Safely return an element definition as a list of dependencies from an array dependency or empty list."""
|
153
67
|
try:
|
154
68
|
if hasattr(dependency, "element_definition"):
|
@@ -161,7 +75,7 @@ def element_definition_from_dependency(dependency: ManifestArrayConfig) -> List[
|
|
161
75
|
return []
|
162
76
|
|
163
77
|
|
164
|
-
def
|
78
|
+
def _enum_from_dependency(
|
165
79
|
dependency: Union[
|
166
80
|
ManifestFloatScalarConfig,
|
167
81
|
ManifestIntegerScalarConfig,
|
@@ -180,8 +94,8 @@ def enum_from_dependency(
|
|
180
94
|
|
181
95
|
# TODO BNCH-57036 All element definitions currently deserialize to UnknownType. Hack around this temporarily
|
182
96
|
def _fix_element_definition_deserialization(
|
183
|
-
element: Union[UnknownType,
|
184
|
-
) ->
|
97
|
+
element: Union[UnknownType, _ArrayElementDependency]
|
98
|
+
) -> _ArrayElementDependency:
|
185
99
|
if isinstance(element, UnknownType):
|
186
100
|
if "type" in element.value:
|
187
101
|
element_type = element.value["type"]
|
@@ -201,7 +115,7 @@ def _fix_element_definition_deserialization(
|
|
201
115
|
return element
|
202
116
|
|
203
117
|
|
204
|
-
def
|
118
|
+
def _workflow_task_schema_output_from_dependency(
|
205
119
|
dependency: WorkflowTaskSchemaDependency,
|
206
120
|
) -> Optional[WorkflowTaskSchemaDependencyOutput]:
|
207
121
|
"""Safely return a workflow task schema output from a workflow task schema or None."""
|
@@ -214,7 +128,7 @@ def workflow_task_schema_output_from_dependency(
|
|
214
128
|
return None
|
215
129
|
|
216
130
|
|
217
|
-
def
|
131
|
+
def _options_from_dependency(dependency: DropdownDependency) -> List[BaseManifestConfig]:
|
218
132
|
"""Safely return a list of options from a dropdown dependency or empty list."""
|
219
133
|
try:
|
220
134
|
if hasattr(dependency, "options"):
|
@@ -225,7 +139,7 @@ def options_from_dependency(dependency: DropdownDependency) -> List[BaseManifest
|
|
225
139
|
return []
|
226
140
|
|
227
141
|
|
228
|
-
def
|
142
|
+
def _subtype_from_entity_schema_dependency(
|
229
143
|
dependency: EntitySchemaDependency,
|
230
144
|
) -> Optional[SchemaDependencySubtypes]:
|
231
145
|
"""Safely return an entity schema dependency's subtype, if present."""
|
@@ -236,3 +150,8 @@ def subtype_from_entity_schema_dependency(
|
|
236
150
|
except NotPresentError:
|
237
151
|
pass
|
238
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")
|