liminal-orm 2.0.2__tar.gz → 2.0.3a1__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 (67) hide show
  1. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/PKG-INFO +1 -1
  2. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/validation/__init__.py +30 -36
  3. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/pyproject.toml +1 -1
  4. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/LICENSE.md +0 -0
  5. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/README.md +0 -0
  6. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/__init__.py +0 -0
  7. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/base_dropdown.py +0 -0
  8. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/base_operation.py +0 -0
  9. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/base_validation_filters.py +0 -0
  10. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/compare_operation.py +0 -0
  11. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/name_template_parts.py +0 -0
  12. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/properties/base_field_properties.py +0 -0
  13. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/properties/base_name_template.py +0 -0
  14. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/properties/base_schema_properties.py +0 -0
  15. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/base/str_enum.py +0 -0
  16. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/cli/cli.py +0 -0
  17. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/cli/controller.py +0 -0
  18. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/cli/live_test_dropdown_migration.py +0 -0
  19. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/cli/live_test_entity_schema_migration.py +0 -0
  20. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/connection/__init__.py +0 -0
  21. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/connection/benchling_connection.py +0 -0
  22. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/connection/benchling_service.py +0 -0
  23. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/dropdowns/api.py +0 -0
  24. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/dropdowns/compare.py +0 -0
  25. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/dropdowns/generate_files.py +0 -0
  26. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/dropdowns/operations.py +0 -0
  27. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/dropdowns/utils.py +0 -0
  28. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/api.py +0 -0
  29. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/compare.py +0 -0
  30. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/entity_schema_models.py +0 -0
  31. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/generate_files.py +0 -0
  32. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/operations.py +0 -0
  33. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/tag_schema_models.py +0 -0
  34. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/entity_schemas/utils.py +0 -0
  35. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/__init__.py +0 -0
  36. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_api_field_type.py +0 -0
  37. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_entity_type.py +0 -0
  38. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_field_type.py +0 -0
  39. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_folder_item_type.py +0 -0
  40. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_naming_strategy.py +0 -0
  41. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/benchling_sequence_type.py +0 -0
  42. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/enums/name_template_part_type.py +0 -0
  43. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/external/__init__.py +0 -0
  44. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/mappers.py +0 -0
  45. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/migrate/components.py +0 -0
  46. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/migrate/revision.py +0 -0
  47. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/migrate/revisions_timeline.py +0 -0
  48. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/migrate/utils.py +0 -0
  49. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/base.py +0 -0
  50. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/base_model.py +0 -0
  51. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/base_tables/registry_entity.py +0 -0
  52. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/base_tables/schema.py +0 -0
  53. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/base_tables/user.py +0 -0
  54. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/column.py +0 -0
  55. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/mixins.py +0 -0
  56. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/name_template.py +0 -0
  57. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/name_template_parts.py +0 -0
  58. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/relationship.py +0 -0
  59. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/orm/schema_properties.py +0 -0
  60. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/py.typed +0 -0
  61. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/tests/__init__.py +0 -0
  62. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/tests/conftest.py +0 -0
  63. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/tests/from benchling_sdk.py +0 -0
  64. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/tests/test_dropdown_compare.py +0 -0
  65. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/tests/test_entity_schema_compare.py +0 -0
  66. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/utils.py +0 -0
  67. {liminal_orm-2.0.2 → liminal_orm-2.0.3a1}/liminal/validation/validation_severity.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: liminal-orm
3
- Version: 2.0.2
3
+ Version: 2.0.3a1
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
  Home-page: https://github.com/dynotx/liminal-orm
6
6
  Author: DynoTx Open Source
@@ -101,21 +101,36 @@ class BenchlingValidatorReport(BaseModel):
101
101
  )
102
102
 
103
103
 
104
- def _liminal_decorator(
105
- func: Callable[[type["BenchlingBaseModel"]], BenchlingValidatorReport | None],
106
- validator_level: ValidationSeverity,
107
- validator_name: str | None,
104
+ def liminal_validator(
105
+ func: Callable[[type["BenchlingBaseModel"]], BenchlingValidatorReport | None]
106
+ | None = None,
107
+ *,
108
+ validator_level: ValidationSeverity = ValidationSeverity.LOW,
109
+ validator_name: str | None = None,
108
110
  ) -> Callable:
109
- """Core decorator logic for liminal_validator."""
110
- sig = inspect.signature(func)
111
- params = list(sig.parameters.values())
112
- if not params or params[0].name != "self" or len(params) > 1:
113
- raise TypeError(
114
- "Validator must be defined in a schema class, where the only argument to this validator must be 'self'."
115
- )
111
+ """A decorator for a function that validates a Benchling entity, defined on a schema class.
112
+ Can be used with or without parameters. Wraps around any exceptions raised by the validator function,
113
+ and returns a BenchlingValidatorReport.
116
114
 
117
- if validator_name is None:
118
- validator_name = pascalize(func.__name__)
115
+ Parameters
116
+ ----------
117
+ validator_level: ValidationSeverity
118
+ The severity level of the validation report. Defaults to ValidationSeverity.LOW.
119
+ validator_name: str | None
120
+ The name of the validator. Defaults to the PascalCase version of the function name.
121
+ """
122
+ if func is None:
123
+ return partial(
124
+ liminal_validator,
125
+ validator_level=validator_level,
126
+ validator_name=validator_name,
127
+ )
128
+ elif not isinstance(
129
+ func, Callable[[["BenchlingBaseModel"]], BenchlingValidatorReport | None]
130
+ ):
131
+ raise ValueError(
132
+ "Parameters passed to liminal_validator must be keyword arguments, not positional arguments."
133
+ )
119
134
 
120
135
  @wraps(func)
121
136
  def wrapper(self: type["BenchlingBaseModel"]) -> BenchlingValidatorReport:
@@ -129,36 +144,15 @@ def _liminal_decorator(
129
144
  valid=False,
130
145
  level=validator_level,
131
146
  entity=self,
132
- validator_name=validator_name,
147
+ validator_name=validator_name or pascalize(func.__name__),
133
148
  message=str(e),
134
149
  )
135
150
  return BenchlingValidatorReport.create_validation_report(
136
151
  valid=True,
137
152
  level=validator_level,
138
153
  entity=self,
139
- validator_name=validator_name,
154
+ validator_name=validator_name or pascalize(func.__name__),
140
155
  )
141
156
 
142
157
  setattr(wrapper, "_is_liminal_validator", True)
143
158
  return wrapper
144
-
145
-
146
- def liminal_validator(
147
- validator_level: ValidationSeverity = ValidationSeverity.LOW,
148
- validator_name: str | None = None,
149
- ) -> Callable:
150
- """A decorator for a function that validates a Benchling entity, defined on a schema class.
151
- Wraps around any exceptions raised by the validator function, and returns a BenchlingValidatorReport.
152
-
153
- Parameters
154
- ----------
155
- validator_level: ValidationSeverity
156
- The severity level of the validation report. Defaults to ValidationSeverity.LOW.
157
- validator_name: str | None =
158
- The name of the validator. Defaults to the PascalCase version of the function name.
159
- """
160
- return partial(
161
- _liminal_decorator,
162
- validator_level=validator_level,
163
- validator_name=validator_name,
164
- )
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "liminal-orm"
3
- version = "2.0.2"
3
+ version = "2.0.3a1"
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"
File without changes
File without changes