docsig 0.44.1__tar.gz → 0.44.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Stephen Whitlock
3
+ Copyright (c) 2024 Stephen Whitlock
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
docsig-0.44.3/PKG-INFO ADDED
@@ -0,0 +1,241 @@
1
+ Metadata-Version: 2.1
2
+ Name: docsig
3
+ Version: 0.44.3
4
+ Summary: Check signature params for proper documentation
5
+ Home-page: https://pypi.org/project/docsig/
6
+ License: MIT
7
+ Keywords: check,docs,docstring,params,signature
8
+ Author: jshwi
9
+ Author-email: stephen@jshwisolutions.com
10
+ Maintainer: jshwi
11
+ Maintainer-email: stephen@jshwisolutions.com
12
+ Requires-Python: >=3.8,<4.0
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Requires-Dist: Pygments (>=2.13.0,<3.0.0)
21
+ Requires-Dist: Sphinx (>=7.0.0,<8.0.0)
22
+ Requires-Dist: arcon (>=0.3.1,<0.4.0)
23
+ Requires-Dist: astroid (>=3.0.1,<4.0.0)
24
+ Requires-Dist: object-colors (>=2.1.0,<3.0.0)
25
+ Requires-Dist: typing-extensions (>=4.8.0,<5.0.0)
26
+ Project-URL: Documentation, https://docsig.readthedocs.io/en/latest
27
+ Project-URL: Repository, https://github.com/jshwi/docsig
28
+ Description-Content-Type: text/x-rst
29
+
30
+ |
31
+
32
+ .. image:: https://raw.githubusercontent.com/jshwi/docsig/master/docs/static/docsig.svg
33
+ :alt: docsig logo
34
+ :width: 50%
35
+ :align: center
36
+
37
+ |
38
+
39
+ .. image:: https://img.shields.io/badge/License-MIT-yellow.svg
40
+ :target: https://opensource.org/licenses/MIT
41
+ :alt: License
42
+ .. image:: https://img.shields.io/pypi/v/docsig
43
+ :target: https://pypi.org/project/docsig/
44
+ :alt: PyPI
45
+ .. image:: https://github.com/jshwi/docsig/actions/workflows/build.yaml/badge.svg
46
+ :target: https://github.com/jshwi/docsig/actions/workflows/build.yaml
47
+ :alt: CI
48
+ .. image:: https://github.com/jshwi/docsig/actions/workflows/codeql-analysis.yml/badge.svg
49
+ :target: https://github.com/jshwi/docsig/actions/workflows/codeql-analysis.yml
50
+ :alt: CodeQL
51
+ .. image:: https://results.pre-commit.ci/badge/github/jshwi/docsig/master.svg
52
+ :target: https://results.pre-commit.ci/latest/github/jshwi/docsig/master
53
+ :alt: pre-commit.ci status
54
+ .. image:: https://codecov.io/gh/jshwi/docsig/branch/master/graph/badge.svg
55
+ :target: https://codecov.io/gh/jshwi/docsig
56
+ :alt: codecov.io
57
+ .. image:: https://readthedocs.org/projects/docsig/badge/?version=latest
58
+ :target: https://docsig.readthedocs.io/en/latest/?badge=latest
59
+ :alt: readthedocs.org
60
+ .. image:: https://img.shields.io/badge/python-3.8-blue.svg
61
+ :target: https://www.python.org/downloads/release/python-380
62
+ :alt: python3.8
63
+ .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
64
+ :target: https://github.com/psf/black
65
+ :alt: Black
66
+ .. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
67
+ :target: https://pycqa.github.io/isort/
68
+ :alt: isort
69
+ .. image:: https://img.shields.io/badge/%20formatter-docformatter-fedcba.svg
70
+ :target: https://github.com/PyCQA/docformatter
71
+ :alt: docformatter
72
+ .. image:: https://img.shields.io/badge/linting-pylint-yellowgreen
73
+ :target: https://github.com/PyCQA/pylint
74
+ :alt: pylint
75
+ .. image:: https://img.shields.io/badge/security-bandit-yellow.svg
76
+ :target: https://github.com/PyCQA/bandit
77
+ :alt: Security Status
78
+ .. image:: https://snyk.io/test/github/jshwi/docsig/badge.svg
79
+ :target: https://snyk.io/test/github/jshwi/docsig/badge.svg
80
+ :alt: Known Vulnerabilities
81
+ .. image:: https://snyk.io/advisor/python/docsig/badge.svg
82
+ :target: https://snyk.io/advisor/python/docsig
83
+ :alt: docsig
84
+
85
+ Check signature params for proper documentation
86
+ -----------------------------------------------
87
+
88
+ Supports reStructuredText (``Sphinx``), ``NumPy``, and ``Google``
89
+
90
+ Contributing
91
+ ------------
92
+ If you are interested in contributing to ``docsig`` please read about contributing `here <https://github.com/jshwi/docsig/blob/master/CONTRIBUTING.md>`__
93
+
94
+ Installation
95
+ ------------
96
+
97
+ .. code-block:: console
98
+
99
+ $ pip install docsig
100
+
101
+ Usage
102
+ -----
103
+
104
+ Commandline
105
+ ***********
106
+
107
+ .. code-block:: console
108
+
109
+ usage: docsig [-h] [-v] [-l] [-c | -C] [-D] [-m] [-o] [-p] [-P] [-i] [-a] [-k]
110
+ [-n] [-S] [-s STR] [-d LIST] [-t LIST]
111
+ [path [path ...]]
112
+
113
+ Check signature params for proper documentation
114
+
115
+ positional arguments:
116
+ path directories or files to check
117
+
118
+ optional arguments:
119
+ -h, --help show this help message and exit
120
+ -v, --version show program's version number and exit
121
+ -l, --list-checks display a list of all checks and their messages
122
+ -c, --check-class check class docstrings
123
+ -C, --check-class-constructor check __init__ methods. Note: mutually
124
+ incompatible with -c
125
+ -D, --check-dunders check dunder methods
126
+ -m, --check-protected-class-methods check public methods belonging to protected
127
+ classes
128
+ -o, --check-overridden check overridden methods
129
+ -p, --check-protected check protected functions and classes
130
+ -P, --check-property-returns check property return values
131
+ -i, --ignore-no-params ignore docstrings where parameters are not
132
+ documented
133
+ -a, --ignore-args ignore args prefixed with an asterisk
134
+ -k, --ignore-kwargs ignore kwargs prefixed with two asterisks
135
+ -n, --no-ansi disable ansi output
136
+ -S, --summary print a summarised report
137
+ -s STR, --string STR string to parse instead of files
138
+ -d LIST, --disable LIST comma separated list of rules to disable
139
+ -t LIST, --target LIST comma separated list of rules to target
140
+
141
+ Options can also be configured with the pyproject.toml file
142
+
143
+ If you find the output is too verbose then the report can be configured to display a summary
144
+
145
+ .. code-block:: toml
146
+
147
+ [tool.docsig]
148
+ check-dunders = false
149
+ check-overridden = false
150
+ check-protected = false
151
+ summary = true
152
+ disable = [
153
+ "E101",
154
+ "E102",
155
+ "E103",
156
+ ]
157
+ target = [
158
+ "E102",
159
+ "E103",
160
+ "E104",
161
+ ]
162
+
163
+ API
164
+ ***
165
+
166
+ .. code-block:: python
167
+
168
+ >>> from docsig import docsig
169
+
170
+ .. code-block:: python
171
+
172
+ >>> string = """
173
+ ... def function(param1, param2, param3) -> None:
174
+ ... '''
175
+ ...
176
+ ... :param param1: About param1.
177
+ ... :param param2: About param2.
178
+ ... :param param3: About param3.
179
+ ... '''
180
+ ... """
181
+ >>> docsig(string=string)
182
+ 0
183
+
184
+ .. code-block:: python
185
+
186
+ >>> string = """
187
+ ... def function(param1, param2) -> None:
188
+ ... '''
189
+ ...
190
+ ... :param param1: About param1.
191
+ ... :param param2: About param2.
192
+ ... :param param3: About param3.
193
+ ... '''
194
+ ... """
195
+ >>> docsig(string=string)
196
+ 2
197
+ -
198
+ def function(✓param1, ✓param2, ✖None) -> ✓None:
199
+ """
200
+ :param param1: ✓
201
+ :param param2: ✓
202
+ :param param3: ✖
203
+ """
204
+ <BLANKLINE>
205
+ E102: includes parameters that do not exist (params-do-not-exist)
206
+ <BLANKLINE>
207
+ 1
208
+
209
+ A full list of checks can be found `here <https://docsig.readthedocs.io/en/latest/docsig.html#docsig-messages>`__
210
+
211
+ Message Control
212
+ ***************
213
+
214
+ `Documentation on message control <https://github.com/jshwi/docsig/blob/master/docs/examples/message-control.rst>`_
215
+
216
+ Classes
217
+ *******
218
+
219
+ `Documenting classes <https://github.com/jshwi/docsig/blob/master/docs/examples/classes.rst>`_
220
+
221
+ pre-commit
222
+ **********
223
+
224
+ ``docsig`` can be used as a `pre-commit <https://pre-commit.com>`_ hook
225
+
226
+ It can be added to your .pre-commit-config.yaml as follows:
227
+
228
+ .. code-block:: yaml
229
+
230
+ repos:
231
+ - repo: https://github.com/jshwi/docsig
232
+ rev: v0.44.3
233
+ hooks:
234
+ - id: docsig
235
+ args:
236
+ - "--check-class"
237
+ - "--check-dunders"
238
+ - "--check-overridden"
239
+ - "--check-protected"
240
+ - "--summary"
241
+
@@ -0,0 +1,211 @@
1
+ |
2
+
3
+ .. image:: https://raw.githubusercontent.com/jshwi/docsig/master/docs/static/docsig.svg
4
+ :alt: docsig logo
5
+ :width: 50%
6
+ :align: center
7
+
8
+ |
9
+
10
+ .. image:: https://img.shields.io/badge/License-MIT-yellow.svg
11
+ :target: https://opensource.org/licenses/MIT
12
+ :alt: License
13
+ .. image:: https://img.shields.io/pypi/v/docsig
14
+ :target: https://pypi.org/project/docsig/
15
+ :alt: PyPI
16
+ .. image:: https://github.com/jshwi/docsig/actions/workflows/build.yaml/badge.svg
17
+ :target: https://github.com/jshwi/docsig/actions/workflows/build.yaml
18
+ :alt: CI
19
+ .. image:: https://github.com/jshwi/docsig/actions/workflows/codeql-analysis.yml/badge.svg
20
+ :target: https://github.com/jshwi/docsig/actions/workflows/codeql-analysis.yml
21
+ :alt: CodeQL
22
+ .. image:: https://results.pre-commit.ci/badge/github/jshwi/docsig/master.svg
23
+ :target: https://results.pre-commit.ci/latest/github/jshwi/docsig/master
24
+ :alt: pre-commit.ci status
25
+ .. image:: https://codecov.io/gh/jshwi/docsig/branch/master/graph/badge.svg
26
+ :target: https://codecov.io/gh/jshwi/docsig
27
+ :alt: codecov.io
28
+ .. image:: https://readthedocs.org/projects/docsig/badge/?version=latest
29
+ :target: https://docsig.readthedocs.io/en/latest/?badge=latest
30
+ :alt: readthedocs.org
31
+ .. image:: https://img.shields.io/badge/python-3.8-blue.svg
32
+ :target: https://www.python.org/downloads/release/python-380
33
+ :alt: python3.8
34
+ .. image:: https://img.shields.io/badge/code%20style-black-000000.svg
35
+ :target: https://github.com/psf/black
36
+ :alt: Black
37
+ .. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
38
+ :target: https://pycqa.github.io/isort/
39
+ :alt: isort
40
+ .. image:: https://img.shields.io/badge/%20formatter-docformatter-fedcba.svg
41
+ :target: https://github.com/PyCQA/docformatter
42
+ :alt: docformatter
43
+ .. image:: https://img.shields.io/badge/linting-pylint-yellowgreen
44
+ :target: https://github.com/PyCQA/pylint
45
+ :alt: pylint
46
+ .. image:: https://img.shields.io/badge/security-bandit-yellow.svg
47
+ :target: https://github.com/PyCQA/bandit
48
+ :alt: Security Status
49
+ .. image:: https://snyk.io/test/github/jshwi/docsig/badge.svg
50
+ :target: https://snyk.io/test/github/jshwi/docsig/badge.svg
51
+ :alt: Known Vulnerabilities
52
+ .. image:: https://snyk.io/advisor/python/docsig/badge.svg
53
+ :target: https://snyk.io/advisor/python/docsig
54
+ :alt: docsig
55
+
56
+ Check signature params for proper documentation
57
+ -----------------------------------------------
58
+
59
+ Supports reStructuredText (``Sphinx``), ``NumPy``, and ``Google``
60
+
61
+ Contributing
62
+ ------------
63
+ If you are interested in contributing to ``docsig`` please read about contributing `here <https://github.com/jshwi/docsig/blob/master/CONTRIBUTING.md>`__
64
+
65
+ Installation
66
+ ------------
67
+
68
+ .. code-block:: console
69
+
70
+ $ pip install docsig
71
+
72
+ Usage
73
+ -----
74
+
75
+ Commandline
76
+ ***********
77
+
78
+ .. code-block:: console
79
+
80
+ usage: docsig [-h] [-v] [-l] [-c | -C] [-D] [-m] [-o] [-p] [-P] [-i] [-a] [-k]
81
+ [-n] [-S] [-s STR] [-d LIST] [-t LIST]
82
+ [path [path ...]]
83
+
84
+ Check signature params for proper documentation
85
+
86
+ positional arguments:
87
+ path directories or files to check
88
+
89
+ optional arguments:
90
+ -h, --help show this help message and exit
91
+ -v, --version show program's version number and exit
92
+ -l, --list-checks display a list of all checks and their messages
93
+ -c, --check-class check class docstrings
94
+ -C, --check-class-constructor check __init__ methods. Note: mutually
95
+ incompatible with -c
96
+ -D, --check-dunders check dunder methods
97
+ -m, --check-protected-class-methods check public methods belonging to protected
98
+ classes
99
+ -o, --check-overridden check overridden methods
100
+ -p, --check-protected check protected functions and classes
101
+ -P, --check-property-returns check property return values
102
+ -i, --ignore-no-params ignore docstrings where parameters are not
103
+ documented
104
+ -a, --ignore-args ignore args prefixed with an asterisk
105
+ -k, --ignore-kwargs ignore kwargs prefixed with two asterisks
106
+ -n, --no-ansi disable ansi output
107
+ -S, --summary print a summarised report
108
+ -s STR, --string STR string to parse instead of files
109
+ -d LIST, --disable LIST comma separated list of rules to disable
110
+ -t LIST, --target LIST comma separated list of rules to target
111
+
112
+ Options can also be configured with the pyproject.toml file
113
+
114
+ If you find the output is too verbose then the report can be configured to display a summary
115
+
116
+ .. code-block:: toml
117
+
118
+ [tool.docsig]
119
+ check-dunders = false
120
+ check-overridden = false
121
+ check-protected = false
122
+ summary = true
123
+ disable = [
124
+ "E101",
125
+ "E102",
126
+ "E103",
127
+ ]
128
+ target = [
129
+ "E102",
130
+ "E103",
131
+ "E104",
132
+ ]
133
+
134
+ API
135
+ ***
136
+
137
+ .. code-block:: python
138
+
139
+ >>> from docsig import docsig
140
+
141
+ .. code-block:: python
142
+
143
+ >>> string = """
144
+ ... def function(param1, param2, param3) -> None:
145
+ ... '''
146
+ ...
147
+ ... :param param1: About param1.
148
+ ... :param param2: About param2.
149
+ ... :param param3: About param3.
150
+ ... '''
151
+ ... """
152
+ >>> docsig(string=string)
153
+ 0
154
+
155
+ .. code-block:: python
156
+
157
+ >>> string = """
158
+ ... def function(param1, param2) -> None:
159
+ ... '''
160
+ ...
161
+ ... :param param1: About param1.
162
+ ... :param param2: About param2.
163
+ ... :param param3: About param3.
164
+ ... '''
165
+ ... """
166
+ >>> docsig(string=string)
167
+ 2
168
+ -
169
+ def function(✓param1, ✓param2, ✖None) -> ✓None:
170
+ """
171
+ :param param1: ✓
172
+ :param param2: ✓
173
+ :param param3: ✖
174
+ """
175
+ <BLANKLINE>
176
+ E102: includes parameters that do not exist (params-do-not-exist)
177
+ <BLANKLINE>
178
+ 1
179
+
180
+ A full list of checks can be found `here <https://docsig.readthedocs.io/en/latest/docsig.html#docsig-messages>`__
181
+
182
+ Message Control
183
+ ***************
184
+
185
+ `Documentation on message control <https://github.com/jshwi/docsig/blob/master/docs/examples/message-control.rst>`_
186
+
187
+ Classes
188
+ *******
189
+
190
+ `Documenting classes <https://github.com/jshwi/docsig/blob/master/docs/examples/classes.rst>`_
191
+
192
+ pre-commit
193
+ **********
194
+
195
+ ``docsig`` can be used as a `pre-commit <https://pre-commit.com>`_ hook
196
+
197
+ It can be added to your .pre-commit-config.yaml as follows:
198
+
199
+ .. code-block:: yaml
200
+
201
+ repos:
202
+ - repo: https://github.com/jshwi/docsig
203
+ rev: v0.44.3
204
+ hooks:
205
+ - id: docsig
206
+ args:
207
+ - "--check-class"
208
+ - "--check-dunders"
209
+ - "--check-overridden"
210
+ - "--check-protected"
211
+ - "--summary"
@@ -1,4 +1,5 @@
1
1
  """Check signature params for proper documentation."""
