Drop support for python 3.8 (#444)

Drops support for python 3.8 since it is EOL. The code refactoring is
due to ruff's formatting rules for 3.9.
This commit is contained in:
Kemal Zebari 2025-01-26 13:40:51 -08:00 committed by GitHub
parent 8218e8cb33
commit 99cdda2335
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 33 additions and 21 deletions

View File

@ -26,7 +26,6 @@ jobs:
- "3.11"
- "3.10"
- "3.9"
- "3.8"
- type
- dev
- pkg_meta

View File

@ -21,7 +21,7 @@ maintainers = [
{ name = "Bernát Gábor", email = "gaborjbernat@gmail.com" },
{ name = "Vineet Naik", email = "naikvin@gmail.com" },
]
requires-python = ">=3.8"
requires-python = ">=3.9"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
@ -30,7 +30,6 @@ classifiers = [
"Operating System :: OS Independent",
"Programming Language :: Python",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
@ -68,7 +67,6 @@ build.hooks.vcs.version-file = "src/pipdeptree/version.py"
version.source = "vcs"
[tool.ruff]
target-version = "py38"
line-length = 120
format.preview = true
format.docstring-code-line-length = 100

View File

@ -3,7 +3,7 @@
from __future__ import annotations
import sys
from typing import Sequence
from typing import TYPE_CHECKING
from pipdeptree._cli import get_options
from pipdeptree._detect_env import detect_active_interpreter
@ -13,6 +13,9 @@ from pipdeptree._render import render
from pipdeptree._validate import validate
from pipdeptree._warning import WarningPrinter, WarningType, get_warning_printer
if TYPE_CHECKING:
from collections.abc import Sequence
def main(args: Sequence[str] | None = None) -> int | None:
"""CLI - The main function called as entry point."""

View File

@ -3,12 +3,15 @@ from __future__ import annotations
import enum
import sys
from argparse import Action, ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace
from typing import Any, Sequence, cast
from typing import TYPE_CHECKING, Any, cast
from pipdeptree._warning import WarningType
from .version import __version__
if TYPE_CHECKING:
from collections.abc import Sequence
class Options(Namespace):
freeze: bool

View File

@ -6,12 +6,15 @@ import subprocess # noqa: S404
import sys
from importlib.metadata import Distribution, distributions
from pathlib import Path
from typing import Iterable, Tuple
from typing import TYPE_CHECKING
from packaging.utils import canonicalize_name
from pipdeptree._warning import get_warning_printer
if TYPE_CHECKING:
from collections.abc import Iterable
def get_installed_distributions(
interpreter: str = str(sys.executable),
@ -103,7 +106,7 @@ def render_invalid_metadata_text(site_dirs_with_invalid_metadata: set[str]) -> N
print(site_dir, file=sys.stderr) # noqa: T201
FirstSeenWithDistsPair = Tuple[Distribution, Distribution]
FirstSeenWithDistsPair = tuple[Distribution, Distribution]
def render_duplicated_dist_metadata_text(

View File

@ -2,9 +2,10 @@ from __future__ import annotations
import sys
from collections import defaultdict, deque
from collections.abc import Iterator, Mapping
from fnmatch import fnmatch
from itertools import chain
from typing import TYPE_CHECKING, Iterator, List, Mapping
from typing import TYPE_CHECKING
from packaging.utils import canonicalize_name
@ -25,7 +26,7 @@ def render_invalid_reqs_text(dist_name_to_invalid_reqs_dict: dict[str, list[str]
print(f' Skipping "{invalid_req}"', file=sys.stderr) # noqa: T201
class PackageDAG(Mapping[DistPackage, List[ReqPackage]]):
class PackageDAG(Mapping[DistPackage, list[ReqPackage]]):
"""
Representation of Package dependencies as directed acyclic graph using a dict as the underlying datastructure.

View File

@ -4,7 +4,7 @@ from abc import ABC, abstractmethod
from importlib import import_module
from importlib.metadata import Distribution, PackageNotFoundError, metadata, version
from inspect import ismodule
from typing import TYPE_CHECKING, Iterator
from typing import TYPE_CHECKING
from packaging.requirements import InvalidRequirement, Requirement
from packaging.utils import canonicalize_name
@ -12,6 +12,7 @@ from packaging.utils import canonicalize_name
from pipdeptree._freeze import dist_to_frozen_repr
if TYPE_CHECKING:
from collections.abc import Iterator
from importlib.metadata import Distribution

View File

@ -1,13 +1,14 @@
from __future__ import annotations
from itertools import chain
from typing import TYPE_CHECKING, Any, Callable, Iterator
from typing import TYPE_CHECKING, Any, Callable
import pytest
from pipdeptree._models import DistPackage, PackageDAG, ReqPackage, ReversedPackageDAG
if TYPE_CHECKING:
from collections.abc import Iterator
from unittest.mock import Mock
from tests.our_types import MockGraph

View File

@ -3,7 +3,7 @@ from __future__ import annotations
import locale
from pathlib import Path
from random import shuffle
from typing import TYPE_CHECKING, Callable, Iterator
from typing import TYPE_CHECKING, Callable
from unittest.mock import Mock
import pytest
@ -11,6 +11,8 @@ import pytest
from pipdeptree._models import PackageDAG
if TYPE_CHECKING:
from collections.abc import Iterator
from tests.our_types import MockGraph

View File

@ -1,8 +1,6 @@
from __future__ import annotations
from typing import Dict, List, Tuple
MockGraph = Dict[Tuple[str, str], List[Tuple[str, List[Tuple[str, str]]]]]
MockGraph = dict[tuple[str, str], list[tuple[str, list[tuple[str, str]]]]] # pragma: no cover
__all__ = [
"MockGraph",

View File

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Callable, Iterator
from typing import TYPE_CHECKING, Callable
import pytest
@ -8,6 +8,7 @@ from pipdeptree._models.dag import PackageDAG
from pipdeptree._render.json_tree import render_json_tree
if TYPE_CHECKING:
from collections.abc import Iterator
from unittest.mock import Mock
from tests.our_types import MockGraph

View File

@ -1,12 +1,13 @@
from __future__ import annotations
from textwrap import dedent, indent
from typing import TYPE_CHECKING, Callable, Iterator
from typing import TYPE_CHECKING, Callable
from pipdeptree._models import PackageDAG
from pipdeptree._render.mermaid import render_mermaid
if TYPE_CHECKING:
from collections.abc import Iterator
from unittest.mock import Mock
from tests.our_types import MockGraph

View File

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Callable, Iterator
from typing import TYPE_CHECKING, Callable
import pytest
@ -9,6 +9,7 @@ from pipdeptree._models.package import Package
from pipdeptree._render.text import render_text
if TYPE_CHECKING:
from collections.abc import Iterator
from unittest.mock import Mock
from tests.our_types import MockGraph

View File

@ -1,6 +1,6 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Callable, Iterator
from typing import TYPE_CHECKING, Callable
import pytest
@ -8,6 +8,7 @@ from pipdeptree._models import PackageDAG
from pipdeptree._validate import conflicting_deps, cyclic_deps, render_conflicts_text, render_cycles_text, validate
if TYPE_CHECKING:
from collections.abc import Iterator
from unittest.mock import Mock
from tests.our_types import MockGraph

View File

@ -6,7 +6,6 @@ env_list = [
"3.11",
"3.10",
"3.9",
"3.8",
"type",
"pkg_meta",
]