diff --git a/src/pipx/package_specifier.py b/src/pipx/package_specifier.py index 26ced4f471..e3b1985af2 100644 --- a/src/pipx/package_specifier.py +++ b/src/pipx/package_specifier.py @@ -9,8 +9,9 @@ import logging import re import urllib.parse +from dataclasses import dataclass from pathlib import Path -from typing import List, NamedTuple, Optional, Set, Tuple +from typing import List, Optional, Set, Tuple from packaging.requirements import InvalidRequirement, Requirement from packaging.specifiers import SpecifierSet @@ -24,7 +25,8 @@ ARCHIVE_EXTENSIONS = (".whl", ".tar.gz", ".zip") -class ParsedPackage(NamedTuple): +@dataclass(frozen=True) +class ParsedPackage: valid_pep508: Optional[Requirement] valid_url: Optional[str] valid_local_path: Optional[str] diff --git a/src/pipx/util.py b/src/pipx/util.py index e5fd72f276..7b18320d1a 100644 --- a/src/pipx/util.py +++ b/src/pipx/util.py @@ -7,12 +7,12 @@ import subprocess import sys import textwrap +from dataclasses import dataclass from pathlib import Path from typing import ( Any, Dict, List, - NamedTuple, NoReturn, Optional, Pattern, @@ -36,7 +36,8 @@ def __init__(self, message: str, wrap_message: bool = True): super().__init__(message) -class RelevantSearch(NamedTuple): +@dataclass(frozen=True) +class RelevantSearch: pattern: Pattern[str] category: str