Skip to main content

Serve Python (or C++) objects across a LAN using something like JSON-RPC

Project description

https://badge.fury.io/py/tuberd.svg https://github.com/gsmecher/tuberd/actions/workflows/package.yml/badge.svg

Tuber Server and Client

Tuber is a C++ server and Python client for exposing an instrumentation control plane across a network.

On a client, you can write Python code like this:

>>> some_resource.increment([1, 2, 3, 4, 5])
[2, 3, 4, 5, 6]

…and end up with a remote method call on a networked resource written in Python or (more usually) C++. The C++ implementation might look like this:

class SomeResource {
public:
    std::vector<int> increment(std::vector<int> x) {
        std::ranges::for_each(x, [](int &n) { n++; });
        return x;
    };
};

On the client side, Python needs to know where to find the server. On the server side, the C++ code must be registered with pybind11 (just as any other pybind11 code) and the tuber server. Other than that, however, there is no ceremony and no boilerplate.

Its main features and design principles are:

  • Pythonic call styles, including *args, **kwargs, and DocStrings.

  • JSON and CBOR support for efficient and friendly serialization of return values.

  • “Less-is-more” approach to code. For example, Tuber uses pybind11 and C++ as a shim between C and Python, because the combination gives us the shortest and most expressive way to produce the results we want. It pairs excellently with orjson (as a JSON interface) or cbor2 (as a CBOR interface), which efficiently serialize (for example) NumPy arrays created in C++ across the network.

  • Schema-less RPC using standard-ish protocols (HTTP 1.1, JSON, CBOR, and something like JSON-RPC). Avoiding a schema allows server and client code to be independently and seamlessly up- and downgraded, with differences between exposed APIs only visible at the sites where RPC calls are made.

  • A mature, quick-ish, third-party, low-overhead, low-prerequisite embedded webserver. Tuber uses libhttpserver, which in turn, is a C++ wrapper around the well-established libmicrohttpd. We use the thread-per-connection configuration because a single keep-alive connection with a single client is the expected “hot path”; C10K-style server architectures wouldn’t be better.

  • High performance when communicating with RPC endpoints, using:

    • HTTP/1.1 Keep-Alive to avoid single-connection-per-request overhead. See this Wikipedia page for details.

    • A call API that (optionally) allows multiple RPC calls to be combined and dispatched together.

    • Client-side caches for remote properties (server-side constants)

    • Python 3.x’s aiohttp/asyncio libraries to asynchronously dispatch across multiple endpoints (e.g. multiple boards in a crate, each of which is an independent Tuber endpoint.)

  • A friendly interactive experience using Jupyter/IPython-style REPL environments. Tuber servers export metadata that can be used to provide DocStrings and tab-completion for RPC resources.

  • The ability to serve a web-based UI using static JavaScript, CSS, and HTML.

Anti-goals of this Tuber server include the following:

  • No authentication/encryption is used. For now, network security is strictly out-of-scope. (Yes, it feels naïve to write this in 2022.)

  • The additional complexity of HTTP/2 and HTTP/3 protocols are not justified. HTTP/1.1 keep-alive obviates much of the performance gains promised by connection multiplexing.

  • The performance gains possible using a binary RPC protocol do not justify the loss of a human-readable, browser-accessible JSON protocol.

  • The use of newer, better languages than C++ (server side) or Python (client side). The instruments Tuber targets are likely to be a polyglot stew, and I am mindful that every additional language or runtime reduces the project’s accessibility to newcomers. Perhaps pybind11 will be eclipsed by something in Rust one day - for now, the ability to make casual cross-language calls is essential to keeping Tuber small. (Exception: the orjson JSON library is a wonderful complement to tuber and I recommend using them together!)

Although the Tuber server hosts an embedded Python interpreter and can expose embedded resources coded in ordinary Python, it is intended to expose C/C++ code. The Python interpeter provides a convenient, Pythonic approach to attribute and method lookup and dispatch without the overhead of a fully interpreted embedded runtime.

Tuber is licensed using the 3-clause BSD license (BSD-3-Clause). This software is intended to be useful, and its licensing is intended to be pragmatic. If licensing is a stumbling block for you, please contact me at gsmecher@threespeedlogic.com.

Installation

Pre-built wheels for Linux and macOS operating systems are available on PyPI for CPython 3.8+:

pip install tuberd

