Skip to main content

No project description provided

Project description

serpyco-rs: a serializer for python dataclasses

PyPI version Python versions CI status

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
  • Support deserialization from query string parameters (MultiDict like structures) with from string coercion

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, int, Enum.variant, ...]
  • Unions / Tagged unions
  • typing.NewType

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.0

Load

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}

Unions

serpyco-rs supports unions of types.

from dataclasses import dataclass
from serpyco_rs import Serializer

@dataclass
class Foo:
    val: int

ser = Serializer(Foo | int)

print(ser.load({'val': 1}))
>> Foo(val=1)
print(ser.load(1))
>> 1

But performance of unions is worse than for single dataclasses. Because we need to check all possible types in the union. For better performance, you can use Tagged unions.

Tagged unions

Supports tagged joins with discriminator field.

All classes in the union must be dataclasses or attrs with discriminator field Literal[str] or Literal[Enum.variant].

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', 
    'components': {
        'schemas': {
            'A': {
                'properties': {
                    'foo': {'type': 'integer'}, 
                    'bar': {'type': 'string'}
                }, 
                'required': ['foo', 'bar'], 
                'type': 'object', 
                'description': 'Description of A'
            }
        }
    }
}

Also, you can configure the schema generation via JsonSchemaBuilder.

from dataclasses import dataclass
from serpyco_rs import Serializer, JsonSchemaBuilder

@dataclass
class A:
    foo: int
    bar: str

ser = Serializer(A)

builder = JsonSchemaBuilder(
  add_dialect_uri=False,
  ref_prefix='#/definitions',
)

print(builder.build(ser))
>> {'$ref': '#/definitions/__main__.A'}

print(builder.get_definitions())
>> {
  "__main__.A": {
    "properties": {
      "foo": {
        "type": "integer"
      },
      "bar": {
        "type": "string"
      }
    },
    "required": [
      "foo",
      "bar"
    ],
    "type": "object"
  }
}

Query string deserialization

serpyco-rs can deserialize query string parameters (MultiDict like structures) with from string coercion.

from dataclasses import dataclass
from urllib.parse import parse_qsl

from serpyco_rs import Serializer
from multidict import MultiDict

@dataclass
class A:
    foo: int
    bar: str

ser = Serializer(A)

print(ser.load_query_params(MultiDict(parse_qsl('foo=1&bar=2'))))
>> A(foo=1, bar='2')

Custom Type Support

In serpyco-rs, you can add support for your own types by using the custom_type_resolver parameter and the CustomType class. This allows you to define how your custom types should be serialized and deserialized.

CustomType

The CustomType class is a way to define how a custom type should be serialized and deserialized. It is a generic class that takes two type parameters: the type of the object to be serialized/deserialized and the type of the serialized/deserialized object.

Here is an example of a CustomType for IPv4Address:

from serpyco_rs import CustomType
from ipaddress import IPv4Address, AddressValueError

class IPv4AddressType(CustomType[IPv4Address, str]):
    def serialize(self, obj: IPv4Address) -> str:
        return str(obj)

    def deserialize(self, data: str) -> IPv4Address:
        try:
            return IPv4Address(data)
        except AddressValueError:
            raise ValueError(f"Invalid IPv4 address: {data}")

    def get_json_schema(self) -> dict:
        return {"type": "string", "format": "ipv4"}

In this example, IPv4AddressType is a CustomType that serializes IPv4Address objects to strings and deserializes strings to IPv4Address objects. The get_json_schema method returns the JSON schema for the custom type.

custom_type_resolver

The custom_type_resolver is a function that takes a type as input and returns an instance of CustomType if the type is supported, or None otherwise. This function is passed to the Serializer constructor.

Here is an example of a custom_type_resolver that supports IPv4Address:

def custom_type_resolver(t: type) -> CustomType | None
    if t is IPv4Address:
        return IPv4AddressType()
    return None

ser = Serializer(MyDataclass, custom_type_resolver=custom_type_resolver)

In this example, the custom_type_resolver function checks if the type is IPv4Address and returns an instance of IPv4AddressType if it is. Otherwise, it returns None. This function is then passed to the Serializer constructor, which uses it to handle IPv4Address fields in the dataclass.

Full Example