2
+
2
3
  from . import messages
3
4
  from ._core import docsig
4
5
  from ._main import main
@@ -4,6 +4,7 @@ docsig.__main__
4
4
 
5
5
  Module entry point.
6
6
  """
7
+
7
8
  import sys as _sys
8
9
 
9
10
  from docsig import main
@@ -2,6 +2,7 @@
2
2
  docsig._config
3
3
  ==============
4
4
  """
5
+
5
6
  from argparse import HelpFormatter as _HelpFormatter
6
7
  from pathlib import Path as _Path
7
8
 
@@ -2,6 +2,7 @@
2
2
  docsig._core
3
3
  ============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  from pathlib import Path as _Path
@@ -2,8 +2,10 @@
2
2
  docsig._decorators
3
3
  ==================
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
8
+ import functools as _functools
7
9
  import sys as _sys
8
10
  import typing as _t
9
11
  from pathlib import Path as _Path
@@ -21,6 +23,7 @@ def parse_msgs(func: _WrappedFuncType) -> _WrappedFuncType:
21
23
  :return: Wrapped function.
22
24
  """
23
25
 
26
+ @_functools.wraps(func)
24
27
  def _wrapper(*args: str | _Path, **kwargs: _t.Any) -> str | int:
25
28
  disable = list(_E.fromcodes(kwargs.get("disable", []))) or None
26
29
  targets = list(_E.fromcodes(kwargs.get("targets", []))) or None
@@ -38,6 +41,7 @@ def validate_args(func: _FuncType) -> _WrappedFuncType:
38
41
  :return: Wrapped function.
39
42
  """
