Skip to main content

SDK for interacting with the Benchling Platform.

Project description

Benchling SDK

A Benchling platform Python SDK.

General Usage

For more detailed usage of the SDK, refer to the public release notes, which are stored as part of the project in publish/README.public.md or our getting started guide.

Important! AWS Authentication for Tests

The integration and smoke tests rely on AWS SSM Parameter Store to retrieve secrets for accessing Benchling's APIs. You will need to be authenticated to AWS to execute these successfully.

Examples:

aws-okta exec prod-eng -- poetry run task integration
aws-okta exec prod-eng -- python3 tests/packaged/run_smoke_test.py

Developer Notes

The benching_sdk.benchling.Benchling object serves as the point of entry for the SDK. API calls are organized into services that generally correspond to Capillary documentation.

Each method calling the API is wrapped with an @api_method decorator. This decorator applies several global behaviors which may not be readily obvious including:

  • Conditionally adding some logging on each method call
  • Applying retries via the backoff library when RetryStrategy is configured

Logging in the SDK follows the Python best practice of only adding the logging.NullHandler(). An example of enabling basic logging:

import logging
logging.basicConfig(level=logging.INFO)

For more details on configuring or disabling RetryStrategy, refer to Advanced Use Cases in publish/README.public.md.

HTTP errors like 404 not found are all caught via raise_for_status() and transformed into a standardized BenchlingError which wraps the underlying error for a better general error handling experience. A caught BenchlingError can be inspected to learn the status triggering it, and the full contents of the error response returned from the Benchling server.

Exporting Models

Although generated models are packaged in benchling_api_client.models and its files, we externalize the models via benchling_sdk.models in order to abstract benchling_api_client from users such that they may simply import benchling_sdk.models.ExampleModelClass.

This is accomplished in benchling_sdk/models/__init__.py. This file is automatically generated from a Jinja template in templates/ by running poetry run task models. Changes should be committed to source control. All tasks should be run from the root directory of the project.

Missing models from benchling_api_client are verified by unit test in benchling-sdk/tests/unit/test_models.py.

Configuring pre-push Git Hooks

poetry run pre-commit install --hook-type pre-push

Publishing Releases

The SDK publishes two main releases: manual stable releases and automated preview releases.

Stable Releases:

To create a stable release of the SDK, create a tag in Git from the main branch. CI will then initiate a build, generate the client, and publish the resulting packages.

The published version will reflect the tag, so a tag of 1.0.4 will publish version 1.0.4. Tags that do not meet Poetry's version format will create a failed build when publishing is attempted.

This README will not be published alongside the public package. To modify the public README, modify publish/README.public.md. The changes will be copied over when preparing for publishing.

NOTE: There are some scripts executed that make changes to the working directory and its files with the intention of them being discarded (e.g., during CI). If running the scripts locally, exercise caution and save your changes first.

Preview Releases:

Preview releases are automated and run from the preview_sdk_release.yml GitHub Actions workflow in this project. The workflow is run on a schedule every night at midnight and publishes a new prerelease preview version of the SDK if it finds that there are new commits on main that the current published preview version does not have.

Preview releases use the same CI publishing pipeline as manual releases by creating a new prerelease tag on main. Preview releases only create tags in GitHub, they do not create GitHub releases.

Preview releases will always stay one minor version ahead of the current stable version of the SDK. So if the current stable version is 1.0.4, then the next preview versions published will be 1.1.0a0 then 1.1.0a1 and so on until a 1.1.0 stable version is published. Once 1.1.0 is published the cycle begins again with a preview version of 1.2.0a0.

Integration Tests

Integration tests must be run manually, either via IDE test runners or by command line:

poetry run task integration

Integration tests will not run under CI yet and are currently tightly coupled to cesdktest.bnch.org. They are most effective for quickly running manual regression testing.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

benchling_sdk-1.6.0a9.tar.gz (112.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

benchling_sdk-1.6.0a9-py3-none-any.whl (165.7 kB view details)

Uploaded Python 3

File details

Details for the file benchling_sdk-1.6.0a9.tar.gz.

File metadata

  • Download URL: benchling_sdk-1.6.0a9.tar.gz
  • Upload date:
  • Size: 112.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.7.13 Darwin/21.5.0

File hashes

Hashes for benchling_sdk-1.6.0a9.tar.gz
Algorithm Hash digest
SHA256 2738e1e1a79c2d8aa5b8f6dd92794aa9268a5727af3123678880ed3cb73eecbc
MD5 d80b3d97e308d18e58a6888f015c7219
BLAKE2b-256 d0f2861bd21ebe0bf0775d97dca5f7c7074affa76c7fd5551917d5bd28bdfc03

See more details on using hashes here.

File details

Details for the file benchling_sdk-1.6.0a9-py3-none-any.whl.

File metadata

  • Download URL: benchling_sdk-1.6.0a9-py3-none-any.whl
  • Upload date:
  • Size: 165.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.7.13 Darwin/21.5.0

File hashes

Hashes for benchling_sdk-1.6.0a9-py3-none-any.whl
Algorithm Hash digest
SHA256 eec1bd3e9f74b2235f78fc52c07418fd5492939ff7461275ad2e35e9bdf2b6c9
MD5 e926767c4aeb1de53a309ab554b1ab71
BLAKE2b-256 8474cb49397134b5a3fd55412fb258816cd9db071f3961f21b4da96e6091c9f6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page