6ea3187b3311cd5efeda62f45fc19506bfa310de
PR #25 guarded calculate_priority but missed the same calculation here. On 2026-10-09 06:25:50Z the consumer hit a product with an infinite price; runner.py:201 percentage = int(((original_price - current_price) / original_price) * 100) raised `OverflowError: cannot convert float infinity to integer`. The Discord leg dropped that one alert, but the API leg's caller does not catch OverflowError, so the exception escaped and the consumer logged CRITICAL "api deal loop stopped" -- no deals reached the API from then on (nothing sent at all after 22:00Z), while the bot itself stayed "alive". build_product_details now returns None (with a warning, like the existing missing-price skip) when either price is a non-finite float, on BOTH paths: the MSRP-less path never computes a percentage and would otherwise carry inf into the Product and the API payload. A finite pair whose ratio still overflows (a subnormal original price) is skipped too. Ints and other types keep their existing behaviour. Tests (tests/test_build_product_details.py): five new cases fail on the old code -- OverflowError, ValueError for nan, and the MSRP-less case building a Product with inf -- and all 25 pass now. Ruff findings on the two files are unchanged from main (5, all pre-existing). Rebuild every service that installs monitor-utils with --no-cache to pick this up (it is pulled unpinned from main). Co-Authored-By: Claude Code Opus 5.5 (ansible-ops, auto-repair) <noreply@anthropic.com> Signed-off-by: disqualifier <dev@disqualifier.me>
Languages
Python
100%