webchanges 3.34.2__tar.gz → 3.36.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 (66) hide show
  1. webchanges-3.36.0/MANIFEST.in +5 -0
  2. {webchanges-3.34.2/webchanges.egg-info → webchanges-3.36.0}/PKG-INFO +15 -11
  3. {webchanges-3.34.2 → webchanges-3.36.0}/README.rst +10 -9
  4. {webchanges-3.34.2 → webchanges-3.36.0}/pyproject.toml +9 -2
  5. {webchanges-3.34.2 → webchanges-3.36.0}/requirements.txt +1 -0
  6. webchanges-3.36.0/setup.py +17 -0
  7. webchanges-3.36.0/tools/get_manpages_parser.py +19 -0
  8. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/__init__.py +1 -1
  9. webchanges-3.36.0/webchanges/_resources/config.schema.json +933 -0
  10. webchanges-3.36.0/webchanges/_resources/jobs.schema.json +1363 -0
  11. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/_vendored/headers.py +2 -6
  12. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/_vendored/packaging_version.py +1 -1
  13. webchanges-3.36.0/webchanges/_vendored/typeguard.py +1441 -0
  14. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/cli.py +59 -2
  15. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/command.py +77 -21
  16. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/config.py +85 -20
  17. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/differs.py +44 -6
  18. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_html.py +4 -4
  19. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_shell.py +4 -1
  20. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/handler.py +1 -1
  21. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/_base.py +37 -7
  22. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/_browser.py +34 -16
  23. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/_url.py +343 -46
  24. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/main.py +8 -3
  25. webchanges-3.36.0/webchanges/py.typed +0 -0
  26. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_base.py +2 -2
  27. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_base.py +16 -1
  28. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_config.py +2 -2
  29. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_yaml.py +38 -11
  30. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/worker.py +18 -7
  31. {webchanges-3.34.2 → webchanges-3.36.0/webchanges.egg-info}/PKG-INFO +15 -11
  32. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges.egg-info/SOURCES.txt +6 -0
  33. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges.egg-info/requires.txt +5 -1
  34. webchanges-3.34.2/MANIFEST.in +0 -3
  35. {webchanges-3.34.2 → webchanges-3.36.0}/LICENSE.md +0 -0
  36. {webchanges-3.34.2 → webchanges-3.36.0}/setup.cfg +0 -0
  37. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/__main__.py +0 -0
  38. {webchanges-3.34.2/webchanges/_vendored → webchanges-3.36.0/webchanges/_resources}/__init__.py +0 -0
  39. /webchanges-3.34.2/webchanges/py.typed → /webchanges-3.36.0/webchanges/_vendored/__init__.py +0 -0
  40. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/__init__.py +0 -0
  41. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_base.py +0 -0
  42. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_document.py +0 -0
  43. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_encoding.py +0 -0
  44. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/filters/_text.py +0 -0
  45. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/__init__.py +0 -0
  46. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/_exceptions.py +0 -0
  47. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/jobs/_shell.py +0 -0
  48. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/mailer.py +0 -0
  49. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/__init__.py +0 -0
  50. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_browser.py +0 -0
  51. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_chat.py +0 -0
  52. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_email.py +0 -0
  53. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_filter.py +0 -0
  54. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_stdout.py +0 -0
  55. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_system.py +0 -0
  56. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/reporters/_web.py +0 -0
  57. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/__init__.py +0 -0
  58. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_minidb.py +0 -0
  59. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_redis.py +0 -0
  60. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_sqlite3.py +0 -0
  61. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage/_ssdb.py +0 -0
  62. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/storage_minidb.py +0 -0
  63. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges/util.py +0 -0
  64. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges.egg-info/dependency_links.txt +0 -0
  65. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges.egg-info/entry_points.txt +0 -0
  66. {webchanges-3.34.2 → webchanges-3.36.0}/webchanges.egg-info/top_level.txt +0 -0
@@ -0,0 +1,5 @@
1
+ # https://packaging.python.org/en/latest/guides/using-manifest-in/
2
+ # do not include test files
3
+ prune tests
4
+ # needed at sdist build time by [tool.build_manpages] in pyproject.toml
5
+ include tools/get_manpages_parser.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webchanges
3
- Version: 3.34.2
3
+ Version: 3.36.0
4
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>
@@ -47,6 +47,7 @@ Requires-Dist: markdown2
47
47
  Requires-Dist: msgpack
