Skip to main content

Yet another etcd-client API binding based on the Rust's etcd-client package

Project description

etcd-client-py

PyPI release version Wheels

Python wrapper of etcd_client built with PyO3.

Installation

pip install etcd_client

Basic usage

from etcd_client import EtcdClient
etcd = EtcdClient(['http://127.0.0.1:2379'])

Actual connection establishment with Etcd's gRPC channel will be done when you call EtcdClient.connect().

async def main():
    async with etcd.connect() as communicator:
        await communicator.put('testkey'.encode(), 'testvalue'.encode())
        value = await communicator.get('testkey'.encode())
        print(bytes(value).decode())  # testvalue

Working with key prefixes

EtcdCommunicator.get_prefix(prefix) returns a list of key-value pairs matching the given prefix.

async def main():
    async with etcd.connect() as communicator:
        await communicator.put('/testdir'.encode(), 'root'.encode())
        await communicator.put('/testdir/1'.encode(), '1'.encode())
        await communicator.put('/testdir/2'.encode(), '2'.encode())
        await communicator.put('/testdir/2/3'.encode(), '3'.encode())

        test_dir = await communicator.get_prefix('/testdir'.encode())

        for resp in test_dir:
            # ['/testdir', 'root']
            # ['/testdir/1', '1']
            # ['/testdir/2', '2']
            # ['/testdir/2/3', '3']
            print([bytes(v).decode() for v in resp])

Automatic runtime cleanup

The tokio runtime is automatically cleaned up when the last client context exits. In most cases, no explicit cleanup is needed:

import asyncio
from etcd_client import EtcdClient

async def main():
    etcd = EtcdClient(['http://127.0.0.1:2379'])
    async with etcd.connect() as communicator:
        await communicator.put('testkey'.encode(), 'testvalue'.encode())
        value = await communicator.get('testkey'.encode())
        print(bytes(value).decode())
    # Runtime automatically cleaned up when context exits

asyncio.run(main())

The library uses reference counting to track active client contexts. When the last context exits, the tokio runtime is gracefully shut down, waiting up to 5 seconds for pending tasks to complete. If you create new clients after this, the runtime is automatically re-initialized.

For advanced use cases requiring explicit control, cleanup_runtime() is available:

from etcd_client import cleanup_runtime

# Force cleanup at a specific point (usually not needed)
cleanup_runtime()

Operating with Etcd lock

Just like EtcdClient.connect(), you can easily use etcd lock by calling EtcdClient.with_lock(lock_opts).

async def first():
    async with etcd.with_lock(
        EtcdLockOption(
            lock_name='foolock'.encode(),
        )
    ) as communicator:
        value = await communicator.get('testkey'.encode())
        print('first:', bytes(value).decode(), end=' | ')

async def second():
    await asyncio.sleep(0.1)
    async with etcd.with_lock(
        EtcdLockOption(
            lock_name='foolock'.encode(),
        )
    ) as communicator:
        value = await communicator.get('testkey'.encode())
        print('second:', bytes(value).decode())

async with etcd.connect() as communicator:
    await communicator.put('testkey'.encode(), 'testvalue'.encode())
await asyncio.gather(first(), second())  # first: testvalue | second: testvalue

Lock timeout

Adding timeout parameter to EtcdLockOption will add a timeout to the lock acquiring process.

async def second():
    await asyncio.sleep(0.1)
    async with etcd.with_lock(
        EtcdLockOption(
            lock_name='foolock'.encode(),
            timeout=5.0,
        )
    ) as communicator:
        value = await communicator.get('testkey'.encode())
        print('second:', bytes(value).decode())

Lock TTL

Adding ttl parameter to EtcdLockOption will force the lock to be released after the given seconds.

async def first():
    async with etcd.with_lock(
        EtcdLockOption(lock_name="foolock".encode(), ttl=5)
    ) as communicator:
        await asyncio.sleep(10)

async def second():
    start = time.time()
    async with etcd.with_lock(
        EtcdLockOption(lock_name="foolock".encode(), ttl=5)
    ) as communicator:
        print(f"acquired lock after {time.time() - start} seconds")

# 'second' acquired lock after 5.247947931289673 seconds
done, _ = await asyncio.wait([
    asyncio.create_task(first()),
    asyncio.create_task(second())
], return_when=asyncio.FIRST_COMPLETED)

for task in done:
    print(task.result())

Watch

You can watch changes on a key with EtcdCommunicator.watch(key).

async def watch():
    async with etcd.connect() as communicator:
        async for event in communicator.watch('testkey'.encode()):
            print(event.event, bytes(event.value).decode())

