121 lines
3.8 KiB
Python
121 lines
3.8 KiB
Python
import re
|
|
from collections.abc import Callable
|
|
from typing import (
|
|
Any,
|
|
ClassVar,
|
|
Final,
|
|
Generic,
|
|
NamedTuple,
|
|
TypeVar,
|
|
final,
|
|
type_check_only,
|
|
)
|
|
from typing import (
|
|
Literal as L,
|
|
)
|
|
|
|
from typing_extensions import TypeIs
|
|
|
|
__all__ = ["VERSION_PATTERN", "InvalidVersion", "LegacyVersion", "Version", "parse"]
|
|
|
|
###
|
|
|
|
_CmpKeyT = TypeVar("_CmpKeyT", bound=tuple[object, ...])
|
|
_CmpKeyT_co = TypeVar("_CmpKeyT_co", bound=tuple[object, ...], default=tuple[Any, ...], covariant=True)
|
|
|
|
###
|
|
|
|
VERSION_PATTERN: Final[str] = ...
|
|
|
|
class InvalidVersion(ValueError): ...
|
|
|
|
@type_check_only
|
|
@final
|
|
class _InfinityType:
|
|
def __hash__(self) -> int: ...
|
|
def __eq__(self, other: object, /) -> TypeIs[_InfinityType]: ...
|
|
def __ne__(self, other: object, /) -> bool: ...
|
|
def __lt__(self, other: object, /) -> L[False]: ...
|
|
def __le__(self, other: object, /) -> L[False]: ...
|
|
def __gt__(self, other: object, /) -> L[True]: ...
|
|
def __ge__(self, other: object, /) -> L[True]: ...
|
|
def __neg__(self) -> _NegativeInfinityType: ...
|
|
|
|
Infinity: Final[_InfinityType] = ...
|
|
|
|
@type_check_only
|
|
@final
|
|
class _NegativeInfinityType:
|
|
def __hash__(self) -> int: ...
|
|
def __eq__(self, other: object, /) -> TypeIs[_NegativeInfinityType]: ...
|
|
def __ne__(self, other: object, /) -> bool: ...
|
|
def __lt__(self, other: object, /) -> L[True]: ...
|
|
def __le__(self, other: object, /) -> L[True]: ...
|
|
def __gt__(self, other: object, /) -> L[False]: ...
|
|
def __ge__(self, other: object, /) -> L[False]: ...
|
|
def __neg__(self) -> _InfinityType: ...
|
|
|
|
NegativeInfinity: Final[_NegativeInfinityType] = ...
|
|
|
|
class _Version(NamedTuple):
|
|
epoch: int
|
|
release: tuple[int, ...]
|
|
dev: tuple[str, int] | None
|
|
pre: tuple[str, int] | None
|
|
post: tuple[str, int] | None
|
|
local: tuple[str | int, ...] | None
|
|
|
|
class _BaseVersion(Generic[_CmpKeyT_co]):
|
|
_key: _CmpKeyT_co
|
|
def __hash__(self) -> int: ...
|
|
def __eq__(self, other: _BaseVersion, /) -> bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
|
|
def __ne__(self, other: _BaseVersion, /) -> bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
|
|
def __lt__(self, other: _BaseVersion, /) -> bool: ...
|
|
def __le__(self, other: _BaseVersion, /) -> bool: ...
|
|
def __ge__(self, other: _BaseVersion, /) -> bool: ...
|
|
def __gt__(self, other: _BaseVersion, /) -> bool: ...
|
|
def _compare(self, /, other: _BaseVersion[_CmpKeyT], method: Callable[[_CmpKeyT_co, _CmpKeyT], bool]) -> bool: ...
|
|
|
|
class LegacyVersion(_BaseVersion[tuple[L[-1], tuple[str, ...]]]):
|
|
_version: Final[str]
|
|
def __init__(self, /, version: str) -> None: ...
|
|
@property
|
|
def public(self) -> str: ...
|
|
@property
|
|
def base_version(self) -> str: ...
|
|
@property
|
|
def local(self) -> None: ...
|
|
@property
|
|
def is_prerelease(self) -> L[False]: ...
|
|
@property
|
|
def is_postrelease(self) -> L[False]: ...
|
|
|
|
class Version(
|
|
_BaseVersion[
|
|
tuple[
|
|
int, # epoch
|
|
tuple[int, ...], # release
|
|
tuple[str, int] | _InfinityType | _NegativeInfinityType, # pre
|
|
tuple[str, int] | _NegativeInfinityType, # post
|
|
tuple[str, int] | _InfinityType, # dev
|
|
tuple[tuple[int, L[""]] | tuple[_NegativeInfinityType, str], ...] | _NegativeInfinityType, # local
|
|
],
|
|
],
|
|
):
|
|
_regex: ClassVar[re.Pattern[str]] = ...
|
|
_version: Final[str]
|
|
|
|
def __init__(self, /, version: str) -> None: ...
|
|
@property
|
|
def public(self) -> str: ...
|
|
@property
|
|
def base_version(self) -> str: ...
|
|
@property
|
|
def local(self) -> str | None: ...
|
|
@property
|
|
def is_prerelease(self) -> bool: ...
|
|
@property
|
|
def is_postrelease(self) -> bool: ...
|
|
|
|
#
|
|
def parse(version: str) -> Version | LegacyVersion: ...
|