Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-hyperframe for 
openSUSE:Factory checked in at 2021-04-24 23:06:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-hyperframe (Old)
 and      /work/SRC/openSUSE:Factory/.python-hyperframe.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-hyperframe"

Sat Apr 24 23:06:37 2021 rev:7 rq:887378 version:6.0.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-hyperframe/python-hyperframe.changes      
2020-10-29 09:45:04.499985486 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-hyperframe.new.12324/python-hyperframe.changes
   2021-04-24 23:06:39.507183140 +0200
@@ -1,0 +2,7 @@
+Wed Apr 21 21:23:13 UTC 2021 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 6.0.1:
+  - Added support for Python 3.9.
+  - Added type hints.
+
+-------------------------------------------------------------------

Old:
----
  hyperframe-6.0.0.tar.gz

New:
----
  hyperframe-6.0.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-hyperframe.spec ++++++
--- /var/tmp/diff_new_pack.QruvRl/_old  2021-04-24 23:06:39.987183820 +0200
+++ /var/tmp/diff_new_pack.QruvRl/_new  2021-04-24 23:06:39.991183825 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-hyperframe
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-hyperframe
-Version:        6.0.0
+Version:        6.0.1
 Release:        0
 Summary:        HTTP/2 framing layer for Python
 License:        MIT

++++++ hyperframe-6.0.0.tar.gz -> hyperframe-6.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/CHANGELOG.rst 
new/hyperframe-6.0.1/CHANGELOG.rst
--- old/hyperframe-6.0.0/CHANGELOG.rst  2020-09-06 12:18:31.000000000 +0200
+++ new/hyperframe-6.0.1/CHANGELOG.rst  2021-04-17 14:07:57.000000000 +0200
@@ -1,8 +1,16 @@
 Release History
 ===============
 
+6.0.1 (2021-04-17)
+------------------
+
+**API Changes (Backward-compatible)**
+
+- Added support for Python 3.9.
+- Added type hints.
+
 6.0.0 (2020-09-06)
----------
+------------------
 
 **API Changes (Backward-incompatible)**
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/MANIFEST.in 
new/hyperframe-6.0.1/MANIFEST.in
--- old/hyperframe-6.0.0/MANIFEST.in    2020-08-02 18:16:59.000000000 +0200
+++ new/hyperframe-6.0.1/MANIFEST.in    2021-04-17 13:42:04.000000000 +0200
@@ -4,4 +4,5 @@
 prune docs/build
 prune test/http2-frame-test-case
 include README.rst LICENSE CHANGELOG.rst CONTRIBUTORS.rst tox.ini .gitmodules
+include src/hyperframe/py.typed
 global-exclude *.pyc *.pyo *.swo *.swp *.map *.yml *.DS_Store
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/PKG-INFO 
new/hyperframe-6.0.1/PKG-INFO
--- old/hyperframe-6.0.0/PKG-INFO       2020-09-06 12:21:04.228182000 +0200
+++ new/hyperframe-6.0.1/PKG-INFO       2021-04-17 14:11:06.773452800 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: hyperframe
-Version: 6.0.0
+Version: 6.0.1
 Summary: HTTP/2 framing layer for Python
 Home-page: https://github.com/python-hyper/hyperframe/
 Author: Cory Benfield
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/setup.cfg 
new/hyperframe-6.0.1/setup.cfg
--- old/hyperframe-6.0.0/setup.cfg      2020-09-06 12:21:04.229749200 +0200
+++ new/hyperframe-6.0.1/setup.cfg      2021-04-17 14:11:06.774795000 +0200
@@ -20,6 +20,11 @@
 [flake8]
 max-line-length = 120
 
+[check-manifest]
+ignore = 
+       Makefile
+       test/http2-frame-test-case
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/setup.py 
new/hyperframe-6.0.1/setup.py
--- old/hyperframe-6.0.0/setup.py       2020-08-02 18:16:59.000000000 +0200
+++ new/hyperframe-6.0.1/setup.py       2021-04-17 13:42:04.000000000 +0200
@@ -23,11 +23,6 @@
     else:
         raise RuntimeError("No version number found!")
 
