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
162
|
[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 = "python"}
]
# 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.client.main:main'
knot-resolver = 'knot_resolver_manager.manager.main:main'
[tool.poe.tasks]
# tasks runed through scripts located in 'scripts/poe-tasks/'
configure = { cmd = "scripts/poe-tasks/configure", help = "(Re)configure Meson build directory" }
run = { cmd = "scripts/poe-tasks/run", help = "Run Knot Resolver" }
run-debug = { cmd = "scripts/poe-tasks/run-debug", help = "Debug Knot Resolver with debugpy" }
docs = { cmd = "scripts/poe-tasks/docs", help = "Create Knot Resolver HTML documentation" }
test = { cmd = "scripts/poe-tasks/test", help = "Run pytest unit tests" }
check = { cmd = "scripts/poe-tasks/check", help = "Check that all dependencies are installed and run static code analysis" }
examples = { cmd = "scripts/poe-tasks/examples", help = "Validate all configuration examples using 'kresctl validate' utility" }
man = {cmd = "scripts/poe-tasks/man", help = "Display Knot Resolver manpage from sources" }
gen-setuppy = { cmd = "scripts/poe-tasks/gen-setuppy", help = "Generate 'setup.py' file for backwards compatibility" }
format = { cmd = "scripts/poe-tasks/format", help = "Run code formatter" }
# tasks runned directly
fixdeps = { shell = "poetry install; npm install; npm update", help = "Install/update dependencies according to configuration files"}
kresctl = { cmd = "scripts/poe-tasks/kresctl", help="Run kresctl utility" }
clean = """
rm -rf .coverage
.mypy_cache
.pytest_cache
./**/__pycache__
build
dist
"""
[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"
|