Update the xxhash and hashlib stubs (#6031)

* `name`, `block_size`, `digest_size` and `digestsize` attributes of hash objects were made read-only.
* It is now a type-checking error to subclass `xxhash` classes, such as `xxhash.xxh32`. Previously it was an error only at runtime.
* `xxhash` functions now accept strings as input and any object with `__index__()` method for `seed` (instead of requiring an integer). They also fail the type checking if no arguments are given.
This commit is contained in:
Bas van Beek
2021-09-14 11:01:11 +02:00
committed by GitHub
parent ca38856670
commit a1ca55037a
3 changed files with 41 additions and 28 deletions

View File

@@ -3,10 +3,14 @@ from typing import Tuple, Union
_DataType = Union[str, unicode, bytearray, buffer, memoryview]
class _hash(object): # This is not actually in the module namespace.
name: str
block_size: int
digest_size: int
digestsize: int
@property
def name(self) -> str: ...
@property
def block_size(self) -> int: ...
@property
def digest_size(self) -> int: ...
@property
def digestsize(self) -> int: ...
def __init__(self, arg: _DataType = ...) -> None: ...
def update(self, arg: _DataType) -> None: ...
def digest(self) -> str: ...

View File

@@ -1,17 +1,16 @@
import sys
from _typeshed import ReadableBuffer
from _typeshed import ReadableBuffer, Self
from typing import AbstractSet
class _Hash(object):
digest_size: int
block_size: int
# [Python documentation note] Changed in version 3.4: The name attribute has
# been present in CPython since its inception, but until Python 3.4 was not
# formally specified, so may not exist on some platforms
name: str
@property
def digest_size(self) -> int: ...
@property
def block_size(self) -> int: ...
@property
def name(self) -> str: ...
def __init__(self, data: ReadableBuffer = ...) -> None: ...
def copy(self) -> _Hash: ...
def copy(self: Self) -> Self: ...
def digest(self) -> bytes: ...
def hexdigest(self) -> str: ...
def update(self, __data: ReadableBuffer) -> None: ...

View File

@@ -1,5 +1,6 @@
import sys
from _typeshed import ReadableBuffer
from typing_extensions import SupportsIndex, final
if sys.version_info >= (3, 0):
from hashlib import _Hash
@@ -10,30 +11,39 @@ VERSION: str
XXHASH_VERSION: str
class _IntDigestHash(_Hash):
seed: int
digestsize: int
def __init__(self, __string: ReadableBuffer = ..., seed: int = ...) -> None: ...
@property
def seed(self) -> int: ...
@property
def digestsize(self) -> int: ...
def __init__(self, input: ReadableBuffer | str = ..., seed: SupportsIndex = ...) -> None: ...
def intdigest(self) -> int: ...
def reset(self) -> None: ...
# python-xxhash v2.0.0 does not support the string or usedforsecurity kwargs
@final
class xxh32(_IntDigestHash): ...
@final
class xxh64(_IntDigestHash): ...
@final
class xxh3_64(_IntDigestHash): ...
@final
class xxh3_128(_IntDigestHash): ...
def xxh32_digest(input: ReadableBuffer = ..., seed: int = ...) -> bytes: ...
def xxh32_intdigest(input: ReadableBuffer = ..., seed: int = ...) -> int: ...
def xxh32_hexdigest(input: ReadableBuffer = ..., seed: int = ...) -> str: ...
def xxh64_digest(input: ReadableBuffer = ..., seed: int = ...) -> bytes: ...
def xxh64_intdigest(input: ReadableBuffer = ..., seed: int = ...) -> int: ...
def xxh64_hexdigest(input: ReadableBuffer = ..., seed: int = ...) -> str: ...
def xxh3_64_digest(input: ReadableBuffer = ..., seed: int = ...) -> bytes: ...
def xxh3_64_intdigest(input: ReadableBuffer = ..., seed: int = ...) -> int: ...
def xxh3_64_hexdigest(input: ReadableBuffer = ..., seed: int = ...) -> str: ...
def xxh3_128_digest(input: ReadableBuffer = ..., seed: int = ...) -> bytes: ...
def xxh3_128_intdigest(input: ReadableBuffer = ..., seed: int = ...) -> int: ...
def xxh3_128_hexdigest(input: ReadableBuffer = ..., seed: int = ...) -> str: ...
def xxh32_digest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> bytes: ...
def xxh32_intdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> int: ...
def xxh32_hexdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> str: ...
def xxh64_digest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> bytes: ...
def xxh64_intdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> int: ...
def xxh64_hexdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> str: ...
def xxh3_64_digest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> bytes: ...
def xxh3_64_intdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> int: ...
def xxh3_64_hexdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> str: ...
def xxh3_128_digest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> bytes: ...
def xxh3_128_intdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> int: ...
def xxh3_128_hexdigest(input: ReadableBuffer | str, seed: SupportsIndex = ...) -> str: ...
xxh128 = xxh3_128
xxh128_digest = xxh3_128_digest