-# Stealing this from Kenneth Reitz
-if sys.argv[-1] == 'publish':
-    os.system('python setup.py sdist upload')
-    sys.exit()
-
 setup(
     name='hyperframe',
     version=version,
@@ -38,7 +33,7 @@
     author_email='c...@lukasa.co.uk',
     url='https://github.com/python-hyper/hyperframe/',
     packages=find_packages(where="src"),
-    package_data={'': ['LICENSE', 'README.rst', 'CHANGELOG.rst']},
+    package_data={'': ['LICENSE', 'README.rst', 'CHANGELOG.rst'], 
"hyperframe": ["py.typed"]},
     package_dir={'': 'src'},
     python_requires='>=3.6.1',
     include_package_data=True,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe/__init__.py 
new/hyperframe-6.0.1/src/hyperframe/__init__.py
--- old/hyperframe-6.0.0/src/hyperframe/__init__.py     2020-09-06 
12:18:31.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe/__init__.py     2021-04-17 
14:09:56.000000000 +0200
@@ -5,4 +5,4 @@
 
 A module for providing a pure-Python HTTP/2 framing layer.
 """
-__version__ = '6.0.0'
+__version__ = '6.0.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe/exceptions.py 
new/hyperframe-6.0.1/src/hyperframe/exceptions.py
--- old/hyperframe-6.0.0/src/hyperframe/exceptions.py   2020-08-30 
12:04:55.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe/exceptions.py   2021-04-17 
13:42:04.000000000 +0200
@@ -22,14 +22,14 @@
     .. versionchanged:: 6.0.0
         Changed base class from `ValueError` to :class:`HyperframeError`
     """
-    def __init__(self, frame_type, length):
+    def __init__(self, frame_type: int, length: int) -> None:
         #: The type byte of the unknown frame that was received.
         self.frame_type = frame_type
 
         #: The length of the data portion of the unknown frame.
         self.length = length
 
-    def __str__(self):
+    def __str__(self) -> str:
         return (
             "UnknownFrameError: Unknown frame type 0x%X received, "
             "length %d bytes" % (self.frame_type, self.length)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe/flags.py 
new/hyperframe-6.0.1/src/hyperframe/flags.py
--- old/hyperframe-6.0.0/src/hyperframe/flags.py        2020-09-05 
17:39:12.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe/flags.py        2021-04-17 
13:42:04.000000000 +0200
@@ -5,13 +5,16 @@
 
 Defines basic Flag and Flags data structures.
 """
-import collections
 from collections.abc import MutableSet
+from typing import NamedTuple, Iterable, Set, Iterator
 
-Flag = collections.namedtuple("Flag", ["name", "bit"])
 
+class Flag(NamedTuple):
+    name: str
+    bit: int
 
-class Flags(MutableSet):
+
+class Flags(MutableSet):  # type: ignore
     """
     A simple MutableSet implementation that will only accept known flags as
     elements.
@@ -19,26 +22,26 @@
     Will behave like a regular set(), except that a ValueError will be thrown
     when .add()ing unexpected flags.
     """
-    def __init__(self, defined_flags):
+    def __init__(self, defined_flags: Iterable[Flag]):
         self._valid_flags = set(flag.name for flag in defined_flags)
-        self._flags = set()
+        self._flags: Set[str] = set()
 
-    def __repr__(self):
+    def __repr__(self) -> str:
         return repr(sorted(list(self._flags)))
 
-    def __contains__(self, x):
+    def __contains__(self, x: object) -> bool:
         return self._flags.__contains__(x)
 
-    def __iter__(self):
+    def __iter__(self) -> Iterator[str]:
         return self._flags.__iter__()
 
-    def __len__(self):
+    def __len__(self) -> int:
         return self._flags.__len__()
 
-    def discard(self, value):
+    def discard(self, value: str) -> None:
         return self._flags.discard(value)
 
-    def add(self, value):
+    def add(self, value: str) -> None:
         if value not in self._valid_flags:
             raise ValueError(
                 "Unexpected flag: {}. Valid flags are: {}".format(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe/frame.py 
new/hyperframe-6.0.1/src/hyperframe/frame.py
--- old/hyperframe-6.0.0/src/hyperframe/frame.py        2020-09-05 
17:39:12.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe/frame.py        2021-04-17 
13:42:04.000000000 +0200
@@ -14,6 +14,7 @@
     UnknownFrameError, InvalidPaddingError, InvalidFrameError, InvalidDataError
 )
 from .flags import Flag, Flags
+from typing import Optional, Tuple, List, Iterable, Any, Dict, Type
 
 
 # The maximum initial length of a frame. Some frames have shorter maximum
@@ -43,16 +44,16 @@
     The base class for all HTTP/2 frames.
     """
     #: The flags defined on this type of frame.
-    defined_flags = []
+    defined_flags: List[Flag] = []
 
     #: The byte used to define the type of the frame.
-    type = None
+    type: Optional[int] = None
 
     # If 'has-stream', the frame's stream_id must be non-zero. If 'no-stream',
     # it must be zero. If 'either', it's not checked.
-    stream_association = None
+    stream_association: Optional[str] = None
 
-    def __init__(self, stream_id, flags=()):
+    def __init__(self, stream_id: int, flags: Iterable[str] = ()) -> None:
         #: The stream identifier for the stream this frame was received on.
         #: Set to 0 for frames sent on the connection (stream-id 0).
         self.stream_id = stream_id
@@ -82,7 +83,7 @@
                 )
             )
 
