Compare commits

...
Author SHA1 Message Date
Claude 291bb79836 fix: use Self return type for SCMContext.__enter__ and __call__
Return self directly in __enter__ instead of the @contextmanager's
__enter__() return value. Also update __call__ to return
Iterator[Self]. They're semantically identical (the contextmanager
yields self), but this satisfies both ruff PYI034 and mypy.

https://claude.ai/code/session_01M18n2k6KLenwMRANgSFMXc
2026-02-11 08:15:06 +00:00
Claude c541954a80 fix: resolve ruff v0.15.0 linter errors
- PYI034: Use `Self` return type for `__enter__` in SCMContext
- PLW0108: Replace unnecessary lambda with direct `bool` reference

https://claude.ai/code/session_01M18n2k6KLenwMRANgSFMXc
2026-02-11 07:45:58 +00:00
pre-commit-ci[bot] 6073f3f197 [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
2026-02-09 23:34:55 +00:00
pre-commit-ci[bot] 656689fbe9 [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.14.13 → v0.15.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.13...v0.15.0)
2026-02-09 23:34:42 +00:00
13 changed files with 20 additions and 19 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ repos:
- id: sort-simple-yaml
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: 'v0.14.13'
rev: 'v0.15.0'
hooks:
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
+2 -2
View File
@@ -8,7 +8,7 @@ from PyInstaller.utils.hooks import collect_submodules, is_module_or_submodule
_EXCLUDES = ("celery.bin", "celery.contrib")
hiddenimports = collect_submodules(
"celery",
filter=lambda name: not any(
is_module_or_submodule(name, module) for module in _EXCLUDES
filter=lambda name: (
not any(is_module_or_submodule(name, module) for module in _EXCLUDES)
),
)
+1 -1
View File
@@ -188,7 +188,7 @@ class Experiments:
rev_names = self.get_exact_name(revs)
for rev in revs:
name = rev_names[rev]
names.append(name if name else rev[:7])
names.append(name or rev[:7])
ui.write("\nRan experiment(s): {}".format(", ".join(names)))
if tmp_dir:
ui.write(
+1 -1
View File
@@ -328,7 +328,7 @@ def collect(
name=baseline_names.get(baseline_rev),
data=baseline_data.data,
error=baseline_data.error,
experiments=experiments if experiments else None,
experiments=experiments or None,
)
)
return result
+1 -1
View File
@@ -757,7 +757,7 @@ class BaseExecutor(ABC):
logger.debug("Commit to current experiment branch '%s'", branch)
else:
baseline_rev = scm.get_ref(EXEC_BASELINE)
name = exp_name if exp_name else f"exp-{exp_hash[:5]}"
name = exp_name or f"exp-{exp_hash[:5]}"
ref_info = ExpRefInfo(baseline_rev, name)
branch = str(ref_info)
old_ref = None
+1 -1
View File
@@ -34,7 +34,7 @@ class ExpRefInfo:
def __init__(self, baseline_sha: str, name: Optional[str] = None):
self.baseline_sha = baseline_sha
self.name: str = name if name else ""
self.name: str = name or ""
def __str__(self):
return "/".join(self.parts)
+2 -4
View File
@@ -67,7 +67,7 @@ class ExpStash(Stash):
branch: Optional[str] = None,
) -> str:
msg = cls.MESSAGE_FORMAT.format(
rev=rev, baseline_rev=baseline_rev, name=name if name else ""
rev=rev, baseline_rev=baseline_rev, name=name or ""
)
branch_msg = f":{branch}" if branch else ""
return f"{msg}{branch_msg}"
@@ -124,9 +124,7 @@ class ApplyStash(Stash):
@classmethod
def format_message(cls, head_rev: str, rev: str, name: Optional[str] = None) -> str:
return cls.MESSAGE_FORMAT.format(
head_rev=head_rev, rev=rev, name=name if name else ""
)
return cls.MESSAGE_FORMAT.format(head_rev=head_rev, rev=rev, name=name or "")
@contextmanager
def preserve_workspace(
+1 -1
View File
@@ -200,7 +200,7 @@ def exp_commits(
) -> Iterable[str]:
"""Iterate over all experiment commits."""
shas: set[str] = set()
refs = ref_infos if ref_infos else exp_refs(scm)
refs = ref_infos or exp_refs(scm)
for ref_info in refs:
shas.update(scm.branch_revs(str(ref_info), ref_info.baseline_sha))
yield from shas
+6 -3
View File
@@ -10,6 +10,8 @@ from dvc.utils import relpath
from dvc.utils.collections import ensure_list
if TYPE_CHECKING:
from typing_extensions import Self
from dvc.repo import Repo
from dvc.scm import Base
@@ -96,7 +98,7 @@ class SCMContext:
@contextmanager
def __call__(
self, autostage: Optional[bool] = None, quiet: Optional[bool] = None
) -> Iterator["SCMContext"]:
) -> Iterator["Self"]:
try:
yield self
except Exception:
@@ -131,9 +133,10 @@ class SCMContext:
self.files_to_track = set()
def __enter__(self) -> "SCMContext":
def __enter__(self) -> "Self":
self._cm = self()
return self._cm.__enter__()
self._cm.__enter__()
return self
def __exit__(self, *exc_args) -> None:
assert self._cm
+1 -1
View File
@@ -53,7 +53,7 @@ def test_new_simple(tmp_dir, scm, dvc, exp_stage, mocker, name, workspace):
if workspace:
assert (tmp_dir / "metrics.yaml").read_text().strip() == "foo: 2"
exp_name = name if name else ref_info.name
exp_name = name or ref_info.name
assert dvc.experiments.get_exact_name([exp])[exp] == exp_name
assert resolve_rev(scm, exp_name) == exp
+1 -1
View File
@@ -28,7 +28,7 @@ def test_exp_save(tmp_dir, dvc, scm, name):
assert ref_info
assert ref_info.baseline_sha == baseline
exp_name = name if name else ref_info.name
exp_name = name or ref_info.name
assert dvc.experiments.get_exact_name([exp])[exp] == exp_name
assert resolve_rev(scm, exp_name) == exp
+1 -1
View File
@@ -196,7 +196,7 @@ def test_diff_show_markdown_and_hash(mocker, show_hash, dvc):
cmd = args.func(args)
diff = {}
show_hash = show_hash if show_hash else False
show_hash = show_hash or False
mock_show_markdown = mocker.patch("dvc.commands.diff._show_markdown")
mocker.patch("dvc.repo.Repo.diff", return_value=diff.copy())
+1 -1
View File
@@ -47,7 +47,7 @@ def test_help(caplog, capsys, command_tuples):
out, err = capsys.readouterr()
# validate metavars are all in lowercase
usage = "\n".join(takewhile(lambda o: bool(o), out.splitlines()))
usage = "\n".join(takewhile(bool, out.splitlines()))
message = (
"metavars not lowercased, you are likely missing formatter_class=XXX "