Skip to main content

Schemaless binary serialization format without limitations

Project description

Pinch

Schemaless binary serialization with ZERO LIMITATIONS

Pinch is a binary serialization format, aimed to be both fast and memory efficient, while being as dynamic as possible.

  • No schema needed
  • Out-of-the-box support for all JSON types (+ binary!)
  • Support for custom types
  • No limitations:
    • ints can be indefinitely large (or small) - no limit at all
    • strings, bytes, lists, and dicts can be indefinitely long
  • Extremely compact serialization, which leads to lower memory usage, easy storage, and less network traffic
  • Consumes little memory while serializing\deserializing
  • Supports lazy loading
  • Support writing to a buffer, such as a file, to decrease memory usage
  • Written in Rust ⚡️🚀🦀🔥

Motivation

JSON is a popular choice because of how flexible and easy it is to use. But it has one major flaw, is far from efficient. It also lacks support for binary data, and depending on which library you choose, also custom types.

What Pinch offers is to trade in the readability of JSON and in exchange get

  • High performance, both in speed and in memory usage
  • Support for binary fields & custom types
  • Smaller serialized objects

All while still needing no schema and having 0 limitations.

So, if human readability isn't something that's important to you, Pinch is for you.

Benchmarks

Even with its great flexibility, Pinch performs on-par with and often better than other, less flexible libraries:

repodata.png

Full list of Benchmarks

Comparison to other options

  • Protobuf / FlatBuffers / Cap'n Proto / Avro
    • You need a Schema, so if you have one go for it, but often this just isn't plausible or not worth the effort
  • BSON
    • Limits the size of numbers, lists, dicts, strings, and binary
    • Limits the size of the document itself
    • Preforms rather poorly in the benchmarks
  • MessagePack
    • A great option, but:
      • Limits the size of numbers, lists, dicts, strings, and binary
      • In many cases Pinch outperforms MessagePack both in speed and in peak memory usage
  • Orjson
    • High memory overhead
    • Doesn't support binary (you can, as a custom type, but it will be much less effecient)
  • Pickle
    • If you're programing specifically in Python and only Python this is an option. Although it will couple you to Python which usually isn't ideal.
    • You need to be more aware of security risks
  • Smile
    • Looks promising, but I couldn't find a Python3 library that worked...
  • XML / YAML / TOML
    • Why??
  • Ion
    • Rather good at creating small serialized data, but not as good as Pinch
    • Terrible speed and memory consumption

Usage

Basic

pip install pypinch
import pypinch as pinch

original_data = {"pinchable": True, "collection": [b"101010", {}, 0.1]}
# Serialize the data
serialized_data = pinch.dump_bytes(original_data)

# And now deserialize it
loaded_data = pinch.load_bytes(serialized_data)

# Confirm they are the same
assert loaded_data == original_data

Custom types

By default, these are the types that are supported:

  • List
  • Dictionary (HashMap/Objects/...)
  • Integer (up to infinit sizes)
  • Float
  • String
  • Bytes
  • Boolean
  • Null
  • Binary

But you can add additional types as well.
For each custom type, you need to give some type of identifier. An identifier can be any default supported type.

When serializing you need to provide a function that serializes your data into a supported type.
When deserializing you need to provide a function which gets your serialized item (the output of the function you provided in the serialization phase) and returns a deserialized object

For readability, I recommend a using a string identifier.
For performance I recommend an int.
Choose whichever suites your needs best.

import pypinch as pinch
from uuid import uuid4, UUID

# Types which aren't supported by default
object_with_unsupported_types = [uuid4(), 1 + 4j]

# Create a mapping for each type how should it be serialized
SERIALIZATION_MAPPING = {
  UUID: pinch.CustomType(identifier=0, converter=lambda x: str(x)),
  complex: pinch.CustomType(identifier="complex", converter=str),  # no real need for the lambda
}
# And a mapping for how it should be deserialized.
# Each type is identified by the same identifier as in the SERIALIZATION_MAPPING
DESERIALIZATION_MAPPING = {
  0: lambda x: UUID(x),
  "complex": complex  # no real need for the lambda
}

# Pass the serialization mapping
serialized = pinch.dump_bytes(object_with_unsupported_types, custom_types=SERIALIZATION_MAPPING)

