diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8cab7cc..14aee19 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,6 @@ jobs: - '3.11' - '3.10' - '3.9' - - '3.8' name: Python ${{ matrix.python }} steps: # Python @@ -46,7 +45,7 @@ jobs: - name: Run tests run: pytest --ignore=tests/test_pattern_matching.py --ignore=tests/type_checking/test_result.yml - name: Run tests (type checking) - if: matrix.python != '3.8' && matrix.python != '3.9' + if: matrix.python != '3.9' # These started breaking for <= 3.9, due to the type checker using a # '|' for unions rather than 'Union[...]', so it's not possible to run # the tests without maintaining two duplicate files (one for <= 3.9 and @@ -59,10 +58,10 @@ jobs: # Linters - name: Run flake8 (Python >= 3.10) run: make lint-flake - if: matrix.python != '3.9' && matrix.python != '3.8' + if: matrix.python != '3.9' - name: Run flake8 (Python < 3.10) run: make lint-flake-pre310 - if: matrix.python == '3.9' || matrix.python == '3.8' + if: matrix.python == '3.9' - name: Run mypy run: make lint-mypy diff --git a/CHANGELOG.md b/CHANGELOG.md index 73f5d08..50c0380 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Possible log types: - `[changed]` Improve type narrowing for `is_ok` and `is_err` type guards by replacing `typing.TypeGuard` with `typing.TypeIs` (#193) +- `[removed]` Drop support for Python 3.8 (#180) ## [0.17.0] - 2024-06-02 diff --git a/setup.cfg b/setup.cfg index b45c8f3..4a4fdca 100644 --- a/setup.cfg +++ b/setup.cfg @@ -15,7 +15,6 @@ classifiers = Development Status :: 4 - Beta License :: OSI Approved :: MIT License Programming Language :: Python :: 3 - Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 @@ -29,7 +28,7 @@ install_requires = package_dir = =src packages = find: -python_requires = >=3.8 +python_requires = >=3.9 zip_safe = True [options.packages.find] diff --git a/src/result/result.py b/src/result/result.py index 8551239..1739a68 100644 --- a/src/result/result.py +++ b/src/result/result.py @@ -6,19 +6,15 @@ from warnings import warn from typing import ( Any, - AsyncGenerator, - Awaitable, Callable, Final, - Generator, Generic, - Iterator, Literal, NoReturn, - Type, TypeVar, Union, ) +from collections.abc import AsyncGenerator, Awaitable, Generator, Iterator from typing_extensions import TypeIs @@ -52,7 +48,7 @@ def __init__(self, value: T) -> None: self._value = value def __repr__(self) -> str: - return "Ok({})".format(repr(self._value)) + return f"Ok({repr(self._value)})" def __eq__(self, other: Any) -> bool: return isinstance(other, Ok) and self._value == other._value @@ -251,7 +247,7 @@ def __init__(self, value: E) -> None: self._value = value def __repr__(self) -> str: - return "Err({})".format(repr(self._value)) + return f"Err({repr(self._value)})" def __eq__(self, other: Any) -> bool: return isinstance(other, Err) and self._value == other._value @@ -352,7 +348,7 @@ def unwrap_or_else(self, op: Callable[[E], T]) -> T: """ return op(self._value) - def unwrap_or_raise(self, e: Type[TBE]) -> NoReturn: + def unwrap_or_raise(self, e: type[TBE]) -> NoReturn: """ The contained result is ``Err``, so raise the exception with the value. """ @@ -465,7 +461,7 @@ def result(self) -> Result[Any, Any]: def as_result( - *exceptions: Type[TBE], + *exceptions: type[TBE], ) -> Callable[[Callable[P, R]], Callable[P, Result[R, TBE]]]: """ Make a decorator to turn a function into one that returns a ``Result``. @@ -497,7 +493,7 @@ def wrapper(*args: P.args, **kwargs: P.kwargs) -> Result[R, TBE]: def as_async_result( - *exceptions: Type[TBE], + *exceptions: type[TBE], ) -> Callable[[Callable[P, Awaitable[R]]], Callable[P, Awaitable[Result[R, TBE]]]]: """ Make a decorator to turn an async function into one that returns a ``Result``. @@ -563,7 +559,7 @@ def is_err(result: Result[T, E]) -> TypeIs[Err[E]]: return result.is_err() -def do(gen: Generator[Result[T, E], None, None]) -> Result[T, E]: +def do(gen: Generator[Result[T, E]]) -> Result[T, E]: """Do notation for Result (syntactic sugar for sequence of `and_then()` calls). @@ -609,7 +605,7 @@ def do(gen: Generator[Result[T, E], None, None]) -> Result[T, E]: async def do_async( - gen: Union[Generator[Result[T, E], None, None], AsyncGenerator[Result[T, E], None]] + gen: Generator[Result[T, E]] | AsyncGenerator[Result[T, E]] ) -> Result[T, E]: """Async version of do. Example: diff --git a/tox.ini b/tox.ini index b8f9e0a..9937ca4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py312,py311,py310,py39,py38 +envlist = py312,py311,py310,py39 [testenv] deps = -rrequirements-dev.txt