Skip to main content

Manage outbound HTTP connections using Curl & CurlMulti

Project description

mcurl

Build status PyPI version License

Python wrapper for libcurl with a high-level API for the easy and multi interfaces. Originally created for the Px proxy server.

Installation

mcurl can be installed using pip:

pip install pymcurl

Binary packages are provided for the following platforms:

  • aarch64-linux-gnu
  • aarch64-linux-musl
  • arm64-mac
  • i686-linux-gnu
  • x86_64-linux-gnu
  • x86_64-linux-musl
  • x86_64-windows

mcurl leverages cffi to interface with libcurl and all binary dependencies are sourced from binarybuilder.org. auditwheel on Linux, delocate on macOS and delvewheel on Windows are used to bundle the shared libraries into the wheels.

Thanks to cffi and Py_LIMITED_API, the CPython wheel works on any CPython ≥ 3.9. Separate wheels are provided for PyPy.

Usage

Easy interface

import mcurl

mcurl.dprint = print

c = mcurl.Curl('http://httpbin.org/get')
c.set_debug()
c.buffer()
ret = c.perform()
if ret == 0:
    ret, resp = c.get_response()
    headers = c.get_headers()
    data = c.get_data()
    print(f"Response: {resp}\n\n{headers}{data}")

Multi interface

import mcurl

mcurl.dprint = print

m = mcurl.MCurl()

c1 = mcurl.Curl('http://httpbin.org/get')
c1.set_debug()
c1.buffer()
m.add(c1)

data = "test8192".encode("utf-8")
c2 = mcurl.Curl('https://httpbin.org/post', 'POST')
c2.set_debug()
c2.buffer(data=data)
c2.set_headers({"Content-Length": len(data)})
m.add(c2)

ret1 = m.do(c1)
ret2 = m.do(c2)

if ret1:
    print(f"Response: {c1.get_response()}\n\n" +
          f"{c1.get_headers()}{c1.get_data()}")
else:
    print(f"Failed with error: {c1.errstr}")

if ret2:
    print(f"Response: {c2.get_response()}\n\n" +
          f"{c2.get_headers()}{c2.get_data()}")
else:
    print(f"Failed with error: {c2.errstr}")

m.close()

Raw libcurl API

The libcurl C API can also be accessed directly:

from _libcurl_cffi import lib as libcurl
from _libcurl_cffi import ffi

url = "http://httpbin.org/get"
curl = ffi.new("char []", url.encode("utf-8"))

easy = libcurl.curl_easy_init()
libcurl.curl_easy_setopt(easy, libcurl.CURLOPT_URL, curl)
cerr = libcurl.curl_easy_perform(easy)

Threading

Each MCurl instance manages its own curl multi handle with internal locking for thread-safe concurrent operations. Multiple threads can safely call add(), do(), remove(), and stop() on the same MCurl instance.

Recommended patterns:

  • MCurl per thread — create a separate MCurl in each thread for maximum parallelism:

    import threading, mcurl
    
    def worker(url):
        m = mcurl.MCurl()
        c = mcurl.Curl(url)
        c.buffer()
        m.do(c)
        print(c.get_data())
        m.close()
    
    threads = [threading.Thread(target=worker, args=(f"http://httpbin.org/get?id={i}",)) for i in range(4)]
    for t in threads: t.start()
    for t in threads: t.join()
    
  • Shared MCurl — multiple threads can share one MCurl instance (internally locked):

    m = mcurl.MCurl()
    
    def worker(url):
        c = mcurl.Curl(url)
        c.buffer()
        m.do(c)
        print(c.get_data())
        m.remove(c)
    
    threads = [threading.Thread(target=worker, args=(f"http://httpbin.org/get?id={i}",)) for i in range(4)]
    for t in threads: t.start()
    for t in threads: t.join()
    m.close()
    

Versioning

Version format is X.Y.Z.P where X.Y.Z matches the upstream libcurl version and P is the wrapper patch (starts at 1 per upstream release). Wheels are built automatically when a new LibCURL_jll.jl release is detected.

Documentation

See the docs/ folder for detailed documentation:

Development

Requires a C compiler and uv.

