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.
- {webchanges-3.25.0 → webchanges-3.27.0}/LICENSE +1 -1
- {webchanges-3.25.0/webchanges.egg-info → webchanges-3.27.0}/PKG-INFO +77 -69
- {webchanges-3.25.0 → webchanges-3.27.0}/README.rst +61 -58
- {webchanges-3.25.0 → webchanges-3.27.0}/pyproject.toml +22 -18
- webchanges-3.27.0/requirements.txt +11 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/__init__.py +3 -5
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/headers.py +7 -13
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/packaging_version.py +18 -23
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/cli.py +46 -19
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/command.py +140 -74
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/config.py +44 -27
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/differs.py +404 -181
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/filters.py +108 -174
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/handler.py +143 -64
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/jobs.py +224 -162
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/mailer.py +9 -12
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/main.py +2 -3
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/reporters.py +197 -94
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/storage.py +76 -68
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/storage_minidb.py +9 -9
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/util.py +33 -19
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/worker.py +56 -47
- {webchanges-3.25.0 → webchanges-3.27.0/webchanges.egg-info}/PKG-INFO +77 -69
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/requires.txt +6 -3
- webchanges-3.25.0/requirements.txt +0 -11
- {webchanges-3.25.0 → webchanges-3.27.0}/MANIFEST.in +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/setup.cfg +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/_vendored/__init__.py +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges/py.typed +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/SOURCES.txt +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/dependency_links.txt +0 -0
- {webchanges-3.25.0 → webchanges-3.27.0}/webchanges.egg-info/entry_points.txt +0 -0
- {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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: webchanges
|
|
3
|
-
Version: 3.
|
|
4
|
-
Summary:
|
|
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:
|
|
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
|
-
|
|
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;
|
|
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;
|
|
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
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
188
|
-
Python versions
|
|
189
|
-
|
|
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
|
|
208
|
-
<https://github.com/yubiuser/webchanges-docker>`__
|
|
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
|
|
242
|
-
|
|
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
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
282
|
-
`
|
|
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>`__.
|
|
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.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
*
|
|
299
|
-
|
|
300
|
-
*
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
*
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
*
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
*
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
26
|
-
Python versions
|
|
27
|
-
|
|
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
|
|
46
|
-
<https://github.com/yubiuser/webchanges-docker>`__
|
|
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
|
|
80
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
-
|
|
120
|
-
`
|
|
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>`__.
|
|
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.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
*
|
|
137
|
-
|
|
138
|
-
*
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
*
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
*
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
*
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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.
|
|
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
|
-
'
|
|
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 = ['
|
|
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
|
-
#
|
|
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
|
-
|
|
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 = '
|
|
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
|
|
@@ -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,
|
|
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
|
+
__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()
|