From 66a5e10142ca6eb7658f73b17e494b49cbb2abf968cf8fec6b78bf56a5fc149d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mark=C3=A9ta=20Machov=C3=A1?= Date: Mon, 23 Nov 2020 11:04:59 +0000 Subject: [PATCH] Accepting request 850162 from home:jayvdb:branches:devel:languages:python - Drop hyperframe.patch no longer needed - Skip flaky tests test_connection_only_empty & test_delegated_eq that hypothesis is failing on s390x - Update to v4.0.0 OBS-URL: https://build.opensuse.org/request/show/850162 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-h2?expand=0&rev=28 --- h2-3.2.0.tar.gz | 3 - h2-4.0.0.tar.gz | 3 + hyperframe.patch | 192 ---------------------------------------------- python-h2.changes | 13 +++- python-h2.spec | 23 ++---- 5 files changed, 23 insertions(+), 211 deletions(-) delete mode 100644 h2-3.2.0.tar.gz create mode 100644 h2-4.0.0.tar.gz delete mode 100644 hyperframe.patch diff --git a/h2-3.2.0.tar.gz b/h2-3.2.0.tar.gz deleted file mode 100644 index fcaf626..0000000 --- a/h2-3.2.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:875f41ebd6f2c44781259005b157faed1a5031df3ae5aa7bcb4628a6c0782f14 -size 2215889 diff --git a/h2-4.0.0.tar.gz b/h2-4.0.0.tar.gz new file mode 100644 index 0000000..517f372 --- /dev/null +++ b/h2-4.0.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb7ac7099dd67a857ed52c815a6192b6b1f5ba6b516237fc24a085341340593d +size 2143850 diff --git a/hyperframe.patch b/hyperframe.patch deleted file mode 100644 index beaa6f4..0000000 --- a/hyperframe.patch +++ /dev/null @@ -1,192 +0,0 @@ -From c5d962a14373acf534be620d4e597dfeaff8a2ef Mon Sep 17 00:00:00 2001 -From: Thomas Kriechbaumer -Date: Sun, 6 Sep 2020 12:56:48 +0200 -Subject: [PATCH] bump hyperframe and fix protocol error (#1238) - ---- - setup.py | 2 +- - src/h2/connection.py | 8 ++------ - src/h2/exceptions.py | 19 ++++++++++--------- - src/h2/frame_buffer.py | 26 ++++++++------------------ - test/test_invalid_frame_sequences.py | 2 +- - 5 files changed, 22 insertions(+), 35 deletions(-) - -Index: h2-3.2.0/setup.py -=================================================================== ---- h2-3.2.0.orig/setup.py -+++ h2-3.2.0/setup.py -@@ -67,7 +67,7 @@ setup( - 'Programming Language :: Python :: Implementation :: PyPy', - ], - install_requires=[ -- 'hyperframe>=5.2.0, <6', -+ 'hyperframe>=6.0, <7', - 'hpack>=3.0,<4', - ], - extras_require={ -Index: h2-3.2.0/h2/connection.py -=================================================================== ---- h2-3.2.0.orig/h2/connection.py -+++ h2-3.2.0/h2/connection.py -@@ -1721,12 +1721,8 @@ class H2Connection(object): - """ - Receive a WINDOW_UPDATE frame on the connection. - """ -- # Validate the frame. -- if not (1 <= frame.window_increment <= self.MAX_WINDOW_INCREMENT): -- raise ProtocolError( -- "Flow control increment must be between 1 and %d, received %d" -- % (self.MAX_WINDOW_INCREMENT, frame.window_increment) -- ) -+ # hyperframe will take care of validating the window_increment. -+ # If we reach in here, we can assume a valid value. - - events = self.state_machine.process_input( - ConnectionInputs.RECV_WINDOW_UPDATE -Index: h2-3.2.0/h2/exceptions.py -=================================================================== ---- h2-3.2.0.orig/h2/exceptions.py -+++ h2-3.2.0/h2/exceptions.py -@@ -26,7 +26,7 @@ class FrameTooLargeError(ProtocolError): - """ - The frame that we tried to send or that we received was too large. - """ -- #: This error code that corresponds to this kind of Protocol Error. -+ #: The error code corresponds to this kind of Protocol Error. - error_code = h2.errors.ErrorCodes.FRAME_SIZE_ERROR - - -@@ -36,7 +36,7 @@ class FrameDataMissingError(ProtocolErro - - .. versionadded:: 2.0.0 - """ -- #: The error code that corresponds to this kind of Protocol Error -+ #: The error code corresponds to this kind of Protocol Error. - error_code = h2.errors.ErrorCodes.FRAME_SIZE_ERROR - - -@@ -52,8 +52,7 @@ class FlowControlError(ProtocolError): - """ - An attempted action violates flow control constraints. - """ -- #: The error code that corresponds to this kind of -- #: :class:`ProtocolError ` -+ #: The error code corresponds to this kind of Protocol Error. - error_code = h2.errors.ErrorCodes.FLOW_CONTROL_ERROR - - -@@ -94,7 +93,7 @@ class NoSuchStreamError(ProtocolError): - ` - """ - def __init__(self, stream_id): -- #: The stream ID that corresponds to the non-existent stream. -+ #: The stream ID corresponds to the non-existent stream. - self.stream_id = stream_id - - -@@ -106,7 +105,7 @@ class StreamClosedError(NoSuchStreamErro - stream has been removed. - """ - def __init__(self, stream_id): -- #: The stream ID that corresponds to the nonexistent stream. -+ #: The stream ID corresponds to the nonexistent stream. - self.stream_id = stream_id - - #: The relevant HTTP/2 error code. -@@ -145,13 +144,15 @@ class InvalidBodyLengthError(ProtocolErr - ) - - --class UnsupportedFrameError(ProtocolError, KeyError): -+class UnsupportedFrameError(ProtocolError): - """ - The remote peer sent a frame that is unsupported in this context. - - .. versionadded:: 2.1.0 -+ -+ .. versionchanged:: 4.0.0 -+ Removed deprecated KeyError parent class. - """ -- # TODO: Remove the KeyError in 3.0.0 - pass - - -@@ -181,6 +182,6 @@ class DenialOfServiceError(ProtocolError - - .. versionadded:: 2.5.0 - """ -- #: The error code that corresponds to this kind of -+ #: The error code corresponds to this kind of - #: :class:`ProtocolError ` - error_code = h2.errors.ErrorCodes.ENHANCE_YOUR_CALM -Index: h2-3.2.0/h2/frame_buffer.py -=================================================================== ---- h2-3.2.0.orig/h2/frame_buffer.py -+++ h2-3.2.0/h2/frame_buffer.py -@@ -6,7 +6,7 @@ h2/frame_buffer - A data structure that provides a way to iterate over a byte buffer in terms of - frames. - """ --from hyperframe.exceptions import InvalidFrameError -+from hyperframe.exceptions import InvalidFrameError, InvalidDataError - from hyperframe.frame import ( - Frame, HeadersFrame, ContinuationFrame, PushPromiseFrame - ) -@@ -57,20 +57,6 @@ class FrameBuffer(object): - - self.data += data - -- def _parse_frame_header(self, data): -- """ -- Parses the frame header from the data. Either returns a tuple of -- (frame, length), or throws an exception. The returned frame may be None -- if the frame is of unknown type. -- """ -- try: -- frame, length = Frame.parse_frame_header(data[:9]) -- except ValueError as e: -- # The frame header is invalid. This is a ProtocolError -- raise ProtocolError("Invalid frame header received: %s" % str(e)) -- -- return frame, length -- - def _validate_frame_length(self, length): - """ - Confirm that the frame is an appropriate length. -@@ -137,9 +123,11 @@ class FrameBuffer(object): - raise StopIteration() - - try: -- f, length = self._parse_frame_header(self.data) -- except InvalidFrameError: # pragma: no cover -- raise ProtocolError("Received frame with invalid frame header.") -+ f, length = Frame.parse_frame_header(self.data[:9]) -+ except (InvalidDataError, InvalidFrameError) as e: # pragma: no cover -+ raise ProtocolError( -+ "Received frame with invalid header: %s" % str(e) -+ ) - - # Next, check that we have enough length to parse the frame body. If - # not, bail, leaving the frame header data in the buffer for next time. -@@ -154,6 +142,8 @@ class FrameBuffer(object): - if f is not None: - try: - f.parse_body(memoryview(self.data[9:9+length])) -+ except InvalidDataError: -+ raise ProtocolError("Received frame with non-compliant data") - except InvalidFrameError: - raise FrameDataMissingError("Frame data missing or invalid") - -Index: h2-3.2.0/test/test_invalid_frame_sequences.py -=================================================================== ---- h2-3.2.0.orig/test/test_invalid_frame_sequences.py -+++ h2-3.2.0/test/test_invalid_frame_sequences.py -@@ -277,7 +277,7 @@ class TestInvalidFrameSequences(object): - with pytest.raises(h2.exceptions.ProtocolError) as e: - c.receive_data(frame_data) - -- assert "Stream ID must be non-zero" in str(e.value) -+ assert "Received frame with invalid header" in str(e.value) - - def test_get_stream_reset_event_on_auto_reset(self, frame_factory): - """ diff --git a/python-h2.changes b/python-h2.changes index 5a47490..d99dce5 100644 --- a/python-h2.changes +++ b/python-h2.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Sat Nov 21 17:07:56 UTC 2020 - John Vandenberg + +- Drop hyperframe.patch no longer needed +- Skip flaky tests test_connection_only_empty & test_delegated_eq + that hypothesis is failing on s390x +- Update to v4.0.0 + * Support for Python 2.7-3.5 has been dropped + * Support for Python 3.8 has been added. + * Receiving DATA before HEADERS now raises a ProtocolError + (see https://tools.ietf.org/html/rfc7540#section-8.1) + ------------------------------------------------------------------- Tue Sep 15 13:10:43 UTC 2020 - Marketa Calabkova @@ -97,4 +109,3 @@ Fri Apr 21 19:25:18 UTC 2017 - aloisio@gmx.com Tue Dec 27 14:34:57 UTC 2016 - aloisio@gmx.com - Initial package (2.5.1) - diff --git a/python-h2.spec b/python-h2.spec index 4f5b284..ccbc52d 100644 --- a/python-h2.spec +++ b/python-h2.spec @@ -17,16 +17,14 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} -%bcond_without python2 +%define skip_python2 1 Name: python-h2 -Version: 3.2.0 +Version: 4.0.0 Release: 0 Summary: HTTP/2 State-Machine based protocol implementation License: MIT URL: https://github.com/python-hyper/hyper-h2 Source0: https://files.pythonhosted.org/packages/source/h/h2/h2-%{version}.tar.gz -# PATCH-FIX-UPSTREAM https://github.com/python-hyper/hyper-h2/commit/c5d962a14373acf534be620d4e597dfeaff8a2ef bump hyperframe and fix protocol error -Patch0: hyperframe.patch BuildRequires: %{python_module hpack >= 2.3} BuildRequires: %{python_module hyperframe >= 6.0} BuildRequires: %{python_module hypothesis} @@ -36,12 +34,6 @@ BuildRequires: python-rpm-macros Requires: python-hpack >= 2.3 Requires: python-hyperframe >= 6.0 BuildArch: noarch -%if %{with python2} -BuildRequires: python-enum34 >= 1.1.6 -%endif -%ifpython2 -Requires: python-enum34 >= 1.1.6 -%endif %python_subpackages %description @@ -52,7 +44,6 @@ your programming paradigm. %prep %setup -q -n h2-%{version} -%patch0 -p1 %build %python_build @@ -62,13 +53,15 @@ your programming paradigm. %python_expand %fdupes %{buildroot}%{$python_sitelib} %check -# test_changing_max_frame_size - flaky in OBS -# test_range_of_acceptable_outputs -flaky in OBS -%pytest -k 'not (test_changing_max_frame_size or test_range_of_acceptable_outputs)' +# flaky in OBS +# - test_changing_max_frame_size +# - test_range_of_acceptable_outputs +# - test_connection_only_empty & test_delegated_eq (hypothesis on s390x) +%pytest -k 'not (test_changing_max_frame_size or test_range_of_acceptable_outputs or test_connection_only_empty or test_delegated_eq)' %files %{python_files} %license LICENSE -%doc HISTORY.rst README.rst +%doc CHANGELOG.rst README.rst %{python_sitelib}/h2 %{python_sitelib}/h2-%{version}-py*.egg-info