From 6b3bd33739632a422a665e6b242a625a1c72b234 Mon Sep 17 00:00:00 2001 From: tpv Date: Mon, 6 Jul 2026 12:18:57 -0700 Subject: [PATCH] added enums for status constants/fixed status not updating --- src/monitor_utils/constants.py | 14 ++++++++++---- src/monitor_utils/database.py | 9 ++++----- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/monitor_utils/constants.py b/src/monitor_utils/constants.py index f0c2a14..e44e325 100644 --- a/src/monitor_utils/constants.py +++ b/src/monitor_utils/constants.py @@ -6,6 +6,7 @@ and the expected error tuple used for known-failure handling. """ import asyncio +from enum import Enum from json import JSONDecodeError import aiohttp @@ -58,10 +59,6 @@ BUCKET_WEBHOOK_MAP = { 90: "90-100", "price_drop": "40-49", } -STATUS_PENDING = "pending" -STATUS_SENT = "sent" -STATUS_SKIPPED = "skipped" -STATUS_FAILED = "failed" EXPECTED_TASK_ERRORS = ( RequestsError, @@ -72,3 +69,12 @@ EXPECTED_TASK_ERRORS = ( PyMongoError, JSONDecodeError, ) + + +class ProductStatus(str, Enum): + """Lifecycle status for a monitored product document.""" + + PENDING = "pending" + SENT = "sent" + SKIPPED = "skipped" + FAILED = "failed" diff --git a/src/monitor_utils/database.py b/src/monitor_utils/database.py index b89c948..5c04f63 100644 --- a/src/monitor_utils/database.py +++ b/src/monitor_utils/database.py @@ -14,7 +14,7 @@ from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorCollection from pymongo import UpdateOne from pymongo.errors import PyMongoError -from monitor_utils.constants import MONGO_DATABASE_NAME, MONGO_URL, STATUS_PENDING +from monitor_utils.constants import ProductStatus, MONGO_DATABASE_NAME, MONGO_URL from monitor_utils.models import Product LOGGER = logging.getLogger(__name__) @@ -106,10 +106,10 @@ async def add_products_to_database( set_on_insert = {"discoveredDate": now} if price_dropped: - document["status"] = STATUS_PENDING + document["status"] = ProductStatus.PENDING document["priceBeforeDrop"] = old_price else: - set_on_insert["status"] = STATUS_PENDING + set_on_insert["status"] = ProductStatus.PENDING update = {"$set": document, "$setOnInsert": set_on_insert} if new_price is not None and new_price != old_price: @@ -143,7 +143,7 @@ def build_doc_id( return f"{product_id}_{category_identifier}" if use_composite else product_id -def convert_product_to_mongo(product: Product, category_identifier: str) -> dict: +def convert_product_to_mongo(product: Product) -> dict: """Flatten a Product into its MongoDB document representation. Coerces string prices to floats and stamps lastUpdated with the current @@ -151,7 +151,6 @@ def convert_product_to_mongo(product: Product, category_identifier: str) -> dict Args: product: Product to convert. - category_identifier: Category suffix retained for signature parity. Returns: The MongoDB document dict for the product.