Skip to content

Release notes

For full release notes, please visit the GitHub Releases page. Release versions follow semantic versioning. This page will document migration steps needed for major and minor version changes.

v3.1.0

github pypi

🗒️ Summary

This release adds the ability to define tenant-specific configuration flags for entity schemas. The goal of this is to reflect Benchling's tenant level configuration flags and propagate the logic across Liminal. We have started with the schemas_enable_change_warehouse_name flag. When set to True, this flag allows users to change the warehouse name of entity schemas and fields and migrate the changes to your tenants.

Upgrade Steps

  • PR #120: adds ability to define tenant-specific configuration flags for entity schemas.

  • Upgrade step: Remove the warehouse_access parameter from the BenchlingConnection object. Set the config_flags parameter on your BenchlingConnection object(s) to a TenantConfigFlags object. See documentation for BenchlingConnection for full details.

v3.0.0

github pypi

🗒️ Summary

v3.0.0 release brings Liminal's coverage of entity schemas to 100% parity with Benchling, a big milestone in Liminal's roadmap!! Any property that can be defined on Entity Schemas in Benchling can now be defined and migrated through Liminal. With this release, user's will now be able to define unit aware fields and "Show bases in expanded view" in their Liminal models defined in code.

  • show_bases_in_expanded_view has been added to the SchemaProperties parameters Screenshot 2025-02-20 at 8 26 34 AM

  • unit_name and decimal_places has been added to the Column parameters. Screenshot 2025-02-20 at 8 25 30 AM

Next up are results schemas 🚀

Upgrade Steps

  • PR #114: adds ability to define unit aware fields for entity schema fields.
  • PR #113: adds ability to define show_bases_in_expanded_view for entity schema fields.

  • Upgrade step: The guidance for migrating to v3.0.0 is after you've upgraded your liminal package to the latest version, regenerate your schemas defined in code using liminal generate-files <benchling_tenant> -p [<write_path>]. This will write your dropdown/schema files based on your Benchling tenant to a specified path, this time with the new properties that are now covered by Liminal. If you do not have many enitty schemas, it may be easier to manually update your schema files with the new properties. Note, you may have to comment out the schema/dropdown imports in your env.py file before generating the files since there may be some breaking changes to your current schema/dropdown files.

v2.0.0

🗒️ Summary

v2.0.0 brings Liminal closer to reaching 100% parity with Benchling Entity Schemas. This release introduces the ability to define namesets, chip naming properties, and constraints on your Liminal entity schema models. Validation has also gone through a major change making it MUCH easier to define custom business logic as validation rules for entities. Now, users can use the @liminal_validator decorator to define validation functions within Liminal models. When TestSchema.validate() is run, these decorated functions are run on all queried entity rows from the Benchling warehouse, catching any Exceptions raised and returned a BenchlingValidatorReport.

  • constraint_fields, include_registry_id_in_chips, use_registry_id_as_label added to SchemaProperties parameters. __name_template__ can now be defined on Liminal models Screenshot 2025-02-05 at 10 30 40 AM

  • New pattern for defining validation rules
from liminal.validation import ValidationSeverity, liminal_validator

class Pizza(BaseModel, CustomEntityMixin):
    ...

    @liminal_validator
    def cook_time_and_temp_validator(self) -> None:
        if self.cook_time is not None and self.cook_temp is None:
            raise ValueError("Cook temp is required if cook time is set")
        if self.cook_time is None and self.cook_temp is not None:
            raise ValueError("Cook time is required if cook temp is set")

Next release will aim to finish off coverage for Entity Schemas!

Upgrade Steps

  • PR #88: adds ability to defined name templates for entity schemas
  • PR #84: adds ability to define chip naming for entity schemas
  • PR #82: adds ability to define constraints for entity schemas.

  • Upgrade step: The guidance for migrating to v2.0.0 is to regenerate your schemas defined in code using liminal generate-files <benchling_tenant> -p [<write_path>]. This will recreate your dropdown/schema files, this time with the new properties covered by Liminal. If you do not have many enitty schemas, it may be easier to manually update your schema files with the new properties.

  • PR #68: refactors how validators are done in Liminal using a decorator pattern. Refer to the validators page for full details on implementation.

  • Upgrade step: If you don't have validators defined, no action is needed! Otherwise, you will need to manually refactor your validators to use the new pattern.

v1.1.0

github pypi

Upgrade Steps

  • PR #64: makes query function optional in schema classes.
    • Remove query functions from schema classes, unless you have custom logic.
  • PR #72: block warehouse name changes to operations.
    • BenchlingConnetion now takes in warehouse_access parameter. If you do not have warehouse access on your Benchling tenant, set this to False.
  • PR #53: move field wh name to base field props.

    • Update historical revision files with changed operation signatures.
    # Replace UpdateEntitySchemaName with...
    UpdateEntitySchema('old_warehouse_name', 
        BaseSchemaProperties(warehouse_name='new_warehouse_name'))
    
    # Replace UpdateEntitySchemaFieldName with...
    UpdateEntitySchemaField('entity_schema_warehouse_name', 
        'field_warehouse_name', 
        BaseFieldProperties(warehouse_name='new_warehouse_name'))
    
    # CreateEntitySchemaField no longer takes wh_field_name as a parameter. 
    # Now gets passed in via BaseFieldProperties.
    CreateEntitySchemaField('entity_schema_warehouse_name', 
        BaseFieldProperties(warehouse_name='new_warehouse_name', ...))
    
    # CreateEntitySchema takes in a list of fields instead of dict[str, Benchling FieldProperties]
    CreateEntitySchema(BaseSchemaProperties(...), [BaseFieldProperties(...), ...])
    
  • PR #63: numpy and pandas version tightening.

    • numpy = “^1.23.5”
    • pandas = ">=1.5.3" --> “^1.5.3"