Skip to main content

Maximum performance runtime type enforcement using CPython C API.

Project description

🛡️ Guardian — Sub-Microsecond Runtime Type Enforcement & Access Control for Python

Guardian is a blazing-fast runtime type enforcer and data validation framework for Python 3.11+.

Unlike traditional Python validation libraries that rely on slow dictionary wrappers, getattr proxies, or __dict__ parsing, Guardian is written entirely as a native C-extension. It intercepts assignments directly at the memory level via the CPython API, delivering O(1) validation that outperforms industry standards like Pydantic (Rust).


🚀 Performance Benchmarks

Guardian is engineered for high-throughput backend APIs and data pipelines where nanosecond performance matters. (Benchmarks run for 100,000 iterations against standard Python 3.13 on native Linux)

Operation / Library Time (ns / op) Relative Speed
Standard Python Function 30.61 ns 1.00x
@guard Function 80.79 ns 2.64x
Beartype Function 241.10 ns 7.88x
Standard / shield Init 653.75 ns N/A
Pydantic v2 Init (Rust) 824.64 ns N/A
shield Attribute Set 76.26 ns N/A
Pydantic v2 Attribute Set 194.05 ns N/A

Highlights

  • Function decorators: @guard is ~3× faster than Beartype
  • Class models: shield is ~2.5× faster than Pydantic v2 at attribute assignment

📦 Installation

Guardian distributes pre-compiled wheels for Linux, macOS, and Windows.

pip install guardian-type-enforcer

🛠️ Core Features

1. Guardian Dataclasses & Domain Validators

Guardian wraps the standard Python library @dataclass to provide native C-speed type enforcement with zero namespace pollution.

from guardian.dataclasses import dataclass, validator

@dataclass(frozen=True)
class DatabaseConfig:
    host: str
    port: int

    @validator("host")
    def sanitize_host(cls, value: str):
        return value.strip().lower()

config = DatabaseConfig(host="  LOCALHOST ", port=5432)
print(config.host)  # "localhost"

# ❌ Raises FrozenInstanceError
config.port = 8080

2. shield (C-Native Data Models & Encapsulation)

from guardian.shield import Shield
from guardian._guardian_core import GuardianTypeError, GuardianAccessError

class Account(Shield):
    username: str
    _balance: float
    _total_accounts: int = 0

    def __init__(self, username: str):
        self.username = username
        self._balance = 0.0
        Account._total_accounts += 1

account = Account("Michex")
account.username = "Mike"   # OK
account.username = 123       # Raises GuardianTypeError

print(account._balance)      # Raises GuardianAccessError
Account._total_accounts = 999  # Raises GuardianAccessError

3. @guard (Boundary Type Enforcement)

from typing import Union
from guardian import guard

@guard
def process_sensor_data(payload: dict[str, list[Union[int, float]]]) -> bool:
    return True

process_sensor_data({"sensor_A": [1, 2.5, 3]})
process_sensor_data({"sensor_A": [1, 2.5, "3.0"]})

4. @deepguard (Local State Profiling)

from guardian import deepguard

@deepguard
def calculate_discount(price: float) -> float:
    discount: float = 0.0
    if price < 0:
        discount = "N/A"  # Type error
    return price - discount

🧠 Advanced Usage: The Compiler

Guardian compiles complex type hints into optimized internal representations for C-level evaluation.


🤝 Contributing

We recommend WSL 2 / Linux for development.

# Clone repository
git clone https://github.com/yourusername/guardian-type-enforcer.git
cd guardian-type-enforcer

# Create environment
uv venv --python 3.14
source .venv/bin/activate

# Install + build
uv pip install -e .
pytest tests/ -v

📄 License

MIT License — see LICENSE file.


🔄 Guardian Update Ledger

⚡ C-Core Memory & Profiling Optimizations

  • Zero-allocation string routing using optimized CPython mappings
  • PEP 667 compatibility for Python 3.13+ FrameLocalsProxy
  • Read-path acceleration via native CPython attribute lookup

🏗️ Dataclass Engine & Static Typing

  • guardian.dataclasses.dataclass fully mirrors stdlib behavior
  • Frozen instance compatibility layer added
  • typing.dataclass_transform integration for IDE support

🛡️ Access Control & Encapsulation

  • Added @validator hook system
  • Extended frame-walking protection to class-level access

🛠️ Developer Experience

  • Recommended Linux/WSL 2 build pipeline
  • Adopted uv for ultra-fast environment management

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

guardian_type_enforcer-4.0.5-cp313-cp313-win_amd64.whl (19.0 kB view details)

Uploaded CPython 3.13Windows x86-64