Building from source requires the libmicrohttpd and libhttpserver dependencies. To simplify the build process, the wheels/install_deps.sh script can be used to build all the dependencies locally and compile against them. In this instance, cmake should be able to discover the appropriate paths for all dependencies. Use the BUILD_DEPS cmake argument to trigger this build with pip:

CMAKE_ARGS="-DBUILD_DEPS=yes" pip install tuberd

If you prefer to build the dependencies manually, to ensure that cmake can find the libhttpserver library, you may need to add the path where the FindLibHttpServer.cmake file is installed to the CMAKE_MODULE_PATH option, for example:

CMAKE_ARGS="-DCMAKE_MODULE_PATH=/usr/local/share/cmake/Modules" pip install tuberd

Optional dependencies may be installed to enable alternative encoding schemes (cbor, orjson) with and without numpy support, or the standard or asyncio-enabled client interface:

pip install tuberd[client,async,cbor,numpy,orjson]

To run the test suite, install the development dependencies:

pip install tuberd[dev]

Client Installation

The above tuberd package includes both the server and client components. If you require just the python components to run the client interface, pre-built wheels of the client code are available on PyPI for Python 3.

pip install tuber-client

To include the dependencies for the asyncio-enabled interface and/or cbor encoding with or without numpy support:

pip install tuber-client[async,cbor,numpy]

Benchmarking

With concurrency 1 and keep-alive enabled, a 1M request benchmark can be generated as follows:

$ sudo apt-get install apache2-utils
$ echo '{ "object":"Wrapper", "method":"increment", "args":[[
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10,
     1,2,3,4,5,6,7,8,9,10 ]]}' > benchmark.json
$ for n in `seq 100`
  do
      ab -q -k -n 10000 -c 1 -p benchmark.json -T application/json http://localhost:8080/tuber
  done | awk '
     BEGIN { delete A }
     /Time taken/ { A[length(A)+1] = $5; }
     END { printf("x = [ "); for(i in A) printf(A[i] ", "); print "];" }'

These results are formatted suitably for the following Python snippet:

import matplotlib.pyplot as plt
plt.hist(x)
plt.legend()
plt.grid(True)
plt.savefig('histogram.png')

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

tuberd-0.18.4.tar.gz (50.5 kB view details)

Uploaded Source

Built Distributions

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