async def update():
    await asyncio.sleep(0.1)
    async with etcd.connect() as communicator:
        await communicator.put('testkey'.encode(), '1'.encode())
        await communicator.put('testkey'.encode(), '2'.encode())
        await communicator.put('testkey'.encode(), '3'.encode())
        await communicator.put('testkey'.encode(), '4'.encode())
        await communicator.put('testkey'.encode(), '5'.encode())

await asyncio.gather(watch(), update())
# WatchEventType.PUT 1
# WatchEventType.PUT 2
# WatchEventType.PUT 3
# WatchEventType.PUT 4
# WatchEventType.PUT 5

Watch with prefix

Watching changes on keys with a specific prefix can be done with EtcdCommunicator.watch_prefix(key_prefix).

async def watch():
    async with etcd.connect() as communicator:
        async for event in communicator.watch_prefix('/testdir'.encode()):
            print(event.event, bytes(event.key).decode(), bytes(event.value).decode())

async def update():
    await asyncio.sleep(0.1)
    async with etcd.connect() as communicator:
        await communicator.put('/testdir'.encode(), '1'.encode())
        await communicator.put('/testdir/foo'.encode(), '2'.encode())
        await communicator.put('/testdir/bar'.encode(), '3'.encode())
        await communicator.put('/testdir/foo/baz'.encode(), '4'.encode())

await asyncio.gather(watch(), update())
# WatchEventType.PUT /testdir 1
# WatchEventType.PUT /testdir/foo 2
# WatchEventType.PUT /testdir/bar 3
# WatchEventType.PUT /testdir/foo/baz 4

Transaction

You can run etcd transactions by calling EtcdCommunicator.txn(txn).

Constructing compares

Constructing compare operations can be done using the Compare class.

from etcd_client import Compare, CompareOp
compares = [
    Compare.value('cmpkey1'.encode(), CompareOp.EQUAL, 'foo'.encode()),
    Compare.value('cmpkey2'.encode(), CompareOp.GREATER, 'bar'.encode()),
]

Executing transactions

async with etcd.connect() as communicator:
    await communicator.put('cmpkey1'.encode(), 'foo'.encode())
    await communicator.put('cmpkey2'.encode(), 'baz'.encode())
    await communicator.put('successkey'.encode(), 'asdf'.encode())

    compares = [
        Compare.value('cmpkey1'.encode(), CompareOp.EQUAL, 'foo'.encode()),
        Compare.value('cmpkey2'.encode(), CompareOp.GREATER, 'bar'.encode()),
    ]

    res = await communicator.txn(Txn().when(compares).and_then([TxnOp.get('successkey'.encode())]))
    print(res)  # TODO: Need to write response type bindings.

How to build

Prerequisites

  • The Rust development environment (2021 edition or later) using rustup or your package manager
  • The Python development environment (3.10 or later) using pyenv or your package manager

Build instructions

First, create a virtualenv (using the standard venv package, pyenv, or your preferred tool). Then, install the PEP-517 build toolchain and run it.

pip install -U pip build setuptools
python -m build --sdist --wheel

This will automatically install build dependencies like maturin and build the wheel and source distributions under the dist/ directory.

How to develop and test

Setup development environment

This project uses uv for fast Python package management.

# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install all dependencies and build the package
make install

# Or manually:
uv sync --all-extras  # Installs all dependencies from pyproject.toml
uv run maturin develop  # Builds and installs the Rust extension

Code quality checks

This project uses ruff for linting/formatting and mypy for type checking:

make fmt       # Format all code (Python + Rust)
make lint      # Lint all code (Python + Rust)
make fix       # Auto-fix all issues (Python + Rust)
make typecheck # Type check Python code
make check     # Run all checks

Running tests

make test      # Run tests using uv
uv run pytest  # Or directly with uv

# Tests use testcontainers to automatically spin up etcd

Project details


Download files

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

Source Distribution

etcd_client_py-0.5.1.tar.gz (143.5 kB view details)

Uploaded Source

Built Distributions

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

etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

etcd_client_py-0.5.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.6 MB view details)

Uploaded CPython 3.14tmacOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

etcd_client_py-0.5.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.6 MB view details)

Uploaded CPython 3.14macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

etcd_client_py-0.5.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.6 MB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

etcd_client_py-0.5.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.6 MB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

etcd_client_py-0.5.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.6 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file etcd_client_py-0.5.1.tar.gz.

File metadata

  • Download URL: etcd_client_py-0.5.1.tar.gz
  • Upload date:
  • Size: 143.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for etcd_client_py-0.5.1.tar.gz
