Skip to main content

No project description provided

Project description

Cedar Python

CI (main)  PyPI version

cedarpy helps you use the (Rust) Cedar Policy library from Python. You can use cedarpy to:

  • check whether a request is authorized by the Cedar Policy engine
  • validate policies against a schema
  • format policies

cedarpy releases correspond to the following Cedar Policy engine versions:

Cedar Policy (engine) releasecedarpy releasecedarpy branch
v4.8.2v4.8.4main
v4.7.2v4.7.1release/4.7.x
v4.1.0v4.1.0release/4.1.x
v2.2.0v0.4.1release/2.2.x

Beginning with v4.1.0, cedarpy's version number indicates the Cedar Policy engine major and minor version that it is based on. cedarpy increases the patch number when releasing backwards-compatible changes and bug fixes. So the cedarpy and Cedar Engine patch versions can and will diverge. Select the cedarpy version that provides the Cedar Policy language and engine features you need.

cedarpy packages are available for the following platforms:

Operating SystemProcessor ArchitecturesPython
Linuxx86_64, aarch643.9 - 3.14
Macx86_64, aarch643.11 - 3.14
Windowsx86_643.9 - 3.14

Note: This project is not officially supported by AWS or the Cedar Policy team.

Using the library

Releases of cedarpy are available on PyPi. You can install the latest release with:

pip install cedarpy

