Attrs benchmark
This commit is contained in:
0
benchmark/attrs_benchmark/__init__.py
Normal file
0
benchmark/attrs_benchmark/__init__.py
Normal file
10
benchmark/attrs_benchmark/benchmark.py
Normal file
10
benchmark/attrs_benchmark/benchmark.py
Normal 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)
|
||||
58
benchmark/attrs_benchmark/models.py
Normal file
58
benchmark/attrs_benchmark/models.py
Normal 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)
|
||||
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user