48
48
  Requires-Dist: platformdirs
49
49
  Requires-Dist: pyyaml
50
+ Requires-Dist: typing-extensions
50
51
  Requires-Dist: tzdata; sys_platform == "win32"
51
52
  Requires-Dist: zstandard; python_version < "3.14"
52
53
  Provides-Extra: use-browser
@@ -89,6 +90,8 @@ Provides-Extra: pushover
89
90
  Requires-Dist: chump; extra == "pushover"
90
91
  Provides-Extra: xmpp
91
92
  Requires-Dist: aioxmpp; extra == "xmpp"
93
+ Provides-Extra: curl-cffi
94
+ Requires-Dist: curl_cffi; extra == "curl-cffi"
92
95
  Provides-Extra: redis
93
96
  Requires-Dist: redis; extra == "redis"
94
97
  Provides-Extra: requests
@@ -96,7 +99,7 @@ Requires-Dist: requests; extra == "requests"
96
99
  Provides-Extra: safe-password
97
100
  Requires-Dist: keyring; extra == "safe-password"
98
101
  Provides-Extra: all
99
- 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"
102
+ Requires-Dist: webchanges[beautify,bs4,curl_cffi,deepdiff_xml,html5lib,ical2text,imagediff,jq,matrix,ocr,pdf2text,pushbullet,pushover,pypdf_crypto,redis,requests,safe_password,use_browser,xmpp]; extra == "all"
100
103
  Dynamic: license-file
101
104
 
102
105
  .. role:: underline
@@ -139,7 +142,7 @@ Install **webchanges** with ``uv`` (recommended):
139
142
  .. code-block:: bash
140
143
 
141
144
  uv pip install webchanges
142
-
145
+
143
146
  or with ``pip``:
144
147
 
145
148
  .. code-block:: bash
@@ -154,13 +157,14 @@ implementation (no browser) `here <https://github.com/yubiuser/webchanges-docker
154
157
 
155
158
  As a GitHub Action
156
159
  ------------------
157
- **webchanges** can easily run as a `GitHub Action <https://www.docker.com/>`__! You will find an implementation
160
+ **webchanges** can easily run as a `GitHub Action <https://www.docker.com/>`__! You will find an implementation
158
161
  `here <https://github.com/swimmwatch/webchanges-action>`__.
159
162
 
160
163
 
161
164
  Documentation |readthedocs|
162
165
  ===========================
163
- The documentation is hosted on `Read the Docs <https://webchanges.readthedocs.io/>`__.
166
+ The documentation is hosted on `Read the Docs <https://webchanges.readthedocs.io/>`__. A (very good) AI-generated
167
+ high-level architectural overview is available on `DeepWiki <https://deepwiki.com/mborsetti/webchanges>`__.
164
168
 
165
169
 
166
170
  Quick Start
@@ -173,7 +177,7 @@ Initialize
173
177
 
174
178
  .. code-block:: bash
175
179
 
176
- webchanges --edit
180
+ webchanges --edit-jobs
177
181
 
178
182
  #. Run the following command to change the default `configuration
179
183
  <https://webchanges.readthedocs.io/en/stable/configuration.html>`__, e.g. to receive change notifications
@@ -208,7 +212,7 @@ Schedule
208
212
 
209
213
  Code
210
214
  ====
211
- |coveralls| |snyk| |issues| |code_style| |OpenSSF_Scorecard|
215
+ |coveralls| |issues| |code_style| |OpenSSF_Scorecard|
212
216
 
213
217
  The code, issues tracker, and discussions are hosted on `GitHub <https://github.com/mborsetti/webchanges>`__.
214
218
 
