pdflinkcheck 1.1.73__py3-none-any.whl → 1.1.94__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pdflinkcheck/__init__.py +2 -5
- pdflinkcheck/analyze_pymupdf.py +12 -6
- pdflinkcheck/analyze_pypdf.py +25 -7
- pdflinkcheck/analyze_pypdf_v2.py +5 -6
- pdflinkcheck/cli.py +82 -91
- pdflinkcheck/data/I Have Questions.md +51 -0
- pdflinkcheck/data/LICENSE +17 -654
- pdflinkcheck/data/README.md +49 -49
- pdflinkcheck/data/icons/BoxArt-1080x1080.png +0 -0
- pdflinkcheck/data/icons/Logo-150x150.png +0 -0
- pdflinkcheck/data/icons/Logo-300x300.png +0 -0
- pdflinkcheck/data/icons/Logo-71x71.png +0 -0
- pdflinkcheck/data/icons/PosterArt-720x1080.png +0 -0
- pdflinkcheck/data/icons/SmallLogo-44x44.png +0 -0
- pdflinkcheck/data/icons/SplashScreen-620x300.png +0 -0
- pdflinkcheck/data/icons/StoreLogo-50x50.png +0 -0
- pdflinkcheck/data/icons/WideLogo-310x150.png +0 -0
- pdflinkcheck/data/icons/red_pdf_512px.ico +0 -0
- pdflinkcheck/data/pyproject.toml +20 -23
- pdflinkcheck/data/themes/forest/forest-dark/border-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/border-invalid.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/card.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/check-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/combo-button-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/down.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/empty.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/notebook.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/off-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/on-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/radio-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/rect-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/right.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/scale-hor.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/scale-vert.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/separator.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/sizegrip.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/spin-button-up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tab-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/thumb-vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tree-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/tree-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark/vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-dark.tcl +536 -0
- pdflinkcheck/data/themes/forest/forest-light/border-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/border-invalid.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/card.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/check-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/combo-button-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/down.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/empty.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/notebook.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/off-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/on-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-tri-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/radio-unsel-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-accent-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/rect-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/right-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/right.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/scale-hor.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/scale-vert.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/separator.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/sizegrip.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-down-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-down-focus.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/spin-button-up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tab-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-hor-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/thumb-vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tree-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/tree-pressed.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/up.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-accent.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-basic.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light/vert-hover.png +0 -0
- pdflinkcheck/data/themes/forest/forest-light.tcl +544 -0
- pdflinkcheck/datacopy.py +2 -0
- pdflinkcheck/dev.py +10 -23
- pdflinkcheck/environment.py +64 -0
- pdflinkcheck/gui.py +229 -103
- pdflinkcheck/io.py +4 -18
- pdflinkcheck/report.py +148 -78
- pdflinkcheck/stdlib_server.py +14 -6
- pdflinkcheck/update_msix_version.py +47 -0
- pdflinkcheck/validate.py +50 -73
- pdflinkcheck/version_info.py +5 -2
- {pdflinkcheck-1.1.73.dist-info → pdflinkcheck-1.1.94.dist-info}/METADATA +54 -52
- pdflinkcheck-1.1.94.dist-info/RECORD +176 -0
- pdflinkcheck-1.1.94.dist-info/licenses/LICENSE +24 -0
- pdflinkcheck-1.1.94.dist-info/licenses/LICENSE-MIT +9 -0
- pdflinkcheck-1.1.73.dist-info/RECORD +0 -21
- {pdflinkcheck-1.1.73.dist-info → pdflinkcheck-1.1.94.dist-info}/WHEEL +0 -0
- {pdflinkcheck-1.1.73.dist-info → pdflinkcheck-1.1.94.dist-info}/entry_points.txt +0 -0
- /pdflinkcheck-1.1.73.dist-info/licenses/LICENSE → /pdflinkcheck-1.1.94.dist-info/licenses/LICENSE-AGPL3 +0 -0
pdflinkcheck/data/README.md
CHANGED
|
@@ -4,7 +4,7 @@ A purpose-built tool for comprehensive analysis of hyperlinks and GoTo links wit
|
|
|
4
4
|
|
|
5
5
|
-----
|
|
6
6
|
|
|
7
|
-

