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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.12 Windows x86-64

serpyco_rs-1.10.0-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.0-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.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.4 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (886.5 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (864.9 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (846.3 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (844.8 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.0-cp311-none-win_amd64.whl (338.1 kB view details)

Uploaded CPython 3.11 Windows x86-64

serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (464.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

serpyco_rs-1.10.0-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.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.0 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.2 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (842.2 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.0-cp310-none-win_amd64.whl (343.6 kB view details)

Uploaded CPython 3.10 Windows x86-64

serpyco_rs-1.10.0-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.0-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.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (886.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.4 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (843.8 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.0-cp39-none-win_amd64.whl (344.0 kB view details)

Uploaded CPython 3.9 Windows x86-64

serpyco_rs-1.10.0-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.0-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.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (863.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl (887.4 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64

serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (874.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (850.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

serpyco_rs-1.10.0-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (844.3 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.0.tar.gz.

File metadata

  • Download URL: serpyco_rs-1.10.0.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.0.tar.gz
Algorithm Hash digest
SHA256 c02c1175a0926efb217f2c6e8d97f9e4638ba4fde67ac80043c0daa3f34654ac
MD5 ec7c7f12d62f6f945c0488562725aa4a
BLAKE2b-256 feb5bd4f728f3d1beb6ffc943df40eacc7097191bc70ea7ed467bd6aa2706232

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 7a7ff0cc4b890089b17974e8afd36b8e2cfc7e06e02ea6929a83c56911f2542f
MD5 08170b2f7b424035ec47eb5a39c1d6e9
BLAKE2b-256 701f7d756e23e0eeb7b3521c0bc6a268e485ab21388d486d933b550c0e3b0c7f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fc330f9ba7dd31c767a51d5f6c633a19658e1133f62227ac95a8c36236ad484c
MD5 a9aaed14eec4ff6650ee7bb6072a500b
BLAKE2b-256 1de945418a18e05320a7a32d1e3d9ff263c96472fefff8db31e9896fd2f279d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 91eda3638e013bdcef9a2278d3fe554ba1baed41d86bccd3e9f8eb55e95df961
MD5 f9f84df2ec94912b0a1a85e9a29ed5f8
BLAKE2b-256 b24d784b5c2401b0866ca7c55a3edf4bcc62b4744297d4b46b827aebe21f4fd8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 0d6517cd548cb6b5095a26a5a546c7a3c5e5684c0e145047674f0f1508505a78
MD5 b9e3e2089209440102288b222391a155
BLAKE2b-256 9c74a3a073c1c8d4fd57169c0699287a151aed39722f98400ebd26d751037696

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 5a36c16d4aa7681395bf9d61ebd138009c97ed076fa124d054b217e92dd60a71
MD5 e40fd4c67c32c702a17d63d9851df932
BLAKE2b-256 cb0ce3d8d64391f6b793fa61dd36c2a0dd3090ba7cb87ab1bd1e7ae279ab5c3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 deb09dc4bb522f5911d5d418d002286058d4fbcfc7285274b148a9d717ab2fdd
MD5 33a722deacc5060a453da6d6f3a09f71
BLAKE2b-256 a3aedb37fc6eb9aad48bc067e78ce45ff0054760e9dd880932d08da541982083

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 97cca4616f4da9d0a19ee46ade11ec8c77ff048ee5b9a54215623a733529a2e9
MD5 69e7efac90ddf1f2a9b01e5d9b9625bc
BLAKE2b-256 4e35f9230ef630ae33e1e811d2541605e55f44dddbf117f2333f77d23e2f6ae0

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.0-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.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 5bd63bbcacac7fbb1f5f8663fbbe1ca80e02966a7b2f1e869989783dec35a216
MD5 414169291146f2b6fdbe31950ce9ddd9
BLAKE2b-256 7235fbafc94de7ae8bf48cdf8a99447531708a657f549ffbe6e4cb743f40245c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 db7b0ed971a4d33231513abe3f36a62f16b7566b5c26d3fcba0511ec54ae521c
MD5 ba928607220b5c12d6182244b09a91c1
BLAKE2b-256 bcaee5190aa6c0ed46c308f19c2b35d22763bf97f9d394e501648bfb4a6e6b30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 52cc49d30599a0b63b55a36ac299d212e5e6bd42919580c37a5a5872d29646ff
MD5 1b85f328d3f842e3b938e29fe0777bd0
BLAKE2b-256 c3fef92dcc1c5b77e0757511e9fba24680be29f52b28d1b042d5f4ed363b1f87

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 a74469626015479456d4498c96d96b3255d3b5575f84508919b0cf77e97dd07c
MD5 62ea561b091df138113b0bbffada2f10
BLAKE2b-256 138f146a86e6eb0a0fdc7068ae27b297b5de56332281dd12cb3ed640466ae44c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 921aecf2cf51ea97484accb702fe211688806d0dce5e0ba9b5877392fb1ade62
MD5 71bd7b61c337bce9dc1ff49b160299b5
BLAKE2b-256 9bd091593ae456de6f72a12983d8ca9421a8cf22f46476756a9e3604d8c80626

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 909930eb7fe21dfe1ffe14fc1f28b4d4edc5ea5215c2a1e89396a99fc06616a4
MD5 2bd0cd1b2150d4b2807450581dfb1bfd
BLAKE2b-256 ada03c074a18006640d8ed66c644c8fa8073980bac4217e9f2771f64a13160bc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 78ee6d9f6878ad04e8f2bf3c424cf32d8403b7f21b5063da33d2a948d4997b0a
MD5 24552bc4752d8c330d63f1d4525dbec1
BLAKE2b-256 43cfe42189b95bce198a09ffa3ef1f525332192c0f96247c99573eaa0317665e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 acf7496e933326eed9f1a3028e10b1804ed5f5ac654fbd0ccdb8562ae706623f
MD5 8ec5760b27f4fecc8eef25b1a7f9473a
BLAKE2b-256 dc1340115cdef012130d2d280c5ce5f520661b6c049516c76594f16412a62b01

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.0-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.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 5765b1c5eb9aa089375c7dd1457c322a4fdfb90f1050ef907b5f791e6f1eaac8
MD5 e79d11582860b2ef488fc59e584a58d4
BLAKE2b-256 4d66d37ec6396d90b0ac068dbe985945d8f63158312df96f439be6b098264e40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 07d3856f2dae19fb97b62951f27425bf307bc3f05833aefbb072e3f0b0180f9b
MD5 96c146c7be824b2d2ab41e081e290b9c
BLAKE2b-256 33888877c1f302b6d3eb94347193e54d75f0eb17fb687d59012a4043ad7ca1f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d5e319726c007891b39fcc61d5887c70a3a69d7c0c4e59c5b460f1bb0ac71ccc
MD5 4c897a3edb316be7874a6dea6f9a2d4d
BLAKE2b-256 0b5f8828df1d1969a71a7a6b10ba600d110a1b45021dedfe8bd8add150b2554b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f58385954a311f9b2e0559319577f43b110602dfb6421dce5018883c2c0b388f
MD5 33c3355087426ec3f91ef17408a99fec
BLAKE2b-256 67b9eaed563f0756462fd1399d4d76b3cc250f143fba030ba0c927645011500f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 a576ab77f16e9e618b6a39851c2917df2b963ca3145c2d79338eda74bfc60b2d
MD5 a8b937aa7b354d32852673b86716e09f
BLAKE2b-256 1b1ff90541702b8930f968354d1590684bd4fd702514d2b9931f064cc355e954

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 803a8e103cb2c7f8548702d4963a2507ea37e373f92ba7752078bc489095aeca
MD5 aba41e355fa09d5f19a11bdfe230dcbf
BLAKE2b-256 2990016ea853af435a41d8133338c80aef6ffcbb43a4301d44eecc60982c6dce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 61936c66b26479d1c5da9806bb96cad568b59854e7e4acac52cdd8477e7a57ba
MD5 064117f3a86ebf94f59a738478d67a38
BLAKE2b-256 46cd13b14892ef89326d50b9c3e1bb10ec8bcbcd2cdc3643acb97837ac7a9d0f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a83c19d9cb5c23b49613978af6b13454f9164f09b1cb92392026325d44454066
MD5 8fa82fc5ddf82d866d9e32d33e34fb39
BLAKE2b-256 54c26a52d2812329322be1d20935f17d10d633f57d1f2ce3e50c648181d817bc

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.0-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.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 c8d1e7b23298f81bdd640e473e618836bdb30f660bab442b20fbf16be2616ea5
MD5 ae22d8733d17a2676aa0246625eefaad
BLAKE2b-256 0f546e066eef0944a5c3d090fbd96275342ab460ac4fcb6a4488462b6bad6b7d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 0c2b250c0ce617d189f93722fb46b9d4571fe46440f8897c60bc4d407ef43f96
MD5 969b31eb8a789b18322c73af479e6d49
BLAKE2b-256 12c2d05a398dd963944c7bdf916fe60923ef75d03b451168e3061fc6cf019ba1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a5f966ca281e70552159aa9620cf12ee07705e85a609c14bd2df5c8a0e6deb81
MD5 e4936b57244aa4950e75b5b65702d819
BLAKE2b-256 f077d69c9c98231036ae60f4c9f42080a844e3e99970920232029d3db2a52e19

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 0687102d6a0ad26e87a30b7d80a90d2c818e24a1c8356e9ea8cc5a2b845d306b
MD5 ae180386c10ef84de333d21532cbef2d
BLAKE2b-256 0aa9f50763bdc357daef4a382c0dbea368537f931a4f3aa2234e30ce56a7f4fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 7af9e2cfbe4aece791baf50bc079116eba80cf297546f21564f1084f3bdbfea0
MD5 97a9eb2d06c08fbf3a6d0025273ae36c
BLAKE2b-256 e6479942d81af2943a6bdd195ce4daee091f42a2beeab2fe98f157de161f27de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_ppc64.manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 8dad63feff28638e1bf26e7e582632f711ffa8d8de8e23e8547ac0cf372b2cae
MD5 953aac02b93e3c748ac64a49c110d99c
BLAKE2b-256 b6642d81aabf218396a8c4bd0e6ec011c5983b6c02b34de7b280afb600912870

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8ef1d0c9f537fa30c51fa20be37e3f2456139e4572b18ba38f65b63f9d289302
MD5 df95ca470a55e8cc1e412e0012ed50a2
BLAKE2b-256 6b303d0356c270b999a41d3c96d0bc8f4555458937035dc26611d334d2dada00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for serpyco_rs-1.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 205ca15450406c1254831714112948296ebd848cc72a7da7fea4c26b3c7bba6a
MD5 ae1504ba2409e1dff17e229b6157d01f
BLAKE2b-256 e0d7b99cb12ad37f4b9ad44ce7b9b3fd993c56720743d427e20cf25153a5ff15

See more details on using hashes here.

File details

Details for the file serpyco_rs-1.10.0-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.0-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 c0b57ae98e922b084c7816b88b36f4d4cea8990d8475d747b71221e8a8b723f9
MD5 1d623c4103c448f185e0aafc18939e2e
BLAKE2b-256 43b1495c0c57addccc907f9ca4142403dba6fde20a45d6bed6a56c5f9cec9405

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