40
43
 
44
+ @_functools.wraps(func)
41
45
  def _wrapper(*args: str | _Path, **kwargs: _t.Any) -> str | int:
42
46
  stderr = []
43
47
  if not kwargs.get("list_checks", False):
@@ -2,6 +2,7 @@
2
2
  docsig._disable
3
3
  ===============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import re as _re
@@ -2,6 +2,7 @@
2
2
  docsig._display
3
3
  ===============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import typing as _t
@@ -2,6 +2,7 @@
2
2
  docsig._function
3
3
  ================
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import re as _re
@@ -330,7 +331,18 @@ class Function: # pylint: disable=too-many-arguments
330
331
  @property
331
332
  def isproperty(self) -> bool:
332
333
  """Boolean value for whether function is a property."""
333
- return self.ismethod and self._decorated_with("property")
334
+ valid_properties = [
335
+ "property",
336
+ # todo: this should be inferred as various import styles or
337
+ # todo: aliases won't be recognised
338
+ # todo:
339
+ # todo: it appears overloaded is inferred, if it isn't, look
340
+ # todo: at that too
341
+ "cached_property",
342
+ ]
343
+ return self.ismethod and any(
344
+ self._decorated_with(i) for i in valid_properties
345
+ )
334
346
 
335
347
  @property