|
|
8
8
|
|
|
9
9
|
-----
|
|
10
10
|
|
|
@@ -42,20 +42,9 @@ The tool can be run as simple cross-platform graphical interface (Tkinter).
|
|
|
42
42
|
|
|
43
43
|
### Launching the GUI
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
1. **Implicit Launch:** Run the main command with no arguments, subcommands, or flags (`pdflinkcheck`).
|
|
45
|
+
Ways to launch the GUI interface:
|
|
46
|
+
1. **Implicit Launch:** Run the tool or file with no arguments, subcommands, or flags. (Note: PyInstaller builds use the --windowed (or -noconsole) flag, except for on Termux.)
|
|
48
47
|
2. **Explicit Command:** Use the dedicated GUI subcommand (`pdflinkcheck gui`).
|
|
49
|
-
3. **Binary Double-Click:**
|
|
50
|
-
* **Windows:** Double-click the `pdflinkcheck-VERSION-gui.bat` file.
|
|
51
|
-
* **macOS/Linux:** Double-click the downloaded `.pyz` or `.elf` file.
|
|
52
|
-
|
|
53
|
-
### Planned GUI Updates
|
|
54
|
-
|
|
55
|
-
We are actively working on the following enhancements:
|
|
56
|
-
|
|
57
|
-
* **Report Export:** Functionality to export the full analysis report to a plain text file.
|
|
58
|
-
* **License Visibility:** A dedicated "License Info" button within the GUI to display the terms of the AGPLv3+ license.
|
|
59
48
|
|
|
60
49
|
-----
|
|
61
50
|
|
|
@@ -63,20 +52,30 @@ We are actively working on the following enhancements:
|
|
|
63
52
|
|
|
64
53
|
The core functionality is accessed via the `analyze` command.
|
|
65
54
|
|
|
66
|
-
`DEV_TYPER_HELP_TREE=1 pdflinkcheck help-tree`:
|
|
67
|
-

|
|
68
|
-
|
|
69
55
|
`pdflinkcheck --help`:
|
|
70
|
-

|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
See the Help Tree by unlocking the help-tree CLI command, using the DEV_TYPER_HELP_TREE env var.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
DEV_TYPER_HELP_TREE=1 pdflinkcheck help-tree` # bash
|
|
63
|
+
$env:DEV_TYPER_HELP_TREE = "1"; pdflinkcheck help-tree` # PowerShell
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+

