chore(deps): remove unused proprietary dep pymupdf-layout#742
Conversation
pymupdf-layout is Artifex commercial-only proprietary (its wheel ships only a one-line COPYING noting "Commercial license. See artifex.com"), incompatible with the project's AGPL build. It was declared as a runtime dependency but unused: not imported anywhere in nextcloud_mcp_server/ or tests/. Also drop tools/parse-doc.py, an unused dev scratch script that was the only caller of pymupdf.layout.activate(). Per the explicit warning in document_processors/pymupdf.py, activating layout breaks pymupdf4llm.to_markdown(page_chunks=True) per pymupdf4llm#323. Closes #725 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Claude finished @cbcoutinho's task in 1m 11s —— View job PR Review: chore(deps): remove unused proprietary dep pymupdf-layoutTasks:
Review SummaryThis is a clean, well-scoped dependency removal. The changes are correct and complete. No issues found. pyproject.tomlThe single line removal of
uv.lockThree blocks correctly removed:
Other transitive deps of tools/parse-doc.pyThe deleted script was the sole caller of
Cross-checks
License Concern (mentioned in PR)The PR correctly identifies the license incompatibility: Verdict: LGTM. This is a straightforward and correct cleanup. The PR description is accurate and the implementation matches the stated intent. |
Summary
Closes #725.
pymupdf-layout>=1.26.6frompyproject.tomlanduv.lock. The package is Artifex commercial-only proprietary (its wheel ships only a one-lineCOPYING: "Commercial license. See artifex.com for details.") and is incompatible with the project's AGPL build. It was declared as a runtime dependency but unused — not imported anywhere innextcloud_mcp_server/ortests/.tools/parse-doc.py, an unused dev scratch script that was the only caller ofpymupdf.layout.activate(). Per the explicit warning innextcloud_mcp_server/document_processors/pymupdf.py:11-14, activating layout breakspymupdf4llm.to_markdown(page_chunks=True)(upstream pymupdf4llm#323), so the script was inconsistent with main code anyway.Test plan
uv lockregenerates cleanly (also drops transitivenetworkx)uv run ruff checkpassesuv run pytest tests/unit/— 564 passedThis PR was generated with the help of AI, and reviewed by a Human