Files
shelfmark/pyproject.toml
T
dependabot[bot] a5fe803b8f build(deps): bump apprise from 2.1.0 to 2.2.0 in the python-deps group (#1698)
Bumps the python-deps group with 1 update:
[apprise](https://github.com/caronc/apprise).

Updates `apprise` from 2.1.0 to 2.2.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/caronc/apprise/releases">apprise's
releases</a>.</em></p>
<blockquote>
<h2>Apprise v2.2.0</h2>
<h2>What's Changed</h2>
<p>This release has a few bugfixes, but introuces a slew of (12) new
services bringing the total supported services up to
<strong>183</strong>. The foundation of the Apprise library has now made
it very easy to just scan missing service's upstream APIs and add them
to our catalog. There are so many examples now to use as reference. A
big kudos to <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
for all of your contributions for the last 2 releases; I really
appeciate it!</p>
<p><strong>Note:</strong> There is a security fix in this release:
<strong>GHSA-cfp4-m43r-v9q4</strong></p>
<h3>📣 New Notification Services</h3>
<ul>
<li>Add Groundmail notification support (groundmail://) by <a
href="https://github.com/Ktryberceo"><code>@​Ktryberceo</code></a> in <a
href="https://redirect.github.com/caronc/apprise/pull/1838">caronc/apprise#1838</a></li>
<li>Added Infobip support in <a
href="https://redirect.github.com/caronc/apprise/pull/1843">caronc/apprise#1843</a></li>
<li>Added CM.com support in <a
href="https://redirect.github.com/caronc/apprise/pull/1846">caronc/apprise#1846</a></li>
<li>Added Telesign support in <a
href="https://redirect.github.com/caronc/apprise/pull/1847">caronc/apprise#1847</a></li>
<li>Gupshup Support added in <a
href="https://redirect.github.com/caronc/apprise/pull/1848">caronc/apprise#1848</a></li>
<li>added Kaleyra Support in <a
href="https://redirect.github.com/caronc/apprise/pull/1849">caronc/apprise#1849</a></li>
<li>Added KakaoTalk support in <a
href="https://redirect.github.com/caronc/apprise/pull/1852">caronc/apprise#1852</a></li>
<li>Added xMatters support in <a
href="https://redirect.github.com/caronc/apprise/pull/1851">caronc/apprise#1851</a></li>
<li>Whapi.Cloud WhatsApp support in <a
href="https://redirect.github.com/caronc/apprise/pull/1854">caronc/apprise#1854</a>
and <a
href="https://redirect.github.com/caronc/apprise/pull/1857">caronc/apprise#1857</a></li>
<li>FireHydrant Signals support in <a
href="https://redirect.github.com/caronc/apprise/pull/1858">caronc/apprise#1858</a></li>
<li>Nostr support with private messages and attachments in <a
href="https://redirect.github.com/caronc/apprise/pull/1861">caronc/apprise#1861</a></li>
<li>Add SMSTunnel SMS notification support (smstunnel://) by <a
href="https://github.com/narcisbodea"><code>@​narcisbodea</code></a> in
<a
href="https://redirect.github.com/caronc/apprise/pull/1863">caronc/apprise#1863</a></li>
</ul>
<h3>🐞  Bugfixes</h3>
<ul>
<li>Fix rsyslog:// multiplying the facility twice in the PRI value by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1837">caronc/apprise#1837</a></li>
<li>Make tag checks on a service case-insensitive in <a
href="https://redirect.github.com/caronc/apprise/pull/1844">caronc/apprise#1844</a></li>
<li>Fix d7sms:// batch=yes raising a TypeError on a failed send by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1839">caronc/apprise#1839</a></li>
<li>Keep a line break written between inline tags for Telegram by <a
href="https://github.com/xubenqiang"><code>@​xubenqiang</code></a> in <a
href="https://redirect.github.com/caronc/apprise/pull/1842">caronc/apprise#1842</a></li>
<li>Fix reddit:// ignoring ad= and replies= by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1845">caronc/apprise#1845</a></li>
<li>Fix psafer:// ignoring priority= by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1850">caronc/apprise#1850</a></li>
<li>Fix xml:// ignoring GET params (-param=) by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1856">caronc/apprise#1856</a></li>
<li>IPV6 hardening and TLS timeouts are tied to same globally defined
one in <a
href="https://redirect.github.com/caronc/apprise/pull/1862">caronc/apprise#1862</a></li>
<li>support blank data as input on incident reporting in <a
href="https://redirect.github.com/caronc/apprise/pull/1859">caronc/apprise#1859</a></li>
<li>Fix burstsms:// ignoring validity= and rejecting uppercase country=
by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1860">caronc/apprise#1860</a></li>
<li>General hardening of codebase in <a
href="https://redirect.github.com/caronc/apprise/pull/1868">caronc/apprise#1868</a></li>
<li>Fix lametric:// cloud mode not sending X-Access-Token by <a
href="https://github.com/LuisFigueroaG"><code>@​LuisFigueroaG</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1865">caronc/apprise#1865</a></li>
<li>Add Bark subtitle, copy, action, archive, ttl, id and delete support
by <a href="https://github.com/fmontagna"><code>@​fmontagna</code></a>
in <a
href="https://redirect.github.com/caronc/apprise/pull/1869">caronc/apprise#1869</a></li>
<li>Keep CC display names in Postmark, Resend and Groundmail URLs by <a
href="https://github.com/Cassian433"><code>@​Cassian433</code></a> in <a
href="https://redirect.github.com/caronc/apprise/pull/1875">caronc/apprise#1875</a></li>
<li>Zulip messages without a title no longer fail in <a
href="https://redirect.github.com/caronc/apprise/pull/1877">caronc/apprise#1877</a></li>
</ul>
<h2>💡 Features</h2>
<ul>
<li>Apprise works without markdown package installed in <a
href="https://redirect.github.com/caronc/apprise/pull/1876">caronc/apprise#1876</a></li>
</ul>
<h3>❤️ Life-Cycle Support</h3>
<ul>
<li>Handle's click v8.5 deprecation notice in <a
href="https://redirect.github.com/caronc/apprise/pull/1855">caronc/apprise#1855</a></li>
</ul>
<h2>Installation</h2>
<p>Apprise is available <a href="https://pypi.org/project/apprise/">on
PyPI</a> through <em>pip</em>:</p>
<pre lang="bash"><code># Install Apprise v2.2.0 from PyPI
pip install apprise==2.2.0
</code></pre>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/caronc/apprise/commit/58e42d2fc826adcb3be35272df34d3888d061b34"><code>58e42d2</code></a>
bumped version to v2.2.0</li>
<li><a
href="https://github.com/caronc/apprise/commit/f82c82709b41768044eec3eb8d70262f90c79ecb"><code>f82c827</code></a>
Zulip messages without a title no longer fail (<a
href="https://redirect.github.com/caronc/apprise/issues/1877">#1877</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/e130b8893e3cf458e1ed4f94a44fbc4d4436274b"><code>e130b88</code></a>
Apprise works without markdown package installed (<a
href="https://redirect.github.com/caronc/apprise/issues/1876">#1876</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/a017f01bb450f4d6fd6c66bfdf15da892d1af6e7"><code>a017f01</code></a>
fix test dir reference</li>
<li><a
href="https://github.com/caronc/apprise/commit/a3ae4a806495dccd957cc4a03de892c1a814ffdf"><code>a3ae4a8</code></a>
Keep CC display names in Postmark, Resend and Groundmail URLs (<a
href="https://redirect.github.com/caronc/apprise/issues/1875">#1875</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/c5a063e6b2aa1b8209f2b1319cbfc8896d89e630"><code>c5a063e</code></a>
Add Bark subtitle, copy, action, archive, ttl, id and delete support (<a
href="https://redirect.github.com/caronc/apprise/issues/1869">#1869</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/bd691d7be975b112c4acd7a047e8318f13e511c8"><code>bd691d7</code></a>
restored test coverage to 100%</li>
<li><a
href="https://github.com/caronc/apprise/commit/ce937dcb8d857653670adcd42c2a1900914fde31"><code>ce937dc</code></a>
Fix lametric:// cloud mode not sending X-Access-Token (<a
href="https://redirect.github.com/caronc/apprise/issues/1865">#1865</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/df5676a34ad1452eaa0bf5616e7c8123218f5f5b"><code>df5676a</code></a>
General hardening of codebase (<a
href="https://redirect.github.com/caronc/apprise/issues/1868">#1868</a>)</li>
<li><a
href="https://github.com/caronc/apprise/commit/d8c0c39275f393163cf3ead839eb2c007ab7aad3"><code>d8c0c39</code></a>
Add SMSTunnel SMS notification support (smstunnel://) (<a
href="https://redirect.github.com/caronc/apprise/issues/1863">#1863</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/caronc/apprise/compare/v2.1.0...v2.2.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=apprise&package-manager=uv&previous-version=2.1.0&new-version=2.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

<!-- coderabbit-ai-generated:v1 -->

## Summary by CodeRabbit

* **Chores**
* This update contains no user-facing feature changes. The app’s visible
behavior and available functionality remain unchanged. No changes to the
user experience are included in this release.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-11-11 00:52:10 -05:00

180 lines
3.6 KiB
TOML

[project]
name = "shelfmark"
version = "0.1.0"
description = "Shelfmark - Book Downloader"
requires-python = ">=3.14"
dependencies = [
"flask",
"flask-cors",
"flask-socketio",
"python-socketio",
"requests[socks]",
"defusedxml",
"beautifulsoup4",
"tqdm",
"dnspython",
"gunicorn",
"gevent",
"gevent-websocket",
"psutil",
"emoji",
"rarfile",
"qbittorrent-api>=2026.10.1",
"transmission-rpc",
"authlib>=1.9.5,<1.10",
# Authlib validates ID tokens with joserfc and raises its errors, so the OIDC routes
# catch joserfc's InvalidClaimError. authlib.jose is deprecated and goes in Authlib 2.0.
"joserfc>=1.8.0",
"apprise>=2.2.0",
# HTTP/2 client for RFC 8484 DoH: quad9 rejects HTTP/1.1 outright (505), which
# requests cannot speak. See shelfmark/download/doh_wireformat.py.
"httpx[http2]>=0.28.1",
"publicsuffixlist>=1.1.2.20261107",
]
[project.optional-dependencies]
browser = [
"pyvirtualdisplay",
"pyautogui",
"seleniumbase==4.57.1",
"python-xlib",
]
[dependency-groups]
dev = [
"basedpyright>=1.40.2",
"prek",
"pytest",
"pytest-cov",
"pytest-xdist>=3.8.0",
"ruff==0.17.4",
"vulture>=2.14",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
addopts = [
"-v",
"--tb=short",
"-n",
"auto",
]
markers = [
"integration: marks tests that require running services (deselect with '-m \"not integration\"')",
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"e2e: marks end-to-end tests that require the full application stack",
]
[tool.ruff]
line-length = 100
extend-exclude = [".local"]
[tool.ruff.lint]
select = [
"F", "I", "UP", "B", "C4", "SIM", "PTH", "RET", "PIE", "FURB", "PERF", "TRY",
"A", "DTZ", "N",
"BLE001",
"ANN001", "ANN002", "ANN003", "ANN201", "ANN202", "ANN204",
"E402",
"ERA001",
"E731",
"S101",
"S110",
"S105", "S108",
"S311", "S324",
"S607", "S608",
"G003", "G004",
"PGH003",
"PLC0414",
"PLR1714",
"PLW1510",
"PLW2901",
"PLW0108",
"PT028",
"PYI034",
"Q000",
"RUF005", "RUF012", "RUF013", "RUF059", "RUF100",
"TC001", "TC002", "TC003",
]
ignore = ["D", "EM", "FBT", "PLR2004", "UP035", "TRY003", "E501", "TD002", "S104", "S603"]
[tool.ruff.lint.per-file-ignores]
"scripts/**/*.py" = [
"BLE001",
"S",
"TRY",
]
"tests/**/*.py" = [
"ANN",
"BLE001",
"B010",
"B017",
"B028",
"DTZ",
"E402",
"E731",
"ERA001",
"FURB",
"G003",
"G004",
"PERF",
"PIE",
"PLC0414",
"PLW0108",
"PLW1510",
"PLW2901",
"PTH",
"PT028",
"PYI034",
"Q000",
"RET",
"RUF012",
"S",
"SIM",
"TC001",
"TC002",
"TC003",
"TRY",
"UP028",
]
[tool.basedpyright]
include = ["shelfmark"]
exclude = [".local", "tests", "**/__pycache__", "**/node_modules"]
pythonVersion = "3.14"
typeCheckingMode = "standard"
[tool.vulture]
paths = ["shelfmark"]
exclude = [".local", "tests"]
ignore_decorators = [
"@app.route",
"@app.before_request",
"@app.after_request",
"@app.errorhandler",
"@socketio.on",
"@register_provider",
"@register_provider_kwargs",
"@register_settings",
"@register_source",
"@register_handler",
"@register_client",
"@register_output",
]
min_confidence = 90
sort_by_size = true
[tool.coverage.run]
source = ["shelfmark"]
branch = true
[tool.coverage.report]
show_missing = true
skip_empty = true
[tool.uv]
package = false