-    def __repr__(self):
+    def __repr__(self) -> str:
         return (
             "{}(stream_id={}, flags={}): {}"
         ).format(
@@ -92,13 +93,13 @@
             self._body_repr(),
         )
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         # More specific implementation may be provided by subclasses of Frame.
         # This fallback shows the serialized (and truncated) body content.
         return _raw_data_repr(self.serialize_body())
 
     @staticmethod
-    def explain(data):
+    def explain(data: memoryview) -> Tuple["Frame", int]:
         """
         Takes a bytestring and tries to parse a single frame and print it.
 
@@ -115,7 +116,7 @@
         return frame, length
 
     @staticmethod
-    def parse_frame_header(header, strict=False):
+    def parse_frame_header(header: memoryview, strict: bool = False) -> 
Tuple["Frame", int]:
         """
         Takes a 9-byte frame header and returns a tuple of the appropriate
         Frame object and the length that needs to be read from the socket.
@@ -155,14 +156,14 @@
         frame.parse_flags(flags)
         return (frame, length)
 
-    def parse_flags(self, flag_byte):
+    def parse_flags(self, flag_byte: int) -> Flags:
         for flag, flag_bit in self.defined_flags:
             if flag_byte & flag_bit:
                 self.flags.add(flag)
 
         return self.flags
 
-    def serialize(self):
+    def serialize(self) -> bytes:
         """
         Convert a frame into a bytestring, representing the serialized form of
         the frame.
@@ -188,10 +189,10 @@
 
         return header + body
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         raise NotImplementedError()
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         """
         Given the body of a frame, parses it into frame data. This populates
         the non-header parts of the frame: that is, it does not populate the
@@ -210,19 +211,19 @@
     Mixin for frames that contain padding. Defines extra fields that can be
     used and set by frames that can be padded.
     """
-    def __init__(self, stream_id, pad_length=0, **kwargs):
-        super().__init__(stream_id, **kwargs)
+    def __init__(self, stream_id: int, pad_length: int = 0, **kwargs: Any) -> 
None:
+        super().__init__(stream_id, **kwargs)  # type: ignore
 
         #: The length of the padding to use.
         self.pad_length = pad_length
 
-    def serialize_padding_data(self):
-        if 'PADDED' in self.flags:
+    def serialize_padding_data(self) -> bytes:
+        if 'PADDED' in self.flags:  # type: ignore
             return _STRUCT_B.pack(self.pad_length)
         return b''
 
-    def parse_padding_data(self, data):
-        if 'PADDED' in self.flags:
+    def parse_padding_data(self, data: memoryview) -> int:
+        if 'PADDED' in self.flags:  # type: ignore
             try:
                 self.pad_length = struct.unpack('!B', data[:1])[0]
             except struct.error:
@@ -233,7 +234,7 @@
     #: .. deprecated:: 5.2.1
     #:    Use self.pad_length instead.
     @property
-    def total_padding(self):  # pragma: no cover
+    def total_padding(self) -> int:  # pragma: no cover
         import warnings
         warnings.warn(
             "total_padding contains the same information as pad_length.",
@@ -248,12 +249,12 @@
     be used and set by frames that contain priority data.
     """
     def __init__(self,
-                 stream_id,
-                 depends_on=0x0,
-                 stream_weight=0x0,
-                 exclusive=False,
-                 **kwargs):
-        super().__init__(stream_id, **kwargs)
+                 stream_id: int,
+                 depends_on: int = 0x0,
+                 stream_weight: int = 0x0,
+                 exclusive: bool = False,
+                 **kwargs: Any) -> None:
+        super().__init__(stream_id, **kwargs)  # type: ignore
 
         #: The stream ID of the stream on which this stream depends.
         self.depends_on = depends_on
