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 CHANGED
@@ -37,7 +37,7 @@ Print the titles of the unread entries::
37
37
 
38
38
  """
39
39
 
40
- __version__ = '3.18'
40
+ __version__ = '3.19.dev0'
41
41
 
42
42
  # isort: off
43
43
 
@@ -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():
@@ -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
- self._local.db = db = sqlite3.connect(self.path, **self.kwargs)
475
- assert db is not None, "for mypy"
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
- #: The algorithm for "recent" is a heuristic and may change over time.
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.18
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: Changes, https://reader.readthedocs.io/en/latest/changelog.html
9
- Project-URL: Source Code, https://github.com/lemon24/reader
10
- Project-URL: Issue tracker, https://github.com/lemon24/reader/issues
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: search
44
- Provides-Extra: readtime
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!=4.7.*,>=4; extra == "app"
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=6qcsI5QacOy_NYORZqc2nrfCQ7a19S1V8N1REZz3EDk,2847
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=v0VMDLFUvFFEQAqzsa2ZBhDdtGw175LTehzdDS7FIWs,34204
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=S83QHKcAXDoox2G3WXh5nuRv0kwRJhgE28hxlNHQMVE,4379
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=Wk_t4cdME-sZyPMGCZqStzvVA-9trnj3i0q4-8qO0RY,25707
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.18.dist-info/licenses/LICENSE,sha256=ndUPB_e5gQU8fDYOwbx5utcbbokCD1Joi94v_LCDBLA,1475
106
- reader-3.18.dist-info/METADATA,sha256=kcP2I_bAy6EMhdL3pegHbh5Lm1tAOsW1j_BdFLJqEVY,7706
107
- reader-3.18.dist-info/WHEEL,sha256=GHB6lJx2juba1wDgXDNlMTyM13ckjBMKf-OnwgKOCtA,91
108
- reader-3.18.dist-info/top_level.txt,sha256=zVRv6FulXZWKf9Gycz9vjxul5OCZ3fCq2Attdwsu7Z4,7
109
- reader-3.18.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.3.0)
2
+ Generator: setuptools (80.9.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5