Typed pydantic models for:
- product cards (
Card); - category trees (
Category); - geolocation and retail entities (
AdministrativeUnit,RetailUnit,Schedule).
The package also includes network serialization helpers:
to_json(value)to convert model data to transport JSON;from_json(payload, model)to restore typed objects from JSON.
pip install openinflation-dataclassfrom io import BytesIO
from openinflation_dataclass import (
AdministrativeUnit,
Card,
Category,
RetailUnit,
Schedule,
from_json,
to_json,
)
category = Category(uid="milk", alias="milk", title="Milk", adult=False)
card = Card(
sku="SKU-001",
plu="123456",
source_page_url="https://example.com/product/sku-001",
title="Milk 1L",
description="Pasteurized milk",
adult=False,
new=True,
promo=False,
season=False,
hit=True,
data_matrix=True,
brand="Example",
producer_name="Example Foods",
producer_country="RUS",
composition="Milk",
meta_data=[],
expiration_date_in_days=10,
rating=4.8,
reviews_count=124,
price=89.9,
discount_price=79.9,
loyal_price=75.9,
wholesale_price=[],
price_unit="RUB",
unit="PCE",
available_count=15,
package_quantity=1.0,
package_unit="LTR",
categories_uid=[category.uid],
main_image=BytesIO(b"main-image"),
)
admin = AdministrativeUnit(
settlement_type="city",
name="Moscow",
alias="moskva",
country="RUS",
region="Moscow",
longitude=37.6176,
latitude=55.7558,
)
retail = RetailUnit(
retail_type="store",
code="STORE-001",
address="Example st, 1",
schedule_weekdays=Schedule(open_from="09:00", closed_from="22:00"),
schedule_saturday=Schedule(open_from="09:00", closed_from="22:00"),
schedule_sunday=Schedule(open_from="10:00", closed_from="21:00"),
temporarily_closed=False,
longitude=37.6176,
latitude=55.7558,
administrative_unit=admin,
categories=[category],
products=[card],
)
payload = to_json(retail)
restored = from_json(payload, RetailUnit)BytesIO fields are encoded as base64 strings in JSON and restored back to BytesIO on from_json.
python -m pip install -e ".[dev]"
ruff check .
ruff format --check .
pytest
python -m build
twine check dist/*The repository contains .github/workflows/publish.yml that publishes via OIDC (no API token).
Optional dry-run publishing is available in .github/workflows/publish-testpypi.yml.
- Create a
pypienvironment in GitHub repository settings. - On PyPI, add a Trusted Publisher for this repository with:
- Owner:
Open-Inflation - Repository:
dataclass - Workflow:
publish.yml - Environment:
pypi
- Owner:
- Create a GitHub Release (or run
workflow_dispatch) to publish. - (Optional) Configure a second Trusted Publisher in TestPyPI for
publish-testpypi.ymland environmenttestpypi, then run that workflow for pre-release validation.