webchanges 3.25.0__tar.gz → 3.27.0__tar.gz

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.
Files changed (33) hide show
  1. {webchanges-3.25.0 → webchanges-3.27.0}/LICENSE +1 -1
  2. {webchanges-3.25.0/webchanges.egg-info → webchanges-3.27.0}/PKG-INFO +77 -69
  3. {webchanges-3.25.0 → webchanges-3.27.0}/README.rst +61 -58
  4. {webchanges-3.25.0 → webchanges-3.27.0}/pyproject.toml +22 -18
  5. webchanges-3.27.0/requirements.txt +11 -0
  6. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/__init__.py +3 -5
  7. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/headers.py +7 -13
  8. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/packaging_version.py +18 -23
  9. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/cli.py +46 -19
  10. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/command.py +140 -74
  11. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/config.py +44 -27
  12. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/differs.py +404 -181
  13. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/filters.py +108 -174
  14. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/handler.py +143 -64
  15. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/jobs.py +224 -162
  16. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/mailer.py +9 -12
  17. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/main.py +2 -3
  18. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/reporters.py +197 -94
  19. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/storage.py +76 -68
  20. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/storage_minidb.py +9 -9
  21. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/util.py +33 -19
  22. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/worker.py +56 -47
  23. {webchanges-3.25.0 → webchanges-3.27.0/webchanges.egg-info}/PKG-INFO +77 -69
  24. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/requires.txt +6 -3
  25. webchanges-3.25.0/requirements.txt +0 -11
  26. {webchanges-3.25.0 → webchanges-3.27.0}/MANIFEST.in +0 -0
  27. {webchanges-3.25.0 → webchanges-3.27.0}/setup.cfg +0 -0
  28. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/__init__.py +0 -0
  29. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/py.typed +0 -0
  30. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/SOURCES.txt +0 -0
  31. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/dependency_links.txt +0 -0
  32. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/entry_points.txt +0 -0
  33. {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/top_level.txt +0 -0
@@ -28,7 +28,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
28
  SOURCE CODE REDISTRIBUTION NOTICE
29
29
  (urlwatch by Thomas Perl)
30
30
 
31
- This software redistributes source code of release 2.21 dated 30 July 2020 of
31
+ This software redistributes source code of release 2.21, dated 30 July 2020, of
32
32
  urlwatch
33
33
  https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f,
34
34
  which is subject to the following copyright notice and license (from
@@ -1,7 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: webchanges
3
- Version: 3.25.0
4
- Summary: Check web (or command output) for changes since last run and notify. Anonymously alerts you of web changes, with
3
+ Version: 3.27.0
4
+ Summary: Web Changes Delivered. AI-Summarized. Totally Anonymous.
5
5
  Author-email: Mike Borsetti <mike+webchanges@borsetti.com>
6
6
  Maintainer-email: Mike Borsetti <mike+webchanges@borsetti.com>
7
7
  License: ========
@@ -34,7 +34,7 @@ License: ========
34
34
  SOURCE CODE REDISTRIBUTION NOTICE
35
35
  (urlwatch by Thomas Perl)
36
36
 
37
- This software redistributes source code of release 2.21 dated 30 July 2020 of
37
+ This software redistributes source code of release 2.21, dated 30 July 2020, of
38
38
  urlwatch
39
39
  https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f,
40
40
  which is subject to the following copyright notice and license (from
@@ -80,6 +80,7 @@ Classifier: Environment :: Console
80
80
  Classifier: Topic :: Internet
81
81
  Classifier: Topic :: Internet :: WWW/HTTP
82
82
  Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
83
+ Classifier: Topic :: System :: Monitoring
83
84
  Classifier: Topic :: Utilities
84
85
  Classifier: Development Status :: 5 - Production/Stable
85
86
  Classifier: License :: OSI Approved :: MIT License
@@ -87,30 +88,32 @@ Classifier: License :: OSI Approved :: BSD License
87
88
  Classifier: Programming Language :: Python
88
89
  Classifier: Programming Language :: Python :: 3
89
90
  Classifier: Programming Language :: Python :: 3 :: Only
90
- Classifier: Programming Language :: Python :: 3.9
91
91
  Classifier: Programming Language :: Python :: 3.10
92
92
  Classifier: Programming Language :: Python :: 3.11
93
93
  Classifier: Programming Language :: Python :: 3.12
94
+ Classifier: Programming Language :: Python :: 3.13
94
95
  Classifier: Programming Language :: Python :: Implementation :: CPython
95
96
  Classifier: Operating System :: OS Independent
96
- Classifier: Natural Language :: English
97
+ Classifier: Environment :: Console
97
98
  Classifier: Intended Audience :: End Users/Desktop
98
99
  Classifier: Intended Audience :: System Administrators
99
100
  Classifier: Intended Audience :: Developers
100
- Requires-Python: >=3.9
101
+ Classifier: Natural Language :: English
102
+ Classifier: Typing :: Typed
103
+ Requires-Python: >=3.10
101
104
  Description-Content-Type: text/x-rst
102
105
  License-File: LICENSE
103
- Requires-Dist: colorama; os_name == "nt"
106
+ Requires-Dist: colorama; sys_platform == "win32"
104
107
  Requires-Dist: cssselect
105
108
  Requires-Dist: h2
106
109
  Requires-Dist: html2text
107
110
  Requires-Dist: httpx
108
- Requires-Dist: lxml
111
+ Requires-Dist: lxml>=5.3.0
109
112
  Requires-Dist: markdown2
110
113
  Requires-Dist: msgpack
111
114
  Requires-Dist: platformdirs
112
115
  Requires-Dist: pyyaml
113
- Requires-Dist: tzdata; os_name == "nt"
116
+ Requires-Dist: tzdata; sys_platform == "win32"
114
117
  Provides-Extra: use-browser
115
118
  Requires-Dist: playwright; extra == "use-browser"
116
119
  Requires-Dist: psutil; extra == "use-browser"
@@ -157,8 +160,10 @@ Provides-Extra: requests
157
160
  Requires-Dist: requests; extra == "requests"
158
161
  Provides-Extra: safe-password
159
162
  Requires-Dist: keyring; extra == "safe-password"
163
+ Provides-Extra: zstd
164
+ Requires-Dist: zstandard; extra == "zstd"
160
165
  Provides-Extra: all
161
- Requires-Dist: webchanges[beautify,bs4,deepdiff_xml,html5lib,ical2text,imagediff,jq,matrix,ocr,pdf2text,pushbullet,pushover,pypdf_crypto,redis,requests,safe_password,use_browser,xmpp]; extra == "all"
166
+ Requires-Dist: webchanges[beautify,bs4,deepdiff_xml,html5lib,ical2text,imagediff,jq,matrix,ocr,pdf2text,pushbullet,pushover,pypdf_crypto,redis,requests,safe_password,use_browser,xmpp,zstd]; extra == "all"
162
167
 
163
168
  .. role:: underline
164
169
  :class: underline
@@ -171,22 +176,18 @@ Requires-Dist: webchanges[beautify,bs4,deepdiff_xml,html5lib,ical2text,imagediff
171
176
  webchanges |downloads|
172
177
  ======================
173
178
 
174
- **webchanges** checks web content including images, and notifies you via email (or one of many other `supported
175
- services <https://webchanges.readthedocs.io/en/stable/introduction.html#reporters-list>`__) if a change is detected.
176
- **webchanges** can also check the output of local commands. The notification includes a detail of what has changed
177
- ("diff"), with an optional summary generated by AI (BETA).
178
-
179
- **webchanges** *anonymously* alerts you of web changes.
180
-
179
+ **webchanges** *anonymously* checks web content (including images) and commands for changes, delivering instant
180
+ notifications and AI-powered summaries to your favorite `platform
181
+ <https://webchanges.readthedocs.io/en/stable/introduction.html#reporters-list>`__.
181
182
 
182
183
 
183
184
  Requirements
184
185
  ============
185
186
  **webchanges** requires |support|.
186
187
 
187
- You should use the latest version of `Python <https://www.python.org/downloads/>`__ if possible, but older
188
- Python versions are supported for 3 years after being obsoleted by a new major release (3.x). For each major release,
189
- only the latest bug and security fix version (3.x.y) is supported.
188
+ For the best experience, use the current version of `Python <https://www.python.org/downloads/>`__. We also support
189
+ older Python versions for 3 years after they're replaced by a newer one; we just ask that you use the most up-to-date
190
+ bug and security fix release from that older version.
190
191
 
191
192
  For Generative AI summaries (BETA), you need a free `API Key from Google Cloud AI Studio
192
193
  <https://aistudio.google.com/app/apikey>`__ (see `here
@@ -201,11 +202,10 @@ Install **webchanges** |pypi_version| |format| |status| |security| with:
201
202
 
202
203
  pip install webchanges
203
204
 
204
-
205
205
  Running in Docker
206
- =================
207
- **webchanges** can be run in a `Docker <https://www.docker.com/>`__ container. Please see `here
208
- <https://github.com/yubiuser/webchanges-docker>`__ for one such implementation.
206
+ -----------------
207
+ **webchanges** can easily run in a container; you can find a `Docker <https://www.docker.com/>`__ implementation
208
+ `here <https://github.com/yubiuser/webchanges-docker>`__.
209
209
 
210
210
 
211
211
  Documentation |readthedocs|
@@ -225,7 +225,6 @@ Initialize
225
225
 
226
226
  webchanges --edit
227
227
 
228
-
229
228
  #. Run the following command to change the default `configuration
230
229
  <https://webchanges.readthedocs.io/en/stable/configuration.html>`__, e.g. to receive change notifications
231
230
  ("`reports <https://webchanges.readthedocs.io/en/stable/reporters.html>`__")
@@ -235,26 +234,27 @@ Initialize
235
234
 
236
235
  webchanges --edit-config
237
236
 
238
-
239
237
  Run
240
238
  ---
241
- To check the sources in your jobs and report on (e.g. display or via email) any changes found from the previous
242
- execution, just run:
239
+ To check the sources in your jobs and report on (e.g. display or via email) any changes found from the last time the
240
+ program ran, just run:
243
241
 
244
242
  .. code-block:: bash
245
243
 
246
244
  webchanges
247
245
 
248
- **webchanges** does not include a scheduler. We recommend using a system scheduler to automatically run **webchanges**
249
- periodically:
250
246
 
251
- - On Linux or macOS, you can use cron (if you have never used cron before, see
252
- `here <https://www.computerhope.com/unix/ucrontab.htm>`__); `crontab.guru <https://crontab.guru>`__ will build a
253
- schedule expression for you.
254
- - On macOS, you can use `launchd <https://developer.apple
255
- .com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html>`__
256
- - On Windows, you can use the built-in `Windows Task Scheduler
257
- <https://en.wikipedia.org/wiki/Windows_Task_Scheduler>`__.
247
+ Schedule
248
+ --------
249
+ **webchanges** leverages the power of a system scheduler:
250
+
251
+ - On Linux you can use cron, and a tool like `crontab.guru <https://crontab.guru>`__ can build a
252
+ schedule expression for you (note: see `here <https://www.computerhope.com/unix/ucrontab.htm>`__ if you have never
253
+ used cron before);
254
+ - On Windows you can use `Windows Task Scheduler <https://en.wikipedia.org/wiki/Windows_Task_Scheduler>`__;
255
+ - On macOS you can use `launchd <https://developer.apple
256
+ .com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html>`__ (note: see `here
257
+ <https://launchd.info/>`__ if you have never used launchd before).
258
258
 
259
259
 
260
260
  Code
@@ -278,44 +278,52 @@ License
278
278
  =======
279
279
  |license|
280
280
 
281
- Released under the `MIT License <https://opensource.org/licenses/MIT>`__ but redistributing modified source code from
282
- `urlwatch 2.21 <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020
281
+ See the `complete licenses <https://raw.githubusercontent.com/mborsetti/webchanges/refs/heads/main/LICENSE>`__ (released
282
+ under the `MIT License <https://opensource.org/licenses/MIT>`__ but redistributing modified source code, dated 30
283
+ July 2020, from `urlwatch 2.21 <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__
283
284
  licensed under a `BSD 3-Clause License
284
- <https://raw.githubusercontent.com/thp/urlwatch/346b25914b0418342ffe2fb0529bed702fddc01f/COPYING>`__. See the complete
285
- license `here <https://github.com/mborsetti/webchanges/blob/main/LICENSE>`__.
285
+ <https://raw.githubusercontent.com/thp/urlwatch/346b25914b0418342ffe2fb0529bed702fddc01f/COPYING>`__).
286
286
 
287
287
 
288
288
  Compatibility with and improvements from **urlwatch**
289
289
  =====================================================
290
290
 
291
291
  This project is based on code from `urlwatch 2.21
292
- <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020. You can
293
- easily upgrade to **webchanges** from the current version of **urlwatch** using the same job and configuration files
294
- (see `here <https://webchanges.readthedocs.io/en/stable/migration.html>`__) and benefit from many improvements,
295
- including:
296
-
297
- * Summary of changes in plain text using Generative AI, useful for long, boring, legal documents;
298
- * Depicting changes to an image;
299
- * Element-by-element changes of JSON or XML data;
300
- * Much better `documentation <https://webchanges.readthedocs.io/>`__;
301
- * Many improvements to HTML reports, including:
302
-
303
- * Links that are `clickable <https://pypi.org/project/webchanges/>`__!
304
- * Retaining of original formatting such as **bolding / headers**, *italics*, :underline:`underlining`, list bullets
305
- (•) and indentation;
306
- * :additions:`Added` and :deletions:`deleted` lines clearly highlighted by color and strikethrough, and long lines
307
- that wrap around;
308
- * Correct rendering by email clients who override stylesheets (e.g. Gmail);
309
- * Other legibility improvements;
310
-
311
- * New filters such as `additions_only <https://webchanges.readthedocs.io/en/stable/diff_filters.html#additions-only>`__,
312
- which makes it easier to track content that was added without the distractions of the content that was deleted;
313
- * New command line arguments such as ``--errors`` to catch jobs that no longer work;
314
- * More reliability and stability, including a ~30 percentage point increase in testing coverage;
315
- * Many other additions, refinements and fixes (see `detailed information
316
- <https://webchanges.readthedocs.io/en/stable/migration.html#upgrade-details>`__).
317
-
318
- Examples:
292
+ <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020.
293
+
294
+ You can easily upgrade to **webchanges** from the current version of **urlwatch** using the same job and
295
+ configuration files (see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__) and benefit from many
296
+ improvements, including:
297
+
298
+ * :underline:`AI-Powered Summaries`: Summary of changes in plain text using generative AI, useful for long documents
299
+ (e.g. legal);
300
+ * :underline:`Image Change Detection`: Monitor changes to images and receive notifications with an image highlighting
301
+ the differences;
302
+ * :underline:`Structured Data Monitoring`: Track changes in JSON or XML data on an element-by-element basis;
303
+ * :underline:`Improved Documentation`: We've revamped the `documentation <https://webchanges.readthedocs.io/>`__ to make
304
+ implementation easier;
305
+ * :underline:`Enhanced HTML Reports`: HTML reports are now much clearer and include:
306
+
307
+ * Clickable links!
308
+ * Retention of most original formatting (**bolding / headers**, *italics*, :underline:`underlining`, lists with
309
+ bullets (•), and indentation;
310
+ * :additions:`added` and :deletions:`deleted` lines clearly highlighted with color and strikethrough;
311
+ * Wrapping of long lines (instead of truncation);
312
+ * Improved compatibility with a wider range of HTML email clients, including those that override stylesheets (e.g.,
313
+ Gmail);
314
+ * General legibility improvements.
315
+
316
+ * :underline:`New Filtering Options`: New filters, like `additions_only
317
+ <https://webchanges.readthedocs.io/en/stable/diff_filters.html#additions-only>`__, which allows you to focus on
318
+ added content without the distraction of deletions;
319
+ * :underline:`New Command Line Arguments`: New command-line arguments such as ``--errors``, which helps you identify
320
+ jobs that are no longer functioning correctly;
321
+ * :underline:`Increased Reliability and Stability`: Testing coverage has increased by approximately 30 percentage
322
+ points;
323
+ * :underline:`Additional Enhancements`: Numerous other additions, refinements, and bug fixes have been implemented.
324
+ For more information, see `here <https://webchanges.readthedocs.io/en/stable/migration.html#upgrade-details>`__.
325
+
326
+ Example enhancements to HTML reporting:
319
327
 
320
328
  .. image:: https://raw.githubusercontent.com/mborsetti/webchanges/main/docs/html_diff_filters_example_1.png
321
329
  :width: 504
@@ -9,22 +9,18 @@
9
9
  webchanges |downloads|
10
10
  ======================
11
11
 
12
- **webchanges** checks web content including images, and notifies you via email (or one of many other `supported
13
- services <https://webchanges.readthedocs.io/en/stable/introduction.html#reporters-list>`__) if a change is detected.
14
- **webchanges** can also check the output of local commands. The notification includes a detail of what has changed
15
- ("diff"), with an optional summary generated by AI (BETA).
16
-
17
- **webchanges** *anonymously* alerts you of web changes.
18
-
12
+ **webchanges** *anonymously* checks web content (including images) and commands for changes, delivering instant
13
+ notifications and AI-powered summaries to your favorite `platform
14
+ <https://webchanges.readthedocs.io/en/stable/introduction.html#reporters-list>`__.
19
15
 
20
16
 
21
17
  Requirements
22
18
  ============
23
19
  **webchanges** requires |support|.
24
20
 
25
- You should use the latest version of `Python <https://www.python.org/downloads/>`__ if possible, but older
26
- Python versions are supported for 3 years after being obsoleted by a new major release (3.x). For each major release,
27
- only the latest bug and security fix version (3.x.y) is supported.
21
+ For the best experience, use the current version of `Python <https://www.python.org/downloads/>`__. We also support
22
+ older Python versions for 3 years after they're replaced by a newer one; we just ask that you use the most up-to-date
23
+ bug and security fix release from that older version.
28
24
 
29
25
  For Generative AI summaries (BETA), you need a free `API Key from Google Cloud AI Studio
30
26
  <https://aistudio.google.com/app/apikey>`__ (see `here
@@ -39,11 +35,10 @@ Install **webchanges** |pypi_version| |format| |status| |security| with:
39
35
 
40
36
  pip install webchanges
41
37
 
42
-
43
38
  Running in Docker
44
- =================
45
- **webchanges** can be run in a `Docker <https://www.docker.com/>`__ container. Please see `here
46
- <https://github.com/yubiuser/webchanges-docker>`__ for one such implementation.
39
+ -----------------
40
+ **webchanges** can easily run in a container; you can find a `Docker <https://www.docker.com/>`__ implementation
41
+ `here <https://github.com/yubiuser/webchanges-docker>`__.
47
42
 
48
43
 
49
44
  Documentation |readthedocs|
@@ -63,7 +58,6 @@ Initialize
63
58
 
64
59
  webchanges --edit
65
60
 
66
-
67
61
  #. Run the following command to change the default `configuration
68
62
  <https://webchanges.readthedocs.io/en/stable/configuration.html>`__, e.g. to receive change notifications
69
63
  ("`reports <https://webchanges.readthedocs.io/en/stable/reporters.html>`__")
@@ -73,26 +67,27 @@ Initialize
73
67
 
74
68
  webchanges --edit-config
75
69
 
76
-
77
70
  Run
78
71
  ---
79
- To check the sources in your jobs and report on (e.g. display or via email) any changes found from the previous
80
- execution, just run:
72
+ To check the sources in your jobs and report on (e.g. display or via email) any changes found from the last time the
73
+ program ran, just run:
81
74
 
82
75
  .. code-block:: bash
83
76
 
84
77
  webchanges
85
78
 
86
- **webchanges** does not include a scheduler. We recommend using a system scheduler to automatically run **webchanges**
87
- periodically:
88
79
 
89
- - On Linux or macOS, you can use cron (if you have never used cron before, see
90
- `here <https://www.computerhope.com/unix/ucrontab.htm>`__); `crontab.guru <https://crontab.guru>`__ will build a
91
- schedule expression for you.
92
- - On macOS, you can use `launchd <https://developer.apple
93
- .com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html>`__
94
- - On Windows, you can use the built-in `Windows Task Scheduler
95
- <https://en.wikipedia.org/wiki/Windows_Task_Scheduler>`__.
80
+ Schedule
81
+ --------
82
+ **webchanges** leverages the power of a system scheduler:
83
+
84
+ - On Linux you can use cron, and a tool like `crontab.guru <https://crontab.guru>`__ can build a
85
+ schedule expression for you (note: see `here <https://www.computerhope.com/unix/ucrontab.htm>`__ if you have never
86
+ used cron before);
87
+ - On Windows you can use `Windows Task Scheduler <https://en.wikipedia.org/wiki/Windows_Task_Scheduler>`__;
88
+ - On macOS you can use `launchd <https://developer.apple
89
+ .com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/ScheduledJobs.html>`__ (note: see `here
90
+ <https://launchd.info/>`__ if you have never used launchd before).
96
91
 
97
92
 
98
93
  Code
@@ -116,44 +111,52 @@ License
116
111
  =======
117
112
  |license|
118
113
 
119
- Released under the `MIT License <https://opensource.org/licenses/MIT>`__ but redistributing modified source code from
120
- `urlwatch 2.21 <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020
114
+ See the `complete licenses <https://raw.githubusercontent.com/mborsetti/webchanges/refs/heads/main/LICENSE>`__ (released
115
+ under the `MIT License <https://opensource.org/licenses/MIT>`__ but redistributing modified source code, dated 30
116
+ July 2020, from `urlwatch 2.21 <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__
121
117
  licensed under a `BSD 3-Clause License
122
- <https://raw.githubusercontent.com/thp/urlwatch/346b25914b0418342ffe2fb0529bed702fddc01f/COPYING>`__. See the complete
123
- license `here <https://github.com/mborsetti/webchanges/blob/main/LICENSE>`__.
118
+ <https://raw.githubusercontent.com/thp/urlwatch/346b25914b0418342ffe2fb0529bed702fddc01f/COPYING>`__).
124
119
 
125
120
 
126
121
  Compatibility with and improvements from **urlwatch**
127
122
  =====================================================
128
123
 
129
124
  This project is based on code from `urlwatch 2.21
130
- <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020. You can
131
- easily upgrade to **webchanges** from the current version of **urlwatch** using the same job and configuration files
132
- (see `here <https://webchanges.readthedocs.io/en/stable/migration.html>`__) and benefit from many improvements,
133
- including:
134
-
135
- * Summary of changes in plain text using Generative AI, useful for long, boring, legal documents;
136
- * Depicting changes to an image;
137
- * Element-by-element changes of JSON or XML data;
138
- * Much better `documentation <https://webchanges.readthedocs.io/>`__;
139
- * Many improvements to HTML reports, including:
140
-
141
- * Links that are `clickable <https://pypi.org/project/webchanges/>`__!
142
- * Retaining of original formatting such as **bolding / headers**, *italics*, :underline:`underlining`, list bullets
143
- (•) and indentation;
144
- * :additions:`Added` and :deletions:`deleted` lines clearly highlighted by color and strikethrough, and long lines
145
- that wrap around;
146
- * Correct rendering by email clients who override stylesheets (e.g. Gmail);
147
- * Other legibility improvements;
148
-
149
- * New filters such as `additions_only <https://webchanges.readthedocs.io/en/stable/diff_filters.html#additions-only>`__,
150
- which makes it easier to track content that was added without the distractions of the content that was deleted;
151
- * New command line arguments such as ``--errors`` to catch jobs that no longer work;
152
- * More reliability and stability, including a ~30 percentage point increase in testing coverage;
153
- * Many other additions, refinements and fixes (see `detailed information
154
- <https://webchanges.readthedocs.io/en/stable/migration.html#upgrade-details>`__).
155
-
156
- Examples:
125
+ <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020.
126
+
127
+ You can easily upgrade to **webchanges** from the current version of **urlwatch** using the same job and
128
+ configuration files (see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__) and benefit from many
129
+ improvements, including:
130
+
131
+ * :underline:`AI-Powered Summaries`: Summary of changes in plain text using generative AI, useful for long documents
132
+ (e.g. legal);
133
+ * :underline:`Image Change Detection`: Monitor changes to images and receive notifications with an image highlighting
134
+ the differences;
135
+ * :underline:`Structured Data Monitoring`: Track changes in JSON or XML data on an element-by-element basis;
136
+ * :underline:`Improved Documentation`: We've revamped the `documentation <https://webchanges.readthedocs.io/>`__ to make
137
+ implementation easier;
138
+ * :underline:`Enhanced HTML Reports`: HTML reports are now much clearer and include:
139
+
140
+ * Clickable links!
141
+ * Retention of most original formatting (**bolding / headers**, *italics*, :underline:`underlining`, lists with
142
+ bullets (•), and indentation;
143
+ * :additions:`added` and :deletions:`deleted` lines clearly highlighted with color and strikethrough;
144
+ * Wrapping of long lines (instead of truncation);
145
+ * Improved compatibility with a wider range of HTML email clients, including those that override stylesheets (e.g.,
146
+ Gmail);
147
+ * General legibility improvements.
148
+
149
+ * :underline:`New Filtering Options`: New filters, like `additions_only
150
+ <https://webchanges.readthedocs.io/en/stable/diff_filters.html#additions-only>`__, which allows you to focus on
151
+ added content without the distraction of deletions;
152
+ * :underline:`New Command Line Arguments`: New command-line arguments such as ``--errors``, which helps you identify
153
+ jobs that are no longer functioning correctly;
154
+ * :underline:`Increased Reliability and Stability`: Testing coverage has increased by approximately 30 percentage
155
+ points;
156
+ * :underline:`Additional Enhancements`: Numerous other additions, refinements, and bug fixes have been implemented.
157
+ For more information, see `here <https://webchanges.readthedocs.io/en/stable/migration.html#upgrade-details>`__.
158
+
159
+ Example enhancements to HTML reporting:
157
160
 
158
161
  .. image:: https://raw.githubusercontent.com/mborsetti/webchanges/main/docs/html_diff_filters_example_1.png
159
162
  :width: 504
@@ -14,12 +14,9 @@ build-backend = "setuptools.build_meta"
14
14
  # See https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
15
15
  dynamic = ['version', 'dependencies']
16
16
  name = 'webchanges'
17
- description = """\
18
- Check web (or command output) for changes since last run and notify. Anonymously alerts you of web changes, with
19
- Gen AI summaries (BETA).\
20
- """
17
+ description = 'Web Changes Delivered. AI-Summarized. Totally Anonymous.'
21
18
  readme = { file = 'README.rst', content-type = 'text/x-rst' }
22
- requires-python = '>=3.9'
19
+ requires-python = '>=3.10'
23
20
  license = {file = 'LICENSE'}
24
21
  authors = [
25
22
  {name = 'Mike Borsetti', email = 'mike+webchanges@borsetti.com'},
@@ -33,6 +30,7 @@ classifiers = [
33
30
  'Topic :: Internet',
34
31
  'Topic :: Internet :: WWW/HTTP',
35
32
  'Topic :: Internet :: WWW/HTTP :: Indexing/Search',
33
+ 'Topic :: System :: Monitoring',
36
34
  'Topic :: Utilities',
37
35
  'Development Status :: 5 - Production/Stable',
38
36
  'License :: OSI Approved :: MIT License',
@@ -40,16 +38,18 @@ classifiers = [
40
38
  'Programming Language :: Python',
41
39
  'Programming Language :: Python :: 3',
42
40
  'Programming Language :: Python :: 3 :: Only',
43
- 'Programming Language :: Python :: 3.9',
44
41
  'Programming Language :: Python :: 3.10',
45
42
  'Programming Language :: Python :: 3.11',
46
43
  'Programming Language :: Python :: 3.12',
44
+ 'Programming Language :: Python :: 3.13',
47
45
  'Programming Language :: Python :: Implementation :: CPython',
48
46
  'Operating System :: OS Independent',
49
- 'Natural Language :: English',
47
+ 'Environment :: Console',
50
48
  'Intended Audience :: End Users/Desktop',
51
49
  'Intended Audience :: System Administrators',
52
50
  'Intended Audience :: Developers',
51
+ 'Natural Language :: English',
52
+ 'Typing :: Typed',
53
53
  ]
54
54
 
55
55
  [project.urls]
@@ -90,8 +90,9 @@ xmpp = ['aioxmpp']
90
90
  redis = ['redis']
91
91
  requests = ['requests']
92
92
  safe_password = ['keyring']
93
+ zstd = ['zstandard']
93
94
  all = [
94
- 'webchanges[use_browser,beautify,bs4,html5lib,ical2text,jq,ocr,pdf2text,pypdf_crypto,deepdiff_xml,imagediff,matrix,pushbullet,pushover,xmpp,redis,requests,safe_password]'
95
+ 'webchanges[use_browser,beautify,bs4,html5lib,ical2text,jq,ocr,pdf2text,pypdf_crypto,deepdiff_xml,imagediff,matrix,pushbullet,pushover,xmpp,redis,requests,safe_password,zstd]'
95
96
  ]
96
97
 
97
98
 
@@ -155,7 +156,7 @@ color_output = true
155
156
  [tool.black]
156
157
  # What's in here overrides the command-line options shown by running $ black --help.
157
158
  line_length = 120
158
- target_version = ['py39']
159
+ target_version = ['py310']
159
160
  skip_string_normalization = true
160
161
  extend_exclude = '/(\.idea|\.pytest_cache|\__pycache__|\venv.*|\webchanges.egg-info)/'
161
162
  color = true
@@ -173,9 +174,6 @@ namespace_packages = false
173
174
  # Specifies the Python version used to parse and check the target program.
174
175
  # python_version = 3.12
175
176
 
176
- # Shows error codes in error messages.
177
- show_error_codes = true
178
-
179
177
  # Suppresses error messages about imports that cannot be resolved.
180
178
  ignore_missing_imports = true
181
179
 
@@ -188,22 +186,25 @@ disallow_untyped_defs = true
188
186
  # Reports an error whenever a function with type annotations is decorated with a decorator without annotations.
189
187
  disallow_untyped_decorators = true
190
188
 
191
- # Changes the treatment of arguments with a default value of None by not implicitly making their type Optional.
192
- no_implicit_optional = true
193
-
194
189
  # Warns about casting an expression to its inferred type.
195
190
  warn_redundant_casts = true
196
191
 
197
192
  # Warns about unneeded # type: ignore comments.
198
- # Disabled because it behaves differently in GitHub Actions than it does on Windows.
193
+ # May behave differently in GitHub Actions than it does on Windows.
199
194
  # warn_unused_ignores = true
200
195
 
201
196
  # Shows a warning when returning a value with type Any from a function declared with a non-Any return type.
202
- # warn_return_any = true
197
+ warn_return_any = true
203
198
 
204
199
  # Shows a warning when encountering any code inferred to be unreachable or redundant after performing type analysis.
205
200
  warn_unreachable = false
206
201
 
202
+ # Enables additional checks that are technically correct but may be impractical in real code.
203
+ extra_checks = true
204
+
205
+ # Shows documentation link to corresponding error code.
206
+ show_error_code_links = true
207
+
207
208
  # Use visually nicer output in error messages: use soft word wrap, show source code snippets, and show error location
208
209
  # markers.
209
210
  pretty = true
@@ -295,6 +296,8 @@ exclude_lines = [
295
296
  # Don't cover IDE code:
296
297
  'if TYPE_CHECKING:'
297
298
  ]
299
+ # Exclude entire files if they have a custom # pragma: exclude file remark
300
+ # exclude_also = '(?s)\A.*# pragma: exclude file.*\Z'
298
301
  # ignore_errors = true
299
302
 
300
303
 
@@ -305,11 +308,12 @@ exclude_lines = [
305
308
  log_auto_indent = true
306
309
  # Enable log display during test run (aka "live logging" https://docs.pytest.org/en/stable/logging.html#live-logs)
307
310
  log_cli = true
308
- minversion = '7.4.0'
311
+ minversion = '8.3.3'
309
312
  testpaths = ['tests']
310
313
 
311
314
  # the below is for pytest-asyncio (required due to Playwright)
312
315
  asyncio_mode = 'auto'
316
+ asyncio_default_fixture_loop_scope = 'function'
313
317
 
314
318
  # Adds pytest-cov functionality (see https://pytest-cov.readthedocs.io/en/latest/config.html)
315
319
  # Note: --cov moved to .github/workflows/ci-cd.yaml and tox.ini due to interference with PyCharm breakpoints (see
@@ -0,0 +1,11 @@
1
+ colorama; sys_platform == "win32"
2
+ cssselect
3
+ h2
4
+ html2text
5
+ httpx
6
+ lxml >= 5.3.0 # prior versions don't build in 3.13
7
+ markdown2
8
+ msgpack
9
+ platformdirs
10
+ pyyaml
11
+ tzdata; sys_platform == "win32"
@@ -12,7 +12,7 @@ supported services. Can check the output of local commands as well.
12
12
 
13
13
  from __future__ import annotations
14
14
 
15
- __min_python_version__ = (3, 9) # minimum version of Python required to run; supported until 5 October 2023
15
+ __min_python_version__ = (3, 10) # minimum version of Python required to run; supported until fall 2025
16
16
 
17
17
 
18
18
  __project_name__ = __package__
@@ -22,7 +22,7 @@ __project_name__ = __package__
22
22
  # * MINOR version when you add functionality in a backwards compatible manner, and
23
23
  # * MICRO or PATCH version when you make backwards compatible bug fixes. We no longer use '0'
24
24
  # If unsure on increments, use pkg_resources.parse_version to parse
25
- __version__ = '3.25.0'
25
+ __version__ = '3.27.0'
26
26
  __description__ = (
27
27
  'Check web (or command output) for changes since last run and notify.\n'
28
28
  '\n'
@@ -36,10 +36,8 @@ __code_url__ = f'https://github.com/mborsetti/{__project_name__}/'
36
36
  __docs_url__ = f'https://{__project_name__}.readthedocs.io/'
37
37
  __user_agent__ = f'{__project_name__}/{__version__} (+{__url__})'
38
38
 
39
- from typing import Union
40
39
 
41
-
42
- def init_data() -> dict[str, Union[str, tuple]]:
40
+ def init_data() -> dict[str, str | tuple]:
43
41
  """Returns dict of globals (used in testing).
44
42
 
45
43
  :returns: dict of globals()