1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# SPDX-FileCopyrightText: 2026 Dennis Fink <me+coding@dennisfink.me>
#
# SPDX-License-Identifier: BSD-3-Clause
[project]
name = "webmentions-ssg"
dynamic = ["version"]
description = "A web service that implements webmentions receiver/sender for static site generators."
license = "BSD-3-Clause"
license-files = ["LICENSES/BSD-3-Clause.txt"]
authors = [
{name = "Dennis Fink", email = "me+coding@dennisfink.me"},
]
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
"beautifulsoup4>=4.15.0",
"bootstrap-flask>=2.5.0",
"coloredlogs>=15.0.1",
"dnspython>=2.8.0",
"flask>=3.1.3",
"flask-login>=0.6.3",
"flask-migrate>=4.1.0",
"flask-sqlalchemy>=3.1.1",
"flask-wtf>=1.3.0",
"httpx>=0.28.1",
"huey>=3.1.0",
"mf2py>=2.0.1",
"rfc3987>=1.3.8",
"xxhash>=3.8.1",
]
[project.urls]
Repository = "https://codeberg.org/metalgamer/webmentions-ssg"
Issues = "https://codeberg.org/metalgamer/webmentions-ssg/issues"
[dependency-groups]
dev = [
"pyright>=1.1.411",
"python-dotenv>=1.2.2",
"types-wtforms>=3.2.1.20260518",
]
test = [
"pytest>=9.1.1",
"pytest-cov>=7.1.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.version]
path = "webmentions_ssg/__init__.py"
[tool.hatch.build.targets.wheel]
packages = ["webmentions_ssg"]
[tool.hatch.build.targets.sdist]
include = [
"webmentions_ssg/",
"LICENSES/",
"README.md",
"pyproject.toml"
]
[tool.pytest.ini_options]
pythonpath = ["."]
testpaths = ["tests"]
addopts = [
"-ra",
"--strict-config",
"--strict-markers",
"--cov=webmentions_ssg",
"--cov-report=html",
]
filterwarnings = [
"ignore:codecs\\.open\\(\\) is deprecated\\. Use open\\(\\) instead\\.:DeprecationWarning:mf2py\\.backcompat",
]
[tool.uv]
default-groups = ["dev", "test"]
[tool.ruff.format]
skip-magic-trailing-comma = true
|