guardian_type_enforcer-4.0.5-cp313-cp313-win32.whl (18.3 kB view details)

Uploaded CPython 3.13Windows x86

guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_x86_64.whl (40.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_i686.whl (38.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (38.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

guardian_type_enforcer-4.0.5-cp313-cp313-macosx_11_0_arm64.whl (17.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

guardian_type_enforcer-4.0.5-cp313-cp313-macosx_10_13_x86_64.whl (17.2 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

guardian_type_enforcer-4.0.5-cp312-cp312-win_amd64.whl (19.0 kB view details)

Uploaded CPython 3.12Windows x86-64

guardian_type_enforcer-4.0.5-cp312-cp312-win32.whl (18.3 kB view details)

Uploaded CPython 3.12Windows x86

guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_x86_64.whl (39.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_i686.whl (38.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (40.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (38.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

guardian_type_enforcer-4.0.5-cp312-cp312-macosx_11_0_arm64.whl (17.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

guardian_type_enforcer-4.0.5-cp312-cp312-macosx_10_13_x86_64.whl (17.2 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

guardian_type_enforcer-4.0.5-cp311-cp311-win_amd64.whl (19.0 kB view details)

Uploaded CPython 3.11Windows x86-64

guardian_type_enforcer-4.0.5-cp311-cp311-win32.whl (18.2 kB view details)

Uploaded CPython 3.11Windows x86

guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_x86_64.whl (37.3 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_i686.whl (36.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (36.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

guardian_type_enforcer-4.0.5-cp311-cp311-macosx_11_0_arm64.whl (17.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

guardian_type_enforcer-4.0.5-cp311-cp311-macosx_10_9_x86_64.whl (17.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 00e0cac6d09ca1e45c9a4c9a20e024116cf4310d4d6b007b1092e421a1473f04
MD5 1aa5f071d0bc555271533275f31d5ef7
BLAKE2b-256 fb3eed55c923479e14a1adf720c9ca8e6104c6159f0089232d659292323d730c

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-win32.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 5b34a767d4b8a00c4240dfc031c940d41f7cbc3c133d1799000460c0dc6d70b4
MD5 59e3f4dc11f1981eb0660b7c4baef6b4
BLAKE2b-256 6e2fe7adfad246bba0f7b9547a8ab53353cdf645f8ea9dccb2d2ef7b9713658b

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4ecc6c736a492e71c54bbe1024ead3c2786403e5693dc865fc9c63e89300c3d3
MD5 60d89a851acc3e7aefdd9f2f0cf6050a
BLAKE2b-256 83059377198d7b8e670ce77537ac630ab61b20caa978eb99877e13b24f84f36a

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 4586c30d3875d0f8a227d5fd0a919dce9b7727e7bc3d51518318c862faf63756
MD5 269ea94ba060f8c03cf8715bb1697163
BLAKE2b-256 6fea1193fc420933e3342cd53e114b5e056e11887c5ddd31afe178d007aab98c

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3cf87cf663242755eb4d83c953535305493e23805c6179e856600f78a11f77c7
MD5 b7f4d616ad03f221696bf597e82eefb1
BLAKE2b-256 bb7f5dcf29c53811912526d720ad5f2a02475884229fab7ea87d7402ba39697c

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 624af3d7b21d47f557a042474ccb19c80cfef8548c15ab8afbebaf85e4d37cdc
MD5 33832994c6bbe79c6f7147ff66177abb
BLAKE2b-256 248238f6203b67d1245561c5b73b9e8e2c1aa2cd0ae51db84f77fc053009c682

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac7f62cd105db82dac9bff46cbf88b5dbac854a27511f2fad1cb394768be1156
MD5 9931fcb9153a863dad80f82c8986c045
BLAKE2b-256 8634adb1e34d1d0ab51bee80126adfd6d47ee7640ff81ab0c01ef53d8dafce2f

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b1b95e02404f5959746e3d51adb76dd5ab31213b952f1c9bb10e281d8fabab32
MD5 fe80333b815b4804a36fa2f2cf335683
BLAKE2b-256 908bd122876f08aba3dc736f93c55f3e4a8f2352436694e6b0e7e1e3178abc35

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8e89fcd9bae118dbdfa5fba3717c6ad29daed23b737743b33da82eff2b2569af
MD5 561ccf151e57ba868a0202d4957efc69
BLAKE2b-256 1b762595639f261f7f3dcf208e177258a8b2d0dd86f9d9f640ac3f85925b85ab

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 79de52e90c1bae7d6ad065b837c5e0a345096704f3ad253a3c27cb06010d7a4c
MD5 8bffedb20af52d6874392474a0ae5e42
BLAKE2b-256 60a8bc42830a3a2f5e8c6e760616f67c447416a41033ee97d7c75d021d84c4a2

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 032f287e483f8dc704893d4b1a40af4e3a75539e2f30a63b5afa6320afe5ff83
MD5 1b48b4e84253deb5ddd5f42d55fdf561
BLAKE2b-256 a2ed68b57a5b89b3e530db2dc294fc245d930fd20d4e8c9d5d59e3cc692e5c5f

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 9347e98d560bc1476af757a6f8639cb5aec7819e7b5cd9cb572f15adf2441b66
MD5 82ea49253bcc60c99293058097671c8f
BLAKE2b-256 6bc3bd08de65aec4fc44f10638fca03a541014b48669e8d013f86ea97df54ace

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 706262bd69204343646235c5250f6811ec6bda6f6677b9275c348662a7e0c2a7
MD5 72398c2e0bad4e2043246d407010c33c
BLAKE2b-256 9f0d681bb9cc763055529c39d58df74d8b2d4fd69bc4394697cd359f27b17d50

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 7e0568815078ce88702b632c3a648ede4e51508d3e9f3ff7452877f4b14a108c
MD5 714b1cea9c74816b5ab928d568630119
BLAKE2b-256 3b9c1ed5c91c04ccadf1e98f9e57b09fb5086cae8885f80b6cfcd454ee864316

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fbae9c62cdce28e3392e13930ad9d2955baaa54a8f932d8ae6c929335299f83f
MD5 a4220b87501597205a8a0caf6fe1a0f9
BLAKE2b-256 740dc1a5f38b12690a5fc88c3473135fcd7b38d25ff8f5d9d4fa78405c746e11

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1cd96ee760eb429f99d15213cc2f08f02e0b33a31c87c5efc19bea773c0a5ead
MD5 047c5ef7a91aa0dd331a485787f610aa
BLAKE2b-256 9357961c197b2e3c35a4d8871b4739e68cc20db5eadba3e0f546e4079a3fdcb0

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b7201dac218c2505b64b666da7bd6aac3d5658a196c0b194460665a6059f0056
MD5 0116412db93b597b2ca5ff86023854e3
BLAKE2b-256 a01c3832c37d99bbe223731c92bfe22cc1026c62af15b49329ca93afea20ffcd

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 ce6b44ec70d8db4cd4d4397e38151840a65e94b22e13e14e24aaf4e4dc8ddfc9
MD5 b9fb68194bf4637d590159a98ddec3ea
BLAKE2b-256 c0535d9c5f469009095c355ecbfaab0c3f07d7b666f104ade87dadf821499df1

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3f885d17e6f07ccf42f1992a698802634da237c7db150e5d7026dd4cd3130f0f
MD5 38e74e5f38f16eac41b1d0bfb41b3de1
BLAKE2b-256 d4fc561e483a202ec2093e3e9cf32bc96c155730a87969de0bed6ca9f0dfcb8c

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 33834f0829c5d75532725028af96339fd896cf1b5828209abe4bc75744c58d2d
MD5 a763b3508c5e5aba46b52e8c3b8254af
BLAKE2b-256 e7f6d20b05e91e57d3dd2ac4e40c18076f6dd705aa23ab936cae8cfadd600e35

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a6ce0ff4e2fadb1127f5b318d6599b163a42c13fe016cbcab7cc814f537ec080
MD5 c758921ca467e5041a2cff2dca9e841e
BLAKE2b-256 16e883ee4f9c464cea4de7948742452e4803e9a500a3da2f708e457572eb4237

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 e6a3d1d1e751727c4987329aad520a13d8f4fb2691fdce65c3826efdebabecaa
MD5 e84020c8d4d06da4e6fcfa6e143c33c9
BLAKE2b-256 e0bf88ecac2975d3b845ff27469f391e59dfd71ce6e14a3d19c94e2d8bbe3b5a

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3f1b551a114fbea7ea56021afb5c325457877a73cabac1cbf0f3c095046b52a3
MD5 c1591681188ff622b5d3b084e92c4aed
BLAKE2b-256 4a86789a2cf46e17bc2bdcc2a7f3114cb71bf880449bceb8868e98092abdd380

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-4.0.5-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for guardian_type_enforcer-4.0.5-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a1a8efe9877f54a3549f339ad2ba997cb0ff6dafc4d28bf9ed7c37ac1c343263
MD5 42846679814d128b12976621daf7665b
BLAKE2b-256 5388d35c48375d99387f99fe952026e5e8da190d0baecfe5dcd44a4c356636bf

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