Skip to content

Commit 72a6db5

Browse files
authored
Add type hints to hyperframe
1 parent a4fa723 commit 72a6db5

File tree

9 files changed

+121
-104
lines changed

9 files changed

+121
-104
lines changed

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ dev
88

99
-
1010

11+
**API Changes (Backward-compatible)**
12+
13+
- Added type hints.
14+
1115
**Bugfixes**
1216

1317
-

MANIFEST.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ graft test
44
prune docs/build
55
prune test/http2-frame-test-case
66
include README.rst LICENSE CHANGELOG.rst CONTRIBUTORS.rst tox.ini .gitmodules
7+
include src/hyperframe/py.typed
78
global-exclude *.pyc *.pyo *.swo *.swp *.map *.yml *.DS_Store

setup.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,8 @@ source =
1919

2020
[flake8]
2121
max-line-length = 120
22+
23+
[check-manifest]
24+
ignore =
25+
Makefile
26+
test/http2-frame-test-case

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
author_email='cory@lukasa.co.uk',
3434
url='https://github.com/python-hyper/hyperframe/',
3535
packages=find_packages(where="src"),
36-
package_data={'': ['LICENSE', 'README.rst', 'CHANGELOG.rst']},
36+
package_data={'': ['LICENSE', 'README.rst', 'CHANGELOG.rst'], "hyperframe": ["py.typed"]},
3737
package_dir={'': 'src'},
3838
python_requires='>=3.6.1',
3939
include_package_data=True,

src/hyperframe/exceptions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@ class UnknownFrameError(HyperframeError):
2222
.. versionchanged:: 6.0.0
2323
Changed base class from `ValueError` to :class:`HyperframeError`
2424
"""
25-
def __init__(self, frame_type, length):
25+
def __init__(self, frame_type: int, length: int) -> None:
2626
#: The type byte of the unknown frame that was received.
2727
self.frame_type = frame_type
2828

2929
#: The length of the data portion of the unknown frame.
3030
self.length = length
3131

32-
def __str__(self):
32+
def __str__(self) -> str:
3333
return (
3434
"UnknownFrameError: Unknown frame type 0x%X received, "
3535
"length %d bytes" % (self.frame_type, self.length)

src/hyperframe/flags.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,43 @@
55
66
Defines basic Flag and Flags data structures.
77
"""
8-
import collections
98
from collections.abc import MutableSet
9+
from typing import NamedTuple, Iterable, Set, Iterator
1010

11-
Flag = collections.namedtuple("Flag", ["name", "bit"])
1211

12+
class Flag(NamedTuple):
13+
name: str
14+
bit: int
1315

14-
class Flags(MutableSet):
16+
17+
class Flags(MutableSet): # type: ignore
1518
"""
1619
A simple MutableSet implementation that will only accept known flags as
1720
elements.
1821
1922
Will behave like a regular set(), except that a ValueError will be thrown
2023
when .add()ing unexpected flags.
2124
"""
22-
def __init__(self, defined_flags):
25+
def __init__(self, defined_flags: Iterable[Flag]):
2326
self._valid_flags = set(flag.name for flag in defined_flags)
24-
self._flags = set()
27+
self._flags: Set[str] = set()
2528

26-
def __repr__(self):
29+
def __repr__(self) -> str:
2730
return repr(sorted(list(self._flags)))
2831

29-
def __contains__(self, x):
32+
def __contains__(self, x: object) -> bool:
3033
return self._flags.__contains__(x)
3134

32-
def __iter__(self):
35+
def __iter__(self) -> Iterator[str]:
3336
return self._flags.__iter__()
3437

35-
def __len__(self):
38+
def __len__(self) -> int:
3639
return self._flags.__len__()
3740

38-
def discard(self, value):
41+
def discard(self, value: str) -> None:
3942
return self._flags.discard(value)
4043

41-
def add(self, value):
44+
def add(self, value: str) -> None:
4245
if value not in self._valid_flags:
4346
raise ValueError(
4447
"Unexpected flag: {}. Valid flags are: {}".format(

0 commit comments

Comments
 (0)