Skip to main content

pyservicebinding

Kubernetes Service Binding Library for Python Applications

PyPI - Downloads Release Supported Python Versions CI

The Service Binding Specification for Kubernetes standardizes exposing backing service secrets to applications. This project provides a Python module to consume the bindings projected into the container. The Application Projection section of the spec describes how the bindings are projected into the application. The primary mechanism of projection is through files mounted at a specific directory. The bindings directory path can be discovered through SERVICE_BINDING_ROOT environment variable. The operator must have injected SERVICE_BINDING_ROOT environment to all the containers where bindings are created.

Within this service binding root directory, there could be multiple bindings projected from different Service Bindings. For example, suppose an application requires to connect to a database and cache server. In that case, one Service Binding can provide the database, and the other Service Binding can offer bindings to the cache server.

Let's take a look at the example given in the spec:

$SERVICE_BINDING_ROOT
├── account-database
│   ├── type
│   ├── provider
│   ├── uri
│   ├── username
│   └── password
└── transaction-event-stream
    ├── type
    ├── connection-count
    ├── uri
    ├── certificates
    └── private-key

In the above example, there are two bindings under the SERVICE_BINDING_ROOT directory. The account-database and transaction-event-system are the names of the bindings. Files within each bindings directory has a special file named type, and you can rely on the value of that file to identify the type of the binding projected into that directory. In certain directories, you can also see another file named provider. The provider is an additional identifier to narrow down the type further. This module use the type field and, optionally, provider field to look up the bindings.

Installation

You can install this package using pip:

pip install pyservicebinding

Usage

The ServiceBinding object can be instantiated like this:

from pyservicebinding import binding
try:
    sb = binding.ServiceBinding()
except binding.ServiceBindingRootMissingError as msg:
    # log the error message and retry/exit
    print("SERVICE_BINDING_ROOT env var not set")

To get bindings for a specific type, say postgresql:

bindings_list = sb.bindings("postgresql")

To get bindings for a specific type, say mysql, and provider, say mariadb:

bindings_list = sb.bindings("mysql", "mariadb")

To get all bindings irrespective of the type and provider:

bindings_list = sb.all_bindings()

This is the complete API of the module:

class ServiceBindingRootMissingError(Exception):
    pass


class ServiceBinding:

    def __init__(self):
        """
        - raise ServiceBindingRootMissingError if SERVICE_BINDING_ROOT env var not set
        """

    def all_bindings(self) -> list[dict[str, str]]:
        """Get all bindings as a list of dictionaries

        - return empty list if no bindings found
        """

    def bindings(self, _type: str, provider: typing.Optional[str] = None) -> list[dict[str, str]]:
        """Get filtered bindings as a list of dictionaries

        - return empty dictionary if no binding found
        - filter the result with the given _type input
        - if provider input is given, filter bindings using the given type and provider
        """

Release files for pyservicebinding 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyservicebinding 0.3.0
File Size Uploaded
pyservicebinding-0.3.0.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyservicebinding 0.3.0
File Interpreter ABI Platform
pyservicebinding-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 19.3 kB

Release files / pyservicebinding-0.3.0.tar.gz

Download URL pyservicebinding-0.3.0.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a90da775bb4e54aac82ea06457fbf29c2ad1f4f10b3eb895dfd8fb679ae9f6fe
BLAKE2b-256 checksum
How to use checksums
4370c0accaab949bc7e0e9e632d4ca432ac172f372a305d82f0802e10a5d8e80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.12

Release files / pyservicebinding-0.3.0-py3-none-any.whl

Download URL pyservicebinding-0.3.0-py3-none-any.whl
Size 10.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c6b2a9d29fa3d85a6932e27fd9ef59b6b92148d8f426b8b413434d4aff5e32f
BLAKE2b-256 checksum
How to use checksums
78a52a891984a8ade71255edc5e2fdcf9ed9d0060bead132aee4acd9be1c9f8e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.9.12

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page