liminal-orm 4.5.1__tar.gz → 4.6.0__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.
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/PKG-INFO +1 -1
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/connection/benchling_service.py +10 -2
- liminal_orm-4.6.0/liminal/tests/test_benchling_service.py +34 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/pyproject.toml +1 -1
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/.gitignore +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/LICENSE.md +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/README.md +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/base_dropdown.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/base_operation.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/base_validation_filters.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/compare_operation.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/name_template_parts.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/properties/base_field_properties.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/properties/base_name_template.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/properties/base_schema_properties.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/base/str_enum.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/cli/cli.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/cli/controller.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/cli/live_test_dropdown_migration.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/cli/live_test_entity_schema_migration.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/cli/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/connection/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/connection/benchling_connection.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/dropdowns/api.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/dropdowns/compare.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/dropdowns/generate_files.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/dropdowns/operations.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/dropdowns/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/api.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/api_v3.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/compare.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/entity_schema_models.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/entity_schema_models_v3.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/generate_files.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/operations.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/tag_schema_models.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/entity_schemas/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_api_entity_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_api_field_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_entity_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_field_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_folder_item_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_naming_strategy.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/benchling_sequence_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/name_template_part_type.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/enums/sequence_constraint.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/external/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/mappers.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/migrate/components.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/migrate/revision.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/migrate/revisions_timeline.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base_model.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base_results_model.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base_tables/registry_entity.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base_tables/schema.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/base_tables/user.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/column.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/mixins.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/name_template.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/name_template_parts.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/relationship.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/results_schema_properties.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/orm/schema_properties.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/py.typed +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/results_schemas/generate_files.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/results_schemas/models/results_schema_model.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/results_schemas/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/tests/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/tests/conftest.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/tests/from benchling_sdk.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/tests/test_dropdown_compare.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/tests/test_entity_schema_compare.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/unit_dictionary/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/utils.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/validation/__init__.py +0 -0
- {liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/validation/validation_severity.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: liminal-orm
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: An ORM and toolkit that builds on top of Benchling's platform to keep your schemas and downstream code dependencies in sync.
|
|
5
5
|
Project-URL: Homepage, https://github.com/dynotx/liminal-orm
|
|
6
6
|
Project-URL: Repository, https://github.com/dynotx/liminal-orm
|
|
@@ -7,7 +7,7 @@ from urllib.parse import urlparse
|
|
|
7
7
|
from playwright.async_api import async_playwright, Request
|
|
8
8
|
import requests
|
|
9
9
|
from benchling_sdk.auth.client_credentials_oauth2 import ClientCredentialsOAuth2
|
|
10
|
-
from benchling_sdk.benchling import Benchling
|
|
10
|
+
from benchling_sdk.benchling import Benchling, BenchlingApiClientDecorator
|
|
11
11
|
from benchling_sdk.helpers.retry_helpers import RetryStrategy
|
|
12
12
|
from bs4 import BeautifulSoup
|
|
13
13
|
from sqlalchemy import create_engine
|
|
@@ -55,6 +55,10 @@ class BenchlingService(Benchling):
|
|
|
55
55
|
Whether to connect to the Benchling Postgres database. Requires warehouse_connection_string from the connection object.
|
|
56
56
|
use_internal_api: bool = False
|
|
57
57
|
Whether to connect to the Benchling internal API. Requires internal_api_admin_email and internal_api_admin_password from the connection object.
|
|
58
|
+
client_decorator: BenchlingApiClientDecorator | None = None
|
|
59
|
+
An optional function that receives the default BenchlingApiClient and returns a
|
|
60
|
+
customized one. Forwarded to the Benchling SDK. A common use is raising the HTTP
|
|
61
|
+
timeout, which otherwise defaults to 10 seconds: ``lambda c: c.with_timeout(60)``.
|
|
58
62
|
"""
|
|
59
63
|
|
|
60
64
|
def __init__(
|
|
@@ -63,6 +67,7 @@ class BenchlingService(Benchling):
|
|
|
63
67
|
use_api: bool = True,
|
|
64
68
|
use_db: bool = False,
|
|
65
69
|
use_internal_api: bool = False,
|
|
70
|
+
client_decorator: BenchlingApiClientDecorator | None = None,
|
|
66
71
|
) -> None:
|
|
67
72
|
self.connection = connection
|
|
68
73
|
self._session: Session | None = None
|
|
@@ -77,7 +82,10 @@ class BenchlingService(Benchling):
|
|
|
77
82
|
)
|
|
78
83
|
url = f"https://{connection.tenant_name}.benchling.com"
|
|
79
84
|
super().__init__(
|
|
80
|
-
url=url,
|
|
85
|
+
url=url,
|
|
86
|
+
auth_method=auth_method,
|
|
87
|
+
retry_strategy=retry_strategy,
|
|
88
|
+
client_decorator=client_decorator,
|
|
81
89
|
)
|
|
82
90
|
LOGGER.info(f"Tenant {connection.tenant_name}: Connected to Benchling API.")
|
|
83
91
|
self.use_db = use_db
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from typing import cast
|
|
2
|
+
|
|
3
|
+
from benchling_api_client.v2.benchling_client import BenchlingApiClient
|
|
4
|
+
|
|
5
|
+
from liminal.connection.benchling_connection import BenchlingConnection
|
|
6
|
+
from liminal.connection.benchling_service import BenchlingService
|
|
7
|
+
|
|
8
|
+
# The Benchling SDK defaults the per-request HTTP timeout to 10 seconds.
|
|
9
|
+
SDK_DEFAULT_TIMEOUT_SECONDS = 10
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _connection() -> BenchlingConnection:
|
|
13
|
+
return BenchlingConnection(
|
|
14
|
+
tenant_name="test-tenant",
|
|
15
|
+
api_client_id="test-id",
|
|
16
|
+
api_client_secret="test-secret",
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TestBenchlingServiceClientDecorator:
|
|
21
|
+
def test_default_timeout_is_sdk_default(self) -> None:
|
|
22
|
+
service = BenchlingService(_connection(), use_db=False)
|
|
23
|
+
assert service._client.get_timeout() == SDK_DEFAULT_TIMEOUT_SECONDS
|
|
24
|
+
|
|
25
|
+
def test_client_decorator_is_forwarded_to_sdk(self) -> None:
|
|
26
|
+
def raise_timeout(client: BenchlingApiClient) -> BenchlingApiClient:
|
|
27
|
+
# with_timeout is typed to return the base Client but preserves the subclass.
|
|
28
|
+
return cast(BenchlingApiClient, client.with_timeout(60))
|
|
29
|
+
|
|
30
|
+
service = BenchlingService(
|
|
31
|
+
_connection(), use_db=False, client_decorator=raise_timeout
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
assert service._client.get_timeout() == 60
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "liminal-orm"
|
|
3
|
-
version = "4.
|
|
3
|
+
version = "4.6.0"
|
|
4
4
|
description = "An ORM and toolkit that builds on top of Benchling's platform to keep your schemas and downstream code dependencies in sync."
|
|
5
5
|
authors = [{ name = "DynoTx Open Source", email = "opensource@dynotx.com" }]
|
|
6
6
|
requires-python = ">=3.9,<4"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{liminal_orm-4.5.1 → liminal_orm-4.6.0}/liminal/results_schemas/models/results_schema_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|