from dataclasses import dataclass
from ipaddress import IPv4Address
from serpyco_rs import Serializer, CustomType

# Define custom type for IPv4Address
class IPv4AddressType(CustomType[IPv4Address, str]):
    def serialize(self, value: IPv4Address) -> str:
        return str(value)

    def deserialize(self, value: str) -> IPv4Address:
        return IPv4Address(value)

    def get_json_schema(self):
        return {
            'type': 'string',
            'format': 'ipv4',
        }

# Defining custom_type_resolver
def custom_type_resolver(t: type) -> CustomType | None:
    if t is IPv4Address:
        return IPv4AddressType()
    return None

@dataclass
class Data:
    ip: IPv4Address

# Use custom_type_resolver in Serializer
serializer = Serializer(Data, custom_type_resolver=custom_type_resolver)

# Example usage
data = Data(ip=IPv4Address('1.1.1.1'))
serialized_data = serializer.dump(data)  # {'ip': '1.1.1.1'}
deserialized_data = serializer.load(serialized_data)  # Data(ip=IPv4Address('1.1.1.1'))

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

serpyco_rs-1.10.1.tar.gz (2.2 MB view details)

Uploaded Source

Built Distributions

serpyco_rs-1.10.1-cp312-none-win_amd64.whl (336.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (464.6 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.1 MB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (865.2 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (846.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (846.2 kB view details)

Uploaded CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

serpyco_rs-1.10.1-cp311-none-win_amd64.whl (337.6 kB view details)

Uploaded CPython 3.11 Windows x86-64

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (466.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.1 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (862.9 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.1 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (843.6 kB view details)

Uploaded CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

serpyco_rs-1.10.1-cp310-none-win_amd64.whl (344.0 kB view details)

Uploaded CPython 3.10 Windows x86-64

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (466.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.1 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (862.7 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.6 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.1-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (842.0 kB view details)

Uploaded CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

serpyco_rs-1.10.1-cp39-none-win_amd64.whl (344.5 kB view details)

Uploaded CPython 3.9 Windows x86-64

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (468.8 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.1 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.1-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (844.2 kB view details)

Uploaded CPython 3.9 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

File details

Details for the file serpyco_rs-1.10.1.tar.gz.

File metadata

  • Download URL: serpyco_rs-1.10.1.tar.gz
  • Upload date:
  • Size: 2.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.5.1

File hashes

Hashes for serpyco_rs-1.10.1.tar.gz
Algorithm Hash digest
SHA256 d8d29055daa9414be8577c2eb83a51b39c771f7a0a2fde6a837f543d6a546155
MD5 61fc05dd11e79ae54945a86d4869dace
BLAKE2b-256 dc7dc1e14461d8c78424d7b7930c51cd6e557785f84c8da83e39a7c615b573ef

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 967a5fd262cfe574c3a001ba85bd35812e73bcae7decd80442ef9ceefcb543bd
MD5 4f0e422379f082a983ed72442420c393
BLAKE2b-256 8b2ba2f0a67c4ee4b8247d55b035b1bb5ade67cdb8dc3d35a6d70f5b740bf0fc

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd334652f75c35073a56ce9bc344caa1de5d70bdb3c54d91720ba1bb5161c2c5
MD5 f29efc99c419e7cecd49a0b5495379de
BLAKE2b-256 5d2004b6a98a513219027a610cc05b072871d1d24b9bf90946ffbb7372ff6bcc

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 5b2e7bdb699cf4734b4d3db2e018cc62ce04276eaa9a24fa508301001ca063d1
MD5 59b9af0222e84f34500f972e7caa7ad5
BLAKE2b-256 9494b1f9f47a1935ba29a5bd004029944cb55e0645609fe9620aa174a36b2c93

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 1283c115419894bf032a64e73c2a0c43b9b8dd3e00bcbf4077f0320c7cc5a2bf
MD5 49fdbedc68509f4830648350006c83d5
BLAKE2b-256 eb9672125f93a8673205545c7b184ddfb95fc8d7791f8c298b2d6990554e16a8

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 096946d726b30c9eae24bad1238b111f8b690fb4fc3440d1b69b1f36c3622004
MD5 0e9c4e6c5e28077e0657b41c5144f229
BLAKE2b-256 191a106c209bffaba8e4a4e457419cc05588efcb59c1fd445938692c7f7d867a

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1b42f018a074b46d8f036cba380a8734dd30cb7dca8c6f3dd32d1c46db8119a7
MD5 eb5d48b607da93ecb8669fc72f074d31
BLAKE2b-256 bf464e1d534ac3f655abba6051647dbb7726cffa987ae3c2e5cba7b95c2e1a31

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dd376b480c04df0de6273fa93fb0904518c9b6544f875cbba2784d5cf5e21773
MD5 0c161ca9a5c20d448262568d166071c3
BLAKE2b-256 ad4dbd1e29193b12789d7bad2cead11ea3b0747ed5f0f88699ca820a886c8d21

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ccdd9fbcd4d62a69e0d8a2f36cc42de56f8bef9e370546f339d590e9089bc5d8
MD5 6a0d434a6f2b6509ccbbb3218ae1ac16
BLAKE2b-256 cf5619ca4552e7ba6df4e133198e18b4072e64af4a3fab1b88e78f3e13e1900f

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 18fe926230377a6a9ba1c76cef8690561ac043147e298586ea2fd9ef9652000f
MD5 f1d81523c67afb4077d32414247d3bd1
BLAKE2b-256 d801febb2f84fa3235fa740fc7c26bb1dabdbfca8a2b3579dbcb7def96eb5922

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8e10eafb06cc9140c90bf6ae3843db4b627348c6e2d5c52e2eb0c0cffaf2c70
MD5 1dea54a3430c4b3742bfa5681986845c
BLAKE2b-256 983bb2b61dfa28a123ae54f7fa7c76e98779a8d32879fcdc136624603ef7ff74

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 08086b7513cc79c97d34d54a4c8092338b55ed6efe6182456025ae8c9bfc8715
MD5 f9160f608d5acbc771efcb6a18c23231
BLAKE2b-256 6e3b0c7fa9a63ea8e76acc3f33243f6ed5687e055d579ba4a1b18544425af678

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 ea77f8692c9789dfb82c80f6c74fcca61829bf5818bf9c6bf1f6a5a14c74f8a8
MD5 7c8506e2e63527e02dff49c3bfe9509c
BLAKE2b-256 a48fae4e3bef376e44c5561d0bb5c710aae917defa7cee7efef92507c5af151c

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 a097eff74105ef45554aada4f0ffcbf171657fab61a1949f29ae9ddb2351a877
MD5 870f9847cbbcd02d8881c2ffcbaea6df
BLAKE2b-256 a9bcd062d7298f61203592557d99ce07880c69a08bea970e9b197422ea3bca57

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2d670c63dfb39b26ebf6f1db89ac20090dd89953cc28b7b0c90e5feca6e57127
MD5 9db53000ba047f44ebed2ca5f63b30b2
BLAKE2b-256 b6a921cb0af230b071f1e6981470aff13e6f0acc74a057ce27d102cc4a7f8856

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 66316f6527747c0297ce7bed5b78d2a8b0db5aa1e6c1e8d8863655170312513c
MD5 7c05705b63f8880d02819082a9dc44f3
BLAKE2b-256 91df1d54bc9c72cdeb2348deb4a102d1e47bc065066267285fc8ab07729bc0b7

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f620857afb7f9c523efaaef9ae119a81f83c2afe80079c3f518dc8ec3a56f584
MD5 5a5fdc26be6a0098c3c16a4f4c67a395
BLAKE2b-256 bca0d0bcb04b61985c13498d3f8e8f47b79d5e785c858f72e628440a32433df1

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 cf65efbe6c101b42cbbbebd4e3914cb3bc5d7ffce4a4ab783c5b7d4d35bff038
MD5 06057bc6e150e728d83ae880c3b610b7
BLAKE2b-256 475746249b58c6699968c17c7e66f8ff5988f7c82bf02cf1057b5336d36fca43

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edc4c9e10c7a84fe6c42bdd94c376c85b8c8506df5709a1bc869a36992daf9c8
MD5 7bac48eb1fc7f473c72a36a2cfe15e47
BLAKE2b-256 67d79dc8742ab7cec62a277bf70744fc2998737072d97ed3456816c8f70ba7ff

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 80760ef9c0a4de4098867ad8c90d1fe67a9c482f3a9af391772edaa10af8ca13
MD5 18d3f37f05ef0ee2b40f669834516a66
BLAKE2b-256 8a5d09ce97df540385745f267d6337e645209863c59ce1989ccc17557906e435

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 39bd32ecc2009343d22eec95e832a84a5cd2ecfac91f718d3539ab62cb7d6f51
MD5 70cbd9af92a95bc175711e1ce0124854
BLAKE2b-256 13fb6bbd04b068382e8c6bbdcae286c533e3ebe2cab1cd51d1b83a87f5a18b17

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 b79bbd9a6a789b0ac43a6d75e1a38f54596b476d1ff84a28be1872e796d00b84
MD5 8834996df27df5c477f2908ec4c1fa95
BLAKE2b-256 bf6399e4132fa8e11dd1838583095d3afc06d2680fbfa48f32a30d1e9b5a57bf

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 54b3c216c03b873bf6b6e74876afaf2de44ce7aa0bca38425fbd7f14417ba039
MD5 07071c010bbd7a4eb1bd84db6dbc75c0
BLAKE2b-256 0faa42c18ee561e79069f949635a81311dda25d2e5f5e8734e569223039ea852

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6685bcd5e8239d264912db3d6d4cc24e3ec0905587c83970367937dbf0c52b4d
MD5 455de6b73f5d94b96879425848a02ff2
BLAKE2b-256 98bc2c60ab585c1e719b9cffc4f57ab5136bd76912cb750f066819962616c681

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 39300a41bca975255fc275869672aedbfc233fe301bca0007a83241955827782
MD5 348fb483cacc093461ac484d07552a15
BLAKE2b-256 6de0edd44db6ef06d0603968e14825aa875f6778ad5dbea37d9f8058880ae07e

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 6202db328e48f8c351e70f74ba6676244c7dbf58a84781a348dc3ed10a3d5a08
MD5 2ee404de9784ef8808e22ae492595aa5
BLAKE2b-256 ce522a94fabb1e60f2b46b8757f2ffbaed06f13d6349874e9e356892c7e89741

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 40c73e9ad7488d749a58d427cce47c4ae8de9107f3e7058ed2a769cefee7c23f
MD5 98429627ed56bfc690064b2f60d7a1df
BLAKE2b-256 2f1a93232fa420681090eb939ae97892ff50ace2895b7cbb240cd93ab4cc86cb

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 d565747dc3daf7da0937e26b005201c95c1579386ccca34b62dfdebaf26e2517
MD5 2f86af46019eb2265ddaec61613bbcd7
BLAKE2b-256 441035eed8a0ea06aff75d6d529c9ba03acee8be3e62e8b39d4a3eae578973c5

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a90997a34bf001f2fa69390a43d1cfcb810f1b78e5456cead788b25ab29dd993
MD5 3f27b8408166f7300d6118b798d8ff72
BLAKE2b-256 f39a930a53fdf69e31ded71355e4450a0a78747570b7e64964291cdda7028bb9

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 6a7841871feb5d67f2f33a1eb80366345ab56a55e3f90c3728adfa9a768f56fc
MD5 a4b5b447f15c453502f18f450ec57c4f
BLAKE2b-256 8fafbbaacc2cd6722d9eb6cbf8c9af71adeb1e6862f199f91952cf555345a3ac

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 08b920ce6f18b9276feb25877aaa8602f37e922aacd67dd333502c8a1f82bd4a
MD5 88264e8a66ea272999da46b3f9f4ce55
BLAKE2b-256 0f0e5b915c3db8b05b5836df539e058fba793fb44457ebf4321a2e7a19fb4cd6

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 21ff338e7d84d0d863cf02579f46bdb1b12b74659e6439e44fa0075af3f14477
MD5 8f2a080fb8851988c638358f35cc453b
BLAKE2b-256 f5206ee91c14819aea4fab2529a46691b82189b99a1a2a72b1a4623752fc444f

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.1-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for serpyco_rs-1.10.1-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 368e7a5db37dc4977c77db3d068ada073559eebd457182789d8775cd2794aa47
MD5 235e236452499a5c3e8bf4bb5d836694
BLAKE2b-256 5589412c0aa743016ffcf271c34a726c7af48f1a63f89fdb10c07d6d3e109825

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