dynamic-pricing-engine / app /streaming.py
AishwaryaNJ's picture
Add comprehensive tests for pricing engine and API endpoints
1e11bce
Raw
History Blame Contribute Delete
1.34 kB
from __future__ import annotations
import json
from typing import Any
from kafka import KafkaConsumer, KafkaProducer
from app.config import Settings
class PricingEventProducer:
def __init__(self, settings: Settings):
self.producer = KafkaProducer(
bootstrap_servers=settings.kafka_bootstrap_servers,
value_serializer=lambda value: json.dumps(value).encode("utf-8"),
)
self.order_topic = settings.kafka_topic_orders
self.click_topic = settings.kafka_topic_clicks
def publish_order(self, payload: dict[str, Any]) -> None:
self.producer.send(self.order_topic, payload)
self.producer.flush()
def publish_click(self, payload: dict[str, Any]) -> None:
self.producer.send(self.click_topic, payload)
self.producer.flush()
class PricingEventConsumer:
def __init__(self, settings: Settings, topic: str):
self.consumer = KafkaConsumer(
topic,
bootstrap_servers=settings.kafka_bootstrap_servers,
value_deserializer=lambda value: json.loads(value.decode("utf-8")),
auto_offset_reset="latest",
enable_auto_commit=True,
group_id="dynamic-pricing-engine",
)
def poll_forever(self):
for message in self.consumer:
yield message.value