Attrs benchmark

This commit is contained in:
Eden Kirin
2023-10-19 22:04:13 +02:00
parent b4b0a7f72d
commit 4b838383ed
11 changed files with 105 additions and 22 deletions

View File

View File

@ -0,0 +1,10 @@
import json
from benchmark.base import BenchmarkBase
from benchmark.attrs_benchmark.models import PlanogramsBulkInputPayload
class AttrsBenchmark(BenchmarkBase):
def _benchmark(self) -> None:
test_data = self._read_test_file()
json_data = json.loads(test_data)
data = PlanogramsBulkInputPayload(**json_data)

View File

@ -0,0 +1,58 @@
from enum import Enum
from typing import Optional
from uuid import uuid4
from attr import define, field
import attrs
class ColumnItemType(str, Enum):
PRODUCT = "PRODUCT"
COMPONENT = "COMPONENT"
@define
class CorrelationId:
correlation_id: str = field(factory=lambda: uuid4().hex)
@define
class ColumnsInput:
column_number: int = field(
default=None, validator=[attrs.validators.ge(0), attrs.validators.lt(32767)]
)
external_product_id: Optional[str] = field(
default=None,
validator=[attrs.validators.min_len(1), attrs.validators.max_len(32)],
)
old_qty: Optional[int] = field(
default=None,
validator=[attrs.validators.ge(0), attrs.validators.lt(2147483647)],
)
new_qty: Optional[int] = field(
default=None,
validator=[attrs.validators.ge(0), attrs.validators.lt(2147483647)],
)
old_price: Optional[float] = field(
default=None,
validator=[attrs.validators.ge(0), attrs.validators.lt(99999999.99)],
)
new_price: Optional[float] = field(
default=None,
validator=[attrs.validators.ge(0), attrs.validators.lt(99999999.99)],
)
select_map: Optional[list[int]] = field(default=None)
item_type: Optional[ColumnItemType] = field(factory=lambda: ColumnItemType.PRODUCT)
@define
class PlanogramInput(CorrelationId):
machine_external_id: Optional[str] = field(
default=None,
validator=[attrs.validators.min_len(1), attrs.validators.max_len(32)],
)
columns: list[ColumnsInput] = field(factory=list)
@define
class PlanogramsBulkInputPayload:
planograms: list[PlanogramInput] = field(factory=list)

View File

@ -9,8 +9,8 @@ from benchmark.pydantic_benchmark.models import (
)
COLUMNS_COUNT = 100
PLANOGRAMS_COUNT = 100
COLUMNS_COUNT = 1000
PLANOGRAMS_COUNT = 1000
class ColumnsInputFactory(ModelFactory):

View File

@ -21,12 +21,12 @@ class CorrelationId(Struct, rename="camel"):
class ColumnsInput(Struct, rename="camel"):
column_number: StrictSmallInt
external_product_id: Optional[ExternalId] = field(default=None)
old_qty: Optional[QuantityInt] = field(default_factory=lambda: None)
new_qty: Optional[QuantityInt] = field(default_factory=lambda: None)
old_price: Optional[PriceFloat] = field(default_factory=lambda: None)
new_price: Optional[PriceFloat] = field(default_factory=lambda: None)
select_map: Optional[list[StrictSmallInt]] = field(default_factory=lambda: None)
external_product_id: Optional[ExternalId] = None
old_qty: Optional[QuantityInt] = None
new_qty: Optional[QuantityInt] = None
old_price: Optional[PriceFloat] = None
new_price: Optional[PriceFloat] = None
select_map: Optional[list[StrictSmallInt]] = None
item_type: Optional[ColumnItemType] = field(
default_factory=lambda: ColumnItemType.PRODUCT
)
@ -36,16 +36,6 @@ class PlanogramInput(CorrelationId, Struct, rename="camel"):
machine_external_id: ExternalId = field(default="")
columns: list[ColumnsInput] = field(default_factory=list)
# class Config:
# title = "Planogram"
# alias_generator = to_camel_case
# populate_by_name = True
# str_strip_whitespace = True
class PlanogramsBulkInputPayload(Struct, rename="camel"):
planograms: list[PlanogramInput] = field(default_factory=list)
# class Config:
# populate_by_name = True
# alias_generator = to_camel_case