reader 3.18__py3-none-any.whl → 3.19.dev0__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.
- reader/__init__.py +1 -1
- reader/_plugins/enclosure_tags.py +4 -2
- reader/_storage/_sqlite_utils.py +4 -2
- reader/types.py +1 -1
- {reader-3.18.dist-info → reader-3.19.dev0.dist-info}/METADATA +8 -37
- {reader-3.18.dist-info → reader-3.19.dev0.dist-info}/RECORD +9 -9
- {reader-3.18.dist-info → reader-3.19.dev0.dist-info}/WHEEL +1 -1
- {reader-3.18.dist-info → reader-3.19.dev0.dist-info}/licenses/LICENSE +0 -0
- {reader-3.18.dist-info → reader-3.19.dev0.dist-info}/top_level.txt +0 -0
reader/__init__.py
CHANGED
|
@@ -38,6 +38,7 @@ from flask import request
|
|
|
38
38
|
from flask import Response
|
|
39
39
|
from flask import stream_with_context
|
|
40
40
|
from flask import url_for
|
|
41
|
+
from jinja2.filters import do_striptags as striptags
|
|
41
42
|
|
|
42
43
|
|
|
43
44
|
blueprint = Blueprint('enclosure_tags', __name__)
|
|
@@ -146,12 +147,13 @@ def enclosure_tags_filter(enclosure, entry, feed_tags):
|
|
|
146
147
|
|
|
147
148
|
args = {'url': enclosure.href, 'filename': filename}
|
|
148
149
|
if entry.title:
|
|
149
|
-
args['title'] = entry.title
|
|
150
|
+
args['title'] = striptags(entry.title)
|
|
150
151
|
if album := (entry.feed.user_title or entry.feed.title):
|
|
152
|
+
album = striptags(album)
|
|
151
153
|
args['album'] = album
|
|
152
154
|
args['artist'] = album
|
|
153
155
|
elif artist := (entry.author or entry.feed.author):
|
|
154
|
-
args['artist'] = artist
|
|
156
|
+
args['artist'] = striptags(artist)
|
|
155
157
|
|
|
156
158
|
for tag in feed_tags:
|
|
157
159
|
if 'podcast' in tag.lower():
|
reader/_storage/_sqlite_utils.py
CHANGED
|
@@ -23,6 +23,7 @@ from dataclasses import dataclass
|
|
|
23
23
|
from datetime import datetime
|
|
24
24
|
from datetime import timezone
|
|
25
25
|
from typing import Any
|
|
26
|
+
from typing import cast
|
|
26
27
|
from typing import no_type_check
|
|
27
28
|
from typing import TypeVar
|
|
28
29
|
|
|
@@ -471,8 +472,9 @@ class LocalConnectionFactory:
|
|
|
471
472
|
if not self._local.is_creating_thread:
|
|
472
473
|
self._other_threads = True
|
|
473
474
|
|
|
474
|
-
|
|
475
|
-
|
|
475
|
+
# TODO: remove needless cast (needed after mypy 1.16.0 update)
|
|
476
|
+
db = cast(sqlite3.Connection, sqlite3.connect(self.path, **self.kwargs))
|
|
477
|
+
self._local.db = db
|
|
476
478
|
self._local.call_count = 0
|
|
477
479
|
|
|
478
480
|
try:
|
reader/types.py
CHANGED
|
@@ -757,7 +757,7 @@ class EntrySort(enum.StrEnum):
|
|
|
757
757
|
#:
|
|
758
758
|
#: .. note::
|
|
759
759
|
#:
|
|
760
|
-
#:
|
|
760
|
+
#: The algorithm for "recent" is a heuristic and may change over time.
|
|
761
761
|
#:
|
|
762
762
|
#: .. versionchanged:: 3.1
|
|
763
763
|
#: Sort entries by added date most of the time,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: reader
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.19.dev0
|
|
4
4
|
Summary: A Python feed reader library.
|
|
5
5
|
Author: lemon24
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
Project-URL: Documentation, https://reader.readthedocs.io/
|
|
8
|
-
Project-URL:
|
|
9
|
-
Project-URL:
|
|
10
|
-
Project-URL:
|
|
8
|
+
Project-URL: Repository, https://github.com/lemon24/reader
|
|
9
|
+
Project-URL: Issues, https://github.com/lemon24/reader/issues
|
|
10
|
+
Project-URL: Changelog, https://reader.readthedocs.io/en/latest/changelog.html
|
|
11
11
|
Keywords: atom,cdf,feed,rdf,rss,json feed,web feed,podcast,feed reader,feed aggregator
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
@@ -22,6 +22,7 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.11
|
|
23
23
|
Classifier: Programming Language :: Python :: 3.12
|
|
24
24
|
Classifier: Programming Language :: Python :: 3.13
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
26
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
26
27
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
27
28
|
Classifier: Topic :: Internet
|
|
@@ -40,14 +41,14 @@ Requires-Dist: requests>=2.18
|
|
|
40
41
|
Requires-Dist: werkzeug>2
|
|
41
42
|
Requires-Dist: iso8601>=1
|
|
42
43
|
Requires-Dist: beautifulsoup4>=4.5
|
|
43
|
-
Provides-Extra:
|
|
44
|
-
|
|
44
|
+
Provides-Extra: all
|
|
45
|
+
Requires-Dist: reader[app,cli,unstable-plugins]; extra == "all"
|
|
45
46
|
Provides-Extra: cli
|
|
46
47
|
Requires-Dist: click>=7; extra == "cli"
|
|
47
48
|
Requires-Dist: PyYAML; extra == "cli"
|
|
48
49
|
Provides-Extra: app
|
|
49
50
|
Requires-Dist: flask>=0.10; extra == "app"
|
|
50
|
-
Requires-Dist: humanize
|
|
51
|
+
Requires-Dist: humanize>=4; extra == "app"
|
|
51
52
|
Requires-Dist: PyYAML; extra == "app"
|
|
52
53
|
Requires-Dist: WTForms; extra == "app"
|
|
53
54
|
Requires-Dist: jinja2-fragments; extra == "app"
|
|
@@ -59,36 +60,6 @@ Requires-Dist: beautifulsoup4; extra == "unstable-plugins"
|
|
|
59
60
|
Requires-Dist: blinker>=1.4; extra == "unstable-plugins"
|
|
60
61
|
Requires-Dist: beautifulsoup4; extra == "unstable-plugins"
|
|
61
62
|
Requires-Dist: tabulate; extra == "unstable-plugins"
|
|
62
|
-
Provides-Extra: tests
|
|
63
|
-
Requires-Dist: pytest>=4; extra == "tests"
|
|
64
|
-
Requires-Dist: pytest-randomly; extra == "tests"
|
|
65
|
-
Requires-Dist: pytest-subtests; extra == "tests"
|
|
66
|
-
Requires-Dist: pytest-rerunfailures; extra == "tests"
|
|
67
|
-
Requires-Dist: coverage; extra == "tests"
|
|
68
|
-
Requires-Dist: pytest-cov; extra == "tests"
|
|
69
|
-
Requires-Dist: requests-mock; extra == "tests"
|
|
70
|
-
Requires-Dist: mechanicalsoup; (implementation_name != "pypy" and python_version <= "3.12") and extra == "tests"
|
|
71
|
-
Requires-Dist: requests-wsgi-adapter; extra == "tests"
|
|
72
|
-
Requires-Dist: lxml; (implementation_name != "pypy" and python_version <= "3.12") and extra == "tests"
|
|
73
|
-
Requires-Dist: html5lib; extra == "tests"
|
|
74
|
-
Requires-Dist: numpy; (implementation_name != "pypy" and os_name == "posix" and python_version <= "3.12") and extra == "tests"
|
|
75
|
-
Requires-Dist: mypy; implementation_name != "pypy" and extra == "tests"
|
|
76
|
-
Requires-Dist: types-requests; extra == "tests"
|
|
77
|
-
Requires-Dist: types-beautifulsoup4; extra == "tests"
|
|
78
|
-
Provides-Extra: docs
|
|
79
|
-
Requires-Dist: sphinx; extra == "docs"
|
|
80
|
-
Requires-Dist: sphinx-rtd-theme>=1.3.0rc1; extra == "docs"
|
|
81
|
-
Requires-Dist: click>=7; extra == "docs"
|
|
82
|
-
Requires-Dist: sphinx-click; extra == "docs"
|
|
83
|
-
Requires-Dist: sphinx-hoverxref; extra == "docs"
|
|
84
|
-
Requires-Dist: sphinxcontrib-log-cabinet; extra == "docs"
|
|
85
|
-
Requires-Dist: setuptools; extra == "docs"
|
|
86
|
-
Provides-Extra: dev
|
|
87
|
-
Requires-Dist: reader[app,cli,docs,tests,unstable-plugins]; extra == "dev"
|
|
88
|
-
Requires-Dist: tox; extra == "dev"
|
|
89
|
-
Requires-Dist: pre-commit; extra == "dev"
|
|
90
|
-
Requires-Dist: build; extra == "dev"
|
|
91
|
-
Requires-Dist: twine; extra == "dev"
|
|
92
63
|
Dynamic: license-file
|
|
93
64
|
|
|
94
65
|
.. begin-intro
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
reader/__init__.py,sha256=
|
|
1
|
+
reader/__init__.py,sha256=_9p_wEikp-LHY2B-Vq2TGYZj5g12NJJpP2QzJqdUYj8,2852
|
|
2
2
|
reader/__main__.py,sha256=gNiypbMW5x2B5Pn3xzMSVl7zldI824eEBg-WmzeD1vM,382
|
|
3
3
|
reader/_cli.py,sha256=gCh_D166fLeMHS4vWWagCI9H-3EJ4WxhmJ96RwS8PEY,12371
|
|
4
4
|
reader/_config.py,sha256=zQT1XMauermsQONVGuboeNjV7I03Aq8QsyuOBcaqAtM,4587
|
|
@@ -9,7 +9,7 @@ reader/_utils.py,sha256=PwpqOSj1l3cG8k11z_9rO9gqVYp0CyYTorIIT856t-4,7740
|
|
|
9
9
|
reader/core.py,sha256=PCdzZUGRlmGoJfF7AfGHV7STwEWWrYAKCX6RT_fhuQg,79818
|
|
10
10
|
reader/exceptions.py,sha256=REAWBsWrV22RfaFWxqkGAbAwz-COkp-yjHWvIYk7w1E,9961
|
|
11
11
|
reader/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
reader/types.py,sha256=
|
|
12
|
+
reader/types.py,sha256=Od_-4SxehrsLyjIfASrjA7AD_w_VeHtnLymmyJwCvag,34205
|
|
13
13
|
reader/utils.py,sha256=UjIjdNgI7APluejh7nMkGN91sT4JFZxWrcYOAG3J52Y,2535
|
|
14
14
|
reader/_app/__init__.py,sha256=nH1sfDP0gG5kBPaMCp-g55E0B2UZ9F-a8VQZHktVYHE,24192
|
|
15
15
|
reader/_app/api_thing.py,sha256=y88NNCGzQe8jND-2IYLhCXtD9LhshTU266iPiQbb7lU,4330
|
|
@@ -44,7 +44,7 @@ reader/_parser/requests/__init__.py,sha256=zEvj3jda9_bFdNtW4KFL3AGWReFUhKXCPDs80
|
|
|
44
44
|
reader/_parser/requests/_lazy.py,sha256=zSnNWQnlKi7ChKG7tI3pOQ16K5vc6beZOMadLDej_pw,4986
|
|
45
45
|
reader/_plugins/__init__.py,sha256=C7U9M_pTe9Qul3IVaxrm411222AElnPgAQBhad21MME,1617
|
|
46
46
|
reader/_plugins/cli_status.py,sha256=cW8fwPKdYa80ve1Nv6XUKXtWW0gXMwyenIZFkSz5XX8,4195
|
|
47
|
-
reader/_plugins/enclosure_tags.py,sha256=
|
|
47
|
+
reader/_plugins/enclosure_tags.py,sha256=70sQ-8YkjLKCsMCAtcJHc-jI-cYB4G6fOFUkliJvRmY,4487
|
|
48
48
|
reader/_plugins/preview_feed_list.py,sha256=u9_c0EMj0uwWKlsOXSuGM554J4rqEyskuUOG8u306MY,4562
|
|
49
49
|
reader/_plugins/share.py,sha256=02GBA9XXKkRrtfyyUk9mr8hx9jhLdbES-NrAHvs6M4I,1227
|
|
50
50
|
reader/_plugins/sqlite_releases.py,sha256=R14lNGmsk-LuyOueaScYk6Qf_sjVILlTKaMDuE-1c6o,3036
|
|
@@ -59,7 +59,7 @@ reader/_storage/_html_utils.py,sha256=qwVAfPk3VAkG6vWWna5js20vW5bc2Oe3xv-QYrDiJL
|
|
|
59
59
|
reader/_storage/_schema.py,sha256=sEGEhF8Atc6AKOVHHaeNYrmum0GB9SNkNpNIspT5-9o,10274
|
|
60
60
|
reader/_storage/_search.py,sha256=yEUCzfH6O-zNCNX1nI-Ewzy706eoQ2Fr5eZ1feHwchE,22017
|
|
61
61
|
reader/_storage/_sql_utils.py,sha256=rJJN4XckLK6UyvVl2-yEMejuCNyYIZ0-nJNt_3QlwAU,10330
|
|
62
|
-
reader/_storage/_sqlite_utils.py,sha256=
|
|
62
|
+
reader/_storage/_sqlite_utils.py,sha256=y7yP-JEeDApvdjufHOM0E8NLxPCe4srQqUXBTXQa7gQ,25797
|
|
63
63
|
reader/_storage/_tags.py,sha256=0Qll-WEuu8BeKlzcAp7SadjMK46pqDzsUOzwCa1wWD0,10736
|
|
64
64
|
reader/_vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
65
|
reader/_vendor/feedparser/__init__.py,sha256=eg2_Fs6sPwVY3Pat68RoqgfDyAkP0ydyv6wRzGM96nE,3133
|
|
@@ -102,8 +102,8 @@ reader/plugins/entry_dedupe.py,sha256=hSNB0NZ7CPx34md3073j9Hyv5E49iuDHjn-yVDkQb5
|
|
|
102
102
|
reader/plugins/mark_as_read.py,sha256=j_GG3zmQtd6icr5iSLmiu7CXqcQmODLgNR91c23lxvs,3709
|
|
103
103
|
reader/plugins/readtime.py,sha256=gWlO8MOLDlOddMhc9bgdwrthV-o13_DQA2qbKGD53qw,4699
|
|
104
104
|
reader/plugins/ua_fallback.py,sha256=bwDcgKfJmTPiBa52Vb6063zAQ8Pnh9GJlxBE0ZrWMG0,1630
|
|
105
|
-
reader-3.
|
|
106
|
-
reader-3.
|
|
107
|
-
reader-3.
|
|
108
|
-
reader-3.
|
|
109
|
-
reader-3.
|
|
105
|
+
reader-3.19.dev0.dist-info/licenses/LICENSE,sha256=ndUPB_e5gQU8fDYOwbx5utcbbokCD1Joi94v_LCDBLA,1475
|
|
106
|
+
reader-3.19.dev0.dist-info/METADATA,sha256=9ArGAYa0oQ26zOA0vAfE8XdzjSaRxgsffUoWPrFUzM8,6219
|
|
107
|
+
reader-3.19.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
108
|
+
reader-3.19.dev0.dist-info/top_level.txt,sha256=zVRv6FulXZWKf9Gycz9vjxul5OCZ3fCq2Attdwsu7Z4,7
|
|
109
|
+
reader-3.19.dev0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|