git clone https://github.com/genotrance/mcurl.git
cd mcurl
make install
make test
Target Description
make install Create venv, build C extension, install pre-commit
make test Run tests with coverage
make check Run linters and type checking
make build Build sdist and wheel
make clean Remove build artifacts
make env Print LD_LIBRARY_PATH for local development

Contributing

Bug reports and pull requests are welcome at https://github.com/genotrance/mcurl/issues.

  1. Fork and clone the repository.
  2. Run make install to set up the venv, build the C extension, and install pre-commit hooks.
  3. Create a feature branch, make changes, add tests in tests/.
  4. Run make check && make test — all checks must pass.
  5. Open a pull request. CI runs on Ubuntu, Windows, and macOS across Python 3.9–3.14 and PyPy 3.10/3.11.

Building

mcurl is built using gcc on Linux, clang on macOS and mingw-x64 on Windows. The shared libraries are downloaded from binarybuilder.org using jbb for Linux and Windows. Custom libcurl binaries that include kerberos support on Linux and remove the libssh2 dependency are available. macOS uses the libcurl binaries and dependencies installed via Homebrew.

cibuildwheel is used to build wheels for all platforms and architectures via GitHub Actions. See docs/build.md for details.

Acknowledgments

The modernization of this project — including expanded test suite, CI/CD infrastructure, and comprehensive documentation — was developed with the assistance of LLMs.

License

MIT

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

pymcurl-8.18.0.1.tar.gz (162.2 kB view details)

Uploaded Source

Built Distributions

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

pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (5.9 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl (5.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.28+ i686

pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (5.9 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl (5.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.28+ i686

pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (5.9 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl (5.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ i686manylinux: glibc 2.28+ i686

pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pymcurl-8.18.0.1-cp39-abi3-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.9+Windows x86-64

pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_x86_64.whl (6.0 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ x86-64

pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_aarch64.whl (5.6 MB view details)

Uploaded CPython 3.9+musllinux: musl 1.2+ ARM64

pymcurl-8.18.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (6.1 MB view details)

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

pymcurl-8.18.0.1-cp39-abi3-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl (5.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ i686manylinux: glibc 2.28+ i686

pymcurl-8.18.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (5.7 MB view details)

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

pymcurl-8.18.0.1-cp39-abi3-macosx_14_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.9+macOS 14.0+ ARM64

File details

Details for the file pymcurl-8.18.0.1.tar.gz.

File metadata

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

File hashes

Hashes for pymcurl-8.18.0.1.tar.gz
Algorithm Hash digest
SHA256 aaf2d43cb331ade6c2a2d62bc655b65b3648257771a373c0991a3c59cb754506
MD5 0ab3e51c4f16eec69a40307e369ab48f
BLAKE2b-256 d56c39bb195144dc4adda1227177b9333d188d4307d826d3bc0daa9532e0275b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1.tar.gz:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 43c3c4d5a012c039e965929efd21ac4f2e55029e30e14f4ef028aec0f0a55b18
MD5 b4d886a816b689c5d2a83c7508ed8ef5
BLAKE2b-256 3b88f24df4d097410b856cf9c8af637c2dccae8adb7e801e90262f1b1ddf224a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 0adfc5232720d986d03b06c20420a59621c99866da617d0835f56f7213f33b78
MD5 5028856a87bca2ecf033461f34dc1dcb
BLAKE2b-256 2bcc344cbaf90d1eb4e4b51646acc9b9ae13d2de2cb75e5705372925560afe83

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1e4e4f155cb494be64eeb9229d15f18a222b309717be5437767ca6d35752e337
MD5 aff7fa6513c9dc909a2eb592af8dc2cf
BLAKE2b-256 91bf5ed710378c71a4afae17d0b3c9cb6f8b95cb881324d1cd395a7b4c7c8d89

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e86842e4ae2e2d55efd19c40f7f6cd8726e839f79373a856ec8c62cf03dc0e5c
MD5 4363c1dcd7a579c0304eba929464f90f
BLAKE2b-256 2a2ecfe435544929409d3f106f7708502af7c0c660a42d9ca85d2fb92d37c1e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 1c8546f2e8741d15a81feeb5592c3549705ca108ab6295ed7744e3ccd70ed33f
MD5 db3c6664fc07c561bfcad2518f82d8c1
BLAKE2b-256 04ec4440ea68d819c32e28ccc29e9e1a48166918a081c4e71faf5e88f0410c09

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 daf782019316b46b0a7ef96e37e32bbcfa860b90239322789f6003db9aa2a2a2
MD5 0639a2e3872bd6a30d5511a89b2969bb
BLAKE2b-256 38071382bb5122c160656fee9dd7a20a5ee2a329195f0af3a70271623f762063

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f24b09236ae4593be5bfac7156d314f7eb418ddbbe878a0b31c5010e1ec92e1
MD5 16d1800ce57c35036c9581739475078a
BLAKE2b-256 8397f3e0ec231210bbe52655f664bcaed457c6af369f889a34bcec042e7abb64

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 e81a61ea919be69c3196b7ccd3f2dd0094a44c7bc2689aa5e8c87a87c4141fcb
MD5 28987258ba5477f075dbe21a8f386c8c
BLAKE2b-256 81af2fa5b5238005a0fc01ce909134a2209cb0a4e1f136dcce21164f8090c360

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f07ef17abe6649285ebbae4bb333b13eef5caf3df358687652e48cdafb80f52f
MD5 ce8117ad35b2ff98ee1ad9cce40a4d59
BLAKE2b-256 8bb4e078579b4465d47d8489d0f89b6c72b589660ed2334d48230f621a1ae3e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: pymcurl-8.18.0.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 b2a631ed469b0d46b43ef61324ace71ec305be537b307a55b9e1cc8b18b02739
MD5 db7229f112d25cb0ed96f92a511d1be4
BLAKE2b-256 affc90d831d3e73680779f6e31b783e02a6a3d3e163a25616264adaa22e06b62

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-win_amd64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 936d66bff01b71251b7d9908e75c26fdbbb8df30b3e8d12142738fe5d939e851
MD5 4e0111331d103ca7aba3b845f25d442e
BLAKE2b-256 3d4d4e849304c36889470fe642d3f337100bccf0ed843a5fb1d1bd5745622784

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_x86_64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 533e3ad49ac17a283dc92c9ab6236715d746b1d4da33d5acfcfce5e08533c66d
MD5 080c61dca3bd32b57966a86a0e7c351b
BLAKE2b-256 2470d8fcc04d34104b9f6d86ed3046c273c69915b47354dbc0bd6fe240fdc1a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-musllinux_1_2_aarch64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 120c6458a96eccd5a130a10d0e30296b16296fb95024f812962a7a24009d28f9
MD5 a1e7da6f44e22f643171ad499f846b6a
BLAKE2b-256 34742fe731cd488940d7c507a9a35edd0e28449fed4fca600a91d9de9b8cae7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl
Algorithm Hash digest
SHA256 1c5ac1327496c4abe5840c3e5d5cf11e3760e838ec001f09aeb2e82f55c418db
MD5 1ae4b3c5f85b3286d1066223b38a201c
BLAKE2b-256 4212c83606f097c5c4f81173320ad1183400539ad6074d8bb7f54e8548a8bf05

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 49ad622b44bcd14f32de88fb1f77ab83a46f2eece4b62c605ef28affe5170e1d
MD5 9c2a742b69c4d77cef475562e1d8dc28
BLAKE2b-256 c66496cb8d65e7314045d7c18c2bd2be58904cbfe6e6d39d24d599852fc15bac

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on genotrance/mcurl

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

File details

Details for the file pymcurl-8.18.0.1-cp39-abi3-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for pymcurl-8.18.0.1-cp39-abi3-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 d388b623ba49dc279a7156749cd802f44a2443440e9ba2f06e6c62ea53546ae4
MD5 66532ad73542244dfb7c2a2e653dbed3
BLAKE2b-256 3cc9cf71956285f343686ef13dc01d95f74270964aab858dca41aabb1a139533

See more details on using hashes here.

Provenance

The following attestation bundles were made for pymcurl-8.18.0.1-cp39-abi3-macosx_14_0_arm64.whl:

Publisher: build.yml on genotrance/mcurl

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