Algorithm Hash digest
SHA256 7809b1adfa58c0e84cbaac166c7e76ce5987558426acaa8651075dd2315a9212
MD5 1e56174eb1a6b4025183772236f64415
BLAKE2b-256 bbd2c79d349cd668a24a3647b17db2396c59393ba6b368279abbe1169ba39bc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1.tar.gz:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 700a5e7decc1e610c5f199952b1d5fb5c14632a9d33a0642c55d20d687a20f57
MD5 d3fa517faf519820742c5455efed1ff7
BLAKE2b-256 33f1722209166948cad28666eb405c039061e3d243e5f49f117631d1f61239c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 343f8cdf7838837b5d46f4d2937a061ca00850884bdb2d02adbed9e951de858c
MD5 057f7144b3a3d1c715715b3d4f18cd71
BLAKE2b-256 ef460dceb5fd907e77fa4c80add21f96a08985266161d80c82e2a2f51fc986ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 d6a4bfa04b8f95e88f67797df536959b3e6e0f386b57fea499eda48baf6d86a0
MD5 1ec4dabd14e4b194c92880729602a56c
BLAKE2b-256 aa4f3b45ff283a34e4c3a14944bdfaa026a1cab605928fecb703a6516824ff5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8a8fe3810519f2ffe768f1c4e66c0ed131fbfe2baa26eb9954e077dace80c98d
MD5 4206dfbda6b2ccd401bc2340da8f4cae
BLAKE2b-256 d9913c985cece1a15f09621a11f62a35c95a7be4d4c005890fd46e053004d7e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ed46ecda5c03ee2a9d02b71d356b17dc9f952a39421a737b74641a811a8ed48
MD5 a67dd75fe4f442e0a4cf4a6fd493033b
BLAKE2b-256 efe8151f535656d41fed4a6d3c6ab5ba8d010dca11cf738289c2a1523ab6a58d

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 285e8735dc1d6562ac28d97f2f893b1324473bcd10eeef2fe9e34165fd94f133
MD5 43c27eb82e4454864a23e5220d29e7b3
BLAKE2b-256 1d03fcddc60c758acb030169ce6f5a9366bfffc52dc43809b95895ad3ec21c65

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 63d245dcecdf845aa76b4da4f73d00919f07eb35788e683ee4f809e188c53375
MD5 a090a6354989e6aa88fd4483f3abb49e
BLAKE2b-256 3f6ce6b2cf73127561e9c9bae8a41c017be346deeb54d0f8128109c2581beae6

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c8bc311f225147e3260c6416d4c66146dd291e5af5c6b8120d0b410cce89a8d1
MD5 031e9ec272ca3cf518bd7bc87a118fc7
BLAKE2b-256 a2d16aad26b2f0581db64650f640c0d7968bbe25cc6a2fc35f7d66d4c0347f6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 dee52d29cd2d441ecebbc84b80c3c08370b0b5859dc5b165bf9133bd209e2565
MD5 de8cc6cdefecf15c204dde23fdb50a09
BLAKE2b-256 ab922f21e778b884729d412613713d33eda98c644fbfb03bca4bb0ded94298ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e877a31128928ef1c05b92bbdf449c647e785a1321bacf43e9208d8afab9f90c
MD5 1726e5ad0dd76fc0ac5d7992cda2548f
BLAKE2b-256 0618020314d598cb0c1af91a5cb53a5c0382600acc0398210d87a084c8f93d83

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bcde1cb9582638d9a1874a4840bda9dc7107e34a13c712b955efe5982d0d05be
MD5 606338adc81fdc9e213383bf7d740de5
BLAKE2b-256 7cc97b8e101840e9d95102a132dbd819153595a9c003fcf9d05f89c4dda064d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 3cb43c1bfc72cd0308f297773ac1fda165bcccbda1b91ec4877c47b1dd7782f9
MD5 ea4d8594cd92d438bca3300e5540acef
BLAKE2b-256 5bd85f7d168b2bf48ccd3f0aef1b7ee546e681f10d60e6003a95bdb87189da52

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1d3542dbb21b95acc33be3a566b30d1b396bc2e0d7e72ff314ba280f5cafca4a
MD5 02357b368c22ecd5dac0490318a51c24
BLAKE2b-256 c7ba98134a57f9cb574aafbd8f569e232258dcee29c01b909a6c105d89bc5b2a

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44530f2e480724841472a5cdd8cff191b4db981de8b5537c874b2b8bff2b5c8d
MD5 7cda36b354ee60b21485ed2aa7a14130
BLAKE2b-256 01094e245cd7a293bcc3351f71da8755c8c50d9e0b82d26d009e99d4156550fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file etcd_client_py-0.5.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for etcd_client_py-0.5.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 abe0a0da592343a1c31eec11d179663c40cf000a7eb36d3ad3c89342067ad634
MD5 7d1f54cb75f13cd81c6e8a7d124c35e3
BLAKE2b-256 9bdf47f22f9a8bfbfcb26b2b264e6b9b545c7a3020ee5bc5988807683b7454d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for etcd_client_py-0.5.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: ci.yml on lablup/etcd-client-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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