mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-10-21 11:11:05 +00:00
* PDF - Checksum the original document not the browser's PDF viewer HTML, browser PDF test The "unchanged since last check" checksum was taken from fetcher.content, for a PDF in a browser that is the viewer's HTML wrapper which is identical for every version. Prefer raw_content. Also check that a PDF is actually available before the checksum skip; previously the viewer HTML checksum was saved before the PDF error was raised, so the next check skipped as "unchanged", cleared the error, and the watch silently never recorded anything. Adds a playwright + puppeteer container test (PDF detected, unchanged PDF is not a change, new PDF version is), puppeteer must fetch it itself, playwright must fall back to html_requests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * PDF - Only use raw_content for the document checksum when it is a PDF Every other content type keeps checksumming .content exactly as before, so existing watches keep their checksum basis. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Revert the raw_content document checksum change Choosing between .content and .raw_content belongs in the general binary content handling (#1334), which will be done separately. The browser PDF test and the early "PDF not available" check stay. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Change detection post-processors
The concept here is to be able to switch between different domain specific problems to solve.
text_json_diffThe traditional text and JSON comparison handlerrestock_diffOnly 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