Files
TowyTowyandClaude 5e9a8583e2 Restock detection - fix inverted condition that skipped the OpenGraph availability fallback (#4262)
* Restock detection - fix inverted condition that skipped the OpenGraph availability fallback

get_itemprop_availability() only dug through OpenGraph properties when
price was missing OR when availability was ALREADY found - so on pages
that expose price via JSON-LD but stock state only via the OpenGraph
commerce tags (<meta property="product:availability">), the availability
(and currency) was silently dropped.

The inner loop already guards each field with 'if not value.get(...)',
so the outer gate now matches that intent: dig OpenGraph when any of
price/availability/currency is still missing.

Co-Authored-By: Claude <noreply@anthropic.com>

* Normalise availability after the OpenGraph fallback, not before

An availability found via OpenGraph was left raw, so the Facebook
commerce spelling 'in stock' never matched the 'instock' test and the
product read as out of stock.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-26 10:59:29 +02:00
..

Change detection post-processors

The concept here is to be able to switch between different domain specific problems to solve.

  • text_json_diff The traditional text and JSON comparison handler
  • restock_diff Only cares about detecting if a product looks like it has some text that suggests that it's out of stock, otherwise assumes that it's in stock.

Some suggestions for the future

  • graphical

API schema extension (api.yaml)

A processor can extend the Watch/Tag API schema by placing an api.yaml alongside its __init__.py. Define a components.schemas.processor_config_<name> entry and it will be merged into WatchBase at startup, making processor_config_<name> a valid field on all watch create/update API calls. The fully merged spec is served live at /api/v1/full-spec.

See restock_diff/api.yaml for a working example.

Todo

  • Make each processor return a extra list of sub-processed (so you could configure a single processor in different ways)
  • move restock_diff to its own pip/github repo