add models.py
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
"""
|
||||||
|
Placeholder module for future data models.
|
||||||
|
|
||||||
|
The current assignment does not require any persistent or structured data, but the
|
||||||
|
project layout follows a typical Python package structure. The ``models``
|
||||||
|
module is kept minimal to satisfy the requirement of having at least four
|
||||||
|
files and to demonstrate how one might extend the project later.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Example data class – not used directly in the streaming demo but shows
|
||||||
|
# how a model could be defined for future extensions.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
from typing import Dict, List
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ProductPrice:
|
||||||
|
"""Represents a price entry for a product in a specific city."""
|
||||||
|
|
||||||
|
product: str
|
||||||
|
city: str
|
||||||
|
price: float
|
||||||
|
currency: str = "rubles"
|
||||||
|
|
||||||
|
def __post_init__(self) -> None:
|
||||||
|
if self.price < 0:
|
||||||
|
raise ValueError("Price cannot be negative")
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Repository pattern – a very small in‑memory store.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
class PriceRepository:
|
||||||
|
"""Simple repository that holds :class:`ProductPrice` objects."""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self._store: Dict[tuple[str, str], ProductPrice] = {}
|
||||||
|
|
||||||
|
def add(self, entry: ProductPrice) -> None:
|
||||||
|
key = (entry.product.lower(), entry.city.lower())
|
||||||
|
self._store[key] = entry
|
||||||
|
|
||||||
|
def get(self, product: str, city: str) -> ProductPrice | None:
|
||||||
|
return self._store.get((product.lower(), city.lower()))
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Example usage – not executed in the main script but demonstrates API.
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
repo = PriceRepository()
|
||||||
|
repo.add(ProductPrice("milk", "kazan", 89))
|
||||||
|
print(repo.get("Milk", "KAZAN"))
|
||||||
|
|
||||||
|
# End of models.py
|
||||||
Reference in New Issue
Block a user