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.10+.

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) and Beartype.


🚀 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)

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. shield (C-Native Data Models)

The shield class is a high-performance alternative to @dataclass or pydantic.BaseModel.
By inheriting from shield, your class becomes a native C-type (ShieldBase). It enforces strict typing on all annotated attributes and provides true protected/private access control.

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

class User(shield):
    username: str
    age: int
    _internal_id: int  # Attributes starting with '_' are private

    def __init__(self, username: str, age: int):
        self.username = username
        self.age = age
        self._internal_id = 9999

# --- 1. Type Enforcement ---
user = User("Michex", 25)

user.age = 26        # OK
user.age = "twenty"  # ❌ Raises GuardianTypeError

# --- 2. True Private Access Control ---
print(user._internal_id)  # ❌ Raises GuardianAccessError

How it works:
shield bypasses Python’s __setattr__. Memory assignment and type-checking happen directly in C via tp_setattro slots, taking less than 80 nanoseconds. Internal access is verified by walking the CPython frame stack to ensure the caller context owns the self pointer.


2. @guard (Boundary Type Enforcement)

Use @guard to enforce strict input and return types on your critical functions, API endpoints, or calculations.
Supports deeply nested types like dict[str, list[int | float]].

from typing import Union
from guardian.guard import guard

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

# Valid payload
process_sensor_data({"sensor_A": [1, 2.5, 3]})

# Invalid payload
process_sensor_data({"sensor_A": [1, 2.5, "3.0"]})
# ❌ Raises GuardianTypeError

How it works:
Signatures are compiled into C-structs at import time. During runtime, validation is O(1) positional mapped natively in C via the vectorcall protocol (PEP 590).


3. @deepguard (Local State Profiling)

While @guard checks inputs and outputs, @deepguard acts as a rigorous state machine enforcer. It ensures that local variables inside your function never mutate into unexpected types during execution.

from guardian.deepguard import deepguard

@deepguard
def calculate_discount(price: float) -> float:
    discount: float = 0.0
    
    if price < 0:
        discount = "N/A"  # ❌ Raises GuardianTypeError when returning
        
    return price - discount

Note:
@deepguard utilizes PyEval_SetProfile to intercept the local dictionary state upon function return. Because it hooks into interpreter profiling, it carries a ~43µs overhead and should be reserved for high-stakes business logic.


🧠 Advanced Usage: The Compiler

Guardian automatically compiles complex type hints into flat, recursive integer tuples that the C-core switch statements can evaluate instantly.

Supported types include:

  • Primitives (int, str, float, bool)
  • Data structures (list, dict, set, tuple)
  • Typing constructs (Union, Optional, Any, Literal)
  • Deeply nested configurations (dict[str, tuple[int, ...]])

Primitives use branch-predicted fast paths (PyLong_CheckExact, PyUnicode_CheckExact) to skip isinstance() overhead entirely.


🤝 Contributing

Contributions, issues, and feature requests are welcome.

git clone https://github.com/yourusername/guardian-type-enforcer.git
pip install -e .
pytest tests/test.py -v

📄 License

This project is licensed under the MIT License.
See the LICENSE file for details.

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-3.1.1-cp313-cp313-win_amd64.whl (16.8 kB view details)

Uploaded CPython 3.13Windows x86-64

guardian_type_enforcer-3.1.1-cp313-cp313-win32.whl (16.1 kB view details)

Uploaded CPython 3.13Windows x86

