Skip to content

Commit

Permalink
Add pyserde to benchmark (#361)
Browse files Browse the repository at this point in the history
  • Loading branch information
wyfo committed Feb 22, 2022
1 parent 7b5d584 commit bb45833
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 1 deletion.
65 changes: 65 additions & 0 deletions benchmark/benchmarks/serde.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from dataclasses import dataclass
from datetime import datetime
from typing import Optional

import serde
from common import Benchmark, Methods, Payment
from serde.core import SETTINGS

SETTINGS["debug"] = True


@serde.serde
@dataclass(frozen=True)
class Message:
title: str
body: str
addresses: Optional[list[str]] = None
persistence: Optional[int] = None


@serde.serde
@dataclass(frozen=True)
class Client:
id: int
firstName: str
lastName: str

def __post_init__(self): # The only way I've found to add constraints
if self.id < 0:
raise ValueError


@serde.serde
@dataclass(frozen=True)
class Item:
name: str
price: float
quantity: int = 1

def __post_init__(self):
if self.price < 0 or self.quantity < 1:
raise ValueError


@serde.serde
@dataclass(frozen=True)
class Receipt:
store: str
address: str
date: datetime
items: list[Item]
payment: Payment
client: Optional[Client] = None
specialOffers: Optional[float] = None

def __post_init__(self):
if self.specialOffers is not None and self.specialOffers < 0:
raise ValueError


def methods(cls: type) -> Methods:
return Methods(lambda data: serde.from_dict(cls, data), serde.to_dict)


benchmarks = Benchmark(methods(Message), methods(Receipt), "pyserde")
2 changes: 1 addition & 1 deletion benchmark/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@


def time_it(func: Callable, arg: Any) -> float:
timer = timeit.Timer("func(arg)", globals=locals())
timer = timeit.Timer(lambda: func(arg))
number, _ = timer.autorange()
return min(timer.repeat(number=number)) / number

Expand Down
1 change: 1 addition & 0 deletions benchmark/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ pandas==1.4.0
pydantic==1.9.0
typedload==2.15
typical==2.8.0
pyserde==0.7.0

0 comments on commit bb45833

Please sign in to comment.