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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
[tool.poetry]
name = "knot-resolver-manager"
version = "6.0.8"
description = "Knot Resolver Manager - a Python program that automatically manages the other components of the resolver"
license = "GPL-3.0-or-later"
authors = [
"Aleš Mrázek <ales.mrazek@nic.cz>",
"Václav Šraier <vaclav.sraier@nic.cz>"
]
maintainers = [
"Aleš Mrázek <ales.mrazek@nic.cz>"
]
readme = "README.md"
homepage = "https://www.knot-resolver.cz"
repository = "https://gitlab.nic.cz/knot/knot-resolver"
documentation = "https://www.knot-resolver.cz/documentation"
packages = [
{include = "knot_resolver_manager", from = "manager"}
]
# See currently open issue about building C extensions here:
# https://github.com/python-poetry/poetry/issues/2740
[tool.poetry.build]
script = "build_c_extensions.py"
generate-setup-file = true
[tool.poetry.dependencies]
python = "^3.8"
aiohttp = "*"
jinja2 = "*"
pyyaml = "*"
supervisor = "*"
typing-extensions = "*"
prometheus-client = { version = "*", optional = true }
[tool.poetry.extras]
prometheus = ["prometheus-client"]
[tool.poetry.group.dev.dependencies]
poetry = "^1.8.3"
pyparsing = "^3.1.1"
poethepoet = "^0.24.4"
debugpy = "^1.8.1"
[tool.poetry.group.test.dependencies]
pytest = "^8.0.1"
pytest-cov = "^4.1.0"
pytest-asyncio = "^0.23.5"
[tool.poetry.group.lint.dependencies]
black = "^24.2.0"
isort = "^5.13.2"
toml = "^0.10.2"
mypy = "^1.8.0"
types-pyyaml = "^6.0.12.12"
pylint = "^3.0.3"
flake8 = {version = "*", python = "^3.8.1"}
[tool.poetry.group.docs.dependencies]
sphinx = "^5.3.0"
sphinx-tabs = "^3.4.5"
sphinx-rtd-theme = "^2.0.0"
breathe = "^4.35.0"
json-schema-for-humans = "^0.47"
[tool.poetry.scripts]
kresctl = 'knot_resolver_manager.cli.main:main'
knot-resolver = 'knot_resolver_manager.__main__:run'
[tool.poe.tasks]
configure = { cmd = "scripts/poe-tasks/meson-configure", help = "Configure Knot Resolver daemon" }
run = { cmd = "scripts/poe-tasks/run", help = "Run the manager" }
run-debug = { cmd = "scripts/poe-tasks/run-debug", help = "Run the manager under debugger" }
docs = { cmd = "scripts/poe-tasks/docs", help = "Create HTML documentation" }
test = { shell = "env PYTHONPATH=. pytest --junitxml=unit.junit.xml --cov=manager/knot_resolver_manager --show-capture=all tests/manager", help = "Run tests" }
check = { cmd = "scripts/poe-tasks/codecheck", help = "Run static code analysis" }
format = { shell = "black manager/knot_resolver_manager/ tests/manager scripts/create_setup.py manager/build_c_extensions.py; isort .", help = "Run code formatter" }
fixdeps = { shell = "poetry install; npm install; npm update", help = "Install/update dependencies according to configuration files"}
examples = { cmd = "scripts/poe-tasks/examples", help = "Validate all configuration examples" }
kresctl = { script = "knot_resolver_manager.cli.main:main", cwd="${POE_PWD}", help="run kresctl" }
kresctl-nocwd = { script = "knot_resolver_manager.cli.main:main", help="run kresctl" } # Python <3.8 and poethepoet <0.22.0 compatibility (see also `./poe`)
clean = """
rm -rf .coverage
.mypy_cache
.pytest_cache
./**/__pycache__
build
dist
"""
gen-setuppy = { shell = "python scripts/poe-tasks/create_setup.py > setup.py", help = "Generate setup.py file for backwards compatibility" }
man = {cmd = "scripts/poe-tasks/man", help = "Display manpage from sources" }
[tool.black]
line-length = 120
target_version = ['py312']
include = '\.py$'
exclude = "setup.py" # Poetry generates it and we want to keep it unchanged
[tool.isort]
line_length=120 # corresponds to -w flag
profile = "black"
multi_line_output=3 # corresponds to -m flag
include_trailing_comma=true # corresponds to -tc flag
skip_glob = '^((?!py$).)*$' # isort all Python files
float_to_top=true
skip = "setup.py" # Poetry generates it and we want to keep it unchanged
[tool.pylint."MESSAGES CONTROL"]
disable= [
"broad-except",
"fixme",
"global-statement",
"invalid-name",
"line-too-long", # checked by flake8
"missing-docstring",
"no-else-return",
"too-few-public-methods",
"unused-import", # checked by flake8,
"too-many-return-statements", # would prevent us from using recursive tree traversals
"logging-fstring-interpolation", # see https://github.com/PyCQA/pylint/issues/1788
"no-else-raise", # not helpful for readability, when we want explicit branches
"raising-bad-type", # handled by type checker
"too-many-arguments", # sure, but how can we change the signatures to take less arguments? artificially create objects with arguments? That's stupid...
"invalid-overridden-method", # hopefully checked by type checkers
"no-member", # pylint does not do it properly
"import-error", # pylint does not do it properly
]
[tool.pylint.SIMILARITIES]
min-similarity-lines = "6"
ignore-comments = "yes"
ignore-docstrings = "yes"
ignore-imports = "yes"
[tool.pylint.DESIGN]
max-parents = "10"
[tool.mypy]
python_version = "3.12"
# strict = true
disallow_any_generics = true
disallow_subclassing_any = true
disallow_untyped_calls = false
disallow_untyped_decorators = true
pretty = true
show_error_codes = true
allow_redefinition = true
disallow_untyped_defs = false
strict_equality = true
disallow_incomplete_defs = true
check_untyped_defs = true
implicit_reexport = false
no_implicit_optional = true
[build-system]
requires = [
"poetry-core>=1.0.0",
"setuptools>=67.8.0"
]
build-backend = "poetry.core.masonry.api"
|