tuberd-0.18.4-cp314-cp314-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp314-cp314-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (642.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (606.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp314-cp314-macosx_11_0_arm64.whl (479.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

tuberd-0.18.4-cp313-cp313-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp313-cp313-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (642.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (606.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp313-cp313-macosx_11_0_arm64.whl (479.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

tuberd-0.18.4-cp312-cp312-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp312-cp312-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (642.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (606.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp312-cp312-macosx_11_0_arm64.whl (479.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

tuberd-0.18.4-cp311-cp311-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp311-cp311-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (640.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (604.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp311-cp311-macosx_11_0_arm64.whl (477.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

tuberd-0.18.4-cp310-cp310-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp310-cp310-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (639.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (603.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp310-cp310-macosx_11_0_arm64.whl (476.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

tuberd-0.18.4-cp39-cp39-musllinux_1_2_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

tuberd-0.18.4-cp39-cp39-musllinux_1_2_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

tuberd-0.18.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (640.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

tuberd-0.18.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (603.4 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

tuberd-0.18.4-cp39-cp39-macosx_11_0_arm64.whl (476.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file tuberd-0.18.4.tar.gz.

File metadata

  • Download URL: tuberd-0.18.4.tar.gz
  • Upload date:
  • Size: 50.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tuberd-0.18.4.tar.gz
Algorithm Hash digest
SHA256 ed6a9e6d2858f7b79ed679cfb87d743d3e97044c050e6b140b6d65bdf8130222
MD5 d1d135ad9cf63dcacc8427c84778fcbe
BLAKE2b-256 d9575a762970109edbd6d1e580c23199f862fe23b3fdb1282ada0479275c8760

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4.tar.gz:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0ded6e2f1a6d1fa1a0d57f07b76de64604c59a35d12f55397230498ca9acec12
MD5 69042b7227d35543660f46f47864716b
BLAKE2b-256 38dba526fb2eb78a7c0ebe9e7edc70b3cddf35df3e51184f181446a8c84de2ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 5805d43ba4d98f41ac8b913685a422a84303a561bd470a207f1a65b1a9cd423f
MD5 25d08c1178313cf8b3f7eaa0ec5a15cc
BLAKE2b-256 f1475f63e395fabb76dc9257ad090e62a8e7b2adbeb77ef8888de9727e80752f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 bc72373a3575c790dca87162650e3177d92462885755149b81493c74f4cbe14f
MD5 081804ff1a7c05defae6b031797d7161
BLAKE2b-256 65fbc92fa6f4cecfeac4c3ce225b15940cfd204d4f1fe20827abdd6a3a4a7c2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 610f362612529340f660561b64cb3be65494e396f60351e43672fc74ac89d5ac
MD5 2e63c824f3d37c5f3bc0ce9019758535
BLAKE2b-256 6db121af650843d652f65ac9456db4c95aeca4b3239f79ecfe0f47b777b10864

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5fa32e10fde1d92e41d205d978d5e4e59bacaf2c51027fe7a550d5717ee27761
MD5 62dc77c7bb1ac8298866ee827556bbca
BLAKE2b-256 95485d45904f40bde0d21388adc130dc896e5816af610b49f6c67f04d4f1b93e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 61575d452b1a09d77caeda999ea8aaffdb5dd9d9ea72a71ed84b168c02026cb2
MD5 830a58d89a5bd26f8ace2706486f7d54
BLAKE2b-256 52019da783395b87f6ab89f3000f7c7eddd08da1171bc6ec8d6c94bf79966293

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 b2cac5b9f2ffd11d55e3656e3dea7942dc806f998ec154eac2269f9c3230c321
MD5 21e33fa07d57b805c7c496a983408753
BLAKE2b-256 de79fa7cf0229094d54c5a277fc2e9279e7fb092aacc20e882d1ac0edf38164d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 56f787fcc6c8ddd29643e07e561a2a5d900beeb1318d6134ef3fd653aa1889a6
MD5 65410ec72ccf8c5ce236d252c9e8b4b5
BLAKE2b-256 0e24c611a88488e3b36dbe625cc464ad4d6b72b7cd6ac05eddc58596b905be44

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e934d4954d0c1b18a9c5e6d841323177cf0d9399c237db6988c9245b31936252
MD5 e70778308a82a1d55bbbe9aef485dd89
BLAKE2b-256 02ea6d3541f1d76865bcca4558713f8e3b3cfe451c86f75045c1ea5d062720a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5e850c83c04b69efd4d6fce1a9355db40e4ccc187ba2f5e2cb5ea958db3b4313
MD5 7c5b228122f8ca1805eace3b2146024f
BLAKE2b-256 643715cdf952434b5058b3b12a0c91508c19dc0f98026d16e47ea4e4c9054640

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 338d0dceaf5ea10f7539236ecaf7c3bcc36ddfb692aee33ad5313dacc670fb11
MD5 725585a1f49f4c18b29968a55c5a5de4
BLAKE2b-256 07244878ff67628af738512735d541d6b683e3a016911f698e06d2fd00eb3abb

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 028bc32720e002922bc29a3ba7d95776511752272bdc732d16deeca10ac4a882
MD5 5f75b52e9c9518f9d5677122973641ef
BLAKE2b-256 a67b7fa9f41b7c8fbf9531b68edaa9b52ca95556d34edccbaed183a863d4c783

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e53391a3d3415f5a3ecbe4ca1cd12dea549286c7d1cc01af31ec09f539f73185
MD5 4f1fd52669550f7f0c0dc19e3c99b754
BLAKE2b-256 7ba74ce2066477b7dd0f4ff2a2a10785b4b7cb48852d0ff6d2f9529d67e56c8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 57056ae23c93aa1c4cf0c2c746e9abdc7504e73c8f410e4c1d932b7635e24721
MD5 77601286ed8578dd4fcd6df564f59d75
BLAKE2b-256 ab0a9c3ce0562fe3d64a3bf858a0fb6553a1f70a2bad6111ad78eb5845e2e466

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2ef51aeaab2833180f46ecee03af9fe3861e7b6be7034174f3bf637f61db81f7
MD5 a978b305b705c7fd7726259fbcba5bf1
BLAKE2b-256 f2cb2d1be7516b3d25c5318c7498fc89475a8f4770b423b84bbbc5aeacbd3db9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 16b31fd6236deaee9ec4169c6ec26aabf83bd4feab1a632c465fb0b35e61734e
MD5 0ae2f8c7f82dea37e6b8180afed565d4
BLAKE2b-256 f6af62ce337d025df5f0d90212d56c7551ff4414dff8d1176d5c32feeff538df

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 31eacdc365e6eed22cfa37bdc7e7fa22935f10c28cc90cd95d8c12d333d0c201
MD5 9c5d60d5b5ae476cea88ad296c402251
BLAKE2b-256 d65cf7e0ab0b13919ad817fa97919460813c3787c37e14a322dc9acf3771ee5b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 445995f0c6df468da48f13aa803955306eab83ecc3a3eb53d5e8c815664de102
MD5 daeef72e903226a1a0ce3a5f66ecd096
BLAKE2b-256 4cc7b6ff5bb423003303e6b29b7379cee88dd62017c1eb68f71f039e7994170e

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b996a57eede9c275e4a851e5f63f7ede0263b622b1fb80a9ee12e60f5f1de959
MD5 24ace36b99d7d3be46f3263b03b1e22a
BLAKE2b-256 6b79530755117ed3dffa120222a8215e2248a5381fe1188a8c60b2f10926e781

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78c3d7d16483252d28da52d6175bc3336826d172a1ac847b1226b535cdb82499
MD5 b6d674d823b03f90ea58ab9b66cf976e
BLAKE2b-256 a71b86d927f04085263bfcd695f4f9e70ea9bb159147887b4a91a685a077f3a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1fbcb35442a3a496d4826baa3c3e773799014c7c27e30165a5ec492edfb3129b
MD5 4531af49a40d6d3bb612c9d4f8dc5a6d
BLAKE2b-256 e2683ccbe2738c024a322b6dcffa26c6d74241774ba9ad21bb6aedd0e2700d32

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 183748636734ff55f502cd45a80f177a807a3befc1a571f99e73de57defb4525
MD5 1b4fda9f59b4d1b13e7752afd7f5fd9d
BLAKE2b-256 776635a55867afcb0b07dfacf70daee0275f8c0431c5cdca251156270b296c7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cb219bc100a58abfa5adec6482c35234220dd0a2cde1101f8aa52a8c5c95ff39
MD5 fb4dfd521b0a686ec96bdad0e9d912fa
BLAKE2b-256 526d8c917140e90c25a5650e81a2cc946a59ca9989a9d8bc468b70a68274bdce

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1bd2ab37b2f35d163cae24ebfd320034a0b4a4cb84a258a2d3c90ca336c52fca
MD5 6a92ab64a484470045b58b621ab3cc43
BLAKE2b-256 1d445be01ae23ec7cc0121ecf41e615b59d1c7831f5567b69fe50f75f99061b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3e9173fd5630036793839589438e52ad493e2b145d692d925addf675db311f83
MD5 dae9f980cc0b17243d23287b70139509
BLAKE2b-256 278771b7d28c35d6febcfe4effc4bca3244191c54413aa8b6554f758496a425d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9858f7939a700141e4a1c892ab1728fbb7088779e2719b630c1b9cd88106f96a
MD5 e53bebfd6d4402db66a3e923ba862003
BLAKE2b-256 cf946e6e83a4673f941a419c4c6d712f36a6e37977507c22cb5052b87786b5a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 64cd08fd6de545146fd6c023ddf6b7809f4019e967c8a2ce9bbb0950a8c0c906
MD5 dfed33acdadc6abd2ddc12f89ef1c7b3
BLAKE2b-256 4b64d8502fbeee227bcd64f638d111e38326f714cd1bcd0448c73f6c618073de

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp39-cp39-musllinux_1_2_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 caaa27e4c64910899ec6a901242fd7047890b82cd19416048adf6ed71c90b2b8
MD5 8a6c85621eed116d69abb3f7ee1ac415
BLAKE2b-256 93011d81428fb08de227b6bf73caa10f8423efe79d547c88309303c8d833f053

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4f95cd199adcdf095310715661f86c15847765017e51176a42a7723fdf7cd79c
MD5 d34b7b061ac54b293f907966463e00bd
BLAKE2b-256 e332f1c7f365d69777717ed4b97218fab2268a111b00ada20363e48831d24391

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: package.yml on gsmecher/tuberd

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

File details

Details for the file tuberd-0.18.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tuberd-0.18.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ccc701f7ca50c64560089743e531dda369d8365a5d87e3f54750b4b758d7dab0
MD5 7caf631e39932854db94acbd005dd5bd
BLAKE2b-256 b605466687554925fbde827405f95fe3f8b538e8c48680ffff4f1ef58fadd86d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tuberd-0.18.4-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: package.yml on gsmecher/tuberd

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