Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-jaraco.context for
openSUSE:Factory checked in at 2026-03-24 18:47:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jaraco.context (Old)
and /work/SRC/openSUSE:Factory/.python-jaraco.context.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jaraco.context"
Tue Mar 24 18:47:58 2026 rev:12 rq:1342036 version:6.1.2
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-jaraco.context/python-jaraco.context.changes
2026-01-21 14:12:13.934020544 +0100
+++
/work/SRC/openSUSE:Factory/.python-jaraco.context.new.8177/python-jaraco.context.changes
2026-03-24 18:48:11.456794887 +0100
@@ -1,0 +2,6 @@
+Mon Mar 23 12:48:10 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 6.1.2:
+ * No significant changes.
+
+-------------------------------------------------------------------
Old:
----
jaraco_context-6.1.0.tar.gz
New:
----
jaraco_context-6.1.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jaraco.context.spec ++++++
--- /var/tmp/diff_new_pack.wW3ZMA/_old 2026-03-24 18:48:13.748887804 +0100
+++ /var/tmp/diff_new_pack.wW3ZMA/_new 2026-03-24 18:48:13.776888939 +0100
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-jaraco.context
-Version: 6.1.0
+Version: 6.1.2
Release: 0
Summary: Tools to work with functools
License: MIT
++++++ jaraco_context-6.1.0.tar.gz -> jaraco_context-6.1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/.github/workflows/main.yml
new/jaraco_context-6.1.2/.github/workflows/main.yml
--- old/jaraco_context-6.1.0/.github/workflows/main.yml 2026-01-13
03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/.github/workflows/main.yml 2026-03-20
23:13:11.000000000 +0100
@@ -34,31 +34,31 @@
# https://blog.jaraco.com/efficient-use-of-ci-resources/
matrix:
python:
- - "3.9"
+ - "3.10"
- "3.13"
platform:
- ubuntu-latest
- macos-latest
- windows-latest
include:
- - python: "3.10"
- platform: ubuntu-latest
- python: "3.11"
platform: ubuntu-latest
- python: "3.12"
platform: ubuntu-latest
- python: "3.14"
platform: ubuntu-latest
+ - python: "3.15"
+ platform: ubuntu-latest
- python: pypy3.10
platform: ubuntu-latest
runs-on: ${{ matrix.platform }}
- continue-on-error: ${{ matrix.python == '3.14' }}
+ continue-on-error: ${{ matrix.python == '3.15' }}
steps:
- uses: actions/checkout@v4
- name: Install build dependencies
# Install dependencies for building packages on pre-release Pythons
# jaraco/skeleton#161
- if: matrix.python == '3.14' && matrix.platform == 'ubuntu-latest'
+ if: matrix.python == '3.15' && matrix.platform == 'ubuntu-latest'
run: |
sudo apt update
sudo apt install -y libxml2-dev libxslt-dev
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/.pre-commit-config.yaml
new/jaraco_context-6.1.2/.pre-commit-config.yaml
--- old/jaraco_context-6.1.0/.pre-commit-config.yaml 2026-01-13
03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/.pre-commit-config.yaml 2026-03-20
23:13:11.000000000 +0100
@@ -2,6 +2,6 @@
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.0
hooks:
- - id: ruff
+ - id: ruff-check
args: [--fix, --unsafe-fixes]
- id: ruff-format
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/NEWS.rst
new/jaraco_context-6.1.2/NEWS.rst
--- old/jaraco_context-6.1.0/NEWS.rst 2026-01-13 03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/NEWS.rst 2026-03-20 23:13:11.000000000 +0100
@@ -1,3 +1,15 @@
+v6.1.2
+======
+
+No significant changes.
+
+
+v6.1.1
+======
+
+No significant changes.
+
+
v6.1.0
======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/PKG-INFO
new/jaraco_context-6.1.2/PKG-INFO
--- old/jaraco_context-6.1.0/PKG-INFO 2026-01-13 03:53:49.933753500 +0100
+++ new/jaraco_context-6.1.2/PKG-INFO 2026-03-20 23:13:29.458800300 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: jaraco.context
-Version: 6.1.0
+Version: 6.1.2
Summary: Useful decorators and context managers
Author-email: "Jason R. Coombs" <[email protected]>
License-Expression: MIT
@@ -9,7 +9,7 @@
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Requires-Python: >=3.9
+Requires-Python: >=3.10
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: backports.tarfile; python_version < "3.12"
@@ -25,15 +25,14 @@
Requires-Dist: sphinx-lint; extra == "doc"
Requires-Dist: jaraco.tidelift>=1.4; extra == "doc"
Provides-Extra: check
-Requires-Dist: pytest-checkdocs>=2.4; extra == "check"
+Requires-Dist: pytest-checkdocs>=2.14; extra == "check"
Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra ==
"check"
Provides-Extra: cover
Requires-Dist: pytest-cov; extra == "cover"
Provides-Extra: enabler
Requires-Dist: pytest-enabler>=3.4; extra == "enabler"
Provides-Extra: type
-Requires-Dist: pytest-mypy>=1.0.1; extra == "type"
-Requires-Dist: mypy<1.19; platform_python_implementation == "PyPy" and extra
== "type"
+Requires-Dist: pytest-mypy>=1.0.1; platform_python_implementation != "PyPy"
and extra == "type"
Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/jaraco.context.svg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/conftest.py
new/jaraco_context-6.1.2/conftest.py
--- old/jaraco_context-6.1.0/conftest.py 2026-01-13 03:53:29.000000000
+0100
+++ new/jaraco_context-6.1.2/conftest.py 2026-03-20 23:13:11.000000000
+0100
@@ -1,20 +1,24 @@
+from __future__ import annotations
+
import functools
import http.server
import io
import tarfile
import threading
+from collections.abc import Generator
+from pathlib import Path
import portend
import pytest
class QuietHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
- def log_message(self, format, *args):
+ def log_message(self, format: object, *args: object) -> None:
pass
@pytest.fixture
-def tarfile_served(tmp_path_factory):
+def tarfile_served(tmp_path_factory: pytest.TempPathFactory) -> Generator[str]:
"""
Start an HTTP server serving a tarfile.
"""
@@ -29,7 +33,7 @@
yield url + '/served.tgz'
-def start_server(path):
+def start_server(path: Path) -> tuple[http.server.HTTPServer, str]:
_host, port = addr = ('', portend.find_available_local_port())
Handler = functools.partial(QuietHTTPRequestHandler, directory=path)
httpd = http.server.HTTPServer(addr, Handler)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/docs/conf.py
new/jaraco_context-6.1.2/docs/conf.py
--- old/jaraco_context-6.1.0/docs/conf.py 2026-01-13 03:53:29.000000000
+0100
+++ new/jaraco_context-6.1.2/docs/conf.py 2026-03-20 23:13:11.000000000
+0100
@@ -34,10 +34,6 @@
nitpicky = True
nitpick_ignore: list[tuple[str, str]] = []
-nitpick_ignore = [
- ('py:class', 'contextlib.suppress'),
- ('py:class', 'jaraco.context.T'),
-]
# Include Python intersphinx mapping to prevent failures
# jaraco/skeleton#51
@@ -62,3 +58,19 @@
# local
extensions += ['jaraco.tidelift']
+
+nitpick_ignore = [
+ ('py:class', 'OptExcInfo'),
+ ('py:class', 'StrPath'),
+ ('py:class', '_FileDescriptorOrPathT'),
+ ('py:class', '_P'),
+ ('py:class', '_P.args'),
+ ('py:class', '_P.kwargs'),
+ ('py:class', '_R'),
+ ('py:class', '_T2_co'),
+ ('py:class', 'contextlib.suppress'),
+ ('py:class', 'functools._Wrapped'),
+ ('py:class', 'jaraco.context.T'),
+ ('py:class', 'jaraco.context._T2_co'),
+ ('py:class', 'shutil._RmtreeType'),
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/jaraco/context/__init__.py
new/jaraco_context-6.1.2/jaraco/context/__init__.py
--- old/jaraco_context-6.1.0/jaraco/context/__init__.py 2026-01-13
03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/jaraco/context/__init__.py 2026-03-20
23:13:11.000000000 +0100
@@ -1,5 +1,6 @@
from __future__ import annotations
+import builtins
import contextlib
import errno
import functools
@@ -12,16 +13,44 @@
import sys
import tempfile
import urllib.request
-from collections.abc import Iterator
-
-if sys.version_info < (3, 12):
- from backports import tarfile
+from collections.abc import Callable, Generator, Iterator
+from types import TracebackType
+from typing import (
+ TYPE_CHECKING,
+ Literal,
+ TypeVar,
+ cast,
+)
+
+# jaraco/backports.tarfile#1
+if TYPE_CHECKING or sys.version_info >= (3, 12):
+ import tarfile # pragma: no cover
else:
- import tarfile
+ from backports import tarfile # pragma: no cover
+
+if TYPE_CHECKING:
+ from typing import TypeAlias
+
+ from _typeshed import FileDescriptorOrPath, OptExcInfo, StrPath
+ from typing_extensions import ParamSpec, Self, Unpack
+
+ _FileDescriptorOrPathT = TypeVar(
+ "_FileDescriptorOrPathT", bound=FileDescriptorOrPath
+ )
+ _P = ParamSpec("_P")
+
+_UnpackableOptExcInfo: TypeAlias = tuple[
+ type[BaseException] | None,
+ BaseException | None,
+ TracebackType | None,
+]
+_R = TypeVar("_R")
+_T1_co = TypeVar("_T1_co", covariant=True)
+_T2_co = TypeVar("_T2_co", covariant=True)
@contextlib.contextmanager
-def pushd(dir: str | os.PathLike) -> Iterator[str | os.PathLike]:
+def pushd(dir: StrPath) -> Iterator[StrPath]:
"""
>>> tmp_path = getfixture('tmp_path')
>>> with pushd(tmp_path):
@@ -38,9 +67,7 @@
@contextlib.contextmanager
-def tarball(
- url, target_dir: str | os.PathLike | None = None
-) -> Iterator[str | os.PathLike]:
+def tarball(url: str, target_dir: StrPath | None = None) -> Iterator[StrPath]:
"""
Get a URL to a tarball, download, extract, yield, then clean up.
@@ -83,8 +110,8 @@
shutil.rmtree(target_dir)
-def _compose_tarfile_filters(*filters):
- def compose_two(f1, f2):
+def _compose_tarfile_filters(*filters): # type: ignore[no-untyped-def]
+ def compose_two(f1, f2): # type: ignore[no-untyped-def]
return lambda member, path: f1(f2(member, path), path)
return functools.reduce(compose_two, filters, lambda member, path: member)
@@ -92,16 +119,24 @@
def strip_first_component(
member: tarfile.TarInfo,
- path,
+ path: object,
) -> tarfile.TarInfo:
_, member.name = member.name.split('/', 1)
return member
-_default_filter = _compose_tarfile_filters(tarfile.data_filter,
strip_first_component)
+_default_filter = _compose_tarfile_filters(tarfile.data_filter,
strip_first_component) # type: ignore[no-untyped-call]
-def _compose(*cmgrs):
+def _compose(
+ *cmgrs: Unpack[
+ tuple[
+ # Flipped from compose_two because of reverse
+ Callable[[_T1_co], contextlib.AbstractContextManager[_T2_co]],
+ Callable[_P, contextlib.AbstractContextManager[_T1_co]],
+ ]
+ ],
+) -> Callable[_P, contextlib._GeneratorContextManager[_T2_co]]:
"""
Compose any number of dependent context managers into a single one.
@@ -121,14 +156,21 @@
... assert os.path.samefile(os.getcwd(), dir)
"""
- def compose_two(inner, outer):
- def composed(*args, **kwargs):
+ def compose_two(
+ inner: Callable[_P, contextlib.AbstractContextManager[_T1_co]],
+ outer: Callable[[_T1_co], contextlib.AbstractContextManager[_T2_co]],
+ ) -> Callable[_P, contextlib._GeneratorContextManager[_T2_co]]:
+ def composed(*args: _P.args, **kwargs: _P.kwargs) -> Generator[_T2_co]:
with inner(*args, **kwargs) as saved, outer(saved) as res:
yield res
return contextlib.contextmanager(composed)
- return functools.reduce(compose_two, reversed(cmgrs))
+ # reversed makes cmgrs no longer variadic, breaking type validation
+ # Mypy infers compose_two as Callable[[function, function], function]. See:
+ # - https://github.com/python/typeshed/issues/7580
+ # - https://github.com/python/mypy/issues/8240
+ return functools.reduce(compose_two, reversed(cmgrs)) # type:
ignore[return-value, arg-type]
tarball_cwd = _compose(pushd, tarball)
@@ -137,7 +179,11 @@
"""
-def remove_readonly(func, path, exc_info):
+def remove_readonly(
+ func: Callable[[_FileDescriptorOrPathT], object],
+ path: _FileDescriptorOrPathT,
+ exc_info: tuple[object, OSError, object],
+) -> None:
"""
Add support for removing read-only files on Windows.
"""
@@ -151,16 +197,20 @@
raise
-def robust_remover():
+def robust_remover() -> Callable[..., None]:
return (
- functools.partial(shutil.rmtree, onerror=remove_readonly)
+ functools.partial(
+ # cast for python/mypy#18637 / python/mypy#17585
+ cast("Callable[..., None]", shutil.rmtree),
+ onerror=remove_readonly,
+ )
if platform.system() == 'Windows'
else shutil.rmtree
)
@contextlib.contextmanager
-def temp_dir(remover=shutil.rmtree):
+def temp_dir(remover: Callable[[str], object] = shutil.rmtree) ->
Generator[str]:
"""
Create a temporary directory context. Pass a custom remover
to override the removal behavior.
@@ -182,8 +232,11 @@
@contextlib.contextmanager
def repo_context(
- url, branch: str | None = None, quiet: bool = True,
dest_ctx=robust_temp_dir
-):
+ url: str,
+ branch: str | None = None,
+ quiet: bool = True,
+ dest_ctx: Callable[[], contextlib.AbstractContextManager[str]] =
robust_temp_dir,
+) -> Generator[str]:
"""
Check out the repo indicated by url.
@@ -201,7 +254,7 @@
exe = 'git' if 'git' in url else 'hg'
with dest_ctx() as repo_dir:
cmd = [exe, 'clone', url, repo_dir]
- cmd.extend(['--branch', branch] * bool(branch))
+ cmd.extend(['--branch', branch] * bool(branch)) # type:
ignore[list-item]
stream = subprocess.DEVNULL if quiet else None
subprocess.check_call(cmd, stdout=stream, stderr=stream)
yield repo_dir
@@ -241,49 +294,49 @@
False
"""
- exc_info = None, None, None
+ exc_info: OptExcInfo = None, None, None
- def __init__(self, exceptions=(Exception,)):
+ def __init__(self, exceptions: tuple[type[BaseException], ...] =
(Exception,)):
self.exceptions = exceptions
- def __enter__(self):
+ def __enter__(self) -> Self:
return self
@property
- def type(self):
+ def type(self) -> type[BaseException] | None:
return self.exc_info[0]
@property
- def value(self):
+ def value(self) -> BaseException | None:
return self.exc_info[1]
@property
- def tb(self):
+ def tb(self) -> TracebackType | None:
return self.exc_info[2]
- def __exit__(self, *exc_info):
- type = exc_info[0]
- matches = type and issubclass(type, self.exceptions)
+ def __exit__(
+ self,
+ *exc_info: Unpack[_UnpackableOptExcInfo], # noqa: PYI036 # We can do
better than object
+ ) -> builtins.type[BaseException] | None | bool:
+ exc_type = exc_info[0]
+ matches = exc_type and issubclass(exc_type, self.exceptions)
if matches:
- self.exc_info = exc_info
+ self.exc_info = exc_info # type: ignore[assignment]
return matches
- def __bool__(self):
+ def __bool__(self) -> bool:
return bool(self.type)
- def raises(self, func, *, _test=bool):
+ def raises(
+ self, func: Callable[_P, _R], *, _test: Callable[[ExceptionTrap],
bool] = bool
+ ) -> functools._Wrapped[_P, _R, _P, bool]:
"""
Wrap func and replace the result with the truth
value of the trap (True if an exception occurred).
- First, give the decorator an alias to support Python 3.8
- Syntax.
-
- >>> raises = ExceptionTrap(ValueError).raises
-
- Now decorate a function that always fails.
+ Decorate a function that always fails.
- >>> @raises
+ >>> @ExceptionTrap(ValueError).raises
... def fail():
... raise ValueError('failed')
>>> fail()
@@ -291,26 +344,21 @@
"""
@functools.wraps(func)
- def wrapper(*args, **kwargs):
+ def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> bool:
with ExceptionTrap(self.exceptions) as trap:
func(*args, **kwargs)
return _test(trap)
return wrapper
- def passes(self, func):
+ def passes(self, func: Callable[_P, _R]) -> functools._Wrapped[_P, _R, _P,
bool]:
"""
Wrap func and replace the result with the truth
value of the trap (True if no exception).
- First, give the decorator an alias to support Python 3.8
- Syntax.
-
- >>> passes = ExceptionTrap(ValueError).passes
-
- Now decorate a function that always fails.
+ Decorate a function that always fails.
- >>> @passes
+ >>> @ExceptionTrap(ValueError).passes
... def fail():
... raise ValueError('failed')
@@ -352,16 +400,23 @@
... on_interrupt('ignore')(do_interrupt)()
"""
- def __init__(self, action='error', /, code=1):
+ def __init__(
+ self, action: Literal['ignore', 'suppress', 'error'] = 'error', /,
code: int = 1
+ ):
self.action = action
self.code = code
- def __enter__(self):
+ def __enter__(self) -> Self:
return self
- def __exit__(self, exctype, excinst, exctb):
+ def __exit__(
+ self,
+ exctype: type[BaseException] | None,
+ excinst: BaseException | None,
+ exctb: TracebackType | None,
+ ) -> None | bool:
if exctype is not KeyboardInterrupt or self.action == 'ignore':
- return
+ return None
elif self.action == 'error':
raise SystemExit(self.code) from excinst
return self.action == 'suppress'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jaraco_context-6.1.0/jaraco.context.egg-info/PKG-INFO
new/jaraco_context-6.1.2/jaraco.context.egg-info/PKG-INFO
--- old/jaraco_context-6.1.0/jaraco.context.egg-info/PKG-INFO 2026-01-13
03:53:49.000000000 +0100
+++ new/jaraco_context-6.1.2/jaraco.context.egg-info/PKG-INFO 2026-03-20
23:13:29.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: jaraco.context
-Version: 6.1.0
+Version: 6.1.2
Summary: Useful decorators and context managers
Author-email: "Jason R. Coombs" <[email protected]>
License-Expression: MIT
@@ -9,7 +9,7 @@
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Requires-Python: >=3.9
+Requires-Python: >=3.10
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: backports.tarfile; python_version < "3.12"
@@ -25,15 +25,14 @@
Requires-Dist: sphinx-lint; extra == "doc"
Requires-Dist: jaraco.tidelift>=1.4; extra == "doc"
Provides-Extra: check
-Requires-Dist: pytest-checkdocs>=2.4; extra == "check"
+Requires-Dist: pytest-checkdocs>=2.14; extra == "check"
Requires-Dist: pytest-ruff>=0.2.1; sys_platform != "cygwin" and extra ==
"check"
Provides-Extra: cover
Requires-Dist: pytest-cov; extra == "cover"
Provides-Extra: enabler
Requires-Dist: pytest-enabler>=3.4; extra == "enabler"
Provides-Extra: type
-Requires-Dist: pytest-mypy>=1.0.1; extra == "type"
-Requires-Dist: mypy<1.19; platform_python_implementation == "PyPy" and extra
== "type"
+Requires-Dist: pytest-mypy>=1.0.1; platform_python_implementation != "PyPy"
and extra == "type"
Dynamic: license-file
.. image:: https://img.shields.io/pypi/v/jaraco.context.svg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jaraco_context-6.1.0/jaraco.context.egg-info/requires.txt
new/jaraco_context-6.1.2/jaraco.context.egg-info/requires.txt
--- old/jaraco_context-6.1.0/jaraco.context.egg-info/requires.txt
2026-01-13 03:53:49.000000000 +0100
+++ new/jaraco_context-6.1.2/jaraco.context.egg-info/requires.txt
2026-03-20 23:13:29.000000000 +0100
@@ -3,7 +3,7 @@
backports.tarfile
[check]
-pytest-checkdocs>=2.4
+pytest-checkdocs>=2.14
[check:sys_platform != "cygwin"]
pytest-ruff>=0.2.1
@@ -28,7 +28,6 @@
portend
[type]
-pytest-mypy>=1.0.1
-[type:platform_python_implementation == "PyPy"]
-mypy<1.19
+[type:platform_python_implementation != "PyPy"]
+pytest-mypy>=1.0.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/mypy.ini
new/jaraco_context-6.1.2/mypy.ini
--- old/jaraco_context-6.1.0/mypy.ini 2026-01-13 03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/mypy.ini 2026-03-20 23:13:11.000000000 +0100
@@ -1,6 +1,6 @@
[mypy]
# Is the project well-typed?
-strict = False
+strict = True
# Early opt-in even when strict = False
warn_unused_ignores = True
@@ -14,6 +14,10 @@
# Disable due to many false positives
overload-overlap,
+# jaraco/backports.tarfile#1
+[mypy-backports.*]
+follow_untyped_imports = True
+
# jaraco/portend#17
[mypy-portend.*]
ignore_missing_imports = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/pyproject.toml
new/jaraco_context-6.1.2/pyproject.toml
--- old/jaraco_context-6.1.0/pyproject.toml 2026-01-13 03:53:29.000000000
+0100
+++ new/jaraco_context-6.1.2/pyproject.toml 2026-03-20 23:13:11.000000000
+0100
@@ -20,7 +20,7 @@
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
]
-requires-python = ">=3.9"
+requires-python = ">=3.10"
license = "MIT"
dependencies = [
'backports.tarfile; python_version < "3.12"',
@@ -55,7 +55,7 @@
]
check = [
- "pytest-checkdocs >= 2.4",
+ "pytest-checkdocs >= 2.14",
"pytest-ruff >= 0.2.1; sys_platform != 'cygwin'",
]
@@ -69,17 +69,11 @@
type = [
# upstream
- "pytest-mypy >= 1.0.1",
-
- ## workaround for python/mypy#20454
- "mypy < 1.19; python_implementation == 'PyPy'",
+
+ # Exclude PyPy from type checks (python/mypy#20454 jaraco/skeleton#187)
+ "pytest-mypy >= 1.0.1; platform_python_implementation != 'PyPy'",
# local
]
-
[tool.setuptools_scm]
-
-
-[tool.pytest-enabler.mypy]
-# Disabled due to jaraco/skeleton#143
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/tests/test_safety.py
new/jaraco_context-6.1.2/tests/test_safety.py
--- old/jaraco_context-6.1.0/tests/test_safety.py 2026-01-13
03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/tests/test_safety.py 2026-03-20
23:13:11.000000000 +0100
@@ -1,3 +1,5 @@
+# type: ignore
+
import io
import sys
import types
@@ -33,7 +35,7 @@
expect=does_not_raise(),
),
marks=pytest.mark.skipif(
- (3, 11) < sys.version_info < (3, 13),
+ (3, 12) <= sys.version_info < (3, 13),
reason='Fails with FileExistsError on Python 3.12',
),
),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jaraco_context-6.1.0/tox.ini
new/jaraco_context-6.1.2/tox.ini
--- old/jaraco_context-6.1.0/tox.ini 2026-01-13 03:53:29.000000000 +0100
+++ new/jaraco_context-6.1.2/tox.ini 2026-03-20 23:13:11.000000000 +0100
@@ -20,7 +20,7 @@
diff-cover
commands =
pytest {posargs} --cov-report xml
- diff-cover coverage.xml --compare-branch=origin/main --html-report
diffcov.html
+ diff-cover coverage.xml --compare-branch=origin/main --format
html:diffcov.html
diff-cover coverage.xml --compare-branch=origin/main --fail-under=100
[testenv:docs]