No project description provided
Project description
serpyco-rs: a serializer for python dataclasses
What is serpyco-rs ?
Serpyco is a serialization library for Python 3.9+ dataclasses that works just by defining your dataclasses:
import dataclasses
import serpyco_rs
@dataclasses.dataclass
class Example:
name: str
num: int
tags: list[str]
serializer = serpyco_rs.Serializer(Example)
result = serializer.dump(Example(name="foo", num=2, tags=["hello", "world"]))
print(result)
>> {'name': 'foo', 'num': 2, 'tags': ['hello', 'world']}
Inspired by serpyco.
serpyco-rs works by analysing the dataclass fields and can recognize many types : list
, tuple
, Optional
...
You can also embed other dataclasses in a definition.
The main use-case for serpyco-rs is to serialize objects for an API, but it can be helpful whenever you need to transform objects to/from builtin Python types.
Installation
Use pip to install:
$ pip install serpyco-rs
Features
- Serialization and deserialization of dataclasses
- Validation of input data
- Very fast
- Support recursive schemas
- Generate JSON Schema Specification (Draft 2020-12)
- Support custom encoders/decoders for fields
Supported field types
There is support for generic types from the standard typing module:
- Decimal
- UUID
- Time
- Date
- DateTime
- Enum
- List
- Dict
- Bytes (pass through)
- TypedDict
- Mapping
- Sequence
- Tuple (fixed size)
- Literal[str, ...]
- Tagged unions (restricted)
Benchmarks
Linux
Load
Library | Median latency (milliseconds) | Operations per second | Relative (latency) |
---|---|---|---|
serpyco_rs | 0.16 | 6318.1 | 1 |
mashumaro | 0.45 | 2244.4 | 2.81 |
pydantic | 0.57 | 1753.9 | 3.56 |
serpyco | 0.82 | 1228.3 | 5.17 |
marshmallow | 8.49 | 117.4 | 53.35 |
Dump
Library | Median latency (milliseconds) | Operations per second | Relative (latency) |
---|---|---|---|
serpyco_rs | 0.07 | 13798 | 1 |
serpyco | 0.07 | 13622 | 1.02 |
mashumaro | 0.1 | 10219.5 | 1.36 |
pydantic | 0.22 | 4615.5 | 2.99 |
marshmallow | 2 | 497 | 27.69 |
MacOS
macOS Monterey / Apple M1 Pro / 16GB RAM / Python 3.11.0Load
Library | Median latency (milliseconds) | Operations per second | Relative (latency) |
---|---|---|---|
serpyco_rs | 0.1 | 9865.1 | 1 |
mashumaro | 0.2 | 4968 | 2 |
pydantic | 0.34 | 2866.7 | 3.42 |
serpyco | 0.69 | 1444.1 | 6.87 |
marshmallow | 4.14 | 241.8 | 41.05 |
Dump
Library | Median latency (milliseconds) | Operations per second | Relative (latency) |
---|---|---|---|
serpyco_rs | 0.04 | 22602.6 | 1 |
serpyco | 0.05 | 21232.9 | 1.06 |
mashumaro | 0.06 | 15903.4 | 1.42 |
pydantic | 0.16 | 6262.6 | 3.61 |
marshmallow | 1.04 | 962 | 23.5 |
Supported annotations
serpyco-rs
supports changing load/dump behavior with typing.Annotated
.
Currently available:
- Alias
- FieldFormat (CamelCase / NoFormat)
- NoneFormat (OmitNone / KeepNone)
- Discriminator
- Min / Max
- MinLength / MaxLength
- CustomEncoder
- NoneAsDefaultForOptional (ForceDefaultForOptional)
Alias
Alias
is needed to override the field name in the structure used for load
/ dump
.
from dataclasses import dataclass
from typing import Annotated
from serpyco_rs import Serializer
from serpyco_rs.metadata import Alias
@dataclass
class A:
foo: Annotated[int, Alias('bar')]
ser = Serializer(A)
print(ser.load({'bar': 1}))
>> A(foo=1)
print(ser.dump(A(foo=1)))
>> {'bar': 1}
FieldFormat
Used to have response bodies in camelCase while keeping your python code in snake_case.
from dataclasses import dataclass
from typing import Annotated
from serpyco_rs import Serializer
from serpyco_rs.metadata import CamelCase, NoFormat
@dataclass
class B:
buz_filed: str
@dataclass
class A:
foo_filed: int
bar_filed: Annotated[B, NoFormat]
ser = Serializer(Annotated[A, CamelCase]) # or ser = Serializer(A, camelcase_fields=True)
print(ser.dump(A(foo_filed=1, bar_filed=B(buz_filed='123'))))
>> {'fooFiled': 1, 'barFiled': {'buz_filed': '123'}}
print(ser.load({'fooFiled': 1, 'barFiled': {'buz_filed': '123'}}))
>> A(foo_filed=1, bar_filed=B(buz_filed='123'))
NoneFormat
Via OmitNone
we can drop None values for non required fields in the serialized dicts
from dataclasses import dataclass
from serpyco_rs import Serializer
@dataclass
class A:
required_val: bool | None
optional_val: bool | None = None
ser = Serializer(A, omit_none=True) # or Serializer(Annotated[A, OmitNone])
print(ser.dump(A(required_val=None, optional_val=None)))
>>> {'required_val': None}
Tagged unions
Supports tagged joins with discriminator field.
All classes in the union must be dataclasses or attrs with discriminator field Literal[str]
.
The discriminator field is always mandatory.
from typing import Annotated, Literal
from dataclasses import dataclass
from serpyco_rs import Serializer
from serpyco_rs.metadata import Discriminator
@dataclass
class Foo:
type: Literal['foo']
value: int
@dataclass(kw_only=True)
class Bar:
type: Literal['bar'] = 'bar'
value: str
ser = Serializer(list[Annotated[Foo | Bar, Discriminator('type')]])
print(ser.load([{'type': 'foo', 'value': 1}, {'type': 'bar', 'value': 'buz'}]))
>>> [Foo(type='foo', value=1), Bar(type='bar', value='buz')]
Min / Max
Supported for int
/ float
/ Decimal
types and only for validation on load.
from typing import Annotated
from serpyco_rs import Serializer
from serpyco_rs.metadata import Min, Max
ser = Serializer(Annotated[int, Min(1), Max(10)])
ser.load(123)
>> SchemaValidationError: [ErrorItem(message='123 is greater than the maximum of 10', instance_path='')]
MinLength / MaxLength
MinLength
/ MaxLength
can be used to restrict the length of loaded strings.
from typing import Annotated
from serpyco_rs import Serializer
from serpyco_rs.metadata import MinLength
ser = Serializer(Annotated[str, MinLength(5)])
ser.load("1234")
>> SchemaValidationError: [ErrorItem(message='"1234" is shorter than 5 characters', instance_path='')]
NoneAsDefaultForOptional
ForceDefaultForOptional
/ KeepDefaultForOptional
can be used to set None as default value for optional (nullable) fields.
from dataclasses import dataclass
from serpyco_rs import Serializer
@dataclass
class Foo:
val: int # not nullable + required
val1: int | None # nullable + required
val2: int | None = None # nullable + not required
ser_force_default = Serializer(Foo, force_default_for_optional=True) # or Serializer(Annotated[Foo, ForceDefaultForOptional])
ser = Serializer(Foo)
# all fields except val are optional and nullable
assert ser_force_default.load({'val': 1}) == Foo(val=1, val1=None, val2=None)
# val1 field is required and nullable and val1 should be present in the dict
ser.load({'val': 1})
>> SchemaValidationError: [ErrorItem(message='"val1" is a required property', instance_path='')]
Custom encoders for fields
You can provide CustomEncoder with serialize
and deserialize
functions, or serialize_with
and deserialize_with
annotations.
from typing import Annotated
from dataclasses import dataclass
from serpyco_rs import Serializer
from serpyco_rs.metadata import CustomEncoder
@dataclass
class Foo:
val: Annotated[str, CustomEncoder[str, str](serialize=str.upper, deserialize=str.lower)]
ser = Serializer(Foo)
val = ser.dump(Foo(val='bar'))
>> {'val': 'BAR'}
assert ser.load(val) == Foo(val='bar')
Note: CustomEncoder
has no effect to validation and JSON Schema generation.
Bytes fields
serpyco-rs
can loads bytes fields as is (without base64 encoding and validation).
from dataclasses import dataclass
from serpyco_rs import Serializer
@dataclass
class Foo:
val: bytes
ser = Serializer(Foo)
ser.load({'val': b'123'}) == Foo(val=b'123')
Getting JSON Schema
serpyco-rs
can generate JSON Schema for your dataclasses (Draft 2020-12).
from dataclasses import dataclass
from serpyco_rs import Serializer
@dataclass
class A:
"""Description of A"""
foo: int
bar: str
ser = Serializer(A)
print(ser.get_json_schema())
>> {
'$schema': 'https://json-schema.org/draft/2020-12/schema',
'$ref': '#/components/schemas/A[no_format,keep_nones]',
'components': {
'schemas': {
'A[no_format,keep_nones]': {
'properties': {
'foo': {'type': 'integer'},
'bar': {'type': 'string'}
},
'required': ['foo', 'bar'],
'type': 'object',
'description': 'Description of A'
}
}
}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for serpyco_rs-1.1.3-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8107c6e251ebf4f916b9e31e2d37cabd1f1a25928b44f337f498d2b96c7ad4c3 |
|
MD5 | 7f1ea2d8b45fe823755e052d26393cd3 |
|
BLAKE2b-256 | e4c9b3597086fca98d3e5fb81454466975444a2e002204123d77d781b695efc9 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08204ea72e6837d844ee20dbded326b6f80e1070e476a2a87f9a22bfcbf563f4 |
|
MD5 | 15632370cfdfcb0ef179e5528ad7ee88 |
|
BLAKE2b-256 | 79e652d01f462d4ec8af9d2af809b3f8f8fc35a7db83c504803be74a53b735ce |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | abc15e06001b8478c2e80e5e4aa4f6a6de8a43e792ecb824bc612d6b16105e96 |
|
MD5 | b78b130254b43ce80e699c2c392d8dc3 |
|
BLAKE2b-256 | d5cf713b357e1962122e6e6f384459c25791578fa9505126ecfdadb26ac46e67 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 157b15b1cf9f037a772ab2bba248addd973deae81e2881386de4f2c04d3dbad9 |
|
MD5 | afc150545acd90be6e156375517bd6ce |
|
BLAKE2b-256 | 91616add6b3657757935a6d34152b48a5ae943a88650f167ee96fe6a00a0feb7 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6499f17ce73f901b224af2dd3815807a6333fbfabbea70d2b3f5e425df675935 |
|
MD5 | 32b18c0f83df78d2d8bf4b724b9d7ea8 |
|
BLAKE2b-256 | b848f0e8264c14185ff175fd25e889fbc89941a97076880a2247104fd25a88d3 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2336a02b990f2c4fa13068a069b55058d8a521cb2b5e4ca7b9f8c2ec206c46d2 |
|
MD5 | 2a2c8a794130f24380172a63f2345ca3 |
|
BLAKE2b-256 | 1cc48cfcf7bef38ca694d29f285e848921eae436b072fbc52bf331ea54406451 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3770348a0f08f937c68ddf3d0be47ffb24c5431db108e7701d7b7ddcf46c2b67 |
|
MD5 | 3ce3514f6c251e2acd6de8f7edbcfb5a |
|
BLAKE2b-256 | 5cdae96176d7be7c520af8ab78dc8579e49fd63624244e60f07e998641a35603 |
Hashes for serpyco_rs-1.1.3-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f54ee9f9bbfe7624a47d27dd33a356e4c859394777b576aa6187475fda9eb271 |
|
MD5 | 051052075cea856b3647530bc4d91506 |
|
BLAKE2b-256 | 5b60069b097586ab9a8244b9f08e5faf6566125e2fb01320d23e511eb6ef6bfd |
Hashes for serpyco_rs-1.1.3-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98211d19947e0186493b3b1da282d240e4d96bd627703cb27a564c043c2073c5 |
|
MD5 | 72796ec4b08ff3bf2c752adbd85769ec |
|
BLAKE2b-256 | 0a20aa8b4d268def7fb96f9816655f9c8bcd73134f121c9d332af703582205bd |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41de8fcd7ed8e2a4f65e625a2135d63f7e266840a6a1cba102f942399b0aa4b8 |
|
MD5 | 70f5239131b6a0154f1c301b727a65c4 |
|
BLAKE2b-256 | 73fc2079693bd9aedd7f9c4cc5d28769d57cdd090524db0b8a9a8edeaa57b173 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf5a6484f06e93f2618946e5cc3d378ae6c0f73859db9b80101d915d63f4d7cb |
|
MD5 | 7f98ebb0e9231629d32e4acbbbac9da0 |
|
BLAKE2b-256 | 87f45ac623d2c778f33a8888df06b313de28841aca214323d66d2091d5a82eb7 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 986cf9266cbec8ec2e01e170d594892b0c6864a1de166235423eca951792427b |
|
MD5 | 4bb348d9aa0d73ba3eafadea93784e9e |
|
BLAKE2b-256 | 170f664cdaafe41274a04e5caec3cac18a1afeed0107f96039af40ddc28bd9b5 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f614a1845f527a79651e02a848c8826f6d28e326ec05f5b04d8917153cc1a7e |
|
MD5 | d5ffc86facc1ffd5cc48b7863d999ae6 |
|
BLAKE2b-256 | 8bd640b0db3ec140f2c8a81e31923873ae59a8ad3885854bef930f8be07a4d48 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eff2d77f364b8c15f61c10be216f5d4d75229222ee241745f21c590dafeb90e4 |
|
MD5 | 5e0e04ae09812441d69a8be1113a54c7 |
|
BLAKE2b-256 | 2ab2fcbd6d6c70a119c3f3c5f2d5f633fb649910dd6522abb9657d22d4cd22b6 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20f26c9fe2adf6b10ba55a2e857e5219e9ee2715d93b41dad3ea0544053a4c44 |
|
MD5 | 2051914e63a26a921444a693ef4f25d7 |
|
BLAKE2b-256 | 444d25b43602225c853d8ff8188ea99e9fb995bbd9cf728b2f56b5e30c845424 |
Hashes for serpyco_rs-1.1.3-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d0a504ae2496d5e91cc5e0b98153d98d50b3d8c524f5f06a089e08a692e6926 |
|
MD5 | 9ad555a0eeb91f332143df80d02ba873 |
|
BLAKE2b-256 | fa6a713958108e56cbdbf97e5f8bb4e4fd7ea086157e2af88182c2b1e918b9e1 |
Hashes for serpyco_rs-1.1.3-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49bc488f90ec01284abb7aef3ee13d94fdfa9a4c57007929567c90188c95117f |
|
MD5 | 45630cc51032d8e65046b51d5cc11146 |
|
BLAKE2b-256 | bb8a0260b0cbbefca9124c1d600cff22142821684d270423123bee64dfce3323 |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08c77e7f0190114b71653f679070c33731dbe4d7896fd12f997b7b193ed10278 |
|
MD5 | e0cfe31b1225b1c5660861c00cf6b4d7 |
|
BLAKE2b-256 | 88c73f652cbc5b2905f40d045846fd04722d20feeeb98c066c43ec74f2a82e95 |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ef6b799c6f00f82ab974199b918e4b84acf97c6ec4bdf77eea84a58ecd0bcc84 |
|
MD5 | 30456a5a1711a35bc62c7af17a02a5e9 |
|
BLAKE2b-256 | 1b61450b4d64bb80ada29b160cc466856961c374ef2dc9ccc0f8adcc9aef5332 |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 480fcf3f2c0841b0cdf3f40ebcf1788e4293fa4a7e5045ec1c1c36b7dad8a08f |
|
MD5 | 47a593675c883fc2d7cb193fc0e8371f |
|
BLAKE2b-256 | a0ea2c2790756446a2f196292affb2a4c7ffc2d48623473de75163565292db47 |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 993fc523c06dcd65136dd3069f70f734a1f6dfdb40dc2afdd29ceecaa9321205 |
|
MD5 | dc1cacd86faffcaa5c2228b12611255c |
|
BLAKE2b-256 | e78b06619dc8bfe7f2f34269e40d813b5072bf283350607d614b0e32b1de920b |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0ba124c4aa7be14c91dd8a90f32ed5fbf60eda8621883f86464b291a3d92158e |
|
MD5 | fa2d96f8e3cdb12ae48b553621c673f1 |
|
BLAKE2b-256 | 968b705451432289b65903b9f44c1ed6369138cb2e20ad9b0053fc1922aa9dcb |
Hashes for serpyco_rs-1.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c9f063ec2779fb241e4ed055bf29450a66edca617e8deefff77b295da3309d49 |
|
MD5 | 615c8ebb1e308f0ad841748c2eb80c92 |
|
BLAKE2b-256 | c3c45f5708dfd80c2d0b34c6360d886e3f8d79acecde359322a494cc6d7a4675 |
Hashes for serpyco_rs-1.1.3-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f01771ebc03192e924024915549c4e0bad9b47f59ecc85c3f3fe492493e0cc45 |
|
MD5 | 996f90af7b4cf44970c10ecd8bdbb26a |
|
BLAKE2b-256 | 52ba820bf469df488357cd24e470b0c22f20caeb0ae8833fd2dd54157ec0e1a8 |
Hashes for serpyco_rs-1.1.3-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 28bf627fda556f3a86ff7264049eea148d436e5116fdb6e1a1d6aed61158e30c |
|
MD5 | 7ee3995ade9b5a67566221404dab56ec |
|
BLAKE2b-256 | 3ee17a85aa69879adc10302633099f0d8f6c5ba9fce65d2f38003840c858f88c |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2376a56535409663725c8a43dcf05c38ba5bd0f7a573ab6240bd8aa4c2c86cc7 |
|
MD5 | 5b199658d15c55eed4b789420129482e |
|
BLAKE2b-256 | 1c893e034e7aed3a433c5779c36542708d4b2ef32964c24d46573d615e77eacf |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 453242c8a09b8cba7abcf826cca77e4cda8371643a6789177aca041bf4fe0bd0 |
|
MD5 | 2536e86248f3f87b9b5d148d631e45f0 |
|
BLAKE2b-256 | a18e0feec5783a5811161e0267897d6f9dbb65c5e4d62735ac8a995e3fef3987 |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | db3f45bf38f8828c84599228a3f2c3050b8cd14c45d1f2d6c1e7cdb6929feb33 |
|
MD5 | 79a97047260043a26af73295f1a75abb |
|
BLAKE2b-256 | 95403d08cd71d27085c92e17544a3690c17d974916d53e798638fe8fef8a753c |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3744b70ddf3675f723f2b402c9d282d88d06749f6242144eb2113b7c77a88f51 |
|
MD5 | 12cc78311aab0655d6a1931f3d648fd9 |
|
BLAKE2b-256 | 63290852e32436f72b8a4231b4b7811e5ab8d64869c2e9f48560a13ac327e1f6 |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d3be364f642aff44af0642fc7755a0cf9de30ed9836c0c9e2e1c32bb5df3bf9 |
|
MD5 | 6c27a175054332d9a73fac787aaee171 |
|
BLAKE2b-256 | 1fffb25814d0af6b20cffa3c9f05a52e996952faa27408ad4c2d91bb0f621b70 |
Hashes for serpyco_rs-1.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dc6908d53b5f9335129a152b20a59df766eb98b750b38e31ed43a02443770799 |
|
MD5 | 5f7f7f916810f094a050d8c522a157d8 |
|
BLAKE2b-256 | c97993b761117300fbb01cf5c2ca0d99c55b25011dd12c04916f96e48907a0b3 |
Hashes for serpyco_rs-1.1.3-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b793dd2f84db190f4ae08530ab5d16fcc0169ff8c76751451884cf44e19a22ca |
|
MD5 | 4e0b7b371700b89e9f787ab3228bbef2 |
|
BLAKE2b-256 | d0d756876a1f540fe421a44ff81ca343d477e6cf60b9462bfd788454ad496f55 |