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
  • format policies

cedarpy packages are availble for the following platforms:

Operating SystemProcessor Architectures
Linuxx86_64, aarch64
Macx86_64, aarch64
Windowsx86_64

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": {"__expr": "User::\"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.

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 82 tests defined in the example_use_cases_doc, multi, ip, and decimal suites. (The pass rate is actually higher, but we skip some tests that pass due to the way test suites are loaded.) 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-0.4.1.tar.gz (37.4 kB view details)

Uploaded Source

Built Distributions

cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-cp312-none-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.12 Windows x86-64

cedarpy-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

cedarpy-0.4.1-cp312-cp312-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

cedarpy-0.4.1-cp311-none-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.11 Windows x86-64

cedarpy-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-cp311-cp311-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

cedarpy-0.4.1-cp311-cp311-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

cedarpy-0.4.1-cp310-none-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.10 Windows x86-64

cedarpy-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-cp39-none-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.9 Windows x86-64

cedarpy-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

cedarpy-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

cedarpy-0.4.1-cp39-cp39-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

cedarpy-0.4.1-cp39-cp39-macosx_10_12_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: cedarpy-0.4.1.tar.gz
  • Upload date:
  • Size: 37.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.5.1

File hashes

Hashes for cedarpy-0.4.1.tar.gz
Algorithm Hash digest
SHA256 b7113aef460e229fd037758affaf186e4456d79d9172ab247bb8447e4d657e3f
MD5 c1b1afc72236b9432d55d210ce152ca4
BLAKE2b-256 062b77ceea87ee4f4aa5743e1283c52d756e65391ca4682e2532fd74f04d06dd

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9ca159abbb163a59edf6569153bb056e85aebf75745085f746fb067bcb75b61
MD5 de1d78a5c86a0513b3b0a887b86cf6a5
BLAKE2b-256 ba3acf8b2cc97e6edca96db3823fd2207d5acde2110e1348194ab8d52faebfb1

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2c9622e96ded0dab3da4aff3be01ff5146b50974263c147cc5e8cd5839d5b56d
MD5 39b0252033df5790b59e3fb93d2aa4fc
BLAKE2b-256 883416ca9b410a5a6ad4935914fcc577df621d35fd676e7f94aa1541e83bbb3a

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 96ed1150a52443ab387c960610479da0f5301b1ee68688c8024364a2f2e93aa2
MD5 b7cc9c2344b574c8b3087f69f5d43acd
BLAKE2b-256 f0531fb1866349d8301233e9c1aee76ac9f31b46fb5faa0454dbda84c7c95847

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 62ab7e2864fc71302ddf8f4e4ac23618846b18eab05706342ecb606366f82fb2
MD5 03966f04ba7e8174026b3764cc380e3f
BLAKE2b-256 722b4c9e9568daac5c98daade53eee4fc3010c8713feece11a447df2d6a64ee4

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 040b835030fece9963093637c855f9746a683fbacee6cff693d3fb311e901e36
MD5 ea3a94e69fcbae38923d6a652b7701bd
BLAKE2b-256 9741b4a3e3e8b59e2b484a193ef8d98a81292a14d15ffdb08edbfefad7103082

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de724dc625c1cfb80e16e6dbaca4d9eb07bdf4230fdcd31720763ecb74fd40a6
MD5 5decd8b41be272c2f660750161e14e89
BLAKE2b-256 cdca751b81884937d279dfa8bea8e35dfdd2354c6e152c143de0c9a0656fa980

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 696efe4432684846aa76128f5782adb755b6c7f0a726b8eec6a08ee840f3917c
MD5 702e451d1b75228b9a77fe75e6c9d19c
BLAKE2b-256 0cc8f7fc1139b40328609fd141845e2667de4447c5c509579b0fc50b7572f2aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5488e3218ff9c1c57354476629c6905fb55356d8d35972d2bee233413e12185a
MD5 7ada95ede7ffbe0e4eaee1df1946a5f1
BLAKE2b-256 9dd90731a3903849dfed04533a11c76d9f7a98f96087affa6acaef03040de925

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1bf715cb3eb4636bd44ab66ddb96e877e72093358caca6edbc777546d84be38d
MD5 34e17a5cd4bd371a04e200f6caf05403
BLAKE2b-256 6a7bbc16bcf84ce97aa929677d8a42b3ee94f72b76b4de44fd8362da9816fe57

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 32b32d63b5584d98fb49aa251f563a2c867fb1d7ee913d3518f997ccb5af36b1
MD5 76b0e5ec69cbf76828010e8a978c25c5
BLAKE2b-256 5f0cb2a59418740967d35e9f383b02b0dbee41028c07874aa9cfd937cc67b921

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 647ee8d1878e048638a38e54ee01a0097ca3b01fb2dee497891e503be25e031a
MD5 92730dcda21fb5569989b3560f020bdc
BLAKE2b-256 cab778b4b3760bd281abf54a285d5636f467b2c9228989d09aaa7f5699c20849

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b72d512981c24e02704fc0366125f9afd835cf619b36cc62a2435a9c082f68e0
MD5 18f79f55725f0d69927ccae1c5b6367e
BLAKE2b-256 01ad135b998a6bc3856f0d993fb59bc9730a68dc9ed072b6830bbbfdd5cfe374

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3d7056a68756edea65e34bd10772c179c259a97ce060b46ab73cbcd9704f6072
MD5 977e7c7ff08b97bcdb7a5aabaf3fddb5
BLAKE2b-256 df4ee99a629af47fc36c70f8e145ed704c35768f07d8a0f830eac7047dba0092

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 27d438437fa3f038d0adcd5a7b9873996d8934068ba4a1eee73cbc5aadaebc53
MD5 b629e54aa701e60b7e8b205f3855df37
BLAKE2b-256 03a18957d95c49373f289f870fbe6d809803dd08f2ffb992309904d149836eb3

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 335d40415503751fe2c9ce5d72bb801ea7174fd0074b18d0a9bb71a3dd600e46
MD5 54e2ed23b3a8610593a9dbada28bd264
BLAKE2b-256 96ea0677d47c6ca2d69360dfae9c43b3928d1d4ec46280cd27d174f0f4e52810

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c72721bfc3787dde3ef07932e4ac1adb01016622f42dffb200a3a79a74b1927f
MD5 9ab8b5c0d1a60b9e4e75843d90d97155
BLAKE2b-256 eb4c2144bcc14b031f9742bd41d03f4210a911afce0232f6e21a9af97c018062

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8033f2ce2e2e1122c07f4174c1028a94a7ecde74e1276daae63d75efca164cba
MD5 166c3caae08753d413540e4a8431d775
BLAKE2b-256 9febc8587d046087c894dd02b8db2e5482d6ce2ff6d0215a3dfc2b696359754f

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 04de468bf981a5bc79799faeb42a80f5dccddb9a32e1137eb4292941a7f50574
MD5 e9c85ea3f4e6dfa9502054cf7b218b63
BLAKE2b-256 c034a2f592a77e8ced15fe5372de385c4c8896357b5b0560f44d6f247b9e93e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 942512350ed477925f008282785f605b7dd056d105800b2df72710542be20c1a
MD5 012d3edf13ca5d67a1f7e9379c2b4f50
BLAKE2b-256 c6f30bc3a400ff4d23aed058e26336d3c02cd619aada1b931f73bad1ddf00a4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9be698f6aaf69685f7ad86e555da6a26cf956cf8b3aedee14f690cc17134beb6
MD5 c58bc83577cad7f8ba558645fdc244da
BLAKE2b-256 29b4c246a5ae05d4bad9ca49741f7abbcdf324a63b23143dd8f5620b77c80948

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c30f1395a0e03064a915226ce7519ff53aa5cb99256a55530685ce787ff7647d
MD5 e12a0f3a462042ae13c3dd439f93388b
BLAKE2b-256 cb844491418107936565d61b5efe251777430bd9cdfdef7049106e33636e6cf4

See more details on using hashes here.

File details

Details for the file cedarpy-0.4.1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cedarpy-0.4.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8c7c8085b11bf9b5a64da259ff5675a53e4d5b640b92dabce84a3d73d269c665
MD5 4e1bc6c2a15af6c7ed5b95a6f8ed92e9
BLAKE2b-256 e43eaca63ab3e62b7121614ba19ebf898814e2d76cf71c11b42bc98004474223

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page