@@ -240,7 +244,7 @@ Compatibility with **urlwatch**
240
244
  This project is based on code from `urlwatch 2.21
241
245
  <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020.
242
246
  For upgrading from **urlwatch** to **webchanges** (using the same job and
243
- configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__.
247
+ configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__.
244
248
 
245
249
 
246
250
  .. |support| image:: https://img.shields.io/pypi/pyversions/webchanges.svg
@@ -285,9 +289,9 @@ configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upg
285
289
  .. .. |security| image:: https://img.shields.io/badge/security-bandit-green.svg
286
290
  .. :target: https://github.com/PyCQA/bandit
287
291
  .. :alt: Security Status
288
- .. |snyk| image:: https://snyk.io/advisor/python/holidays/badge.svg
289
- :target: https://snyk.io/advisor/python/holidays
290
- :alt: Snyk Package Health Score
292
+ .. .. |snyk| image:: https://snyk.io/advisor/python/webchanges/badge.svg
293
+ .. :target: https://security.snyk.io/package/pip/webchanges
294
+ .. :alt: Snyk Package Health Score
291
295
  .. |OpenSSF_Scorecard| image:: https://api.scorecard.dev/projects/github.com/mborsetti/webchanges/badge
292
296
  :target: https://scorecard.dev/viewer/?uri=github.com/mborsetti/webchanges
293
297
  :alt: OpenSSF Scoreard
@@ -38,7 +38,7 @@ Install **webchanges** with ``uv`` (recommended):
38
38
  .. code-block:: bash
39
39
 
40
40
  uv pip install webchanges
41
-
41
+
42
42
  or with ``pip``:
43
43
 
44
44
  .. code-block:: bash
@@ -53,13 +53,14 @@ implementation (no browser) `here <https://github.com/yubiuser/webchanges-docker
53
53
 
54
54
  As a GitHub Action
55
55
  ------------------
56
- **webchanges** can easily run as a `GitHub Action <https://www.docker.com/>`__! You will find an implementation
56
+ **webchanges** can easily run as a `GitHub Action <https://www.docker.com/>`__! You will find an implementation
57
57
  `here <https://github.com/swimmwatch/webchanges-action>`__.
58
58
 
59
59
 
60
60
  Documentation |readthedocs|
61
61
  ===========================
62
- The documentation is hosted on `Read the Docs <https://webchanges.readthedocs.io/>`__.
62
+ The documentation is hosted on `Read the Docs <https://webchanges.readthedocs.io/>`__. A (very good) AI-generated
63
+ high-level architectural overview is available on `DeepWiki <https://deepwiki.com/mborsetti/webchanges>`__.
63
64
 
64
65
 
65
66
  Quick Start
@@ -72,7 +73,7 @@ Initialize
72
73
 
73
74
  .. code-block:: bash
74
75
 
75
- webchanges --edit
76
+ webchanges --edit-jobs
76
77
 
77
78
  #. Run the following command to change the default `configuration
78
79
  <https://webchanges.readthedocs.io/en/stable/configuration.html>`__, e.g. to receive change notifications
@@ -107,7 +108,7 @@ Schedule
107
108
 
108
109
  Code
109
110
  ====
110
- |coveralls| |snyk| |issues| |code_style| |OpenSSF_Scorecard|
111
+ |coveralls| |issues| |code_style| |OpenSSF_Scorecard|
111
112
 
112
113
  The code, issues tracker, and discussions are hosted on `GitHub <https://github.com/mborsetti/webchanges>`__.
113
114
 
@@ -139,7 +140,7 @@ Compatibility with **urlwatch**
139
140
  This project is based on code from `urlwatch 2.21
140
141
  <https://github.com/thp/urlwatch/tree/346b25914b0418342ffe2fb0529bed702fddc01f>`__ dated 30 July 2020.
