Source code for dwas.predefined._isort
from __future__ import annotations
from typing import Sequence
# XXX: All imports here should be done from the top level. If we need it,
# users might need it
from .. import Step, StepRunner, build_parameters, set_defaults
@set_defaults(
{
"dependencies": ["isort[colors]"],
"additional_arguments": ["--check-only", "--diff"],
"files": ["."],
}
)
class Isort(Step):
def __init__(self) -> None:
self.__name__ = "isort"
def __call__(
self,
step: StepRunner,
files: Sequence[str],
additional_arguments: list[str],
) -> None:
additional_arguments = additional_arguments.copy()
if step.config.colors:
additional_arguments.append("--color")
step.run(["isort", *additional_arguments, *files])
[docs]
def isort(
*,
files: Sequence[str] | None = None,
additional_arguments: list[str] | None = None,
) -> Step:
"""
Run `the isort formatter`_ against your python source code.
By default, it will depend on :python:`["isort[colors]"]`, when registered
with :py:func:`dwas.register_managed_step`.
:param files: The list of files or directories to run ``isort`` against.
Defaults to :python:`["."]`.
:param additional_arguments: Additional arguments to pass to the ``isort``
invocation.
Defaults to :python:`["--check-only", "--diff"]`.
:return: The step so that you can add additional parameters to it if needed.
.. tip::
isort can be quite slow to find all files it needs to handle, you might
want to limit the number of directories searched.
:Examples:
In order to verify your code but not change it, for a step
named **isort**:
.. code-block::
dwas.register_managed_step(
dwas.predefined.isort(files["src", "tests", "dwasfile.py", "setup.py"])
)
Or, in order to automatically fix your code, but only if requested:
.. code-block::
dwas.register_managed_step(
dwas.predefined.isort(
additional_arguments=["--atomic"],
files=["src,", "tests", "dwasfile.py", "setup.py"],
),
# NOTE: this name is arbitrary, you could omit it, or specify
# something else. We suffix in our documentation all
# operations that will have destructive effect on the source
# code by ``:fix``
name="isort:fix",
run_by_default=False,
)
"""
return build_parameters(
files=files,
additional_arguments=additional_arguments,
)(Isort())