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.2-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a5a513deddbcd6567a35a8520cabd4aee60c180a47647299b55f558d9b18370 |
|
MD5 | f88df6384cea3a96032e57f5ac75430e |
|
BLAKE2b-256 | 833698ecf5641ec117277bb256b6854cdbb600a153c64be68158cf999cbdaaec |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02d7715a7342ce9db3fe3bcafea5f9b51f8ca66d3a54c41a931471c9f73d3506 |
|
MD5 | 47b8bae74d83500bc2448623decf820c |
|
BLAKE2b-256 | 7feb82566e4e76bc35ff25042d6fa5f0c2f0ed2bcf8000ef6a4bfd065149adf2 |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 15000fbec53241996a0e4fb1c4278df9de5604cdb6b4d3fd18845f755c63e35a |
|
MD5 | 6513050ca8e7eeefcaceb48470a893b3 |
|
BLAKE2b-256 | ade35a269758ca5cc9ed55a8e01e757dcec18d5bb8508f457e3882d53fc1eb64 |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b51fdfa076512b792d9f4d9e2c732285664bbd206633248496c4d557dcf9467 |
|
MD5 | b094ad43d4b016b7f1ee1c51f724acfc |
|
BLAKE2b-256 | eaf41653e95611413a0889ed468ccc8e417f3773be50eb7e1dd1c5e109b12329 |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e123dfeb307e8597a8270d6eb3a233c827bdbb82bbcdc611e61519f7874bd32 |
|
MD5 | a162e1ac728f20bd758bb41edef02a29 |
|
BLAKE2b-256 | 23f5c0b09b9a917c5d9766247adea70760cfafc1f12f0ccb392993590f19088a |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9e554859479ee13e5703f7cc6b6809ac51c7c13b96d36b6a7bc65feb8f657e0 |
|
MD5 | 413884f6e8387914b64234c7d2cabc36 |
|
BLAKE2b-256 | da9cf3ff30aa9b94747462b0fb6117ec1f0e785fb3d2c2c26a59287e25978bb2 |
Hashes for serpyco_rs-1.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd1c704507062e6db43c83cc59df16d0d1bf2a629256f18dfd520463cb393a49 |
|
MD5 | 10e4df99fca323306a473cf814674d9b |
|
BLAKE2b-256 | df500c4eeee8062e0125b6ffb012471d53176a16dd0eda1b0af0a696b6af1129 |
Hashes for serpyco_rs-1.1.2-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ca651dff670e258921e5b6e727f9946a9002a47290eb151ef853b838d29c341b |
|
MD5 | 6650400f602e989833b3d995069eef9b |
|
BLAKE2b-256 | 5b2aaae5873874659abf65619fb5d07d31b5987e5cec740620581f92ced024d3 |
Hashes for serpyco_rs-1.1.2-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f7bacdd38bb15244cab7b57fabdce426553e05d9202b311b63ebdd293db0f9c |
|
MD5 | d83a6fbedb54522074b7f64b897442d8 |
|
BLAKE2b-256 | 4b857895a838061d82c2a95f64d336de84ff1149a1be473aacbab5555a06b812 |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4250f6e3221a56f785de145b6e456048870a88fe0bd3953ec2e93092b9f834d8 |
|
MD5 | 4ba93a3d71516f830595f22a27e9d099 |
|
BLAKE2b-256 | 1dd116bcab3b151b607ec1266d738b660a4c306ad016f46db7fe2facb85138bc |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eb9966649afdf1069940f8291f0ee1c4e7e2bf248748648adde73b851ff2926e |
|
MD5 | 7694af1b81e42a0bcae7f13e68cc270f |
|
BLAKE2b-256 | 44cbe3ff6492729fd35c4fdcf61c5fcbf3aa8088609fc3e249dd25ba3b8a79e8 |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16a4ea59b4b0db0c54644164b6d835c297c28cca5acb5ce8a8a174c3ba90efc8 |
|
MD5 | a87a31449785c8f161525aab62608c3f |
|
BLAKE2b-256 | a1c5cda119691762f20cb7043a0da4656a4430b52f05089678647a9af7f4690d |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fa36e73aed377f739bc7a109480bff0686de3d7c255408f514d3042c243a25d |
|
MD5 | 10a6d5e4d5099902f6661bbf999d94f7 |
|
BLAKE2b-256 | 1465b5b3dbd80173530c85e53b3a8b5894207baaafef8cf551cb5eed4497c055 |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f86e539c0fb0f4967efe663b899ec1d98cad5fd31c58ba39ea1b9c42f971e4f |
|
MD5 | 4327b18c8c1f58979995da324a609554 |
|
BLAKE2b-256 | 896314f3ec210fb7be3fceb79ef0d032ee15b31673841cb3e62b5c98c272e933 |
Hashes for serpyco_rs-1.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91b609ba3d0fae71382d9c5b877d8a96a7030846d48244b35fc686a699ab16a2 |
|
MD5 | b33140a6b8cdb4e44b09ebdd830ba31a |
|
BLAKE2b-256 | 6ed4e0f0b539697909f8ff6ee3d544ff8d6502140d703691d2a727686a6cd596 |
Hashes for serpyco_rs-1.1.2-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4214d94637ed3cdb814b3486f3489edb77c93c1ae8bdfdcae5215052308ab7ba |
|
MD5 | eb65b96f18fc2a91ada2f339f8b498b2 |
|
BLAKE2b-256 | ba1846c3ed459ca3332cc467330abbca4bd898321e51a66108513ba053a9b3dc |
Hashes for serpyco_rs-1.1.2-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27f18f46f30994621a2bd4e607b4585364d16ae7c5fcc47b52f551b6e3dea031 |
|
MD5 | cd04320847470b160d5405276eb7aaff |
|
BLAKE2b-256 | 6099787cfc5e0f821f82a0c3ff2e539cb75a31bfe708934d642b83bf731d52ce |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 557fbb6e1e4f311ac06b2cdad6b0d4b7d470f11f830448ca1dd06011d0ae0179 |
|
MD5 | cca604e3d74d77fbb9bafe7054a99df9 |
|
BLAKE2b-256 | 2b3ef61bf887cf71cdf73d7a4498c52c7a645b46b3c29a15c2da00c0a7a3271c |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b24a35c69a1c7eb58e309282c67c8f6d8ce6296e188e72246d7418e79d06f6b3 |
|
MD5 | 5ff89519621cb6d5a7863584bbe10397 |
|
BLAKE2b-256 | 399d35b7230e1201a8dae89e6eaa5c972bd48df557926cba9fa68cd7a07d8f5c |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f15c224071489540b02cecdfda5bd9f78325114e917883a049bbb07e932475e8 |
|
MD5 | c5a15124508a9111977a2f4c2f671d7c |
|
BLAKE2b-256 | b42507cb7d7094e75a1e20522d983098c6b95bd441da459bf545716a6d71dd48 |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 286d7a3d47eed873a31d88f9c1acd9b4fca580b204eca260c9733bba8e4ff0ea |
|
MD5 | 2ac63a6d41c13eb6b06f74b145611dc0 |
|
BLAKE2b-256 | bc313fabb18bf8a94a2891d686e1b9c3bb61f7148b261fa981a021ffdf1922c1 |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa1ee3e66d62eb2886081d34871c812a6f15ececd21e6a83541750ff763bf6da |
|
MD5 | 94ae600774be0ed5bcb3596191999a35 |
|
BLAKE2b-256 | a1895127b8fe8193d6223c8ca66e7284a5f0885681f3289b827898e903bdf190 |
Hashes for serpyco_rs-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cc2cdc83ccd975740304c58f8b8f70c5db032db8cf6d9f188d3622e66d63c212 |
|
MD5 | 896af97cee4d843c630b1c40c4adae5d |
|
BLAKE2b-256 | 666b4d168b370b5fab94fc553c0c676cdbab7be5ded45e098228cf8fffbecd43 |
Hashes for serpyco_rs-1.1.2-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 337fe958a617d845f723a2aef47e8cc4c2a300a6d8b9fa05bc677c1d3da4dbad |
|
MD5 | 438bb0303e05a5033f045dcc3c05b006 |
|
BLAKE2b-256 | 28990a37505614b694db2d049f8166912304c5103e34fb3a96c841183bbf4085 |
Hashes for serpyco_rs-1.1.2-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba7da1a754f44fa651a48bacf09b590bcbc77b2c103f0064cf70104d179c3222 |
|
MD5 | d251e4ecd4a26c971229086f30d17ee9 |
|
BLAKE2b-256 | 7d355dfad586fcd8b2311a15b9b84f0bff3d17a1ba23366882209f6a44306038 |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90170f1241eb3fa98a2026565dcccccaf44ddd44ad346b755947afc8275917e3 |
|
MD5 | b541fb5e26d300352b494250783cda7a |
|
BLAKE2b-256 | 2a64ca5bd63e1748497d348166d851496164f41959c30378eb362b6f46fb8e89 |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 33a134805ac5f4ca344cfa6303d4bc95521a1c377d373616f227d7ba40e62fbe |
|
MD5 | 4225bab2ac672d20e04a576f6677236f |
|
BLAKE2b-256 | c737cf50ada73bcda1bfa0a27f5f8d7de7393111b40d1b4c6ded11b23524b723 |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3810b51910feb1859e73ab8521764d162ac5206b1d434c44d7e3fc20f26293cd |
|
MD5 | 287a49909ee01b2856440b49f94389cd |
|
BLAKE2b-256 | d8135cc009a90ae5785ead833e4b68bc0f78ee8818f87cb4161fbe78490a715b |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2ddce54a8724f78fea8776c89fa4599be0536100a9d633332f812d8539e971aa |
|
MD5 | 117ebe22972fec92180234b270af343d |
|
BLAKE2b-256 | ec03b83255d171d1a18e0f3fbf713b06aeea3e1ac5ec67b3aac7c9f6c0f455c4 |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e472c041d74898e174fd79393c0b19b20e5a41bd3e61c81cdec95a07f40e9638 |
|
MD5 | 779ba2b733148a2e273eb6372a86ccfc |
|
BLAKE2b-256 | 3e30a4a66f29c07f07138ff90ae893b1bb99aebce11193fa760b17e92ca5b174 |
Hashes for serpyco_rs-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f37bca949e399bb72957c516f70821895333de21fc1ee9527e4971ab977b067c |
|
MD5 | d4d4341b5eef8e4e47b1e133902cb4b4 |
|
BLAKE2b-256 | f5aca18649e7967c217e7292a00f6e774a2de1663f371e40b153ce86c29fbf8c |
Hashes for serpyco_rs-1.1.2-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a4e77d9aee578770b4cf38d97fff3e129bc75087f833a222ef0dcf6c19f1f9e |
|
MD5 | 9cac4f8ebdcabcdc08010a7f08d86d91 |
|
BLAKE2b-256 | 505923c77b182e9a2bdb693fce30fe965aa125d45f83b4fd49ed2bf46c218d12 |