141
142
  For upgrading from **urlwatch** to **webchanges** (using the same job and
142
- configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__.
143
+ configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upgrading.html>`__.
143
144
 
144
145
 
145
146
  .. |support| image:: https://img.shields.io/pypi/pyversions/webchanges.svg
@@ -184,9 +185,9 @@ configuration files), see `here <https://webchanges.readthedocs.io/en/stable/upg
184
185
  .. .. |security| image:: https://img.shields.io/badge/security-bandit-green.svg
185
186
  .. :target: https://github.com/PyCQA/bandit
186
187
  .. :alt: Security Status
187
- .. |snyk| image:: https://snyk.io/advisor/python/holidays/badge.svg
188
- :target: https://snyk.io/advisor/python/holidays
189
- :alt: Snyk Package Health Score
188
+ .. .. |snyk| image:: https://snyk.io/advisor/python/webchanges/badge.svg
189
+ .. :target: https://security.snyk.io/package/pip/webchanges
190
+ .. :alt: Snyk Package Health Score
190
191
  .. |OpenSSF_Scorecard| image:: https://api.scorecard.dev/projects/github.com/mborsetti/webchanges/badge
191
192
  :target: https://scorecard.dev/viewer/?uri=github.com/mborsetti/webchanges
192
193
  :alt: OpenSSF Scoreard
@@ -85,12 +85,13 @@ pushbullet = ['pushbullet.py']
85
85
  pushover = ['chump']
86
86
  xmpp = ['aioxmpp']
87
87
  # other
88
+ curl_cffi = ['curl_cffi']
88
89
  redis = ['redis']
89
90
  requests = ['requests']
90
91
  safe_password = ['keyring']
91
92
  # all
92
93
  all = [
93
- 'webchanges[use_browser,beautify,bs4,html5lib,ical2text,jq,ocr,pdf2text,pypdf_crypto,deepdiff_xml,imagediff,matrix,pushbullet,pushover,xmpp,redis,requests,safe_password]',
94
+ 'webchanges[use_browser,beautify,bs4,html5lib,ical2text,jq,ocr,pdf2text,pypdf_crypto,deepdiff_xml,imagediff,matrix,pushbullet,pushover,xmpp,curl_cffi,redis,requests,safe_password]',
94
95
  ]
95
96
 
96
97
 
@@ -103,6 +104,7 @@ all = [
103
104
  # https://setuptools.pypa.io/en/latest/userguide/package_discovery.html
104
105
  packages = [
105
106
  'webchanges',
107
+ 'webchanges._resources',
106
108
  'webchanges._vendored',
107
109
  'webchanges.filters',
108
110
  'webchanges.jobs',
@@ -116,11 +118,16 @@ dependencies = { file = 'requirements.txt' }
116
118
 
117
119
  [tool.setuptools.package-data]
118
120
  'webchanges' = ['py.typed']
121
+ 'webchanges._resources' = ['*.schema.json', '*.schema.sha256']
119
122
 
120
123
  # -------------------------- manpages --------------------------
121
124
  # https://github.com/praiskup/argparse-manpage/blob/main/README.md
125
+ # The build hook is wired in setup.py; [tool.setuptools.data-files] below installs the result.
122
126
  [tool.build_manpages]
123
- manpages = ['man/webchanges.1:function=get_parser:pyfile=get_parser']
127
+ manpages = ['man/webchanges.1:function=get_manpages_parser:pyfile=tools/get_manpages_parser.py']
128
+
129
+ [tool.setuptools.data-files]
130
+ 'share/man/man1' = ['man/webchanges.1']
124
131
 
125
132
  # -------------------------- coverage --------------------------
126
133
  [tool.coverage.run]
@@ -8,5 +8,6 @@ markdown2
8
8
  msgpack
9
9
  platformdirs
10
10
  pyyaml
11
+ typing-extensions
11
12
  tzdata; sys_platform == 'win32'
12
13
  zstandard; python_version < '3.14'
@@ -0,0 +1,17 @@
1
+ # Shim required to wire argparse-manpage's build_manpages cmdclass into setuptools.
2
+ # All other configuration lives in pyproject.toml.
3
+ # See https://github.com/praiskup/argparse-manpage/blob/main/README.md
4
+ from __future__ import annotations
5
+
6
+ from build_manpages import build_manpages, get_build_py_cmd, get_install_cmd
7
+ from setuptools import setup
8
+ from setuptools.command.build_py import build_py
9
+ from setuptools.command.install import install
10
+
11
+ setup(
12
+ cmdclass={
13
+ 'build_manpages': build_manpages,
14
+ 'build_py': get_build_py_cmd(build_py),
15
+ 'install': get_install_cmd(install),
16
+ },
17
+ )
@@ -0,0 +1,19 @@
1
+ # pragma: exclude file
2
+
3
+ import sys
4
+ from argparse import ArgumentParser
5
+ from pathlib import Path
6
+
7
+ sys.path.insert(0, str(Path.cwd()))
8
+
9
+ from webchanges.config import CommandConfig
10
+
11
+
12
+ def get_manpages_parser() -> ArgumentParser:
13
+ """Returns the parser to be used by argparse-manpage.
14
+
15
+ https://github.com/praiskup/argparse-manpage/blob/main/README.md
16
+ """
17
+
18
+ null_path = Path()
19
+ return CommandConfig([], null_path, null_path, null_path, null_path, null_path).parse_args([])
@@ -22,7 +22,7 @@ __project_name__ = str(__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.34.2'
25
+ __version__ = '3.36.0'
26
26
  __description__ = (
27
27
  'Check web (or command output) for changes since last run and notify.\n\nAnonymously alerts you of web changes.'
28
28
  )