@@ -264,13 +265,13 @@
         #: Whether the exclusive bit was set.
         self.exclusive = exclusive
 
-    def serialize_priority_data(self):
+    def serialize_priority_data(self) -> bytes:
         return _STRUCT_LB.pack(
             self.depends_on + (0x80000000 if self.exclusive else 0),
             self.stream_weight
         )
 
-    def parse_priority_data(self, data):
+    def parse_priority_data(self, data: memoryview) -> int:
         try:
             self.depends_on, self.stream_weight = _STRUCT_LB.unpack(data[:5])
         except struct.error:
@@ -298,20 +299,20 @@
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def __init__(self, stream_id, data=b'', **kwargs):
+    def __init__(self, stream_id: int, data: bytes = b'', **kwargs: Any) -> 
None:
         super().__init__(stream_id, **kwargs)
 
         #: The data contained on this frame.
         self.data = data
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         padding_data = self.serialize_padding_data()
         padding = b'\0' * self.pad_length
         if isinstance(self.data, memoryview):
             self.data = self.data.tobytes()
         return b''.join([padding_data, self.data, padding])
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         padding_data_length = self.parse_padding_data(data)
         self.data = (
             data[padding_data_length:len(data)-self.pad_length].tobytes()
@@ -322,7 +323,7 @@
             raise InvalidPaddingError("Padding is too long.")
 
     @property
-    def flow_controlled_length(self):
+    def flow_controlled_length(self) -> int:
         """
         The length of the frame that needs to be accounted for when considering
         flow control.
@@ -342,24 +343,24 @@
     reprioritisation of existing streams.
     """
     #: The flags defined for PRIORITY frames.
-    defined_flags = []
+    defined_flags: List[Flag] = []
 
     #: The type byte defined for PRIORITY frames.
     type = 0x02
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "exclusive={}, depends_on={}, stream_weight={}".format(
             self.exclusive,
             self.depends_on,
             self.stream_weight
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         return self.serialize_priority_data()
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         if len(data) > 5:
             raise InvalidFrameError(
                 "PRIORITY must have 5 byte body: actual length %s." %
@@ -380,28 +381,28 @@
     occurred.
     """
     #: The flags defined for RST_STREAM frames.
-    defined_flags = []
+    defined_flags: List[Flag] = []
 
     #: The type byte defined for RST_STREAM frames.
     type = 0x03
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def __init__(self, stream_id, error_code=0, **kwargs):
+    def __init__(self, stream_id: int, error_code: int = 0, **kwargs: Any) -> 
None:
         super().__init__(stream_id, **kwargs)
 
         #: The error code used when resetting the stream.
         self.error_code = error_code
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "error_code={}".format(
             self.error_code,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         return _STRUCT_L.pack(self.error_code)
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         if len(data) != 4:
             raise InvalidFrameError(
                 "RST_STREAM must have 4 byte body: actual length %s." %
@@ -453,7 +454,7 @@
     #: The byte that signals SETTINGS_ENABLE_CONNECT_PROTOCOL setting.
     ENABLE_CONNECT_PROTOCOL = 0x08
 
-    def __init__(self, stream_id=0, settings=None, **kwargs):
+    def __init__(self, stream_id: int = 0, settings: Optional[Dict[int, int]] 
= None, **kwargs: Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         if settings and "ACK" in kwargs.get("flags", ()):
@@ -464,16 +465,16 @@
         #: A dictionary of the setting type byte to the value of the setting.
         self.settings = settings or {}
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "settings={}".format(
             self.settings,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         return b''.join([_STRUCT_HL.pack(setting & 0xFF, value)
                          for setting, value in self.settings.items()])
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         if 'ACK' in self.flags and len(data) > 0:
             raise InvalidDataError(
                 "SETTINGS ack frame must not have payload: got %s bytes" %
@@ -509,7 +510,7 @@
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def __init__(self, stream_id, promised_stream_id=0, data=b'', **kwargs):
+    def __init__(self, stream_id: int, promised_stream_id: int = 0, data: 
bytes = b'', **kwargs: Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         #: The stream ID that is promised by this frame.
@@ -519,19 +520,19 @@
         #: stream.
         self.data = data
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "promised_stream_id={}, data={}".format(
             self.promised_stream_id,
             _raw_data_repr(self.data),
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         padding_data = self.serialize_padding_data()
         padding = b'\0' * self.pad_length
         data = _STRUCT_L.pack(self.promised_stream_id)
         return b''.join([padding_data, data, self.data, padding])
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         padding_data_length = self.parse_padding_data(data)
 
         try:
@@ -570,21 +571,21 @@
 
     stream_association = _STREAM_ASSOC_NO_STREAM
 
-    def __init__(self, stream_id=0, opaque_data=b'', **kwargs):
+    def __init__(self, stream_id: int = 0, opaque_data: bytes = b'', **kwargs: 
Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         #: The opaque data sent in this PING frame, as a bytestring.
         self.opaque_data = opaque_data
 
-    def _body_repr(self):
-        return "opaque_data={}".format(
+    def _body_repr(self) -> str:
+        return "opaque_data={!r}".format(
             self.opaque_data,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         if len(self.opaque_data) > 8:
             raise InvalidFrameError(
-                "PING frame may not have more than 8 bytes of data, got %s" %
+                "PING frame may not have more than 8 bytes of data, got %r" %
                 self.opaque_data
             )
 
@@ -592,7 +593,7 @@
         data += b'\x00' * (8 - len(self.opaque_data))
         return data
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         if len(data) != 8:
             raise InvalidFrameError(
                 "PING frame must have 8 byte length: got %s" % len(data)
@@ -610,7 +611,7 @@
     connection.
     """
     #: The flags defined for GOAWAY frames.
-    defined_flags = []
+    defined_flags: List[Flag] = []
 
     #: The type byte defined for GOAWAY frames.
     type = 0x07
@@ -618,11 +619,11 @@
     stream_association = _STREAM_ASSOC_NO_STREAM
 
     def __init__(self,
-                 stream_id=0,
-                 last_stream_id=0,
-                 error_code=0,
-                 additional_data=b'',
-                 **kwargs):
+                 stream_id: int = 0,
+                 last_stream_id: int = 0,
+                 error_code: int = 0,
+                 additional_data: bytes = b'',
+                 **kwargs: Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         #: The last stream ID definitely seen by the remote peer.
@@ -634,14 +635,14 @@
         #: Any additional data sent in the GOAWAY.
         self.additional_data = additional_data
 
-    def _body_repr(self):
-        return "last_stream_id={}, error_code={}, additional_data={}".format(
+    def _body_repr(self) -> str:
+        return "last_stream_id={}, error_code={}, additional_data={!r}".format(
             self.last_stream_id,
             self.error_code,
             self.additional_data,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         data = _STRUCT_LL.pack(
             self.last_stream_id & 0x7FFFFFFF,
             self.error_code
@@ -650,7 +651,7 @@
 
         return data
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         try:
             self.last_stream_id, self.error_code = _STRUCT_LL.unpack(
                 data[:8]
@@ -678,28 +679,28 @@
     original sender.
     """
     #: The flags defined for WINDOW_UPDATE frames.
-    defined_flags = []
+    defined_flags: List[Flag] = []
 
     #: The type byte defined for WINDOW_UPDATE frames.
     type = 0x08
 
     stream_association = _STREAM_ASSOC_EITHER
 
-    def __init__(self, stream_id, window_increment=0, **kwargs):
+    def __init__(self, stream_id: int, window_increment: int = 0, **kwargs: 
Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         #: The amount the flow control window is to be incremented.
         self.window_increment = window_increment
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "window_increment={}".format(
             self.window_increment,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         return _STRUCT_L.pack(self.window_increment & 0x7FFFFFFF)
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         if len(data) > 4:
             raise InvalidFrameError(
                 "WINDOW_UPDATE frame must have 4 byte length: got %s" %
@@ -744,13 +745,13 @@
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def __init__(self, stream_id, data=b'', **kwargs):
+    def __init__(self, stream_id: int, data: bytes = b'', **kwargs: Any) -> 
None:
         super().__init__(stream_id, **kwargs)
 
         #: The HPACK-encoded header block.
         self.data = data
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "exclusive={}, depends_on={}, stream_weight={}, data={}".format(
             self.exclusive,
             self.depends_on,
@@ -758,7 +759,7 @@
             _raw_data_repr(self.data),
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         padding_data = self.serialize_padding_data()
         padding = b'\0' * self.pad_length
 
@@ -769,7 +770,7 @@
 
         return b''.join([padding_data, priority_data, self.data, padding])
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         padding_data_length = self.parse_padding_data(data)
         data = data[padding_data_length:]
 
@@ -805,21 +806,21 @@
 
     stream_association = _STREAM_ASSOC_HAS_STREAM
 
-    def __init__(self, stream_id, data=b'', **kwargs):
+    def __init__(self, stream_id: int, data: bytes = b'', **kwargs: Any) -> 
None:
         super().__init__(stream_id, **kwargs)
 
         #: The HPACK-encoded header block.
         self.data = data
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "data={}".format(
             _raw_data_repr(self.data),
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         return self.data
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         self.data = data.tobytes()
         self.body_len = len(data)
 
@@ -843,7 +844,7 @@
 
     stream_association = _STREAM_ASSOC_EITHER
 
-    def __init__(self, stream_id, origin=b'', field=b'', **kwargs):
+    def __init__(self, stream_id: int, origin: bytes = b'', field: bytes = 
b'', **kwargs: Any) -> None:
         super().__init__(stream_id, **kwargs)
 
         if not isinstance(origin, bytes):
@@ -853,17 +854,17 @@
         self.origin = origin
         self.field = field
 
-    def _body_repr(self):
-        return "origin={}, field={}".format(
+    def _body_repr(self) -> str:
+        return "origin={!r}, field={!r}".format(
             self.origin,
             self.field,
         )
 
-    def serialize_body(self):
+    def serialize_body(self) -> bytes:
         origin_len = _STRUCT_H.pack(len(self.origin))
         return b''.join([origin_len, self.origin, self.field])
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         try:
             origin_len = _STRUCT_H.unpack(data[0:2])[0]
             self.origin = data[2:2+origin_len].tobytes()
@@ -896,30 +897,30 @@
 
     stream_association = _STREAM_ASSOC_EITHER
 
-    def __init__(self, type, stream_id, flag_byte=0x0, body=b'', **kwargs):
+    def __init__(self, type: int, stream_id: int, flag_byte: int = 0x0, body: 
bytes = b'', **kwargs: Any) -> None:
         super().__init__(stream_id, **kwargs)
         self.type = type
         self.flag_byte = flag_byte
         self.body = body
 
-    def _body_repr(self):
+    def _body_repr(self) -> str:
         return "type={}, flag_byte={}, body={}".format(
             self.type,
             self.flag_byte,
             _raw_data_repr(self.body),
         )
 
-    def parse_flags(self, flag_byte):
+    def parse_flags(self, flag_byte: int) -> None:  # type: ignore
         """
         For extension frames, we parse the flags by just storing a flag byte.
         """
         self.flag_byte = flag_byte
 
-    def parse_body(self, data):
+    def parse_body(self, data: memoryview) -> None:
         self.body = data.tobytes()
         self.body_len = len(data)
 
-    def serialize(self):
+    def serialize(self) -> bytes:
         """
         A broad override of the serialize method that ensures that the data
         comes back out exactly as it came in. This should not be used in most
@@ -941,7 +942,7 @@
         return header + self.body
 
 
-def _raw_data_repr(data):
+def _raw_data_repr(data: Optional[bytes]) -> str:
     if not data:
         return "None"
     r = binascii.hexlify(data).decode('ascii')
@@ -950,7 +951,7 @@
     return "<hex:" + r + ">"
 
 
-_FRAME_CLASSES = [
+_FRAME_CLASSES: List[Type[Frame]] = [
     DataFrame,
     HeadersFrame,
     PriorityFrame,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe.egg-info/PKG-INFO 
new/hyperframe-6.0.1/src/hyperframe.egg-info/PKG-INFO
--- old/hyperframe-6.0.0/src/hyperframe.egg-info/PKG-INFO       2020-09-06 
12:21:04.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe.egg-info/PKG-INFO       2021-04-17 
14:11:06.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: hyperframe
-Version: 6.0.0
+Version: 6.0.1
 Summary: HTTP/2 framing layer for Python
 Home-page: https://github.com/python-hyper/hyperframe/
 Author: Cory Benfield
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/src/hyperframe.egg-info/SOURCES.txt 
new/hyperframe-6.0.1/src/hyperframe.egg-info/SOURCES.txt
--- old/hyperframe-6.0.0/src/hyperframe.egg-info/SOURCES.txt    2020-09-06 
12:21:04.000000000 +0200
+++ new/hyperframe-6.0.1/src/hyperframe.egg-info/SOURCES.txt    2021-04-17 
14:11:06.000000000 +0200
@@ -17,6 +17,7 @@
 src/hyperframe/exceptions.py
 src/hyperframe/flags.py
 src/hyperframe/frame.py
+src/hyperframe/py.typed
 src/hyperframe.egg-info/PKG-INFO
 src/hyperframe.egg-info/SOURCES.txt
 src/hyperframe.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyperframe-6.0.0/tox.ini new/hyperframe-6.0.1/tox.ini
--- old/hyperframe-6.0.0/tox.ini        2020-09-06 12:18:25.000000000 +0200
+++ new/hyperframe-6.0.1/tox.ini        2021-04-17 14:07:57.000000000 +0200
@@ -1,22 +1,23 @@
 [tox]
-envlist = py36, py37, py38, pypy3, lint, docs, packaging
+envlist = py36, py37, py38, py39, pypy3, lint, docs, packaging
 
 [gh-actions]
 python =
     3.6: py36
     3.7: py37
     3.8: py38, lint, docs, packaging
+    3.9: py39
     pypy3: pypy3
 
 [testenv]
 passenv =
     GITHUB_*
 deps =
-    pytest==6.0.1
-    pytest-cov==2.10.1
-    pytest-xdist==2.1.0
+    pytest>=6.0.1,<7
+    pytest-cov>=2.10.1,<3
+    pytest-xdist>=2.2.1,<3
 commands =
-    pytest --cov-report=xml  --cov-report=term --cov=hyperframe {posargs}
+    pytest --cov-report=xml --cov-report=term --cov=hyperframe {posargs}
 
 [testenv:pypy3]
 # temporarily disable coverage testing on PyPy due to performance problems
@@ -25,7 +26,7 @@
 [testenv:docs]
 basepython = python3.8
 deps =
-    sphinx==3.2.1
+    sphinx>=3.5.4,<4
 whitelist_externals = make
 changedir = {toxinidir}/docs
 commands =
@@ -35,15 +36,18 @@
 [testenv:lint]
 basepython = python3.8
 deps =
-    flake8==3.8.3
-commands = flake8 --max-complexity 10 src test
+    flake8==3.9.1
+    mypy==0.812
+commands =
+    flake8 --max-complexity 10 src test
+    mypy --strict src/
 
 [testenv:packaging]
 basepython = python3.8
 deps =
-    check-manifest==0.42
-    readme-renderer==26.0
-    twine==3.2.0
+    check-manifest==0.46
+    readme-renderer==29.0
+    twine==3.4.1
 whitelist_externals = rm
 commands =
     rm -rf dist/

Reply via email to