liminal-orm 1.0.3.dev1__tar.gz → 1.0.4.dev1__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-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/PKG-INFO +1 -1
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/cli.py +2 -2
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/dropdowns/compare.py +1 -1
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/dropdowns/utils.py +25 -10
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/generate_files.py +1 -1
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/utils.py +4 -5
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/utils.py +2 -2
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/pyproject.toml +2 -2
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/LICENSE.md +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/README.md +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/__init__.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/base_dropdown.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/base_operation.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/base_validation_filters.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/compare_operation.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/properties/base_field_properties.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/properties/base_schema_properties.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/str_enum.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/controller.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/live_test_dropdown_migration.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/live_test_entity_schema_migration.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/connection/__init__.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/connection/benchling_connection.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/connection/benchling_service.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/dropdowns/api.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/dropdowns/generate_files.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/dropdowns/operations.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/api.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/compare.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/entity_schema_models.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/operations.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/tag_schema_models.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/__init__.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_api_field_type.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_entity_type.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_field_type.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_folder_item_type.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_naming_strategy.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_report_level.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_sequence_type.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/external/__init__.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/mappers.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/migrate/components.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/migrate/revision.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/migrate/revisions_timeline.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/migrate/utils.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/base.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/base_model.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/column.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/mixins.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/relationship.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/schema_properties.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/orm/user.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/py.typed +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/__init__.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/conftest.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/from benchling_sdk.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/test_dropdown_compare.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/test_entity_schema_compare.py +0 -0
- {liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/validation/__init__.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: liminal-orm
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.4.dev1
|
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
|
Author: DynoTx Open Source
|
6
6
|
Author-email: opensource@dynotx.com
|
@@ -78,8 +78,8 @@ def generate_files(
|
|
78
78
|
benchling_tenant: str = typer.Argument(
|
79
79
|
..., help="Benchling tenant (or alias) to connect to."
|
80
80
|
),
|
81
|
-
write_path: Path = typer.
|
82
|
-
|
81
|
+
write_path: Path = typer.Option(
|
82
|
+
Path("."), help="The path to write the generated files to."
|
83
83
|
),
|
84
84
|
) -> None:
|
85
85
|
current_revision_id, benchling_connection = read_local_env_file(
|
@@ -19,7 +19,7 @@ def compare_dropdowns(
|
|
19
19
|
) -> dict[str, list[CompareOperation]]:
|
20
20
|
dropdown_operations: dict[str, list[CompareOperation]] = {}
|
21
21
|
benchling_dropdowns: dict[str, Dropdown] = get_benchling_dropdowns_dict(
|
22
|
-
benchling_service
|
22
|
+
benchling_service, include_archived=True
|
23
23
|
)
|
24
24
|
processed_benchling_names = set()
|
25
25
|
model_dropdowns = BaseDropdown.get_all_subclasses(dropdown_names)
|
@@ -57,15 +57,15 @@ def get_benchling_dropdown_by_name(
|
|
57
57
|
|
58
58
|
def get_benchling_dropdowns_dict(
|
59
59
|
benchling_service: BenchlingService,
|
60
|
+
include_archived: bool = False,
|
60
61
|
) -> dict[str, Dropdown]:
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
d["name"]: Dropdown(
|
62
|
+
def _convert_dropdown_from_json(
|
63
|
+
d: dict[str, Any], include_archived: bool = False
|
64
|
+
) -> Dropdown:
|
65
|
+
all_options = d["allSchemaFieldSelectorOptions"]
|
66
|
+
if not include_archived:
|
67
|
+
all_options = [o for o in all_options if not o["archiveRecord"]]
|
68
|
+
return Dropdown(
|
69
69
|
id=d["id"],
|
70
70
|
name=d["name"],
|
71
71
|
archive_record=BenchlingArchiveRecord(reason=d["archiveRecord"]["purpose"])
|
@@ -81,11 +81,26 @@ def get_benchling_dropdowns_dict(
|
|
81
81
|
if o["archiveRecord"]
|
82
82
|
else None,
|
83
83
|
)
|
84
|
-
for o in
|
84
|
+
for o in all_options
|
85
85
|
],
|
86
86
|
)
|
87
|
-
|
87
|
+
|
88
|
+
with requests.Session() as session:
|
89
|
+
request = session.get(
|
90
|
+
f"https://{benchling_service.benchling_tenant}.benchling.com/1/api/schema-field-selectors/?registryId={benchling_service.registry_id}",
|
91
|
+
headers=benchling_service.custom_post_headers,
|
92
|
+
cookies=benchling_service.custom_post_cookies,
|
93
|
+
)
|
94
|
+
all_dropdowns = request.json()["selectorsByRegistryId"][
|
95
|
+
benchling_service.registry_id
|
96
|
+
]
|
97
|
+
if not include_archived:
|
98
|
+
all_dropdowns = [d for d in all_dropdowns if not d["archiveRecord"]]
|
99
|
+
dropdowns = {
|
100
|
+
d["name"]: _convert_dropdown_from_json(d, include_archived)
|
101
|
+
for d in all_dropdowns
|
88
102
|
}
|
103
|
+
return dropdowns
|
89
104
|
|
90
105
|
|
91
106
|
def dropdown_exists_in_benchling(
|
@@ -90,7 +90,7 @@ def generate_all_entity_schema_files(
|
|
90
90
|
dropdown_classname = dropdown_name_to_classname_map[col.dropdown_link]
|
91
91
|
dropdowns.append(dropdown_classname)
|
92
92
|
column_strings.append(
|
93
|
-
f"""{tab}{col_name}: SqlColumn = Column(name="{col.name}", type={str(col.type)}, required={col.required}{', is_multi=True' if col.is_multi else ''}{', parent_link=True' if col.parent_link else ''}{f', entity_link="{col.entity_link}"' if col.entity_link else ''}{f', dropdown={dropdown_classname}' if dropdown_classname else ''})"""
|
93
|
+
f"""{tab}{col_name}: SqlColumn = Column(name="{col.name}", type={str(col.type)}, required={col.required}{', is_multi=True' if col.is_multi else ''}{', parent_link=True' if col.parent_link else ''}{f', entity_link="{col.entity_link}"' if col.entity_link else ''}{f', dropdown={dropdown_classname}' if dropdown_classname else ''}{f', tooltip="{col.tooltip}"' if col.tooltip else ''})"""
|
94
94
|
)
|
95
95
|
if col.required and col.type:
|
96
96
|
init_strings.append(
|
@@ -41,6 +41,9 @@ def convert_tag_schema_to_internal_schema(
|
|
41
41
|
dropdowns_map: dict[str, str],
|
42
42
|
include_archived_fields: bool = False,
|
43
43
|
) -> tuple[SchemaProperties, dict[str, BaseFieldProperties]]:
|
44
|
+
all_fields = tag_schema.allFields
|
45
|
+
if not include_archived_fields:
|
46
|
+
all_fields = [f for f in all_fields if not f.archiveRecord]
|
44
47
|
return (
|
45
48
|
SchemaProperties(
|
46
49
|
name=tag_schema.name,
|
@@ -63,11 +66,7 @@ def convert_tag_schema_to_internal_schema(
|
|
63
66
|
).set_archived(tag_schema.archiveRecord is not None),
|
64
67
|
{
|
65
68
|
f.systemName: convert_tag_schema_field_to_field_properties(f, dropdowns_map)
|
66
|
-
for f in
|
67
|
-
tag_schema.allFields
|
68
|
-
if include_archived_fields
|
69
|
-
else [f for f in tag_schema.allFields if not f.archiveRecord]
|
70
|
-
)
|
69
|
+
for f in all_fields
|
71
70
|
},
|
72
71
|
)
|
73
72
|
|
@@ -9,14 +9,14 @@ from liminal.connection.benchling_service import BenchlingService
|
|
9
9
|
|
10
10
|
def pascalize(input_string: str) -> str:
|
11
11
|
return "".join(
|
12
|
-
re.sub(r"[\[\]{}()]", "", word).capitalize()
|
12
|
+
re.sub(r"[\[\]{}():]", "", word).capitalize()
|
13
13
|
for word in re.split(r"[ /_\-]", input_string)
|
14
14
|
)
|
15
15
|
|
16
16
|
|
17
17
|
def to_snake_case(input_string: str) -> str:
|
18
18
|
return "_".join(
|
19
|
-
re.sub(r"[\[\]{}()]", "", word).lower()
|
19
|
+
re.sub(r"[\[\]{}():]", "", word).lower()
|
20
20
|
for word in re.split(r"[ /_\-]", input_string)
|
21
21
|
)
|
22
22
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "liminal-orm"
|
3
|
-
version = "1.0.
|
3
|
+
version = "1.0.4.dev1"
|
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 = ["DynoTx Open Source <opensource@dynotx.com>"]
|
6
6
|
readme = "README.md"
|
@@ -22,7 +22,7 @@ lxml = "^5.3.0"
|
|
22
22
|
[tool.poetry.group.dev.dependencies]
|
23
23
|
ipykernel = "^6.29.5"
|
24
24
|
mkdocs-material = "^9.5.41"
|
25
|
-
mypy = "^1.
|
25
|
+
mypy = "^1.1.1"
|
26
26
|
pre-commit = "^4.0.1"
|
27
27
|
pytest = "^8.3.3"
|
28
28
|
ruff = "^0.6.9"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/properties/base_field_properties.py
RENAMED
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/base/properties/base_schema_properties.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/live_test_dropdown_migration.py
RENAMED
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/cli/live_test_entity_schema_migration.py
RENAMED
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/connection/benchling_connection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/entity_schema_models.py
RENAMED
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/entity_schemas/tag_schema_models.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_folder_item_type.py
RENAMED
File without changes
|
{liminal_orm-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/enums/benchling_naming_strategy.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
|
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-1.0.3.dev1 → liminal_orm-1.0.4.dev1}/liminal/tests/test_entity_schema_compare.py
RENAMED
File without changes
|
File without changes
|