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.2.tar.gz (2.2 MB view details)

Uploaded Source

Built Distributions

serpyco_rs-1.10.2-cp312-none-win_amd64.whl (335.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (464.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (674.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (479.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (492.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (474.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (469.7 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (810.6 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.2-cp311-none-win_amd64.whl (339.8 kB view details)

Uploaded CPython 3.11 Windows x86-64

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (463.7 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (681.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (484.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (499.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (472.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (468.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (804.0 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.2-cp310-none-win_amd64.whl (340.9 kB view details)

Uploaded CPython 3.10 Windows x86-64

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (469.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (681.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (484.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (499.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (472.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (468.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (807.5 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.2-cp39-none-win_amd64.whl (341.8 kB view details)

Uploaded CPython 3.9 Windows x86-64

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (469.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (681.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (484.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (499.7 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (473.3 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (468.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (807.7 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.2.tar.gz.

File metadata

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

File hashes

Hashes for serpyco_rs-1.10.2.tar.gz
Algorithm Hash digest
SHA256 9cf06956eb14b326e522c9665aa5136f8fd7ece2df8a393c2e84bee8204362d0
MD5 ecac1ecf869e5fbed33c6e1664ea3e6a
BLAKE2b-256 fc4ce4601a445ce378f2dc22ba23789fc4d403da3ce7d31b64ac1549f93ff042

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 c6c95f6c9e04af94c33e4e514291df7380c3960a155e9fe264ccaaa46d4d0de8
MD5 f6ac7d18f6d4936ceb9ce39b43c5361a
BLAKE2b-256 501175f93b4d932f998e1485ca850c7fbf23eebb5f355f523b21c14efd6500eb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 045965a32c651797a73c7b7165165ed0d78efc233af4bf24c47acd41d222fae8
MD5 683ad7092847e95e8ea561ad16a9653c
BLAKE2b-256 04ff1071642041f4b01c2857489cd2bdb4c0ef2fc706e15f49e15b452c96ce6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 bdd2b8d3b9160ddcab0400ca5e258c16e870ae49c6586ed5405c18e8910c957b
MD5 0ab0800da8a5155db81f5ed67a2e823d
BLAKE2b-256 a0625ceae4cdad0649bc5dad89c419dfae19744d4520c912f07ff8653360d70c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 4a79517070e0b021803cafdf11d326e1149eac4a226443040e9fa1492c74337b
MD5 5552fbe6d41965f60e746e6808d76519
BLAKE2b-256 4e977140db81ed6475217994d7d22947032ca8c089809a464b0a4406a69fa133

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 35d0a1a1a69ae074b123f6ad1487dc67717727d9dce4f95a393298743d60aafb
MD5 68a54e73eb4475aa93cc521aea7860b7
BLAKE2b-256 fa05bae6aa8739c1248f76548ffea38062a6370b12d6434f8dbf002fbf0c3ba0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1366df15ae2548a8a063eca84b9a8c2af92ac55df73ce60a7c4f2dfe71e2526b
MD5 7af54f30b91dc0285d73359f08001c5a
BLAKE2b-256 8639edcdab5f80e8f0e6eac4dbb59ec41aadae4f2f5bf42e712e41110c6b1a56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 805162d7b67fd08b04b1e2ef1deeaedc37c7ee24a200f24778fb98b9fe7f5cdd
MD5 9d30e336168e9802e8af48037dd0837d
BLAKE2b-256 e495e30c960ced536c7cb8304536ec28689adde9cae65ac1ad77745cb8b58df9

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.2-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.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 6379d789daff44e5f535d7e1c0131b30cee86988e9561cc9d98e87021188220d
MD5 ffad8ef73cabb4c0aad74e0b08dc4c5b
BLAKE2b-256 de2520dd3076d518b138572a631c49dea08251d74a78f9b9c6ded87534463b8f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 743c1e1943f51883cb498c2c16c5f49bab2adb991c842077fcd0fa5a1658da25
MD5 bc46799d752faafb491202754d9de44f
BLAKE2b-256 7014659708f47ee5b759671f5e663f71bb18f80160c9eb90e916575b2758c595

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e8e323f5420c3e6f99627291a2d47d7fcd7f5c4433aaa6cc35e15d5b22ba19d6
MD5 af99f6305fff61d29cd17b61c655b2b5
BLAKE2b-256 109c0500336669fc3005c58df98e53eb00ad2f617c40ecd9e8766d2aceb205bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 bd9c8a31440a3158c601fdcd523e77cd5fefa2ae5be061a4151c38a7a6060624
MD5 23a03cd75df35bf9550ed0b7e4cec5d6
BLAKE2b-256 19dc3a16bd22769f366a852bc1a6b51226e938b558f09a28b9ced5a4c0842b70

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 54ce4d5ac0ac4d62911998bfba1ac149a61c43f5dbfa23f831f0d87290c1861a
MD5 d1a6354e3cd1172cf9aaa52dd7d0b6ef
BLAKE2b-256 0a09ebca051262830561f5e7302b05d47395aa70e8ec10d71e8ff34c62450718

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 413fe29db4cab826269371a89ff9ccbd897ee7ff0eaaf1090362fdb86d5b8beb
MD5 c460f21d82e92d9f260977b68d54d1a8
BLAKE2b-256 4dc22259238a95025e7b6eaf03e936dd86c1a3b512ecf8ba3eac83ddf8c6dbe4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9fc4c1241c0707bfdd93991c0a2cea3f51a17acad343d9b5c296fc0a9f044d78
MD5 6d9b6f5302bbca991b174d91fbd44160
BLAKE2b-256 9aa759aa85c919da58f02d5375631f32727464cb652dddca7038b8f0c8b0fe2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 cf4d5c69d1fcd7007b7792cb5ea62a0702822f6f8982349f44b795677ab7414c
MD5 9c75af79e4b12ecb98bae14955863c19
BLAKE2b-256 0c03ac06ed2802b80eb8d556ffdb77b0433e05b28b8d1e2fd45876cbfa504c72

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.2-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.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 8d0e6d6546145ba30d6032381b27261e338f7c1b96b9fb0773a481970a809827
MD5 2ec4933d724c25048f3a9a3cd749513c
BLAKE2b-256 d8542c0cfeeefefcc5d3ec65b75c123a43a239eb93f2f5cc32b473ab71ff79dd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 ff83f5296f0ab08e77d09a4888020e636d4385a642fec52eacd2ab480d0ec22c
MD5 a33860e3976a39f26f168fa2d19eaddc
BLAKE2b-256 c4498763ee3acfdb0f04e2557f2df10239a564949d20c905f4a66d5f6d9c723b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5212fa00ff8874ecabca0cf5f11eb7c1291b55ec9ee6aa7ee3ae2ec344abcf7f
MD5 875d9db0f2bb7ce7d3ecf6acbb6629b5
BLAKE2b-256 eb09c5f3f7a528fe3c5b74d092fb953bb267f77b2ebdc6473673d574a133fe14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a8da7ff487ada75f6b724d6ef9e40cde5cf703a2b89e6a3f466a8db0049e153a
MD5 2dde445bbe836244ebc7635dc31d0128
BLAKE2b-256 becad1ae26c752dc18f6b8baf9a36b960c166e6a0f896907f3ff985abbf51587

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 3d18a77d23aeb49904b2462410e57b4027511158845291bf6251e5857a881d60
MD5 098e12f8240d80206df68a8772f92fde
BLAKE2b-256 390a2218a5ca7d65f07f3c3b10aa2fbc993d53ad3be65de6ad80fc53f49f39cd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 87d8118e9ba6e37aee1b0f7c14b19fe494f1589dc81ae0cc5168812779e1bfab
MD5 546ec6a80437469074113f78f1334875
BLAKE2b-256 f8114cb7645d6f2b93c2edca141e5e2dbca98630629b7dfc3ce1998a3ccdb4f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 aab2241b2d87bca5f15d5d34a3948b1c9ad1724cc55d1332e0c5325aff02635f
MD5 44bef6abe52d4f75a5a7dfdf8cf5b6b0
BLAKE2b-256 0e21c146276b2bb4e627f9a1fc36d911e0bc1a59650e99391eafc53c2f8148e4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ef9a31f8d62c17b1ccfffb3e91c5aed2d6fd2187c7611ee3ca1b572046150cd
MD5 dc651a319570cf34c5e6a3e6bc002262
BLAKE2b-256 946b823aab7fb723c2a0f9256a68cf7c3495f90f778c0be6160d04ebb891ce4e

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.2-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.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 e01d824fdebb9bded57ec40b9ac0ca3b312ad617fd5deba61113a3b23bcb915d
MD5 923e40fab7f80048cab6ddf821457889
BLAKE2b-256 1d73aefb6c627b526421fc7ff6ff40f5e3c96805f341622a4958f79a35123714

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 a124608cc998e3854fc743dea5dd7d948edbeaa70c1c1777b6dbb4b64ce465b0
MD5 4684855fc0a22ba743685d69d2d54fae
BLAKE2b-256 8d1c89b7e87ddce7ce9ed498445221c27248c201a705950c0c49cea0b39e4fec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 441b8045f91f30120c00a1f617a0ad6f22c1753c6b98899e8476d6e7775a3667
MD5 c62ad4013d2b36df352c72aa8ec3b78d
BLAKE2b-256 8cd3a4474a664c466dd9b483045af2d9613f69db2e4ac57fddc81966e598cf0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 14d9e22016e2860c1f524aa123cfadd4a4eea25af10d1be76cc3d97d9c85c2e2
MD5 5cdbd2df7aae63b0d32010ab930c87f2
BLAKE2b-256 b15a08bd02e626b961491fa1c08334fbbcbe9c6b2f398d14b015b7bffe2b8c35

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 e1f011370259602b55141ce866bf31dcdc9d8b68105c32f18ee442bc651ee880
MD5 684addff4e7c99b6d3f6c72c1e1eae70
BLAKE2b-256 da298adb44b8acc5331b704c5dcf7f6dacd68938ed32c8a163a797769deea9b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 9ce029f8f29f4f335d0f3c9e005b71d7e8a934735d9654e3f03ccc54d50c107a
MD5 30a8c0d078ab15a2fd64cadaaf6053a4
BLAKE2b-256 c8c297c76e492034c1f4c83be1ffff6675dc2cc5122e66a20df74e20d99f0d48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f726392e6380b1e7d642d7633ac27929c8616a59db0a54632f5a9ab80987e071
MD5 5cd698e79bdeecef5b74a5e07a0d08a8
BLAKE2b-256 216de9354e89e06af93abcb46eefdf000d2b93ade75d4d434c976598c1d01422

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3c3830bb3f6a342825e27592e86baa46774bfb1f08c82dbf561b5f1380a18b48
MD5 378810598b368a3bfe7867d8a1b8ac19
BLAKE2b-256 aa0a07f50f68d1625b92256fdd0690615f3ebe54f2c8ea54d10365e1b4b24e03

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.2-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.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f19a82836699d102b288b17ae370dd4d37af60ccd2254f5bfdbd053d168cecee
MD5 1821a608d40c0926bd764fdd2de08ff3
BLAKE2b-256 c529132782bd605f403f638724b3c164ab569bb73f57cad72ebc7bd209e2cca6

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