guardian_type_enforcer-3.1.1-cp313-cp313-musllinux_1_2_x86_64.whl (34.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

guardian_type_enforcer-3.1.1-cp313-cp313-musllinux_1_2_i686.whl (33.0 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ i686

guardian_type_enforcer-3.1.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.4 kB view details)

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

guardian_type_enforcer-3.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (32.9 kB view details)

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

guardian_type_enforcer-3.1.1-cp313-cp313-macosx_11_0_arm64.whl (15.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

guardian_type_enforcer-3.1.1-cp313-cp313-macosx_10_13_x86_64.whl (14.6 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

guardian_type_enforcer-3.1.1-cp312-cp312-win_amd64.whl (16.7 kB view details)

Uploaded CPython 3.12Windows x86-64

guardian_type_enforcer-3.1.1-cp312-cp312-win32.whl (16.1 kB view details)

Uploaded CPython 3.12Windows x86

guardian_type_enforcer-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl (34.0 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

guardian_type_enforcer-3.1.1-cp312-cp312-musllinux_1_2_i686.whl (32.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ i686

guardian_type_enforcer-3.1.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (34.3 kB view details)

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

guardian_type_enforcer-3.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (32.8 kB view details)

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

guardian_type_enforcer-3.1.1-cp312-cp312-macosx_11_0_arm64.whl (15.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

guardian_type_enforcer-3.1.1-cp312-cp312-macosx_10_13_x86_64.whl (14.6 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

guardian_type_enforcer-3.1.1-cp311-cp311-win_amd64.whl (16.7 kB view details)

Uploaded CPython 3.11Windows x86-64

guardian_type_enforcer-3.1.1-cp311-cp311-win32.whl (16.0 kB view details)

Uploaded CPython 3.11Windows x86

guardian_type_enforcer-3.1.1-cp311-cp311-musllinux_1_2_x86_64.whl (31.9 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

guardian_type_enforcer-3.1.1-cp311-cp311-musllinux_1_2_i686.whl (31.1 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ i686

guardian_type_enforcer-3.1.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (32.4 kB view details)

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

guardian_type_enforcer-3.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (31.1 kB view details)

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

guardian_type_enforcer-3.1.1-cp311-cp311-macosx_11_0_arm64.whl (15.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

guardian_type_enforcer-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl (14.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0dffc03d3c65e66a3b30f7752a89933784dafb66aab958e21a2c291dc2393dd9
MD5 d5b35654445258971640bede24da06a2
BLAKE2b-256 b625df8b8ee15966ad7ac6b7c241d7a5964604bc52ce46e5f637f739b279666e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 5f43af89c22eebecc1ab591451d2b9e90d081350665f010706e026f28a24b62d
MD5 aad436fa28127f4df2659a72679ad807
BLAKE2b-256 cf1e2b45a7961cb271021151b60bb601e2bdfe6030b624becd477aae77bf0eeb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9e457dc990764598d957b370332245d39ed4e3d2a4a72440b83a7183f60a11c5
MD5 fc64ec81362a5cd83d2b6f4e1bd15569
BLAKE2b-256 7280443e7c850fc28887437bfb26edcc683a3bf109203abd5b2fd2d1ab76ae4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 a97a8b6b1a6f0afe47262b1870f855fcdacce19eb75bd0d3c6f6d7e99377e99b
MD5 b1b49791b67500eb0259d04e74b47650
BLAKE2b-256 75f5b01994b590a05054eb42e72ab0468a67e7d3b21cfc492572a64e6efc3ed0

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-3.1.1-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-3.1.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18f94b47be9c5f4a33d18ec2db6f47072c86d987b14278410c709048aec83bb1
MD5 d2cb92fc2de81940aa3163f8413bfbba
BLAKE2b-256 f7f7f627b3359f90853ef1cef10c6d4cf44875cb280644c4e087b8dc8b7f7261

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c60be0379789e9cada245c38bae3ffe8f7323908c515f792212d1fb57804e1d5
MD5 c16213ba8dd2ddd23465edd1bc414c5a
BLAKE2b-256 c62520e42174ee920cff1183474c9aa014e2bf26b1193e3cba5666051103c3ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f9125c0222df350f65bc927ff852efd84aaf68ee29f40c46858a847417089cd3
MD5 42417c90cc8035b3e82ba997794d84f3
BLAKE2b-256 ad2e408fc9c0a8b38fd41f8d2b66c16a0d4fbf1ce9f8ff950ce36c6d2766e821

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3ed03f2d71ab05ad92954389bd6f3b32d320aec55aa4f09cc7d06f07234a683c
MD5 5a3474ae97928e4bfabf5f8d79bb6254
BLAKE2b-256 a5d4e550e1a3f3c86fbd3a25fc6c8d4d36e33e8d57518cf954a025f69e15c94d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6996d2e5d1098141551d756a7a8b588f61257162f6971e4a449caf57045f31e9
MD5 b8a7f98411d2df6c6f031d1e9a4e57d1
BLAKE2b-256 42dfd45b078e1c8e1540921ec3b9276d206089ecf5276631ff590a0526b7fc36

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 98aff7c8338db20c455b7d98db84aa3bb3d7e45517caec2955e49482abd7fd42
MD5 743f5b8d595d2523f30af401dd919ce5
BLAKE2b-256 e6da1402deda32fb46e9fea83789ace43a17fad5855b1f73943de869015e5390

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aba0bc220e14e849185c01569ee8c377ab4b66a2d468ce0383c1e1187a15c062
MD5 b555fb76e753d39266281eed20cab522
BLAKE2b-256 087335779cbec069837b603b906e0efa4e5f30db441985de681a83503ee26546

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 c48d5862267f2613fd7849d5bd9fbb4ca96ccdddcbab7a2ba3bffaa6a20197dc
MD5 1b70290c8822eaad810068f9e010a33a
BLAKE2b-256 d014278418ea3421df58d2d9537adc4ed8f18681870250ea5283f0c4856954a3

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-3.1.1-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-3.1.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a8e404b8f1fd286e532ab7dd4107071a70cd6ce0c9227a4c371251837f657fc2
MD5 5c03f7b8d9ff6b22681720284262974f
BLAKE2b-256 6abfcbe58ffb8c0de007d84bcedfe855a69cf46fb107b30064850c5c3a206c67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ec4050224dad13ea06768d12749ebd96b9cb95d70fced75c3cab33f1b2dcb777
MD5 4ab78d722537f81ad6cca864a0cc7728
BLAKE2b-256 2366f0f6274ba229f6613548516b99eb2c53b1664b93233664563adf99f6075d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a31352d977195108abe3254def4154c696bda7af3c39f09d86f83fb392de87fb
MD5 2e74935643cf74519349186f955c8e4c
BLAKE2b-256 972d72991baf8aaf53caf1abb85bc9d2a545cf407339468df57f07d228da442d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 e0ddd3d135f7fd706f303271052d430f0b1b83e4cd7d9920e2270f4d42b2ff10
MD5 cac426f711c3fb1bda1490cf7b86ad62
BLAKE2b-256 5cb215bb623204aa6102ab6fcfe0c0ed5447801d87bee8e515b9199054316ddc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dc7ce308f3efdaeb91fb75cf274c01b4c8a0df71b2f2b6213a82bdf77591a686
MD5 1e30759276bd795ca47aa599a8a0a37e
BLAKE2b-256 858798b489401588a2d24bf93513629a7941319b664643fc27c59730006167b2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 f0db48cbf3195a7b1c9fa0d351eed9e44a5e234c23d5721e32078361f8a14474
MD5 b3d1b261c35251b60195fc4f24cb36ef
BLAKE2b-256 df053aa9b62b409f832a2e39b66eb97dadd5298cc01d30805a7cc04e507af2c8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 76ab0521befb9236604cbe34951b2c479a3d5dd1e7bdd8cded532d84092e166b
MD5 bc060a8dcf57d732b6d63417574aaa54
BLAKE2b-256 3d2bc0c0a0cae728f017a839ca174e93f74923b345ba66186fde3954212c55f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2059c96c499d5e1ba1df91ddc909263ddf7166f9deb6d64a5fe04b4a75419ab7
MD5 0a284ba1e47fcadda654499c2530c97a
BLAKE2b-256 1bd484b3cfbe4715ac17c6e7c0ba2fcd50498a0c09b156cd58836ff5e134011a

See more details on using hashes here.

File details

Details for the file guardian_type_enforcer-3.1.1-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-3.1.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b57d1a7e6c3ac9d34720d2a7817a4209b52ef8c8ff1904a5589aa13dcfa017bc
MD5 f092afa3fc4ae7ff84c6b69acce10999
BLAKE2b-256 e706912c1847c1882d8fa7e5b0dd408e739b74141cb363dcee5f6ec894b41fa3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a4aa6952a03304421922f1e0213cec837e5ae677fea7452122d49647133f6645
MD5 23fbc52039897ad8529e4fd2c824db25
BLAKE2b-256 4d6c801d99d5daf5585e1a9ff15a191aec3fbe2df5e7b7a5013275a173a361f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d507ac204b4bfeba65433f192995f9638f0cc0d0fe84bb64c9f5068c1d4d1131
MD5 605a6a88732001498b0aafd3b04c6888
BLAKE2b-256 84a538179b3c0e285759f207cf898e49840e700f7d1f17d19972af0ec6db13a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for guardian_type_enforcer-3.1.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f2984f62bec3f4018179cd5b38961963ce7b7149bbcdbd88f54fecd74fc66059
MD5 f913058589f9a887a6ef91acc216f33c
BLAKE2b-256 b391c9a2e9ea76b72a4a3cc7d32f47a62938c0bec6a5a8ea85b98549a842f367

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