(See the Developing section for how to use artifacts you've built locally.)

Authorizing access with Cedar policies in Python

Now you can use the library to authorize access with Cedar from your Python project using the is_authorized function. Here's an example of basic use:

from cedarpy import is_authorized, AuthzResult, Decision

policies: str = "//a string containing cedar policies"
entities: list = [  # a list of Cedar entities; can also be a json-formatted string of Cedar entities
    {"uid": {"__entity": { "type" : "User", "id" : "alice" }}, "attrs": {}, "parents": []}
    # ...
]
request = {
    "principal": 'User::"bob"',
    "action": 'Action::"view"',
    "resource": 'Photo::"1234-abcd"',
    "context": {}
}

authz_result: AuthzResult = is_authorized(request, policies, entities)

# so you can assert on the decision like:
assert Decision.Allow == authz_result.decision

# or use the 'allowed' convenience method 
assert authz_result.allowed

# or even via AuthzResult's attribute subscripting support 
assert authz_result['allowed']

The AuthzResult class also provides diagnostics and metrics for the access evaluation request.

See the unit tests for more examples of use and expected behavior.

Authorize a batch of requests

You can also authorize a batch of requests with the is_authorized_batch function. is_authorized_batch accepts a list of requests to evaluate against shared policies, entities, and schema.

Batch authorization is often much more efficient (+10x) than processing authorization requests one by one with is_authorized. This is because the most expensive part of the authorization process is transforming the policies, entities, and schema into objects that Cedar can evaluate. See RFC: support batch authorization requests for details.

Here's an example of how to use is_authorized_batch and the optional request-result correlation_id:

batch_id:str = randomstr()
requests: List[dict] = []
for action_name in action_names:
    requests.append({
        "principal": f'User::"{user_id}"',
        "action": f'Action::"{action_name}"',
        "resource": f'Resource::"{resource_id}"',
        "context": context_keys,
        "correlation_id": f"authz_req::{batch_id}-{action_name}"
    })

# ... resolve get policies, entities, schema ...

# process authorizations in batch
authz_results: List[AuthzResult] = is_authorized_batch(requests=requests, policies=policies, entities=entities, schema=schema)

# ... verify results came back in correct order via correlation_id ...
for request, result, in zip(requests, authz_results):
    assert request.get('correlation_id') == result.correlation_id

cedar-py returns the list of AuthzResult objects in the same order as the list of requests provided in the batch.

The above example also supplies an optional correlation_id in the request so that you can verify results are returned in the correct order or otherwise map a request to a result.

Partially authorizing a request with unknowns

Sometimes you can't fully evaluate a request up front. A resource entity may not be loaded from the database yet, the caller may not have picked a resource, or context may be filled in by a downstream service. is_authorized_partial evaluates whatever is known and returns residual policies for the parts that aren't.

is_authorized_partial returns either:

  • Decision.Allow or Decision.Deny when the unknowns can't change the outcome, or
  • Decision.NoDecision plus residual policies for the caller to re-evaluate once the unknowns are bound.
from cedarpy import is_authorized_partial, PartialAuthzResult, Decision

# Allow access to all principals when the resource is public
policies: str = 'permit(principal, action, resource) when { resource.public == true };'

# Resource entity hasn't been loaded from the database yet
entities: list = []

request = {
    "principal": 'User::"alice"',
    "action": 'Action::"view"',
    "resource": 'Photo::"photo1"',
    "context": {},
}

result: PartialAuthzResult = is_authorized_partial(request, policies, entities)

# Cedar can't decide yet: the policy depends on resource.public,
# but Photo::"photo1" hasn't been loaded.
assert result.decision == Decision.NoDecision

# Which entities Cedar needs you to load before it can decide:
assert result.diagnostics.unknown_entities == ['Photo::"photo1"']

# Which policies are still unresolved, identified by the auto-generated policy id:
assert result.diagnostics.nontrivial_residuals == ['policy0']

Now you can load the unknown entities and re-evaluate access with is_authorized to get a final decision:

from cedarpy import is_authorized

# Load Photo::"photo1" from the database and transform to its Cedar entity representation
entities = [
    {"uid": {"__entity": {"type": "Photo", "id": "photo1"}},
     "attrs": {"public": True}, "parents": []}
]

final_result = is_authorized(request, policies, entities) # new entities; same request and policies
assert final_result.decision == Decision.Allow

Unlike is_authorized, an absent or None context is treated as an unknown rather than empty. Pass context={} for an explicitly empty context.

Note: A partial-eval result is not a final authorization decision. Schema type-checking, particularly the per-action context type, is skipped while fields remain unknown. See the is_authorized_partial docstring for the full caveats.

See tests/unit/test_authorize_partial.py for usage details, including binding unknowns and re-running is_authorized once the request is complete.

Validating policies against a schema

You can use validate_policies to validate Cedar policies against a schema before deploying them. Validation catches common mistakes like typos in entity types, invalid actions, type mismatches, and unsafe access to optional attributes—errors that would otherwise cause policies to silently fail at runtime.

This is particularly useful in CI/CD pipelines to catch policy errors before they reach production. See the Cedar validation documentation for details on what the validator checks.

Here's an example of basic use:

from cedarpy import validate_policies, ValidationResult

policies: str = "// a string containing Cedar policies"
schema: str = "// a Cedar schema as JSON string, Cedar schema string, or Python dict"

result: ValidationResult = validate_policies(policies, schema)

# so you can check validation passed like:
assert result.validation_passed

# or use ValidationResult in a boolean context
assert result  # True if validation passed

# and if validation fails, iterate over errors:
for error in result.errors:
    print(f"error: {error}")

The ValidationResult class provides the validation outcome and a list of ValidationError objects when validation fails.

See the unit tests for more examples of use and expected behavior.

Formatting Cedar policies

You can use format_policies to pretty-print Cedar policies according to convention.

from cedarpy import format_policies

policies: str = """
    permit(
        principal,
        action == Action::"edit",
        resource
    )
    when {
        resource.owner == principal
    };
"""

print(format_policies(policies))
# permit (
#   principal,
#   action == Action::"edit",
#   resource
# )
# when { resource.owner == principal };

Developing

You'll need a few things to get started:

  • Python +3.9
  • Rust and cargo

This project is built on the PyO3 and maturin projects. These projects are designed to enable Python to use Rust code and vice versa.

The most common development commands are in the Makefile

Create virtual env

First create a Python virtual environment for this project with: make venv-dev

In addition to creating a dedicated virtual environment, this will install cedar-py's dependencies.

If this works you should be able to run the following command:

maturin --help

Build and run cedar-py tests

Ensure the cedar-py virtual environment is active by sourcing it in your shell:

source venv-dev/bin/activate

Now run:

make quick

The make quick command will build the Rust source code with maturin and run the project's tests with pytest.

If all goes well, you should see output like:

(venv-dev) swedish-chef:cedar-py skuenzli$ make quick
Performing quick build
set -e ;\
	maturin develop ;\
	pytest
📦 Including license file "/path/to/cedar-py/LICENSE"
🔗 Found pyo3 bindings
🐍 Found CPython 3.9 at /path/to/cedar-py/venv-dev/bin/python
📡 Using build options features from pyproject.toml
Ignoring maturin: markers 'extra == "dev"' don't match your environment
Ignoring pip-tools: markers 'extra == "dev"' don't match your environment
Ignoring pytest: markers 'extra == "dev"' don't match your environment
💻 Using `MACOSX_DEPLOYMENT_TARGET=11.0` for aarch64-apple-darwin by default
   Compiling cedarpy v0.1.0 (/path/to/cedar-py)
    Finished dev [unoptimized + debuginfo] target(s) in 3.06s
📦 Built wheel for CPython 3.9 to /var/folders/k2/tnw8n1c54tv8nt4557pfx3440000gp/T/.tmpO6aj6c/cedarpy-0.1.0-cp39-cp39-macosx_11_0_arm64.whl
🛠 Installed cedarpy-0.1.0
================================================================================================ test session starts ================================================================================================
platform darwin -- Python 3.9.12, pytest-7.4.0, pluggy-1.2.0
rootdir: /path/to/cedar-py
configfile: pyproject.toml
testpaths: tests/unit
collected 10 items

tests/unit/test_authorize.py::AuthorizeTestCase::test_authorize_basic_ALLOW PASSED                                                                                                                            [ 10%]
tests/unit/test_authorize.py::AuthorizeTestCase::test_authorize_basic_DENY PASSED                                                                                                                             [ 20%]

... snip ... # a bunch of tests passing - please write more!
tests/unit/test_import_module.py::InvokeModuleTestFunctionTestCase::test_invoke_parse_test_policy PASSED                                                                                                      [100%]

================================================================================================ 10 passed in 0.51s =================================================================================================

Integration tests

This project supports validating correctness with official Cedar integration tests. To run those tests you'll need to retrieve the cedar-integration-tests data with:

make submodules

Then you can run:

make integration-tests

cedar-py currently passes 69 of the 74 tests defined in the example_use_cases, multi, ip, and decimal suites. The integration tests also validate policies against schemas when shouldValidate is set in the test definition. See test_cedar_integration_tests.py for details.

Using locally-built artifacts

If you used make quick above, then a development build of the cedarpy module will already be installed in the virtual environment.

If you want to use your local cedarpy changes in another Python environment, you'll need to build a release with:

make release

The release process will build a wheel and output it into target/wheels/

Now you can install that file with pip, e.g.:

pip install --force-reinstall /path/to/cedar-py/target/wheels/ccedarpy-*.whl

Contributing

This project is in its early stages and contributions are welcome. Please check the project's GitHub issues for work we've already identified.

Some ways to contribute are:

  • Use the project and report experience and issues
  • Document usage and limitations
  • Enhance the library with additional functionality you need
  • Add test cases, particularly those from cedar-integration-tests

You can reach people interested in this project in the #cedar-py channel of the Cedar Policy Slack workspace.

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

cedarpy-4.8.4.tar.gz (366.5 kB view details)

Uploaded Source

Built Distributions

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

cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp314-cp314-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.14Windows x86-64

cedarpy-4.8.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp314-cp314-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cedarpy-4.8.4-cp314-cp314-macosx_10_12_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

cedarpy-4.8.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp313-cp313-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.13Windows x86-64

cedarpy-4.8.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp313-cp313-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cedarpy-4.8.4-cp313-cp313-macosx_10_12_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

cedarpy-4.8.4-cp312-cp312-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.12Windows x86-64

cedarpy-4.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp312-cp312-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cedarpy-4.8.4-cp312-cp312-macosx_10_12_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

cedarpy-4.8.4-cp311-cp311-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.11Windows x86-64

cedarpy-4.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp311-cp311-macosx_11_0_arm64.whl (3.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cedarpy-4.8.4-cp311-cp311-macosx_10_12_x86_64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

cedarpy-4.8.4-cp310-cp310-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.10Windows x86-64

cedarpy-4.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

cedarpy-4.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

cedarpy-4.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file cedarpy-4.8.4.tar.gz.

File metadata

  • Download URL: cedarpy-4.8.4.tar.gz
  • Upload date:
  • Size: 366.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4.tar.gz
Algorithm Hash digest
SHA256 213ac129fe3b7f8aee437af656b1ecdab6c37414f9403ecaa47013b06574052a
MD5 071b25f9d12608de05ea39965b1302b0
BLAKE2b-256 c1f57ab2cbf080253d81c9704a6ab04c3dc93759f0ae688b1e5e28ae8fdb2bf9

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d2b9b3fbca0a7e26fb0d4e9415a3b3405e56465eb213a3b27b226d2960019c39
MD5 784dfdfdfb2a41f10e765403b94f7b66
BLAKE2b-256 4c6edaf94b6469abafc49073e274486a2b7cf4066698f7c9f57ab98e7bebc1e5

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 42929e6af780feda63d04145e1eaa665f0c3ec25ba2a5c8c5757177f3e3e1ab8
MD5 36a3d7391fd8041a16e36200f9895218
BLAKE2b-256 d663162f3eab4f8aa100ffcacba46f449ba83f2dc2eae2654d631bc30454cbcc

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3c252d69084d0e13fc4a49afa0e34e41a5087a1a65bc435c9169b34010ef9bf6
MD5 bf57a4e3a4b67d0186ce4dee0c74b9cb
BLAKE2b-256 937c25d99b911863046a8091e817619c33a7df945e63b05924a56f7254c8f4de

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 21f74d4dbdb85ec81468219bbd33006ceedefd2973012d27981a7034b74d43e9
MD5 3f79dc59ae6dbc097fdd53d6413dc676
BLAKE2b-256 28f3520c45d9a4dce78b49089f80b9bfcca8435c4e1050fc5d911dd12155cbff

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 142442b6cab2f193d93c966f4ae09f95709b2a60a1028e5b7eeb61573555b07f
MD5 3a167edc799f220dd7d8af563a05150c
BLAKE2b-256 c9dd5480f0e4d8ec579a9a698b9e85b2304dc8700ff226b79fdb619380d710b9

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c0b561c3d7f28c29fc409abd202ceb2f2de18371f615cbefe708dc800247fd76
MD5 129b5ba48a418ac38078d07b4aa368e0
BLAKE2b-256 44bb0b41c674136c7da58c6d02c9a97dca1c0f17730637d73b3582cd4dcf6476

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e1e41d45fd8303b08d7c656df08edc3813d51227b914f07d3ed9ba3b95df5d7
MD5 7f57b52f8edf1210b9ead24dac987df6
BLAKE2b-256 46fc1ce4992850b68f90622a42efdbb0eeea173b9346b1d0803e06686dfbd334

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7ca32c9894f6f557a8f83843061f243a49cbe233e41006f381b35dbc1c171332
MD5 0f9d86a0edc002505d43c7bee6062a02
BLAKE2b-256 4da80f33ad32bc2d1f2ff2cb34d7a7887afe4a117fa474f5feee14daf1151126

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9deb8778d12300cebfc793d9dcfbc392e9abf997baf57d337dfe73882441781d
MD5 d95f888c0709ae3d9e2519f73e1aea93
BLAKE2b-256 cffea51a9806d4b169d71297f5cddc7d1479c052de0c7f86566f5e08ef8d7e92

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 547cbec6355a0b78ae4f587ed61ac90fb36e462eb6114d6447b100b5132d7e84
MD5 13a00b05e9a176ec250c993524f3d1c6
BLAKE2b-256 6f0117e208f9cc41bfe3b16e84d359116f1263933ef63e3e66858eca8003ec21

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d3ff0c87e680d8e41687f7d2346b035e2fddefab66e607554907ecdb189b714
MD5 359d0ef33250f9121936a46b3e78e52b
BLAKE2b-256 79545be373dd19d09d6d1753047d05d5437d35e1329fa6c29b4202912e653ca2

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 72a5e99c128da885acaa9ea27053a2134c4e350ec1e7adca8b97022b46307a51
MD5 72ab9b07a35e0a5f99955083cebb9bb9
BLAKE2b-256 beed6bc25db8b6171708bfc2d7ba566a156a090d2ef18a720fb6fa9d83778125

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 04f002ae537336d6f1b2dde81c735faa7107a86b7a47ad2ae44a90549178ec28
MD5 f6d2c8b1abb3987398924c2193dd527b
BLAKE2b-256 be4da38e3ecf2fd36e5482cd86a544c3b62c67c62a30d0ebbe87f68df675153e

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cdda294f3b2599ddf0dcea0e5f6b27bfaf2d6875c8a9039292a3668b2eb7dd90
MD5 a88ba64901610df4a06d4c0cd45b0071
BLAKE2b-256 7ae4b2ca95245e25c09798bc4e509d08f34e487abe337ca5d2c0821860231997

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 1e072cf042d31229448133a9a6367c6427f2f009e355112bc3c49f1c0daaa284
MD5 3de0c6b969e4180e9df68dd9b3892cf6
BLAKE2b-256 744b9581c51e637885a23630b92c647ee79ce51f7ac7b417bdec589ddc1cf2ae

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1c594f7ad27ef6caf76ea82171dce71c3344a9fae43f0e1a5e6a185824361bea
MD5 e4f0cbe2195f1c3b3f864b78d11216c9
BLAKE2b-256 3c495f67f98ca97480d48a023d88f51f99f812c89f766752efbc18659ac01a69

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 091c548a9ae732e380006f27aa1dd133fa25bd102d589151e25bc614f807fe89
MD5 e8460365659a096c579bc79299541efb
BLAKE2b-256 df8a29b5922f61bd0d4190330f3840f39ad7436d661ac30f4704346fe7fb76ca

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1a7c89981f5bd8577fe5df8c2fc6ae711a04f5c1d4afa11a58ade18155902eed
MD5 b3f40c8ecca5a05682a54d4141096abe
BLAKE2b-256 87ac0df9a281f2add5554d15357e35bfbaf423c1bfc51f0738b1af32285353ad

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 66eb6e0f651035deb76d24e4a340233128bf58976cdd5b4d35659d156fb93e06
MD5 bcffb075e8b7e46b79e745a71ec57f59
BLAKE2b-256 a1c03eb8ddc3a1276739230c3c3a08f1715b8f9f679c724146abd1102707c788

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4f30e39cd5fc997baf77d8d710b219a5ed298d8032158637d681dcc73a77bdc3
MD5 9a5289f04ab1b743f2313fdddb23ab52
BLAKE2b-256 bccbf1b0731e47b8fe9cd13bbdfaecad1fdd5a97fc18dfe18d4ed5669f9a1473

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9beb8fefe9c7bf93f095842a0abfb8dbcbf0a26bdaa98b7aad9cd6352a02844f
MD5 8b2d255c5aff91df03ab77a6b3d79519
BLAKE2b-256 6ab52ed3d7c76ae2bf8ae9c103c7cd28fb8a42ee29655462e4620c76b66be523

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e47004829e9d237c23560034f9bf7cbbaf9f6169c9141facebb62f32bb11a34c
MD5 a3f0d1a0cb757d47d41f11cc29ed34ae
BLAKE2b-256 11642f44afd02318a70daa214464d03abaf91d829d218f6d78af362f7ed78e9b

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8ead1c8f1086dbf154a70db35198b94a231c188c51218deb2667990166eec846
MD5 da63232db2cb6cca2451c05cfb0d5c79
BLAKE2b-256 fe011ad93426eb9e9a2d31f7d4741f5405b247768f9d55fda51eb55698e60857

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 38920a093dc830f24af5c3492385c7839db1863301969a927a65ec8a6475d986
MD5 9cc80219246cb4c66d938da287b346b6
BLAKE2b-256 ccba24ba3d0f1b831cfd195df2491cc324fcc53c2c5132b9c31f5affd9f98ab6

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cedarpy-4.8.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for cedarpy-4.8.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 99fdc1a985c1ca874403edebfcddeffd41a9fd518113f6ae9086ab3fc0c53c52
MD5 f8ec36e09465f9135bbdcbe090c3dda4
BLAKE2b-256 e313cfd55cce4f98b46de3652fd554b3726116a2fc56c0b2595e3c636078e162

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8cb9ec14ef4e5804a42a6f6b2505ac367c39dc8ec70fc28251bcb8204ef94d66
MD5 2a84800ef7cfbb5405b56ac94bb6cd3a
BLAKE2b-256 d6b4ddb22f56806e67bb9087524ed24ba4c312641d58da97fb793be03702607e

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 415751a3296c0041178789dfc80fd33a59a150251c243686cd6f8371fc01e7eb
MD5 377cc428a83fdb30ed8d218f5cc151a2
BLAKE2b-256 2b4deb61064ad6698e3370e03dc41caf5b9719fd2b4f2ef6b7911bd9fb211603

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 59e076ed4643ce1397bd2d888b50181edd0ccf1befe42b7dd3b95ca8d389c891
MD5 e902e86cda7f11da37faa0b46d103f9d
BLAKE2b-256 68101da8f75bd1fdb6496d387bdc3c56ab3c815fe937433a70375f528b62962a

See more details on using hashes here.

File details

Details for the file cedarpy-4.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-4.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 411ff70741a6c8e6e8b3dbc7e8f88d24a908e16c8424617ae1f18b2bbd3705b3
MD5 812e31b7babb72ce9be377317bb69697
BLAKE2b-256 f7d9a2c85b02c00ad2ddb33d2c3b84574f2b20d4ebf04384c7e5fe272175dbe9

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