|
|
67
|
+
|
|
71
68
|
|
|
72
69
|
|
|
73
70
|
### Available Commands
|
|
74
71
|
|
|
75
72
|
|**Command**|**Description**|
|
|
76
73
|
|---|---|
|
|
77
|
-
|`pdflinkcheck analyze`|Analyzes a PDF file for links
|
|
74
|
+
|`pdflinkcheck analyze`|Analyzes a PDF file for links and validates their reasonableness.|
|
|
78
75
|
|`pdflinkcheck gui`|Explicitly launch the Graphical User Interface.|
|
|
79
76
|
|`pdflinkcheck docs`|Access documentation, including the README and AGPLv3+ license.|
|
|
77
|
+
|`pdflinkcheck serve`|Serve a basic local web app which uses only the Python standard library.|
|
|
78
|
+
|`pdflinkcheck tools`|Access additional tools, like `--clear-cache`.|
|
|
80
79
|
|
|
81
80
|
### `analyze` Command Options
|
|
82
81
|
|
|
@@ -188,37 +187,23 @@ This `help-tree` feature has not yet been submitted for inclusion into Typer.
|
|
|
188
187
|
|
|
189
188
|
## ⚠️ Compatibility Notes
|
|
190
189
|
|
|
191
|
-
|
|
190
|
+
### Termux Compatibility as a Key Goal
|
|
192
191
|
A key goal of City-of-Memphis-Wastewater is to release all software as Termux-compatible.
|
|
193
192
|
|
|
194
|
-
Termux compatibility is important in the modern age
|
|
193
|
+
Termux compatibility is important in the modern age, because Android devices are common among technicians, field engineers, and maintenace staff.
|
|
195
194
|
Android is the most common operating system in the Global South.
|
|
196
195
|
We aim to produce stable software that can do the most possible good.
|
|
197
196
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
`pypdf
|
|
201
|
-
|
|
202
|
-
Now that `pdflinkcheck` can run on Termux, we may find a work-around and be able to drop the PyMuPDF dependency.
|
|
203
|
-
- Build `pypdf`-only artifacts, to reduce size.
|
|
204
|
-
- Build a web-stack GUI as an alternative to the Tkinter GUI, to be compatible with Termux.
|
|
205
|
-
|
|
206
|
-
Because it works, we plan to keep the `PyMuPDF` portion of the codebase.
|
|
207
|
-
|
|
208
|
-
### Document Compatibility:
|
|
209
|
-
Not all PDF files can be processed successfully. This tool is designed primarily for digitally generated (vector-based) PDFs.
|
|
210
|
-
|
|
211
|
-
Processing may fail or yield incomplete results for:
|
|
212
|
-
* **Scanned PDFs** (images of text) that lack an accessible text layer.
|
|
213
|
-
* **Encrypted or Password-Protected** documents.
|
|
214
|
-
* **Malformed or non-standard** PDF files.
|
|
197
|
+
Now `pdflinkcheck` can run on Termux by using the `pypdf` engine.
|
|
198
|
+
Benefits:
|
|
199
|
+
- `pypdf`-only artifacts, to reduce size to about 6% compared to artifacts that include `PyMuPDF`.
|
|
200
|
+
- Web-stack GUI as an alternative to the Tkinter GUI, which can be run locally on Termux or as a web app.
|
|
215
201
|
|
|
216
|
-
-----
|
|
217
202
|
|
|
218
|
-
|
|
219
|
-
At long last, `PyMuPDF` is an optional dependency.
|
|
203
|
+
### PDF Library Selection
|
|
204
|
+
At long last, `PyMuPDF` is an optional dependency. All testing comparing `pyp df` and `PyMuPDF` has shown identical validation performance. However `PyMuPDF` is much faster. The benfit of `pypdf` is small size of packages and cross-platform compatibility.
|
|
220
205
|
|
|
221
|
-
|
|
206
|
+
Expecte that all binaries and artifacts contain PyMuPDF, unlss they are built on Android. The GUI and CLI interfaces both allow selection of the library; if PyMuPDF is selected but is not available, the user will be warned.
|
|
222
207
|
|
|
223
208
|
To install the complete version use one of these options:
|
|
224
209
|
|
|
@@ -229,6 +214,16 @@ uv tool install "pdflinkcheck[full]"
|
|
|
229
214
|
uv add "pdflinkcheck[full]"
|
|
230
215
|
```
|
|
231
216
|
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### Document Compatibility:
|
|
220
|
+
Not all PDF files can be processed successfully. This tool is designed primarily for digitally generated (vector-based) PDFs.
|
|
221
|
+
|
|
222
|
+
Processing may fail or yield incomplete results for:
|
|
223
|
+
* **Scanned PDFs** (images of text) that lack an accessible text layer.
|
|
224
|
+
* **Encrypted or Password-Protected** documents.
|
|
225
|
+
* **Malformed or non-standard** PDF files.
|
|
226
|
+
|
|
232
227
|
-----
|
|
233
228
|
|
|
234
229
|
## Run from Source (Developers)
|
|
@@ -257,22 +252,27 @@ uv run python -m pdflinkcheck.stdlib_server
|
|
|
257
252
|
|
|
258
253
|
## 📜 License Implications (AGPLv3+)
|
|
259
254
|
|
|
260
|
-
**`pdflinkcheck` is licensed under the `GNU Affero General Public License` version 3 or later (`AGPLv3+`).**
|
|
261
255
|
|
|
262
|
-
The `AGPL3
|
|
256
|
+
The `AGPL3-or-later` is required for binaries of `pdflinkcheck` which include `PyMuPDF`, which is licensed under the `AGPL3`.
|
|
257
|
+
The source code itself for `pdflinkcheck` is licensed under the `MIT`.
|
|
263
258
|
|
|
264
|
-
|
|
265
|
-
The `AGPL3` appears as the primary license file in the source code. While this infers that the entire project is AGPL3-licensed, this is not true - portions of the codebase are MIT-licensed.
|
|
266
|
-
|
|
267
|
-
This license has significant implications for **distribution and network use**, particularly for organizations:
|
|
259
|
+
The AGPL3-or-later license has significant implications for **distribution and network use**, particularly for organizations:
|
|
268
260
|
|
|
269
261
|
* **Source Code Provision:** If you distribute this tool (modified or unmodified) to anyone, you **must** provide the full source code under the same license.
|
|
270
262
|
* **Network Interaction (Affero Clause):** If you modify this tool and make the modified version available to users over a computer network (e.g., as a web service or backend), you **must** also offer the source code to those network users.
|
|
271
263
|
|
|
272
264
|
> **Before deploying or modifying this tool for organizational use, especially for internal web services or distribution, please ensure compliance with the AGPLv3+ terms.**
|
|
273
265
|
|
|
266
|
+
Because the AGPLv3 is a strong copyleft license, any version of `pdflinkcheck` that includes AGPL‑licensed components (such as `PyMuPDF`) must be distributed as a whole under AGPLv3+. This means that for those versions, anyone who distributes the application — or makes a modified version available over a network — must also provide the complete corresponding source code under the same terms.
|
|
267
|
+
|
|
268
|
+
The source code of pdflinkcheck itself remains licensed under the **MIT License**; only the distributed binary becomes AGPL‑licensed when PyMuPDF is included.
|
|
269
|
+
|
|
270
|
+
|
|
274
271
|
Links:
|
|
275
272
|
- Source code: https://github.com/City-of-Memphis-Wastewater/pdflinkcheck/
|
|
276
|
-
-
|
|
273
|
+
- PyMuPDF source code: https://github.com/pymupdf/PyMuPDF/
|
|
274
|
+
- pypdf source code: https://github.com/py-pdf/pypdf/
|
|
275
|
+
- AGPLv3 text (FSF): https://www.gnu.org/licenses/agpl-3.0.html
|
|
276
|
+
- MIT License text: https://opensource.org/license/mit
|
|
277
277
|
|
|
278
278
|
Copyright © 2025 George Clayton Bennett
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
pdflinkcheck/data/pyproject.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pdflinkcheck"
|
|
3
|
-
version = "1.1.
|
|
3
|
+
version = "1.1.94"
|
|
4
4
|
description = "A purpose-built PDF link analysis and reporting tool with GUI and CLI."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -10,7 +10,10 @@ dependencies = [
|
|
|
10
10
|
"rich>=14.2.0",
|
|
11
11
|
"typer>=0.20.0",
|
|
12
12
|
]
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
license = "MIT AND AGPL-3.0-or-later"
|
|
15
|
+
license-files = ["LICENSE", "LICENSE-MIT", "LICENSE-AGPL3"]
|
|
16
|
+
|
|
14
17
|
classifiers=[
|
|
15
18
|
"Programming Language :: Python :: 3",
|
|
16
19
|
"Programming Language :: Python :: 3 :: Only",
|
|
@@ -20,6 +23,7 @@ classifiers=[
|
|
|
20
23
|
"Programming Language :: Python :: 3.13",
|
|
21
24
|
"Programming Language :: Python :: 3.14",
|
|
22
25
|
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
|
|
26
|
+
"License :: OSI Approved :: MIT License",
|
|
23
27
|
"Operating System :: OS Independent",
|
|
24
28
|
"Intended Audience :: End Users/Desktop",
|
|
25
29
|
"Intended Audience :: Developers", # library and documentation
|
|
@@ -52,13 +56,15 @@ pdflinkcheck = "pdflinkcheck.cli:app"
|
|
|
52
56
|
|
|
53
57
|
[project.optional-dependencies]
|
|
54
58
|
# This allows users to do: pip install pdflinkcheck[full]
|
|
59
|
+
# If you choose to include PyMuPDF, you must comply with the AGPL3
|
|
55
60
|
full = [
|
|
56
61
|
#"pymupdf>=1.26.7 ; platform_system == 'Linux' and platform_machine != 'aarch64'" # to avoid on termux
|
|
57
62
|
"pymupdf>=1.26.7" # let them try
|
|
58
63
|
]
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
64
|
+
#mobilegui = [
|
|
65
|
+
# "kivy>=2.3.1",
|
|
66
|
+
# "kivymd",
|
|
67
|
+
#]
|
|
62
68
|
|
|
63
69
|
[dependency-groups]
|
|
64
70
|
dev = [
|
|
@@ -68,31 +74,22 @@ dev = [
|
|
|
68
74
|
"ruff>=0.7.0 ; platform_system == 'Linux' and platform_machine != 'aarch64'", # to avoid on termux
|
|
69
75
|
"pytest>=8.0.0",
|
|
70
76
|
"pytest-cov>=4.1.0",
|
|
71
|
-
"sv-ttk>=2.6.1",
|
|
72
77
|
]
|
|
73
78
|
|
|
74
79
|
[build-system]
|
|
75
80
|
requires = ["uv_build"]
|
|
76
81
|
build-backend = "uv_build"
|
|
77
82
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
#data
|
|
83
|
+
[tool.uv.sources]
|
|
84
|
+
pdflinkcheck = { path = "src/pdflinkcheck" }
|
|
85
|
+
kivymd = { git = "https://github.com/kivymd/KivyMD.git" }
|
|
86
|
+
|
|
87
|
+
# https://docs.astral.sh/uv/concepts/preview/#available-preview-features
|
|
88
|
+
#[tool.uv]
|
|
89
|
+
#preview = true
|
|
90
|
+
|
|
91
|
+
# uv handles the data path automatically
|
|
87
92
|
|
|
88
|
-
#[tool.hatch.build.targets.wheel.force-include]
|
|
89
|
-
#"pyproject.toml" = "pdflinkcheck/data/pyproject.toml"
|
|
90
93
|
|
|
91
|
-
#[tool.hatch.build.targets.sdist]
|
|
92
|
-
#include = [
|
|
93
|
-
# "pyproject.toml",
|
|
94
|
-
# "src/pdflinkcheck/data/LICENSE",
|
|
95
|
-
# "src/pdflinkcheck/data/README.md",
|
|
96
|
-
#]
|
|
97
94
|
|
|
98
95
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|