-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpyproject.toml
315 lines (293 loc) · 12 KB
/
pyproject.toml
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
[build-system]
requires = ["setuptools>=64.0", "setuptools-scm"]
build-backend = "setuptools.build_meta"
[project]
name = "anchovy"
description = "A minimal, unopinionated file processing engine intended for static website generation."
readme = "README.md"
requires-python = ">=3.10"
license = {"text" = "Apache-2.0"}
authors = [
{"name" = "Daniel Foerster", "email" = "[email protected]"},
]
keywords = ["static", "website", "generation", "html", "css", "template"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Software Development :: Pre-processors",
"Topic :: Text Processing :: Markup",
"Typing :: Typed",
]
dynamic = ["version"]
[project.urls]
Source = "https://github.com/pydsigner/anchovy"
[project.optional-dependencies]
toml = ['tomli >= 2.0.1; python_version < "3.11"']
yaml = ["ruamel.yaml>=0.18.5"]
jinja = ["Jinja2>=3.1.2"]
markdown = [
"anchovy[jinja]",
"anchovy[toml]",
"anchovy[yaml]",
"markdown_it_py>=3.0.0",
"mdit_py_plugins>=0.4.0",
# Pygments is a fairly large dependency and perhaps not critical; but we
# include as part of [base] via rich anyways.
"Pygments>=2.12.0",
]
css = ["anchovy_css>=0.1.1"]
pretty = ["rich>=12.5.1"]
# Our most expensive dependency, and not leveraged to its full extent in our
# standard set of Steps, but significantly valuable to the [web] audience for
# thumbnailing and .webp conversion.
pillow = ["Pillow>=9.2.0"]
minify = [
"lightningcss>=0.1.1,<1.0",
"minify-html-onepass>=0.11.1",
"tdewolff-minify>=2.20.6; sys_platform != 'darwin'"
]
web = [
"anchovy[markdown]",
"anchovy[css]",
"anchovy[pillow]",
"anchovy[minify]"
]
include = ["requests>=2.31.0", "anchovy[toml]"]
base = ["anchovy[web]", "anchovy[include]", "anchovy[pretty]"]
# Currently, [all] is the same as [base]; this will change in the future if
# heavy dependencies for non-core Steps are added.
all = ["anchovy[base]"]
# Includes all possible dependencies, including fallbacks that will not be used
# under normal circumstances, for linting purposes. End users are intended to
# ignore this option.
cq = [
"anchovy[all]",
"tqdm>=4.65.0",
"minify-html>=0.11.1",
"pylint",
"pyright",
"pytest",
"pytest-cov",
]
[project.scripts]
anchovy = "anchovy.cli:main"
[tool.setuptools_scm]
[tool.pytest.ini_options]
addopts = [
"--import-mode=importlib",
]
[tool.coverage.report]
exclude_also = [
"if \\S*TYPE_CHECKING:",
"if __name__ == '__main__':",
]
[tool.pylint.main]
# Return non-zero exit code if any of these messages/categories are detected,
# even if score is above --fail-under value. Syntax same as enable. Messages
# specified are enabled, while categories only check already-enabled messages.
# fail-on =
# Specify a score threshold to be exceeded before program exits with error.
fail-under = 9
# Add files or directories matching the regex patterns to the ignore-list. The
# regex matches against paths and can be in Posix or Windows format.
# ignore-paths =
# Files or directories matching the regex patterns are skipped. The regex matches
# against base names, not paths. The default value ignores Emacs file locks
ignore-patterns = ["^\\.#"]
# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the
# number of processors available to use, and will cap the count on Windows to
# avoid hangs.
jobs = 1
# Pickle collected data for later comparisons.
persistent = true
# Minimum Python version to use for version dependent checks. Will default to the
# version used to run pylint.
py-version = "3.10"
# When enabled, pylint would attempt to guess common misconfiguration and emit
# user-friendly hints instead of false-positive error messages.
suggestion-mode = true
extension-pkg-whitelist = [
"lightningcss",
]
[tool.pylint.basic]
# Naming style matching correct argument names.
argument-naming-style = "snake_case"
# Naming style matching correct attribute names.
attr-naming-style = "snake_case"
# Naming style matching correct class attribute names.
class-attribute-naming-style = "any"
# Naming style matching correct class constant names.
class-const-naming-style = "UPPER_CASE"
# Naming style matching correct class names.
class-naming-style = "PascalCase"
# Naming style matching correct constant names.
const-naming-style = "UPPER_CASE"
# Naming style matching correct function names.
function-naming-style = "snake_case"
# Naming style matching correct inline iteration names.
inlinevar-naming-style = "any"
# Naming style matching correct method names.
method-naming-style = "snake_case"
# Naming style matching correct module names.
module-naming-style = "snake_case"
# Naming style matching correct variable names.
variable-naming-style = "snake_case"
# Good variable names which should always be accepted, separated by a comma.
good-names = ["i", "k", "v", "x", "y", "e", "ex", "_", "T2"]
# Minimum line length for functions/classes that require docstrings, shorter ones
# are exempt.
docstring-min-length = 2
# Regular expression which should only match function or class names that do not
# require a docstring.
no-docstring-rgx = "^_"
[tool.pylint.classes]
# List of method names used to declare (i.e. assign) instance attributes.
defining-attr-methods = ["__init__", "__new__", "setUp", "__post_init__"]
# List of member names, which should be excluded from the protected access
# warning.
exclude-protected = ["_asdict", "_fields", "_replace", "_source", "_make"]
# List of valid names for the first argument in a class method.
valid-classmethod-first-arg = ["cls"]
[tool.pylint.design]
# Maximum number of arguments for function / method.
max-args = 6
# Maximum number of attributes for a class (see R0902).
max-attributes = 7
# Maximum number of boolean expressions in an if statement (see R0916).
max-bool-expr = 5
# Maximum number of branch for function / method body.
max-branches = 12
# Maximum number of locals for function / method body.
max-locals = 15
# Maximum number of parents for a class (see R0901).
max-parents = 7
# Maximum number of public methods for a class (see R0904).
max-public-methods = 20
# Maximum number of return / yield for function / method body.
max-returns = 6
# Maximum number of statements in function / method body.
max-statements = 50
[tool.pylint.exceptions]
# Exceptions that will emit a warning when caught.
overgeneral-exceptions = ["builtins.BaseException", "builtins.Exception"]
[tool.pylint.format]
# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
expected-line-ending-format = "LF"
# Regexp for a line that is allowed to be longer than the limit.
ignore-long-lines = "^\\s*(# )?<?https?://\\S+>?$"
# Number of spaces of indent required inside a hanging or continued line.
indent-after-paren = 4
# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
indent-string = " "
# Maximum number of characters on a single line.
max-line-length = 120
# Maximum number of lines in a module.
max-module-lines = 1000
[tool.pylint."messages control"]
# Disable the message, report, category or checker with the given id(s).
disable = [
"raw-checker-failed",
"bad-inline-option",
"locally-disabled",
"file-ignored",
"suppressed-message",
"useless-suppression",
"deprecated-pragma",
"use-symbolic-message-instead",
"too-few-public-methods",
"inconsistent-return-statements",
"import-outside-toplevel",
]
# Enable the message, report, category or checker with the given id(s).
enable = [
"c-extension-no-member"
]
[tool.pylint.miscellaneous]
# List of note tags to take in consideration.
notes = ["FIXME", "XXX", "TODO"]
[tool.pylint.refactoring]
# Maximum number of nested blocks for function / method body
max-nested-blocks = 5
# Complete name of functions that never returns. When checking for inconsistent-
# return-statements if a never returning function is called then it will be
# considered as an explicit return statement and no message will be printed.
never-returning-functions = ["sys.exit", "argparse.parse_error"]
[tool.pylint.reports]
# Python expression which should return a score less than or equal to 10. You
# have access to the variables 'fatal', 'error', 'warning', 'refactor',
# 'convention', and 'info' which contain the number of messages in each category,
# as well as 'statement' which is the total number of statements analyzed. This
# score is used by the global evaluation report (RP0004).
evaluation = "max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))"
# Activate the evaluation score.
score = true
# Set the output format. Available formats are text, parseable, colorized, json
# and msvs (visual studio). You can also give a reporter class, e.g.
# mypackage.mymodule.MyReporterClass.
output-format = "colorized"
[tool.pylint.similarities]
# Comments are removed from the similarity computation
ignore-comments = true
# Docstrings are removed from the similarity computation
ignore-docstrings = true
# Imports are removed from the similarity computation
ignore-imports = true
# Signatures are removed from the similarity computation
ignore-signatures = true
# Minimum lines number of a similarity.
min-similarity-lines = 4
[tool.pylint.typecheck]
# List of decorators that produce context managers, such as
# contextlib.contextmanager. Add to this list to register other decorators that
# produce valid context managers.
contextmanager-decorators = ["contextlib.contextmanager"]
# Tells whether missing members accessed in mixin class should be ignored. A
# class is considered mixin if its name matches the mixin-class-rgx option.
# Tells whether to warn about missing members when the owner of the attribute is
# inferred to be None.
ignore-none = true
# This flag controls whether pylint should warn about no-member and similar
# checks whenever an opaque object is returned when inferring. The inference can
# return multiple potential results while evaluating a Python object, but some
# branches might not be evaluated, which results in partial inference. In that
# case, it might be useful to still emit no-member and other checks for the rest
# of the inferred objects.
ignore-on-opaque-inference = true
# List of symbolic message names to ignore for Mixin members.
ignored-checks-for-mixins = ["no-member", "not-async-context-manager", "not-context-manager", "attribute-defined-outside-init"]
# List of class names for which member attributes should not be checked (useful
# for classes with dynamically set attributes). This supports the use of
# qualified names.
# Regex pattern to define which classes are considered mixins.
mixin-class-rgx = ".*[Mm]ixin"
ignored-classes = ["optparse.Values", "thread._local", "_thread._local", "argparse.Namespace"]
# Show a hint with possible names when a member name was not found. The aspect of
# finding the hint is based on edit distance.
missing-member-hint = true
# The minimum edit distance a name should have in order to be considered a
# similar match for a missing member name.
missing-member-hint-distance = 1
# The total number of similar names that should be taken in consideration when
# showing a hint for a missing member.
missing-member-max-choices = 1
[tool.pylint.variables]
# Tells whether unused global variables should be treated as a violation.
allow-global-unused-variables = true
# A regular expression matching the name of dummy variables (i.e. expected to not
# be used).
dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_"
# Argument names that match this expression will be ignored. Default to name with
# leading underscore.
ignored-argument-names = "_.*"
# List of qualified module names which can have objects that can redefine
# builtins.
redefining-builtins-modules = ["six.moves", "past.builtins", "future.builtins", "builtins", "io"]