336
348
  def isoverloaded(self) -> bool:
@@ -2,6 +2,7 @@
2
2
  docsig._hooks
3
3
  =============
4
4
  """
5
+
5
6
  import sys as _sys
6
7
  from os import environ as _e
7
8
 
@@ -4,6 +4,7 @@ docsig._main
4
4
 
5
5
  Contains package entry point.
6
6
  """
7
+
7
8
  from __future__ import annotations as _
8
9
 
9
10
  from ._config import Parser as _Parser
@@ -2,6 +2,7 @@
2
2
  docsig._message
3
3
  ===============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import typing as _t
@@ -2,6 +2,7 @@
2
2
  docsig._module
3
3
  ==============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import typing as _t
@@ -2,6 +2,7 @@
2
2
  docsig._report
3
3
  ==============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  import typing as _t
@@ -2,6 +2,7 @@
2
2
  docsig._utils
3
3
  =============
4
4
  """
5
+
5
6
  from __future__ import annotations as _
6
7
 
7
8
  from difflib import SequenceMatcher as _SequenceMatcher
@@ -7,4 +7,5 @@ Contains the version of this package.
7
7
  Allows for access to the version internally without cyclic imports
8
8
  caused by accessing it through __init__.
9
9
  """
10
- __version__ = "0.44.1"
10
+
11
+ __version__ = "0.44.3"
@@ -22,6 +22,7 @@ docsig.messages
22
22
  | E203: unknown module comment option for {directive} '{option}'