# Pass the deserialization mapping
deserialized = pinch.load_bytes(serialized, custom_types=DESERIALIZATION_MAPPING)

# Confirm it worked
assert deserialized == object_with_unsupported_types

One way conversions are also possible using the one_way flag.
This allows you to convert an object during serialization into a supported type, without the intention of converting it back into the custom type.
In these cases, you can pass None to the identifier.
For example:

import pypinch as pinch
from dataclasses import dataclass

@dataclass
class DictLike:
    name: str
    age: int

dict_like = DictLike("Bob", 21)

# Create a mapping for each type how should it be serialized
SERIALIZATION_MAPPING = {
  DictLike: pinch.CustomType(identifier=None, converter=lambda x: x.__dict__, one_way=True),
}

serialized = pinch.dump_bytes(dict_like, custom_types=SERIALIZATION_MAPPING)

# No need for a deserialization mapping
deserialized = pinch.load_bytes(serialized)

# deserialized != the original object
assert deserialized == {"name": "Bob", "age": 21}

Dates

Dates aren't a type which is supported by default, but there is a flag which allows dates to be serialized to iso format.

import pypinch as pinch
from datetime import datetime

now = datetime.now()

# Pass the `serialize_dates` flag
serialized = pinch.dump_bytes(now, serialize_dates=True)

# And now deserialize it
loaded_now = pinch.load_bytes(serialized)

# Confirm it worked
assert loaded_now == now.isoformat()

Note: If you want the deserialization to result in a datetime object you're better off using custom types

Lazy Loading

Sometimes you might not want to load the whole object into memory but only a single field.

import pypinch as pinch

# Setup
obj = {"people": [{"name": "Bob", "age": 30}, {"name": "Joe", "age": 45}]}
serialized_obj = pinch.dump_bytes(obj)

# Load only a specific field
field = pinch.lazy_load_bytes(serialized_obj, ["people", pinch.Idx(1), "name"])

assert field == "Joe"

You can even just check that the field exists, without loading it

import pypinch as pinch

# Setup
obj = {"people": [{"name": "Bob", "age": 30}, {"name": "Joe", "age": 45}]}
serialized_obj = pinch.dump_bytes(obj)

# Don't load any fields, just check that it exists
exists = pinch.bytes_check_if_contains(serialized_obj, ["people", pinch.Idx(1)])

assert exists == True

And if you'd like you can ignore falsy values using the include_falsy flag

import pypinch as pinch

# Setup
obj = {"name": "", "age": 37}
serialized_obj = pinch.dump_bytes(obj)

exists = pinch.bytes_check_if_contains(serialized_obj, ["name"], include_falsy=False)

# Since name is empty, it will return that it doesn't exist
assert exists == False

Writing to a file (or other buffer)

In order to save memory usage, or if this is your desired outcome anyway, you can dump straight to a file (or anything else which has a write(bytes) method).

Note that the extra IO will likely have overhead.

import pypinch as pinch

# Setup
obj = b"very large data" * 10_000
with open("file", "wb") as f:
    serialized_obj = pinch.dump_bytes(obj, writer=f)

You can also configure how often the data should be dumped to the file:

pinch.dump_bytes(
  obj, 
  writer=f, 
  flush_threshold=10*1024*1024, 
  direct_write_threshold=5*1024*1024
)

When the in memory buffer reaches flush_threshold it will flush to the writer.
If there is a byte field larger than direct_write_threshold it will flush directly to the writer.

Optimizations

Note that in the name of fairness, none of these were used in the benchmarks :)

In Python, tuples are usually more memory efficient than lists. So you can use use_tuples=True when deserializing to deserialize the lists as tuples instead.

import pypinch as pinch
obj = [[1, 2], 3, [4, 5]]
serialized_obj = pinch.dump_bytes(obj)

deserialize = pinch.load_bytes(serialized_obj, use_tuples=True)

assert deserialize == ((1, 2), 3, (4, 5))

If you really care about speed, you can disable the GC while the deserialization is happening (use at your own risk)

pinch.load_bytes(..., stop_gc=True)

Backends

When possible, Pinch uses a backend written in Rust. But it also has a fallback implementation in Python, for cases where the Rust implementation is not available.

If you'd like to use the Python implementation, you can do so by setting this environment variable:

export PYPINCH_FORCE_PYTHON="true"

Exceptions

If the data is corrupted or incorrect, Pinch will raise pinch.DeserializationError or pinch.SerializationError

By default, Pinch expects the input to load_bytes to be a valid input. But if you have a stream which starts with a valid pinch object and then more data after it, you can pass the flag ignore_extra_data to suppress the exception

import pypinch as pinch

original_data = "data"
serialized_data = pinch.dump_bytes(original_data)

# This won't raise an exception now
loaded_data = pinch.load_bytes(serialized_data + b"extra bytes", ignore_extra_data=True)

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

pypinch-1.0.4.tar.gz (32.1 MB view details)

Uploaded Source

Built Distributions

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

pypinch-1.0.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (247.5 kB view details)

Uploaded CPython 3.15tmanylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (248.8 kB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (247.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp314-cp314-win_amd64.whl (133.9 kB view details)

Uploaded CPython 3.14Windows x86-64

pypinch-1.0.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (248.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp314-cp314-macosx_11_0_arm64.whl (226.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pypinch-1.0.4-cp313-cp313-win_amd64.whl (137.8 kB view details)

Uploaded CPython 3.13Windows x86-64

pypinch-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp313-cp313-macosx_11_0_arm64.whl (230.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pypinch-1.0.4-cp312-cp312-win_amd64.whl (137.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pypinch-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp312-cp312-macosx_11_0_arm64.whl (230.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pypinch-1.0.4-cp311-cp311-win_amd64.whl (137.2 kB view details)

Uploaded CPython 3.11Windows x86-64

pypinch-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp311-cp311-macosx_11_0_arm64.whl (228.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pypinch-1.0.4-cp310-cp310-win_amd64.whl (137.2 kB view details)

Uploaded CPython 3.10Windows x86-64

pypinch-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

pypinch-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (251.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

File details

Details for the file pypinch-1.0.4.tar.gz.

File metadata

  • Download URL: pypinch-1.0.4.tar.gz
  • Upload date:
  • Size: 32.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4.tar.gz
Algorithm Hash digest
SHA256 d44ea88c9793a5e232d4d1654ae5324f9e4084d88bfa89bb1f0793b335291bf9
MD5 b2f7e7a1b4fda7d124a45fb91705ffe6
BLAKE2b-256 0e2cb12a1a0429fdbe802d38912a9f1074635056a6f432d95b50e4ce6a895cad

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4.tar.gz:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b241593018c78a42a96aa27afed98f81d20d3add548e80ad62cf04cd1729c5c0
MD5 b6b3e3faa7b583bef0aee02f47ed466b
BLAKE2b-256 80976656d04d85a156de15e9610acdbb99c70cab59b21ac2e6eeb08efb1292c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6eab10e15d2e9ff74027f15532e07b30ab5756a5eee1daabbca6f4b904c7f214
MD5 4923a6b78c2e58e202d2e6d7a0f050ca
BLAKE2b-256 755568622ea20603a6df20250291b8698c097aa8cbfbad0ef96779cd14d29d5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 132815c2a5432a794944448d818f90a38c93133cc4147ff7bd51b229b5ee5564
MD5 5e58a66d465044453994bcbe4963e76d
BLAKE2b-256 5e218a84a1bfceeafe6f725cad656126c75551f6c8d715903784cf404102c8b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27a7c34c86a78066827f462251d7d306fb7000f50e4073f01621ddf2bca865df
MD5 93831cf12558b83c58c2ffefcfef954d
BLAKE2b-256 9d4ba982b4cf8bf9849a7190fd41f40384b6288bc765f0cb4dc75938ccf28c4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pypinch-1.0.4-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 133.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 cfdbd70676a5d053693c7f78514044eab98ffaaa61548dd7c2135b1123d55c7a
MD5 404e1baac6a26a41a19c0933db0c9dae
BLAKE2b-256 b6461a374fcbab2542ee6b0263c782e7dcc7b64beeb380b3426093632f7936db

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 57acf071626680857bcbc6759759eb4e568859cc5a6135157cd7d476a8495627
MD5 506a0cb4f7c15dcf0bdcc351de8a25b8
BLAKE2b-256 2e65e29838bbb22bd75ca8f1882e048bd2cf1a3d72a99324ca4e8b428e06f900

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bc610c1091583e3bab6dfe79432550d1bf2007f73c6ddea9b00f31f331f9152a
MD5 dbb1738c0a68501589591489c86ed18e
BLAKE2b-256 2298bd024684b4a169129935f9a1aa898e9a7d95da0c6e30acb5ef82911b81bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pypinch-1.0.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 137.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f04227fbabae7ae2f25f3a292ab037feda29d1048fbb618c39bdfcfb27677273
MD5 49af56b19ddf0acf4c1745f54b16e950
BLAKE2b-256 9fe5fbec8663ade09b71aa650c93f6ca98231fd3771d532f9ffd3cd162133b84

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eceade61f0bbb4de0bcd60cebe1620957da15357f4f68c61e35b19f5d119c048
MD5 40812e91dded2e9e6e5b3671c1d0f71c
BLAKE2b-256 d29d85945f8e4e9203f675c6dc0b4ca8d6428dcaa68a7665fe4fd32a298932f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c0488b49fdc7145419d5c4eadc92843a438650d24d04e9b5158cf4040f5e6744
MD5 213ee027a3622cd5f0a589693e0ad9b1
BLAKE2b-256 f49316060f893059035cffb076ea8c5be731fcc97fea5f4cc66942d14ed8e3a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pypinch-1.0.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 137.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3fbafa45eb5cae186a30b6932aaefdef332c50337c62dc9888c6f4ecfde06ab8
MD5 08f0410749e4f9d968c2f603841d42f8
BLAKE2b-256 036f1a1b472b43751d601f0f1d31fbeee02d094c31324d4b4fd171aef9698337

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d7e3a33536990f9a5fd2e880c0b6b6e2d9215fa9f83cf6760ba39b096127ea4
MD5 7a1e9090b3979053e0b4388d942e85b6
BLAKE2b-256 c8424a26e1336cd7633128ac6089abc876d0638fa0c542ac41ed8db14a0ecc84

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 285f4731cf29a6e7aabad0bd5cb99d295ac6f8f230cba2911aa6ead313312397
MD5 1cc4b4b9b0800a7ff86784f61c01d686
BLAKE2b-256 dba214ce66c1ad99f7ecccc198d9c21b20c2a8700252f6355412ed7779a425be

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pypinch-1.0.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 137.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 86b37f1d993febbd6f1306d0c86ecdbc743c59db5f213378701ca878baeb4e0e
MD5 5f78da96538e00bd1eb9624b4b62b81e
BLAKE2b-256 26f9fb549b5a065003ccacaab8fab3a09b3d04e83840f764c82b8d1e027f5c25

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7b44df7924682f593cd7d4d44f8cc63745cf9472fbe9735f20cae2333cc93f00
MD5 dbed2726504cd95ec3631bb8683831c5
BLAKE2b-256 6cc337c6aa7acc64391bdc17064f21e590c1defde945f469e3523fcb57d53d61

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63323ca2a03e94b276a75d78ce247551eae41ebed41b186ec5b985617873e8c1
MD5 6e4a32475ba44920d59251b591ab589e
BLAKE2b-256 8b316d9a9c1d8d5c1837331da651817dd5096a242f3fa3cf8bc996525704cd30

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pypinch-1.0.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 137.2 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pypinch-1.0.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f59c2f0ee2aba6b7b9630493110585f2844ea0ca35b42fa61be0465de5d429b5
MD5 97d22c279dadf2189616b6f7f5f268a2
BLAKE2b-256 0f3165f285bb3597673d3348f4aba5bd70b2a4069bb4950eb607b2fc4627223d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 54ca3dc830b86e68da5bc6fd3b42d8f766a160cbe24d5f0299dc8b8125359ff9
MD5 e0759f5bee99a175b02aa6d194629470
BLAKE2b-256 897b3472cfa45ac99cd2c5b302ee42240fcc13961865e29b6a29be348065a7b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

File details

Details for the file pypinch-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pypinch-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 901bb09642c0eb85baa39aaa3a5f83426a854b01deeca22c7ef38eb24ca99f92
MD5 89e99d70e14469accb4cc49ceb129965
BLAKE2b-256 a405042d2526945f22e43db53ac84d1f086feee3c21b77bb04c187264e42bd44

See more details on using hashes here.

Provenance

The following attestation bundles were made for pypinch-1.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on AharonSambol/pypinch

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

Supported by

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