23
23
  | E204: unknown inline comment option for {directive} '{option}'
24
24
  """
25
+
25
26
  from ._message import Message as _Message
26
27
  from ._message import Messages as _Messages
27
28
 
@@ -72,7 +72,7 @@ maintainers = [
72
72
  name = "docsig"
73
73
  readme = "README.rst"
74
74
  repository = "https://github.com/jshwi/docsig"
75
- version = "0.44.1"
75
+ version = "0.44.3"
76
76
 
77
77
  [tool.poetry.dependencies]
78
78
  Pygments = "^2.13.0"
@@ -85,13 +85,12 @@ typing-extensions = "^4.8.0"
85
85
 
86
86
  [tool.poetry.dev-dependencies]
87
87
  bump2version = "^1.0.1"
88
- deptry = "^0.12.0"
88
+ deptry = "^0.14.2"
89
89
  ipython = "^8.12.0"
90
90
  pre-commit = "^3.3.3"
91
- pyaud = "^7.3.0"
92
- pytest = "^7.4.0"
91
+ pyaud = "^7.5.0"
93
92
  pytest-randomly = "^3.13.0"
94
- pytest-sugar = "^0.9.6"
93
+ pytest-sugar = "^1.0.0"
95
94
  pytest-xdist = "^3.5.0"
96
95
  restview = "^3.0.0"
97
96
  sphinx-immaterial = "^0.11.9"
@@ -106,6 +105,7 @@ audit = [
106
105
  "about-tests",
107
106
  "commit-policy",
108
107
  "const",
108
+ "copyright-year",
109
109
  "docs",
110
110
  "files",
111
111
  "format",