openSUSE Commits
Threads by month
- ----- 2024 -----
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
March 2019
- 1 participants
- 2391 discussions
Hello community,
here is the log from the commit of package python-jsonpointer for openSUSE:Factory checked in at 2019-03-29 20:39:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jsonpointer (Old)
and /work/SRC/openSUSE:Factory/.python-jsonpointer.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jsonpointer"
Fri Mar 29 20:39:21 2019 rev:14 rq:689758 version:2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-jsonpointer/python-jsonpointer.changes 2018-12-27 00:26:59.379780995 +0100
+++ /work/SRC/openSUSE:Factory/.python-jsonpointer.new.25356/python-jsonpointer.changes 2019-03-29 20:39:23.642687281 +0100
@@ -1,0 +2,13 @@
+Thu Mar 28 21:17:46 UTC 2019 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Use noun phrase in descriptions.
+
+-------------------------------------------------------------------
+Thu Mar 28 14:38:52 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 2.0:
+ * Fix typos in messages
+ * Accept pointer as argument in commandline utility
+- Run tests
+
+-------------------------------------------------------------------
Old:
----
jsonpointer-1.14.tar.gz
New:
----
jsonpointer-2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jsonpointer.spec ++++++
--- /var/tmp/diff_new_pack.NSYm3L/_old 2019-03-29 20:39:24.554687190 +0100
+++ /var/tmp/diff_new_pack.NSYm3L/_new 2019-03-29 20:39:24.558687190 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-jsonpointer
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,24 +18,23 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-jsonpointer
-Version: 1.14
+Version: 2.0
Release: 0
-Summary: Identify specific nodes in a JSON document
+Summary: Module to identify specific nodes in a JSON document
License: BSD-3-Clause
Group: Development/Languages/Python
-Url: https://github.com/stefankoegl/python-json-pointer
-Source: https://pypi.io/packages/source/j/jsonpointer/jsonpointer-%{version}.tar.gz
+URL: https://github.com/stefankoegl/python-json-pointer
+Source: https://files.pythonhosted.org/packages/source/j/jsonpointer/jsonpointer-%{…
BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires(post): update-alternatives
Requires(preun): update-alternatives
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildArch: noarch
-
%python_subpackages
%description
-Identify specific nodes in a JSON document (according to draft 08)
+A module to identify specific nodes in a JSON document (according to draft 08).
%prep
%setup -q -n jsonpointer-%{version}
@@ -45,8 +44,12 @@
%install
%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%python_clone -a %{buildroot}%{_bindir}/jsonpointer
+%check
+%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} $python tests.py
+
%post
%python_install_alternative jsonpointer
@@ -54,7 +57,8 @@
%python_uninstall_alternative jsonpointer
%files %{python_files}
-%defattr(-,root,root,-)
+%doc README.md
+%license LICENSE.txt
%python_alternative %{_bindir}/jsonpointer
%{python_sitelib}/*
++++++ jsonpointer-1.14.tar.gz -> jsonpointer-2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/PKG-INFO new/jsonpointer-2.0/PKG-INFO
--- old/jsonpointer-1.14/PKG-INFO 2017-10-30 20:49:55.000000000 +0100
+++ new/jsonpointer-2.0/PKG-INFO 2018-01-16 16:23:40.000000000 +0100
@@ -1,13 +1,17 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
Name: jsonpointer
-Version: 1.14
+Version: 2.0
Summary: Identify specific nodes in a JSON document (RFC 6901)
Home-page: https://github.com/stefankoegl/python-json-pointer
Author: Stefan Kögl
Author-email: stefan(a)skoegl.net
License: Modified BSD License
-Description: python-json-pointer |Build Status| |Coverage Status| |Downloads| |Version|
- ==========================================================================
+Description-Content-Type: UNKNOWN
+Description: python-json-pointer
+ ===================
+
+ |PyPI version| |Supported Python versions| |Build Status| |Coverage
+ Status|
Resolve JSON Pointers in Python
-------------------------------
@@ -15,20 +19,22 @@
Library to resolve JSON Pointers according to `RFC
6901 <http://tools.ietf.org/html/rfc6901>`__
- See Sourcecode for Examples \* Website:
+ See source code for examples \* Website:
https://github.com/stefankoegl/python-json-pointer \* Repository:
https://github.com/stefankoegl/python-json-pointer.git \* Documentation:
https://python-json-pointer.readthedocs.org/ \* PyPI:
- https://pypi.python.org/pypi/jsonpointer \* Travis-CI:
+ https://pypi.python.org/pypi/jsonpointer \* Travis CI:
https://travis-ci.org/stefankoegl/python-json-pointer \* Coveralls:
https://coveralls.io/r/stefankoegl/python-json-pointer
- .. |Build Status| image:: https://secure.travis-ci.org/stefankoegl/python-json-pointer.png?branch=mas…
+ .. |PyPI version| image:: https://img.shields.io/pypi/v/jsonpointer.svg
+ :target: https://pypi.python.org/pypi/jsonpointer/
+ .. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/jsonpointer.svg
+ :target: https://pypi.python.org/pypi/jsonpointer/
+ .. |Build Status| image:: https://travis-ci.org/stefankoegl/python-json-pointer.png?branch=master
:target: https://travis-ci.org/stefankoegl/python-json-pointer
.. |Coverage Status| image:: https://coveralls.io/repos/stefankoegl/python-json-pointer/badge.png?branch…
:target: https://coveralls.io/r/stefankoegl/python-json-pointer?branch=master
- .. |Downloads| image:: https://pypip.in/d/jsonpointer/badge.png
- .. |Version| image:: https://pypip.in/v/jsonpointer/badge.png
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -38,10 +44,8 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
@@ -49,3 +53,4 @@
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Utilities
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/README.md new/jsonpointer-2.0/README.md
--- old/jsonpointer-1.14/README.md 2017-10-30 20:49:19.000000000 +0100
+++ new/jsonpointer-2.0/README.md 2018-01-16 16:22:55.000000000 +0100
@@ -1,16 +1,22 @@
-python-json-pointer [![Build Status](https://secure.travis-ci.org/stefankoegl/python-json-pointer.png?br… [![Coverage Status](https://coveralls.io/repos/stefankoegl/python-json-pointer/badge.png?branch=master)](https://coveralls.io/r/stefankoegl/python-json-pointer?branch=master) ![Downloads](https://pypip.in/d/jsonpointer/badge.png) ![Version](https://pypip.in/v/jsonpointer/badge.png)
+python-json-pointer
===================
+[![PyPI version](https://img.shields.io/pypi/v/jsonpointer.svg)](https://pypi.pytho…
+[![Supported Python versions](https://img.shields.io/pypi/pyversions/jsonpointer.svg)](https://…
+[![Build Status](https://travis-ci.org/stefankoegl/python-json-pointer.png?branch=ma…
+[![Coverage Status](https://coveralls.io/repos/stefankoegl/python-json-pointer/badge.png?branch=master)](https://coveralls.io/r/stefankoegl/python-json-pointer?branch=master)
+
+
Resolve JSON Pointers in Python
-------------------------------
Library to resolve JSON Pointers according to
[RFC 6901](http://tools.ietf.org/html/rfc6901)
-See Sourcecode for Examples
+See source code for examples
* Website: https://github.com/stefankoegl/python-json-pointer
* Repository: https://github.com/stefankoegl/python-json-pointer.git
* Documentation: https://python-json-pointer.readthedocs.org/
* PyPI: https://pypi.python.org/pypi/jsonpointer
-* Travis-CI: https://travis-ci.org/stefankoegl/python-json-pointer
+* Travis CI: https://travis-ci.org/stefankoegl/python-json-pointer
* Coveralls: https://coveralls.io/r/stefankoegl/python-json-pointer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/bin/jsonpointer new/jsonpointer-2.0/bin/jsonpointer
--- old/jsonpointer-1.14/bin/jsonpointer 2017-10-30 20:49:19.000000000 +0100
+++ new/jsonpointer-2.0/bin/jsonpointer 2018-01-16 16:22:55.000000000 +0100
@@ -12,8 +12,17 @@
parser = argparse.ArgumentParser(
description='Resolve a JSON pointer on JSON files')
-parser.add_argument('POINTER', type=argparse.FileType('r'),
- help='File containing a JSON pointer expression')
+
+# Accept pointer as argument or as file
+ptr_group = parser.add_mutually_exclusive_group(required=True)
+
+ptr_group.add_argument('-f', '--pointer-file', type=argparse.FileType('r'),
+ nargs='?',
+ help='File containing a JSON pointer expression')
+
+ptr_group.add_argument('POINTER', type=str, nargs='?',
+ help='A JSON pointer expression')
+
parser.add_argument('FILE', type=argparse.FileType('r'), nargs='+',
help='Files for which the pointer should be resolved')
parser.add_argument('--indent', type=int, default=None,
@@ -29,10 +38,24 @@
sys.exit(1)
+def parse_pointer(args):
+ if args.POINTER:
+ ptr = args.POINTER
+ elif args.pointer_file:
+ ptr = args.pointer_file.read().strip()
+ else:
+ parser.print_usage()
+ sys.exit(1)
+
+ return ptr
+
+
def resolve_files():
""" Resolve a JSON pointer on JSON files """
args = parser.parse_args()
- ptr = json.load(args.POINTER)
+
+ ptr = parse_pointer(args)
+
for f in args.FILE:
doc = json.load(f)
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/jsonpointer.egg-info/PKG-INFO new/jsonpointer-2.0/jsonpointer.egg-info/PKG-INFO
--- old/jsonpointer-1.14/jsonpointer.egg-info/PKG-INFO 2017-10-30 20:49:55.000000000 +0100
+++ new/jsonpointer-2.0/jsonpointer.egg-info/PKG-INFO 2018-01-16 16:23:40.000000000 +0100
@@ -1,13 +1,17 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
Name: jsonpointer
-Version: 1.14
+Version: 2.0
Summary: Identify specific nodes in a JSON document (RFC 6901)
Home-page: https://github.com/stefankoegl/python-json-pointer
Author: Stefan Kögl
Author-email: stefan(a)skoegl.net
License: Modified BSD License
-Description: python-json-pointer |Build Status| |Coverage Status| |Downloads| |Version|
- ==========================================================================
+Description-Content-Type: UNKNOWN
+Description: python-json-pointer
+ ===================
+
+ |PyPI version| |Supported Python versions| |Build Status| |Coverage
+ Status|
Resolve JSON Pointers in Python
-------------------------------
@@ -15,20 +19,22 @@
Library to resolve JSON Pointers according to `RFC
6901 <http://tools.ietf.org/html/rfc6901>`__
- See Sourcecode for Examples \* Website:
+ See source code for examples \* Website:
https://github.com/stefankoegl/python-json-pointer \* Repository:
https://github.com/stefankoegl/python-json-pointer.git \* Documentation:
https://python-json-pointer.readthedocs.org/ \* PyPI:
- https://pypi.python.org/pypi/jsonpointer \* Travis-CI:
+ https://pypi.python.org/pypi/jsonpointer \* Travis CI:
https://travis-ci.org/stefankoegl/python-json-pointer \* Coveralls:
https://coveralls.io/r/stefankoegl/python-json-pointer
- .. |Build Status| image:: https://secure.travis-ci.org/stefankoegl/python-json-pointer.png?branch=mas…
+ .. |PyPI version| image:: https://img.shields.io/pypi/v/jsonpointer.svg
+ :target: https://pypi.python.org/pypi/jsonpointer/
+ .. |Supported Python versions| image:: https://img.shields.io/pypi/pyversions/jsonpointer.svg
+ :target: https://pypi.python.org/pypi/jsonpointer/
+ .. |Build Status| image:: https://travis-ci.org/stefankoegl/python-json-pointer.png?branch=master
:target: https://travis-ci.org/stefankoegl/python-json-pointer
.. |Coverage Status| image:: https://coveralls.io/repos/stefankoegl/python-json-pointer/badge.png?branch…
:target: https://coveralls.io/r/stefankoegl/python-json-pointer?branch=master
- .. |Downloads| image:: https://pypip.in/d/jsonpointer/badge.png
- .. |Version| image:: https://pypip.in/v/jsonpointer/badge.png
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
@@ -38,10 +44,8 @@
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
@@ -49,3 +53,4 @@
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Utilities
+Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/jsonpointer.py new/jsonpointer-2.0/jsonpointer.py
--- old/jsonpointer-1.14/jsonpointer.py 2017-10-30 20:49:19.000000000 +0100
+++ new/jsonpointer-2.0/jsonpointer.py 2018-01-16 16:22:55.000000000 +0100
@@ -36,7 +36,7 @@
# Will be parsed by setup.py to determine package metadata
__author__ = 'Stefan Kögl <stefan(a)skoegl.net>'
-__version__ = '1.14'
+__version__ = '2.0'
__website__ = 'https://github.com/stefankoegl/python-json-pointer'
__license__ = 'Modified BSD License'
@@ -174,7 +174,7 @@
# validate escapes
invalid_escape = self._RE_INVALID_ESCAPE.search(pointer)
if invalid_escape:
- raise JsonPointerException('Found invalid escape {0}'.format(
+ raise JsonPointerException('Found invalid escape {}'.format(
invalid_escape.group()))
parts = pointer.split('/')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonpointer-1.14/setup.py new/jsonpointer-2.0/setup.py
--- old/jsonpointer-1.14/setup.py 2017-10-30 20:49:19.000000000 +0100
+++ new/jsonpointer-2.0/setup.py 2018-01-16 16:22:55.000000000 +0100
@@ -42,10 +42,8 @@
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
@@ -66,4 +64,5 @@
py_modules=MODULES,
scripts=['bin/jsonpointer'],
classifiers=CLASSIFIERS,
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
)
1
0
Hello community,
here is the log from the commit of package python-keyring for openSUSE:Factory checked in at 2019-03-29 20:39:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-keyring (Old)
and /work/SRC/openSUSE:Factory/.python-keyring.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-keyring"
Fri Mar 29 20:39:17 2019 rev:35 rq:689757 version:18.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-keyring/python-keyring.changes 2019-03-08 11:01:01.384544426 +0100
+++ /work/SRC/openSUSE:Factory/.python-keyring.new.25356/python-keyring.changes 2019-03-29 20:39:18.814687763 +0100
@@ -1,0 +2,11 @@
+Thu Mar 28 21:08:23 UTC 2019 - Jan Engelhardt <jengelh(a)inai.de>
+
+- Use noun phrase in summary.
+
+-------------------------------------------------------------------
+Thu Mar 28 15:05:12 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 18.0.1:
+ * #386: ExceptionInfo no longer retains a reference to the traceback.
+
+-------------------------------------------------------------------
Old:
----
keyring-18.0.0.tar.gz
New:
----
keyring-18.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-keyring.spec ++++++
--- /var/tmp/diff_new_pack.T185Kr/_old 2019-03-29 20:39:19.450687700 +0100
+++ /var/tmp/diff_new_pack.T185Kr/_new 2019-03-29 20:39:19.454687699 +0100
@@ -18,9 +18,9 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-keyring
-Version: 18.0.0
+Version: 18.0.1
Release: 0
-Summary: Store and access your passwords safely
+Summary: System keyring service access from Python
License: Python-2.0 AND MIT
Group: Development/Languages/Python
URL: https://github.com/jaraco/keyring
@@ -40,7 +40,7 @@
%python_subpackages
%description
-The Python keyring lib provides a easy way to access the system keyring service
+The Python keyring lib provides a way to access the system keyring service
from python. It can be used in any application that needs safe password storage.
%prep
++++++ keyring-18.0.0.tar.gz -> keyring-18.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-18.0.0/CHANGES.rst new/keyring-18.0.1/CHANGES.rst
--- old/keyring-18.0.0/CHANGES.rst 2019-02-13 22:45:11.000000000 +0100
+++ new/keyring-18.0.1/CHANGES.rst 2019-03-24 16:48:43.000000000 +0100
@@ -1,3 +1,9 @@
+18.0.1
+------
+
+* #386: ExceptionInfo no longer retains a reference to the
+ traceback.
+
18.0.0
------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-18.0.0/PKG-INFO new/keyring-18.0.1/PKG-INFO
--- old/keyring-18.0.0/PKG-INFO 2019-02-13 22:45:30.000000000 +0100
+++ new/keyring-18.0.1/PKG-INFO 2019-03-24 16:49:04.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: keyring
-Version: 18.0.0
+Version: 18.0.1
Summary: Store and access your passwords safely.
Home-page: https://github.com/jaraco/keyring
Author: Kang Zhang
@@ -409,5 +409,5 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=2.7
-Provides-Extra: testing
Provides-Extra: docs
+Provides-Extra: testing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-18.0.0/keyring/errors.py new/keyring-18.0.1/keyring/errors.py
--- old/keyring-18.0.0/keyring/errors.py 2019-02-13 22:45:11.000000000 +0100
+++ new/keyring-18.0.1/keyring/errors.py 2019-03-24 16:48:44.000000000 +0100
@@ -53,7 +53,7 @@
def __init__(self, *info):
if not info:
info = sys.exc_info()
- self.type, self.value, self.traceback = info
+ self.type, self.value, _ = info
def __bool__(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-18.0.0/keyring.egg-info/PKG-INFO new/keyring-18.0.1/keyring.egg-info/PKG-INFO
--- old/keyring-18.0.0/keyring.egg-info/PKG-INFO 2019-02-13 22:45:30.000000000 +0100
+++ new/keyring-18.0.1/keyring.egg-info/PKG-INFO 2019-03-24 16:49:03.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: keyring
-Version: 18.0.0
+Version: 18.0.1
Summary: Store and access your passwords safely.
Home-page: https://github.com/jaraco/keyring
Author: Kang Zhang
@@ -409,5 +409,5 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=2.7
-Provides-Extra: testing
Provides-Extra: docs
+Provides-Extra: testing
1
0
Hello community,
here is the log from the commit of package python-fields for openSUSE:Factory checked in at 2019-03-29 20:39:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-fields (Old)
and /work/SRC/openSUSE:Factory/.python-fields.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fields"
Fri Mar 29 20:39:01 2019 rev:2 rq:689403 version:5.0.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-fields/python-fields.changes 2019-02-14 14:33:21.695652541 +0100
+++ /work/SRC/openSUSE:Factory/.python-fields.new.25356/python-fields.changes 2019-03-29 20:39:02.850689358 +0100
@@ -1,0 +2,5 @@
+Thu Mar 28 15:33:17 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Remove pytest-benchmark dependency to avoid buildcycle
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-fields.spec ++++++
--- /var/tmp/diff_new_pack.t4owRJ/_old 2019-03-29 20:39:03.426689300 +0100
+++ /var/tmp/diff_new_pack.t4owRJ/_new 2019-03-29 20:39:03.430689299 +0100
@@ -28,7 +28,6 @@
BuildRequires: %{python_module attr}
BuildRequires: %{python_module characteristic}
BuildRequires: %{python_module devel}
-BuildRequires: %{python_module pytest-benchmark}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
@@ -47,6 +46,10 @@
%prep
%setup -q -n fields-%{version}
+# do not do benchmark tests, in virtual they don't make much sense and we
+# avoid cycle with pytest-benchmark
+sed -i -e '/--benchmark-disable/d' setup.cfg
+rm tests/test_perf.py
%build
%python_build
@@ -56,7 +59,7 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} py.test-%{$python_bin_suffix} tests/
+%pytest
%files %{python_files}
%license LICENSE
1
0
Hello community,
here is the log from the commit of package python-jsonschema for openSUSE:Factory checked in at 2019-03-29 20:38:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jsonschema (Old)
and /work/SRC/openSUSE:Factory/.python-jsonschema.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jsonschema"
Fri Mar 29 20:38:56 2019 rev:18 rq:689397 version:3.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-jsonschema/python-jsonschema.changes 2019-01-21 10:54:14.771736466 +0100
+++ /work/SRC/openSUSE:Factory/.python-jsonschema.new.25356/python-jsonschema.changes 2019-03-29 20:38:57.634687113 +0100
@@ -1,0 +2,9 @@
+Thu Mar 28 14:57:16 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 3.0.1:
+ * Support for Draft 6 and Draft 7
+ * Draft 7 is now the default
+ * New TypeChecker object for more complex type definitions (and overrides)
+ * Falling back to isodate for the date-time format checker is no longer attempted, in accordance with the specification
+
+-------------------------------------------------------------------
Old:
----
jsonschema-2.6.0.tar.gz
New:
----
jsonschema-3.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jsonschema.spec ++++++
--- /var/tmp/diff_new_pack.UBzD0U/_old 2019-03-29 20:38:58.150687377 +0100
+++ /var/tmp/diff_new_pack.UBzD0U/_new 2019-03-29 20:38:58.154687379 +0100
@@ -19,32 +19,49 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%bcond_without python2
Name: python-jsonschema
-Version: 2.6.0
+Version: 3.0.1
Release: 0
Summary: An implementation of JSON-Schema validation for Python
License: MIT
Group: Development/Languages/Python
-Url: http://github.com/Julian/jsonschema
+URL: http://github.com/Julian/jsonschema
Source: https://files.pythonhosted.org/packages/source/j/jsonschema/jsonschema-%{ve…
+BuildRequires: %{python_module Twisted}
+BuildRequires: %{python_module attrs >= 17.4.0}
+BuildRequires: %{python_module idna}
+BuildRequires: %{python_module jsonpointer > 1.13}
BuildRequires: %{python_module mock}
+BuildRequires: %{python_module pyrsistent >= 0.14.0}
+BuildRequires: %{python_module rfc3987}
+BuildRequires: %{python_module setuptools_scm}
BuildRequires: %{python_module setuptools}
-BuildRequires: %{python_module vcversioner >= 2.16.0.0}
+BuildRequires: %{python_module six >= 1.11.0}
+BuildRequires: %{python_module strict-rfc3339}
+BuildRequires: %{python_module webcolors}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-%if %{with python2}
-BuildRequires: python2-functools32
-%endif
+Requires: python-attrs >= 17.4.0
+Requires: python-pyrsistent >= 0.14.0
+Requires: python-setuptools
+Requires: python-six >= 1.11.0
Requires(post): update-alternatives
Requires(preun): update-alternatives
+Recommends: python-idna
+Recommends: python-jsonpointer > 1.13
+Recommends: python-rfc3987
+Recommends: python-strict-rfc3339
+Recommends: python-webcolors
BuildArch: noarch
+%if %{with python2}
+BuildRequires: python2-functools32
+%endif
%ifpython2
Requires: python-functools32
%endif
%python_subpackages
%description
-jsonschema is an implementation of JSON Schema (currently in Draft 3)
-for Python (supporting 2.6+ including Python 3).
+jsonschema is an implementation of JSON Schema for Python
%prep
%setup -q -n jsonschema-%{version}
@@ -54,13 +71,11 @@
%install
%python_install
-%python_expand %fdupes -s %{buildroot}%{$python_sitelib}
-
-# Prepare for update-alternatives usage
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%python_clone -a %{buildroot}%{_bindir}/jsonschema
%check
-%python_exec -m unittest jsonschema.tests.test_jsonschema_test_suite
+%python_exec -m unittest discover
%post
%python_install_alternative jsonschema
++++++ jsonschema-2.6.0.tar.gz -> jsonschema-3.0.1.tar.gz ++++++
++++ 21660 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-CherryPy for openSUSE:Factory checked in at 2019-03-29 20:38:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-CherryPy (Old)
and /work/SRC/openSUSE:Factory/.python-CherryPy.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-CherryPy"
Fri Mar 29 20:38:51 2019 rev:18 rq:689368 version:18.1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-CherryPy/python-CherryPy.changes 2018-02-13 10:24:58.234676675 +0100
+++ /work/SRC/openSUSE:Factory/.python-CherryPy.new.25356/python-CherryPy.changes 2019-03-29 20:38:52.778684639 +0100
@@ -1,0 +2,15 @@
+Thu Mar 28 14:03:13 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 18.1.1:
+ * Revert bus behavior change from 18.1.0 as the former behavior
+ was intentional
+
+-------------------------------------------------------------------
+Tue Mar 5 12:19:29 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 18.1.0:
+ * too many changes to iterate, see CHANGES.rst
+ * Dropped support for python2
+- Make sure tests are run
+
+-------------------------------------------------------------------
Old:
----
CherryPy-10.2.1.tar.gz
New:
----
CherryPy-18.1.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-CherryPy.spec ++++++
--- /var/tmp/diff_new_pack.9Zu57E/_old 2019-03-29 20:38:53.458684985 +0100
+++ /var/tmp/diff_new_pack.9Zu57E/_new 2019-03-29 20:38:53.462684987 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-CherryPy
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,57 +12,46 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
-# transient tests failures for PowerPC and x86_64
-%bcond_with tests
-
-%bcond_without python2
-
+%define skip_python2 1
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define oldpython python
Name: python-CherryPy
-Version: 10.2.1
+Version: 18.1.1
Release: 0
-Url: http://www.cherrypy.org
Summary: Object-Oriented HTTP framework
License: BSD-3-Clause
Group: Development/Languages/Python
+URL: http://www.cherrypy.org
Source: https://files.pythonhosted.org/packages/source/C/CherryPy/CherryPy-%{versio…
-BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: %{python_module setuptools_scm}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
-# SECTION test requirements
-BuildRequires: %{python_module cheroot >= 5.2.0}
-BuildRequires: %{python_module nose}
-BuildRequires: %{python_module portend >= 1.6.1}
-BuildRequires: %{python_module pytest-runner}
-BuildRequires: %{python_module pytest}
-BuildRequires: %{python_module six}
-%if %{with python2}
-BuildRequires: python2-backports.unittest_mock
-%endif
-# /SECTION
BuildRequires: python-rpm-macros
+Requires: python-cheroot >= 6.2.4
+Requires: python-more-itertools
+Requires: python-portend >= 2.1.1
+Requires: python-zc.lockfile
Requires(post): update-alternatives
Requires(postun): update-alternatives
-Requires: python-cheroot >= 5.2.0
-Requires: python-portend >= 1.6.1
-Requires: python-six
-Recommends: python-simplejson
-Recommends: python-Routes
-Recommends: python-pyOpenSSL
-Recommends: python-memcached >= 1.58
+Recommends: python-Routes >= 2.3.1
Recommends: python-flup
+Recommends: python-memcached >= 1.58
+Recommends: python-pyOpenSSL
+Recommends: python-simplejson
BuildArch: noarch
-%ifpython2
-Provides: %{oldpython}-cherrypy = %{version}
-Obsoletes: %{oldpython}-cherrypy < %{version}
-%endif
-
+# SECTION test requirements
+BuildRequires: %{python_module cheroot >= 6.2.4}
+BuildRequires: %{python_module more-itertools}
+BuildRequires: %{python_module path.py}
+BuildRequires: %{python_module portend >= 2.1.1}
+BuildRequires: %{python_module pytest-services}
+BuildRequires: %{python_module pytest}
+BuildRequires: %{python_module requests-toolbelt}
+BuildRequires: %{python_module zc.lockfile}
+# /SECTION
%python_subpackages
%description
@@ -80,21 +69,19 @@
%prep
%setup -q -n CherryPy-%{version}
+# do not require cov/xdist/etc
+sed -i -e '/addopts/d' pytest.ini
%build
%python_build
%install
%python_install
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%python_clone -a %{buildroot}%{_bindir}/cherryd
-%fdupes %{buildroot}%{_prefix}
%check
-%if %{with tests}
-%python_exec -m pytest cherrypy/test
-%else
-echo "transient test failures so disable pytest."
-%endif
+%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} py.test-%{$python_bin_suffix} -v
%post
%python_install_alternative cherryd
@@ -103,8 +90,8 @@
%python_uninstall_alternative cherryd
%files %{python_files}
-%defattr(-,root,root,-)
-%doc README.rst LICENSE.md CHANGES.rst
+%license LICENSE.md
+%doc README.rst CHANGES.rst
%python_alternative %{_bindir}/cherryd
%{python_sitelib}/cherrypy/
%{python_sitelib}/CherryPy-%{version}-py%{python_version}.egg-info
++++++ CherryPy-10.2.1.tar.gz -> CherryPy-18.1.1.tar.gz ++++++
++++ 15246 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-pytest-benchmark for openSUSE:Factory checked in at 2019-03-29 20:38:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-benchmark (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-benchmark.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-benchmark"
Fri Mar 29 20:38:46 2019 rev:2 rq:689353 version:3.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest-benchmark/python-pytest-benchmark.changes 2018-05-29 16:48:12.132809917 +0200
+++ /work/SRC/openSUSE:Factory/.python-pytest-benchmark.new.25356/python-pytest-benchmark.changes 2019-03-29 20:38:48.790682606 +0100
@@ -1,0 +2,34 @@
+Thu Mar 28 13:13:55 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Try to avoid messing up bytecode of the installed pkg
+
+-------------------------------------------------------------------
+Tue Mar 26 10:16:44 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Add missing dependency on pygal and pygaljs
+
+-------------------------------------------------------------------
+Mon Mar 25 11:00:57 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Add missing dependency on aspectlib
+
+-------------------------------------------------------------------
+Wed Feb 13 14:43:30 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 3.2.2:
+ * Added support for pytest items without funcargs. Fixes interoperability with other pytest plugins like pytest-flake8.
+ * Added missing version constraint change. Now pytest >= 3.8 is required (due to pytest 4.1 support).
+ * Fixed couple CI/test issues.
+ * Fixed broken pytest_benchmark.__version__.
+ * Added support for simple trial x-axis histogram label. Contributed by Ken Crowell in #95).
+ * Added support for Pytest 3.3+, Contributed by Julien Nicoulaud in #103.
+ * Added support for Pytest 4.0. Contributed by Pablo Aguiar in #129 and #130.
+ * Added support for Pytest 4.1.
+ * Various formatting, spelling and documentation fixes. Contributed by Ken Crowell, Ofek Lev, Matthew Feickert, Jose Eduardo, Anton Lodder, Alexander Duryagin and Grygorii Iermolenko in #97, #97, #105, #110, #111, #115, #123, #131 and #140.
+ * Fixed broken pytest_benchmark_update_machine_info hook. Contributed by Alex Ford in #109.
+ * Fixed bogus xdist warning when using --benchmark-disable. Contributed by Francesco Ballarin in #113.
+ * Added support for pathlib2. Contributed by Lincoln de Sousa in #114.
+ * Changed handling so you can use --benchmark-skip and --benchmark-only, with the later having priority. Contributed by Ofek Lev in #116.
+ * Fixed various CI/testing issues. Contributed by Stanislav Levin in #134, #136 and #138.
+
+-------------------------------------------------------------------
Old:
----
pytest-benchmark-3.1.1.tar.gz
New:
----
pytest-benchmark-3.2.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-benchmark.spec ++++++
--- /var/tmp/diff_new_pack.tzPoXL/_old 2019-03-29 20:38:49.430682932 +0100
+++ /var/tmp/diff_new_pack.tzPoXL/_new 2019-03-29 20:38:49.430682932 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-pytest-benchmark
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -12,49 +12,47 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
+#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%bcond_with test
Name: python-pytest-benchmark
-Version: 3.1.1
+Version: 3.2.2
Release: 0
-License: BSD-2-Clause
Summary: A py.test fixture for benchmarking code
-Url: https://github.com/ionelmc/pytest-benchmark
+License: BSD-2-Clause
Group: Development/Languages/Python
+URL: https://github.com/ionelmc/pytest-benchmark
Source: https://files.pythonhosted.org/packages/source/p/pytest-benchmark/pytest-be…
-BuildRequires: python-rpm-macros
-BuildRequires: %{python_module devel}
-BuildRequires: %{python_module setuptools}
-%if %{with test}
BuildRequires: %{python_module aspectlib}
BuildRequires: %{python_module elasticsearch}
BuildRequires: %{python_module freezegun}
BuildRequires: %{python_module py-cpuinfo}
-BuildRequires: %{python_module pygal}
BuildRequires: %{python_module pygaljs}
-BuildRequires: %{python_module pytest >= 2.8}
+BuildRequires: %{python_module pygal}
+BuildRequires: %{python_module pytest >= 3.8}
+BuildRequires: %{python_module pytest-xdist}
+BuildRequires: %{python_module setuptools}
+BuildRequires: fdupes
+BuildRequires: git-core
BuildRequires: python-mock
-BuildRequires: python-pathlib
+BuildRequires: python-pathlib2
+BuildRequires: python-rpm-macros
BuildRequires: python-statistics
-%endif
-BuildRequires: fdupes
Requires: python-py-cpuinfo
-Requires: python-pytest >= 2.8
-%ifpython2
-Requires: python-pathlib
-Requires: python-statistics
-%endif
+Requires: python-pytest >= 3.8
+Requires(post): update-alternatives
+Requires(postun): update-alternatives
Recommends: python-aspectlib
Recommends: python-elasticsearch
Recommends: python-pygal
Recommends: python-pygaljs
BuildArch: noarch
-Requires(post): update-alternatives
-Requires(postun): update-alternatives
-
+%ifpython2
+Requires: python-pathlib2
+Requires: python-statistics
+%endif
%python_subpackages
%description
@@ -63,6 +61,8 @@
%prep
%setup -q -n pytest-benchmark-%{version}
+# skip cli tests as we use update-alternatives
+rm -f tests/test_cli.py
%build
%python_build
@@ -74,14 +74,9 @@
%python_clone -a %{buildroot}%{_bindir}/pytest-benchmark
%python_clone -a %{buildroot}%{_bindir}/py.test-benchmark
-%if %{with test}
%check
-pushd tests
-%{python_expand export PYTHONPATH=%{buildroot}%{$python_sitelib}
-py.test-%{$python_bin_suffix}
-}
-popd
-%endif
+export PYTHONDONTWRITEBYTECODE=1
+%pytest tests
%post
%{python_install_alternative pytest-benchmark py.test-benchmark}
@@ -90,7 +85,6 @@
%python_uninstall_alternative pytest-benchmark
%files %{python_files}
-%defattr(-,root,root,-)
%doc AUTHORS.rst CHANGELOG.rst README.rst
%license LICENSE
%python_alternative %{_bindir}/py.test-benchmark
++++++ pytest-benchmark-3.1.1.tar.gz -> pytest-benchmark-3.2.2.tar.gz ++++++
++++ 6864 lines of diff (skipped)
1
0
Hello community,
here is the log from the commit of package python-h2 for openSUSE:Factory checked in at 2019-03-29 20:38:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-h2 (Old)
and /work/SRC/openSUSE:Factory/.python-h2.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-h2"
Fri Mar 29 20:38:42 2019 rev:3 rq:689263 version:3.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-h2/python-h2.changes 2018-12-27 00:26:27.347807172 +0100
+++ /work/SRC/openSUSE:Factory/.python-h2.new.25356/python-h2.changes 2019-03-29 20:38:43.850680088 +0100
@@ -1,0 +2,25 @@
+Thu Mar 28 04:06:48 UTC 2019 - John Vandenberg <jayvdb(a)gmail.com>
+
+- Set URL to more useful https://github.com/python-hyper/hyper-h2
+- Update to v3.1.0
+ * API Changes (Backward-Incompatible)
+ + h2.connection.H2Connection.data_to_send first and only
+ argument ``amt`` was renamed to ``amount``
+ + Support for Python 3.3 has been removed.
+ * API Changes (Backward-Compatible)
+ + h2.connection.H2Connection.send_data now supports ``data``
+ parameter being a ``memoryview`` object.
+ + Refactor ping-related events: a h2.events.PingReceived event is
+ fired when a PING frame is received and a h2.events.PingAckReceived
+ event is fired when a PING frame with an ACK flag is received
+ + h2.events.PingAcknowledged is deprecated in favour of the
+ identical h2.events.PingAckReceived
+ + Added ENABLE_CONNECT_PROTOCOL to h2.settings.SettingCodes
+ + Support CONNECT requests with a ``:protocol`` pseudo header
+ thereby supporting RFC 8441.
+ + A limit to the number of closed streams kept in memory by the
+ connection is applied. It can be configured by
+ h2.connection.H2Connection.MAX_CLOSED_STREAMS
+ * Debug logging when stream_id is None is now fixed and no longer errors.
+
+-------------------------------------------------------------------
Old:
----
h2-3.0.1.tar.gz
New:
----
h2-3.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-h2.spec ++++++
--- /var/tmp/diff_new_pack.0WqcQq/_old 2019-03-29 20:38:44.462680400 +0100
+++ /var/tmp/diff_new_pack.0WqcQq/_new 2019-03-29 20:38:44.470680404 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-h2
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,25 +18,25 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-h2
-Version: 3.0.1
+Version: 3.1.0
Release: 0
Summary: HTTP/2 State-Machine based protocol implementation
License: MIT
Group: Development/Languages/Python
-URL: http://hyper.rtfd.org
+URL: https://github.com/python-hyper/hyper-h2
Source0: https://files.pythonhosted.org/packages/source/h/h2/h2-%{version}.tar.gz
# test requirements
BuildRequires: %{python_module coverage}
-BuildRequires: %{python_module hpack}
-BuildRequires: %{python_module hyperframe >= 5.0}
+BuildRequires: %{python_module hpack >= 2.3}
+BuildRequires: %{python_module hyperframe >= 5.2.0}
BuildRequires: %{python_module hypothesis}
BuildRequires: %{python_module pytest-cov}
BuildRequires: %{python_module pytest-xdist}
BuildRequires: %{python_module pytest}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Requires: python-hpack >= 2.2
-Requires: python-hyperframe >= 5.0
+Requires: python-hpack >= 2.3
+Requires: python-hyperframe >= 5.2.0
BuildArch: noarch
%python_subpackages
++++++ h2-3.0.1.tar.gz -> h2-3.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/CONTRIBUTORS.rst new/h2-3.1.0/CONTRIBUTORS.rst
--- old/h2-3.0.1/CONTRIBUTORS.rst 2017-04-03 09:47:32.000000000 +0200
+++ new/h2-3.1.0/CONTRIBUTORS.rst 2019-01-22 18:41:43.000000000 +0100
@@ -111,4 +111,5 @@
- Fred Thomsen (@fredthomsen)
- Added logging.
-
+ - Enhance equality testing of ``h2.settings.Settings`` objects with
+ ``hypothesis``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/HISTORY.rst new/h2-3.1.0/HISTORY.rst
--- old/h2-3.0.1/HISTORY.rst 2017-04-03 09:58:48.000000000 +0200
+++ new/h2-3.1.0/HISTORY.rst 2019-01-22 18:41:49.000000000 +0100
@@ -1,6 +1,38 @@
Release History
===============
+3.1.0 (2019-01-22)
+------------------
+
+API Changes (Backward-Incompatible)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- ``h2.connection.H2Connection.data_to_send`` first and only argument ``amt``
+ was renamed to ``amount``.
+- Support for Python 3.3 has been removed.
+
+API Changes (Backward-Compatible)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- ``h2.connection.H2Connection.send_data`` now supports ``data`` parameter
+ being a ``memoryview`` object.
+- Refactor ping-related events: a ``h2.events.PingReceived`` event is fired
+ when a PING frame is received and a ``h2.events.PingAckReceived`` event is
+ fired when a PING frame with an ACK flag is received.
+ ``h2.events.PingAcknowledged`` is deprecated in favour of the identical
+ ``h2.events.PingAckReceived``.
+- Added ``ENABLE_CONNECT_PROTOCOL`` to ``h2.settings.SettingCodes``.
+- Support ``CONNECT`` requests with a ``:protocol`` pseudo header
+ thereby supporting RFC 8441.
+- A limit to the number of closed streams kept in memory by the
+ connection is applied. It can be configured by
+ ``h2.connection.H2Connection.MAX_CLOSED_STREAMS``.
+
+Bugfixes
+~~~~~~~~
+
+- Debug logging when stream_id is None is now fixed and no longer errors.
+
3.0.1 (2017-04-03)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/PKG-INFO new/h2-3.1.0/PKG-INFO
--- old/h2-3.0.1/PKG-INFO 2017-04-03 10:07:26.000000000 +0200
+++ new/h2-3.1.0/PKG-INFO 2019-01-22 18:42:26.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: h2
-Version: 3.0.1
+Version: 3.1.0
Summary: HTTP/2 State-Machine based protocol implementation
Home-page: http://hyper.rtfd.org
Author: Cory Benfield
@@ -76,6 +76,38 @@
Release History
===============
+ 3.1.0 (2019-01-22)
+ ------------------
+
+ API Changes (Backward-Incompatible)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ - ``h2.connection.H2Connection.data_to_send`` first and only argument ``amt``
+ was renamed to ``amount``.
+ - Support for Python 3.3 has been removed.
+
+ API Changes (Backward-Compatible)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ - ``h2.connection.H2Connection.send_data`` now supports ``data`` parameter
+ being a ``memoryview`` object.
+ - Refactor ping-related events: a ``h2.events.PingReceived`` event is fired
+ when a PING frame is received and a ``h2.events.PingAckReceived`` event is
+ fired when a PING frame with an ACK flag is received.
+ ``h2.events.PingAcknowledged`` is deprecated in favour of the identical
+ ``h2.events.PingAckReceived``.
+ - Added ``ENABLE_CONNECT_PROTOCOL`` to ``h2.settings.SettingCodes``.
+ - Support ``CONNECT`` requests with a ``:protocol`` pseudo header
+ thereby supporting RFC 8441.
+ - A limit to the number of closed streams kept in memory by the
+ connection is applied. It can be configured by
+ ``h2.connection.H2Connection.MAX_CLOSED_STREAMS``.
+
+ Bugfixes
+ ~~~~~~~~
+
+ - Debug logging when stream_id is None is now fixed and no longer errors.
+
3.0.1 (2017-04-03)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/docs/source/api.rst new/h2-3.1.0/docs/source/api.rst
--- old/h2-3.0.1/docs/source/api.rst 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/docs/source/api.rst 2019-01-22 18:41:43.000000000 +0100
@@ -53,7 +53,10 @@
.. autoclass:: h2.events.RemoteSettingsChanged
:members:
-.. autoclass:: h2.events.PingAcknowledged
+.. autoclass:: h2.events.PingReceived
+ :members:
+
+.. autoclass:: h2.events.PingAckReceived
:members:
.. autoclass:: h2.events.StreamEnded
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/docs/source/basic-usage.rst new/h2-3.1.0/docs/source/basic-usage.rst
--- old/h2-3.0.1/docs/source/basic-usage.rst 2017-03-16 10:02:02.000000000 +0100
+++ new/h2-3.1.0/docs/source/basic-usage.rst 2019-01-22 18:41:43.000000000 +0100
@@ -251,9 +251,11 @@
.. code-block:: python
import h2.connection
+ import h2.config
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
while True:
data = sock.recv(65535)
@@ -267,9 +269,11 @@
import socket
import h2.connection
+ import h2.config
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
while True:
data = sock.recv(65535)
@@ -331,7 +335,8 @@
.. code-block:: python
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
conn.initiate_connection()
sock.sendall(conn.data_to_send())
@@ -359,9 +364,11 @@
import socket
import h2.connection
+ import h2.config
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
conn.initiate_connection()
sock.sendall(conn.data_to_send())
@@ -493,9 +500,11 @@
.. code-block:: python
import h2.events
+ import h2.config
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
conn.initiate_connection()
sock.sendall(conn.data_to_send())
@@ -528,6 +537,7 @@
import h2.connection
import h2.events
+ import h2.config
def send_response(conn, event):
stream_id = event.stream_id
@@ -545,7 +555,8 @@
)
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
conn.initiate_connection()
sock.sendall(conn.data_to_send())
@@ -633,6 +644,7 @@
import h2.connection
import h2.events
+ import h2.config
def send_response(conn, event):
stream_id = event.stream_id
@@ -654,7 +666,8 @@
)
def handle(sock):
- conn = h2.connection.H2Connection(client_side=False)
+ config = h2.config.H2Configuration(client_side=False)
+ conn = h2.connection.H2Connection(config=config)
conn.initiate_connection()
sock.sendall(conn.data_to_send())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/docs/source/conf.py new/h2-3.1.0/docs/source/conf.py
--- old/h2-3.0.1/docs/source/conf.py 2017-04-03 09:58:57.000000000 +0200
+++ new/h2-3.1.0/docs/source/conf.py 2019-01-22 18:41:49.000000000 +0100
@@ -55,9 +55,9 @@
# built documents.
#
# The short X.Y version.
-version = '3.0.1'
+version = '3.1.0'
# The full version, including alpha/beta/rc tags.
-release = '3.0.1'
+release = '3.1.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/docs/source/negotiating-http2.rst new/h2-3.1.0/docs/source/negotiating-http2.rst
--- old/h2-3.0.1/docs/source/negotiating-http2.rst 2017-04-03 09:47:32.000000000 +0200
+++ new/h2-3.1.0/docs/source/negotiating-http2.rst 2019-01-22 18:41:43.000000000 +0100
@@ -5,15 +5,19 @@
.. _starting-alpn:
-HTTPS URLs (ALPN and NPN)
+HTTPS URLs (ALPN)
-------------------------
-Starting HTTP/2 for HTTPS URLs is outlined in `RFC 7540 Section 3.3`_. In this case, the client and server use a TLS extension to negotiate HTTP/2: typically either or both of `NPN`_ or `ALPN`_. How to use NPN and ALPN is currently not covered in this document: please consult the documentation for either the :mod:`ssl module <python:ssl>` in the standard library, or the :mod:`PyOpenSSL <pyopenssl:OpenSSL.SSL>` third-party modules, for more on this topic.
+Starting HTTP/2 for HTTPS URLs is outlined in `RFC 7540 Section 3.3`_. In this case, the client and server use a TLS extension to negotiate HTTP/2: `ALPN`_. How to use ALPN is currently not covered in this document: please consult the documentation for either the :mod:`ssl module <python:ssl>` in the standard library, or the :mod:`PyOpenSSL <pyopenssl:OpenSSL.SSL>` third-party modules, for more on this topic.
This method is the simplest to use once the TLS connection is established. To use it with Hyper-h2, after you've established the connection and confirmed that HTTP/2 has been negotiated with `ALPN`_, create a :class:`H2Connection <h2.connection.H2Connection>` object and call :meth:`H2Connection.initiate_connection <h2.connection.H2Connection.initiate_connection>`. This will ensure that the appropriate preamble data is placed in the data buffer. You should then immediately send the data returned by :meth:`H2Connection.data_to_send <h2.connection.H2Connection.data_to_send>` on your TLS connection.
At this point, you're free to use all the HTTP/2 functionality provided by Hyper-h2.
+.. note::
+ Although Hyper-h2 is not concerned with negotiating protocol versions, it is important to note that support for `ALPN`_ is not available in the standard library of Python versions < 2.7.9.
+ As a consequence, clients may encounter various errors due to protocol versions mismatch.
+
Server Setup Example
~~~~~~~~~~~~~~~~~~~~
@@ -90,11 +94,10 @@
Prior Knowledge
---------------
-It's possible that you as a client know that a particular server supports HTTP/2, and that you do not need to perform any of the negotiations described above. In that case, you may follow the steps in :ref:`starting-alpn`, ignoring all references to ALPN and NPN: there's no need to perform the upgrade dance described in :ref:`starting-upgrade`.
+It's possible that you as a client know that a particular server supports HTTP/2, and that you do not need to perform any of the negotiations described above. In that case, you may follow the steps in :ref:`starting-alpn`, ignoring all references to ALPN: there's no need to perform the upgrade dance described in :ref:`starting-upgrade`.
.. _RFC 7540: https://tools.ietf.org/html/rfc7540
.. _RFC 7540 Section 3.2: https://tools.ietf.org/html/rfc7540#section-3.2
.. _RFC 7540 Section 3.3: https://tools.ietf.org/html/rfc7540#section-3.3
-.. _NPN: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
.. _ALPN: https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation
.. _RFC 7230 Section 6.7: https://tools.ietf.org/html/rfc7230#section-6.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/examples/curio/curio-server.py new/h2-3.1.0/examples/curio/curio-server.py
--- old/h2-3.0.1/examples/curio/curio-server.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/examples/curio/curio-server.py 2019-01-22 18:41:43.000000000 +0100
@@ -12,7 +12,7 @@
import os
import sys
-from curio import Kernel, Event, spawn, socket, ssl
+from curio import Event, spawn, socket, ssl, run
import h2.config
import h2.connection
@@ -23,7 +23,7 @@
READ_CHUNK_SIZE = 8192
-def create_listening_ssl_socket(address, certfile, keyfile):
+async def create_listening_ssl_socket(address, certfile, keyfile):
"""
Create and return a listening TLS socket on a given address.
"""
@@ -37,7 +37,7 @@
sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- sock = ssl_context.wrap_socket(sock)
+ sock = await ssl_context.wrap_socket(sock)
sock.bind(address)
sock.listen()
@@ -48,7 +48,7 @@
"""
Create an HTTP/2 server at the given address.
"""
- sock = create_listening_ssl_socket(address, certfile, keyfile)
+ sock = await create_listening_ssl_socket(address, certfile, keyfile)
print("Now listening on %s:%d" % address)
async with sock:
@@ -196,13 +196,11 @@
if __name__ == '__main__':
host = sys.argv[2] if len(sys.argv) > 2 else "localhost"
- kernel = Kernel(with_monitor=True)
print("Try GETting:")
print(" On OSX after 'brew install curl --with-c-ares --with-libidn --with-nghttp2 --with-openssl':")
print("/usr/local/opt/curl/bin/curl --tlsv1.2 --http2 -k https://localhost:5000/bundle.js")
print("Or open a browser to: https://localhost:5000/")
print(" (Accept all the warnings)")
- kernel.run(h2_server((host, 5000),
- sys.argv[1],
- "{}.crt.pem".format(host),
- "{}.key".format(host)))
+ run(h2_server((host, 5000), sys.argv[1],
+ "{}.crt.pem".format(host),
+ "{}.key".format(host)), with_monitor=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/examples/eventlet/eventlet-server.py new/h2-3.1.0/examples/eventlet/eventlet-server.py
--- old/h2-3.0.1/examples/eventlet/eventlet-server.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/examples/eventlet/eventlet-server.py 2019-01-22 18:41:43.000000000 +0100
@@ -51,7 +51,7 @@
response_headers = (
(':status', '200'),
('content-type', 'application/json'),
- ('content-length', len(data)),
+ ('content-length', str(len(data))),
('server', 'eventlet-h2'),
)
self.conn.send_headers(stream_id, response_headers)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/examples/fragments/client_upgrade_fragment.py new/h2-3.1.0/examples/fragments/client_upgrade_fragment.py
--- old/h2-3.0.1/examples/fragments/client_upgrade_fragment.py 2017-03-16 10:02:02.000000000 +0100
+++ new/h2-3.1.0/examples/fragments/client_upgrade_fragment.py 2019-01-22 18:41:43.000000000 +0100
@@ -38,7 +38,7 @@
b"GET / HTTP/1.1\r\n" +
b"Host: localhost\r\n" +
b"Upgrade: h2c\r\n" +
- b"HTTP2-Settings: " + settings + "\r\n"
+ b"HTTP2-Settings: " + settings + b"\r\n" +
b"\r\n"
)
connection.sendall(request)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/examples/fragments/server_upgrade_fragment.py new/h2-3.1.0/examples/fragments/server_upgrade_fragment.py
--- old/h2-3.0.1/examples/fragments/server_upgrade_fragment.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/examples/fragments/server_upgrade_fragment.py 2019-01-22 18:41:43.000000000 +0100
@@ -45,14 +45,14 @@
data += connection.recv(8192)
match = re.search(b'Upgrade: h2c\r\n', data)
- if match is not None:
+ if match is None:
raise RuntimeError("HTTP/2 upgrade not requested!")
# We need to look for the HTTP2-Settings header field. Again, in production
# code you shouldn't use regular expressions for this, but it's good enough
# for the example.
match = re.search(b'HTTP2-Settings: (\\S+)\r\n', data)
- if match is not None:
+ if match is None:
raise RuntimeError("HTTP2-Settings header field not present!")
return match.group(1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/__init__.py new/h2-3.1.0/h2/__init__.py
--- old/h2-3.0.1/h2/__init__.py 2017-04-03 09:58:51.000000000 +0200
+++ new/h2-3.1.0/h2/__init__.py 2019-01-22 18:41:49.000000000 +0100
@@ -5,4 +5,4 @@
A HTTP/2 implementation.
"""
-__version__ = '3.0.1'
+__version__ = '3.1.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/connection.py new/h2-3.1.0/h2/connection.py
--- old/h2-3.0.1/h2/connection.py 2017-04-03 09:57:49.000000000 +0200
+++ new/h2-3.1.0/h2/connection.py 2019-01-22 18:41:43.000000000 +0100
@@ -21,7 +21,7 @@
from .config import H2Configuration
from .errors import ErrorCodes, _error_code_from_int
from .events import (
- WindowUpdated, RemoteSettingsChanged, PingAcknowledged,
+ WindowUpdated, RemoteSettingsChanged, PingReceived, PingAckReceived,
SettingsAcknowledged, ConnectionTerminated, PriorityUpdated,
AlternativeServiceAvailable, UnknownFrameReceived
)
@@ -33,7 +33,7 @@
from .frame_buffer import FrameBuffer
from .settings import Settings, SettingCodes
from .stream import H2Stream, StreamClosedBy
-from .utilities import guard_increment_window
+from .utilities import SizeLimitDict, guard_increment_window
from .windows import WindowManager
@@ -281,6 +281,9 @@
# The initial default value of SETTINGS_MAX_HEADER_LIST_SIZE.
DEFAULT_MAX_HEADER_LIST_SIZE = 2**16
+ # Keep in memory limited amount of results for streams closes
+ MAX_CLOSED_STREAMS = 2**16
+
def __init__(self, config=None):
self.state_machine = H2ConnectionStateMachine()
self.streams = {}
@@ -325,7 +328,7 @@
)
self.remote_settings = Settings(client=not self.config.client_side)
- # The curent value of the connection flow control windows on the
+ # The current value of the connection flow control windows on the
# connection.
self.outbound_flow_control_window = (
self.remote_settings.initial_window_size
@@ -355,7 +358,9 @@
# Also used to determine whether we should consider a frame received
# while a stream is closed as either a stream error or a connection
# error.
- self._closed_streams = {}
+ self._closed_streams = SizeLimitDict(
+ size_limit=self.MAX_CLOSED_STREAMS
+ )
# The flow control window manager for the connection.
self._inbound_flow_control_window_manager = WindowManager(
@@ -909,16 +914,21 @@
frames = stream.increase_flow_control_window(
increment
)
+
+ self.config.logger.debug(
+ "Increase stream ID %d flow control window by %d",
+ stream_id, increment
+ )
else:
self._inbound_flow_control_window_manager.window_opened(increment)
f = WindowUpdateFrame(0)
f.window_increment = increment
frames = [f]
- self.config.logger.debug(
- "Increase stream ID %d flow control window by %d",
- stream_id, increment
- )
+ self.config.logger.debug(
+ "Increase connection flow control window by %d", increment
+ )
+
self._prepare_for_sending(frames)
def push_stream(self, stream_id, promised_stream_id, request_headers):
@@ -1327,7 +1337,7 @@
self._prepare_for_sending(frames)
- def data_to_send(self, amt=None):
+ def data_to_send(self, amount=None):
"""
Returns some data for sending out of the internal data buffer.
@@ -1336,19 +1346,19 @@
or less if that much data is not available. It does not perform any
I/O, and so uses a different name.
- :param amt: (optional) The maximum amount of data to return. If not
+ :param amount: (optional) The maximum amount of data to return. If not
set, or set to ``None``, will return as much data as possible.
- :type amt: ``int``
+ :type amount: ``int``
:returns: A bytestring containing the data to send on the wire.
:rtype: ``bytes``
"""
- if amt is None:
+ if amount is None:
data = self._data_to_send
self._data_to_send = b''
return data
else:
- data = self._data_to_send[:amt]
- self._data_to_send = self._data_to_send[amt:]
+ data = self._data_to_send[:amount]
+ self._data_to_send = self._data_to_send[amount:]
return data
def clear_outbound_data_buffer(self):
@@ -1717,15 +1727,19 @@
flags = []
if 'ACK' in frame.flags:
- evt = PingAcknowledged()
- evt.ping_data = frame.opaque_data
- events.append(evt)
+ evt = PingAckReceived()
else:
+ evt = PingReceived()
+
+ # automatically ACK the PING with the same 'opaque data'
f = PingFrame(0)
f.flags = {'ACK'}
f.opaque_data = frame.opaque_data
flags.append(f)
+ evt.ping_data = frame.opaque_data
+ events.append(evt)
+
return flags, events
def _receive_rst_stream_frame(self, frame):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/events.py new/h2-3.1.0/h2/events.py
--- old/h2-3.0.1/h2/events.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/h2/events.py 2019-01-22 18:41:43.000000000 +0100
@@ -356,22 +356,51 @@
)
+class PingReceived(Event):
+ """
+ The PingReceived event is fired whenever a PING is received. It contains
+ the 'opaque data' of the PING frame. A ping acknowledgment with the same
+ 'opaque data' is automatically emitted after receiving a ping.
+
+ .. versionadded:: 3.1.0
+ """
+ def __init__(self):
+ #: The data included on the ping.
+ self.ping_data = None
+
+ def __repr__(self):
+ return "<PingReceived ping_data:%s>" % (
+ _bytes_representation(self.ping_data),
+ )
+
+
class PingAcknowledged(Event):
"""
- The PingAcknowledged event is fired whenever a user-emitted PING is
- acknowledged. This contains the data in the ACK'ed PING, allowing the
- user to correlate PINGs and calculate RTT.
+ Same as PingAckReceived.
+
+ .. deprecated:: 3.1.0
"""
def __init__(self):
#: The data included on the ping.
self.ping_data = None
def __repr__(self):
- return "<PingAcknowledged ping_data:%s>" % (
+ return "<PingAckReceived ping_data:%s>" % (
_bytes_representation(self.ping_data),
)
+class PingAckReceived(PingAcknowledged):
+ """
+ The PingAckReceived event is fired whenever a PING acknowledgment is
+ received. It contains the 'opaque data' of the PING+ACK frame, allowing the
+ user to correlate PINGs and calculate RTT.
+
+ .. versionadded:: 3.1.0
+ """
+ pass
+
+
class StreamEnded(Event):
"""
The StreamEnded event is fired whenever a stream is ended by a remote
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/settings.py new/h2-3.1.0/h2/settings.py
--- old/h2-3.0.1/h2/settings.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/h2/settings.py 2019-01-22 18:41:43.000000000 +0100
@@ -15,6 +15,12 @@
from h2.errors import ErrorCodes
from h2.exceptions import InvalidSettingsValueError
+try:
+ from collections.abc import MutableMapping
+except ImportError: # pragma: no cover
+ # Python 2.7 compatibility
+ from collections import MutableMapping
+
class SettingCodes(enum.IntEnum):
"""
@@ -49,6 +55,10 @@
#: and value in octets plus an overhead of 32 octets for each header field.
MAX_HEADER_LIST_SIZE = SettingsFrame.MAX_HEADER_LIST_SIZE
+ #: This setting can be used to enable the connect protocol. To enable on a
+ #: client set this to 1.
+ ENABLE_CONNECT_PROTOCOL = SettingsFrame.ENABLE_CONNECT_PROTOCOL
+
def _setting_code_from_int(code):
"""
@@ -88,7 +98,7 @@
)
-class Settings(collections.MutableMapping):
+class Settings(MutableMapping):
"""
An object that encapsulates HTTP/2 settings state.
@@ -135,6 +145,7 @@
SettingCodes.ENABLE_PUSH: collections.deque([int(client)]),
SettingCodes.INITIAL_WINDOW_SIZE: collections.deque([65535]),
SettingCodes.MAX_FRAME_SIZE: collections.deque([16384]),
+ SettingCodes.ENABLE_CONNECT_PROTOCOL: collections.deque([0]),
}
if initial_values is not None:
for key, value in initial_values.items():
@@ -243,6 +254,18 @@
def max_header_list_size(self, value):
self[SettingCodes.MAX_HEADER_LIST_SIZE] = value
+ @property
+ def enable_connect_protocol(self):
+ """
+ The current value of the :data:`ENABLE_CONNECT_PROTOCOL
+ <h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL>` setting.
+ """
+ return self[SettingCodes.ENABLE_CONNECT_PROTOCOL]
+
+ @enable_connect_protocol.setter
+ def enable_connect_protocol(self, value):
+ self[SettingCodes.ENABLE_CONNECT_PROTOCOL] = value
+
# Implement the MutableMapping API.
def __getitem__(self, key):
val = self._settings[key][0]
@@ -292,7 +315,7 @@
return NotImplemented
-def _validate_setting(setting, value):
+def _validate_setting(setting, value): # noqa: C901
"""
Confirms that a specific setting has a well-formed value. If the setting is
invalid, returns an error code. Otherwise, returns 0 (NO_ERROR).
@@ -309,5 +332,8 @@
elif setting == SettingCodes.MAX_HEADER_LIST_SIZE:
if value < 0:
return ErrorCodes.PROTOCOL_ERROR
+ elif setting == SettingCodes.ENABLE_CONNECT_PROTOCOL:
+ if value not in (0, 1):
+ return ErrorCodes.PROTOCOL_ERROR
return 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/stream.py new/h2-3.1.0/h2/stream.py
--- old/h2-3.0.1/h2/stream.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/h2/stream.py 2019-01-22 18:41:43.000000000 +0100
@@ -788,7 +788,7 @@
self.max_outbound_frame_size = None
self.request_method = None
- # The curent value of the outbound stream flow control window
+ # The current value of the outbound stream flow control window
self.outbound_flow_control_window = outbound_window_size
# The flow control manager.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2/utilities.py new/h2-3.1.0/h2/utilities.py
--- old/h2-3.0.1/h2/utilities.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/h2/utilities.py 2019-01-22 18:41:43.000000000 +0100
@@ -33,6 +33,7 @@
b':authority', u':authority',
b':path', u':path',
b':status', u':status',
+ b':protocol', u':protocol',
])
@@ -47,13 +48,19 @@
b':scheme', u':scheme',
b':path', u':path',
b':authority', u':authority',
- b':method', u':method'
+ b':method', u':method',
+ b':protocol', u':protocol',
])
_RESPONSE_ONLY_HEADERS = frozenset([b':status', u':status'])
+# A Set of pseudo headers that are only valid if the method is
+# CONNECT, see RFC 8441 § 5
+_CONNECT_REQUEST_ONLY_HEADERS = frozenset([b':protocol', u':protocol'])
+
+
if sys.version_info[0] == 2: # Python 2.X
_WHITESPACE = frozenset(whitespace)
else: # Python 3.3+
@@ -323,6 +330,7 @@
"""
seen_pseudo_header_fields = set()
seen_regular_header = False
+ method = None
for header in headers:
if _custom_startswith(header[0], b':', u':'):
@@ -344,6 +352,12 @@
"Received custom pseudo-header field %s" % header[0]
)
+ if header[0] in (b':method', u':method'):
+ if not isinstance(header[1], bytes):
+ method = header[1].encode('utf-8')
+ else:
+ method = header[1]
+
else:
seen_regular_header = True
@@ -351,11 +365,12 @@
# Check the pseudo-headers we got to confirm they're acceptable.
_check_pseudo_header_field_acceptability(
- seen_pseudo_header_fields, hdr_validation_flags
+ seen_pseudo_header_fields, method, hdr_validation_flags
)
def _check_pseudo_header_field_acceptability(pseudo_headers,
+ method,
hdr_validation_flags):
"""
Given the set of pseudo-headers present in a header block and the
@@ -394,6 +409,13 @@
"Encountered response-only headers %s" %
invalid_request_headers
)
+ if method != b'CONNECT':
+ invalid_headers = pseudo_headers & _CONNECT_REQUEST_ONLY_HEADERS
+ if invalid_headers:
+ raise ProtocolError(
+ "Encountered connect-request-only headers %s" %
+ invalid_headers
+ )
def _validate_host_authority_header(headers):
@@ -617,3 +639,22 @@
headers = _check_path_header(headers, hdr_validation_flags)
return headers
+
+
+class SizeLimitDict(collections.OrderedDict):
+
+ def __init__(self, *args, **kwargs):
+ self._size_limit = kwargs.pop("size_limit", None)
+ super(SizeLimitDict, self).__init__(*args, **kwargs)
+
+ self._check_size_limit()
+
+ def __setitem__(self, key, value):
+ super(SizeLimitDict, self).__setitem__(key, value)
+
+ self._check_size_limit()
+
+ def _check_size_limit(self):
+ if self._size_limit is not None:
+ while len(self) > self._size_limit:
+ self.popitem(last=False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2.egg-info/PKG-INFO new/h2-3.1.0/h2.egg-info/PKG-INFO
--- old/h2-3.0.1/h2.egg-info/PKG-INFO 2017-04-03 10:07:26.000000000 +0200
+++ new/h2-3.1.0/h2.egg-info/PKG-INFO 2019-01-22 18:42:26.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: h2
-Version: 3.0.1
+Version: 3.1.0
Summary: HTTP/2 State-Machine based protocol implementation
Home-page: http://hyper.rtfd.org
Author: Cory Benfield
@@ -76,6 +76,38 @@
Release History
===============
+ 3.1.0 (2019-01-22)
+ ------------------
+
+ API Changes (Backward-Incompatible)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ - ``h2.connection.H2Connection.data_to_send`` first and only argument ``amt``
+ was renamed to ``amount``.
+ - Support for Python 3.3 has been removed.
+
+ API Changes (Backward-Compatible)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ - ``h2.connection.H2Connection.send_data`` now supports ``data`` parameter
+ being a ``memoryview`` object.
+ - Refactor ping-related events: a ``h2.events.PingReceived`` event is fired
+ when a PING frame is received and a ``h2.events.PingAckReceived`` event is
+ fired when a PING frame with an ACK flag is received.
+ ``h2.events.PingAcknowledged`` is deprecated in favour of the identical
+ ``h2.events.PingAckReceived``.
+ - Added ``ENABLE_CONNECT_PROTOCOL`` to ``h2.settings.SettingCodes``.
+ - Support ``CONNECT`` requests with a ``:protocol`` pseudo header
+ thereby supporting RFC 8441.
+ - A limit to the number of closed streams kept in memory by the
+ connection is applied. It can be configured by
+ ``h2.connection.H2Connection.MAX_CLOSED_STREAMS``.
+
+ Bugfixes
+ ~~~~~~~~
+
+ - Debug logging when stream_id is None is now fixed and no longer errors.
+
3.0.1 (2017-04-03)
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2.egg-info/SOURCES.txt new/h2-3.1.0/h2.egg-info/SOURCES.txt
--- old/h2-3.0.1/h2.egg-info/SOURCES.txt 2017-04-03 10:07:26.000000000 +0200
+++ new/h2-3.1.0/h2.egg-info/SOURCES.txt 2019-01-22 18:42:26.000000000 +0100
@@ -95,6 +95,7 @@
test/test_priority.py
test/test_related_events.py
test/test_rfc7838.py
+test/test_rfc8441.py
test/test_settings.py
test/test_state_machines.py
test/test_stream_reset.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/h2.egg-info/requires.txt new/h2-3.1.0/h2.egg-info/requires.txt
--- old/h2-3.0.1/h2.egg-info/requires.txt 2017-04-03 10:07:26.000000000 +0200
+++ new/h2-3.1.0/h2.egg-info/requires.txt 2019-01-22 18:42:26.000000000 +0100
@@ -1,5 +1,5 @@
-hyperframe>=5.0, <6
-hpack>=2.3, <4
+hyperframe<6,>=5.2.0
+hpack<4,>=2.3
[:python_version == "2.7" or python_version == "3.3"]
-enum34>=1.1.6, <2
+enum34<2,>=1.1.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/setup.py new/h2-3.1.0/setup.py
--- old/h2-3.0.1/setup.py 2017-04-03 09:57:49.000000000 +0200
+++ new/h2-3.1.0/setup.py 2019-01-22 18:41:43.000000000 +0100
@@ -62,8 +62,8 @@
'Programming Language :: Python :: Implementation :: PyPy',
],
install_requires=[
- 'hyperframe>=5.0, <6',
- 'hpack>=2.3, <4',
+ 'hyperframe>=5.2.0, <6',
+ 'hpack>=2.3,<4',
],
extras_require={
':python_version == "2.7" or python_version == "3.3"': ['enum34>=1.1.6, <2'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_basic_logic.py new/h2-3.1.0/test/test_basic_logic.py
--- old/h2-3.0.1/test/test_basic_logic.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/test/test_basic_logic.py 2019-01-22 18:41:43.000000000 +0100
@@ -114,6 +114,23 @@
expected_data_frame_pad_length=0
)
+ def test_sending_data_in_memoryview(self):
+ """
+ Support memoryview for sending data.
+ """
+ c = h2.connection.H2Connection()
+ c.initiate_connection()
+ c.send_headers(1, self.example_request_headers)
+
+ # Clear the data, then send some data.
+ c.clear_outbound_data_buffer()
+ events = c.send_data(1, memoryview(b'some data'))
+ assert not events
+ data_to_send = c.data_to_send()
+ assert (
+ data_to_send == b'\x00\x00\t\x00\x00\x00\x00\x00\x01some data'
+ )
+
def test_sending_data_with_padding(self):
"""
Single data frames with padding are encoded correctly.
@@ -1081,7 +1098,12 @@
c.clear_outbound_data_buffer()
events = c.receive_data(sent_frame.serialize())
- assert not events
+ assert len(events) == 1
+ event = events[0]
+
+ assert isinstance(event, h2.events.PingReceived)
+ assert event.ping_data == ping_data
+
assert c.data_to_send() == expected_data
def test_receiving_settings_frame_event(self, frame_factory):
@@ -1324,7 +1346,7 @@
def test_receiving_ping_acknowledgement(self, frame_factory):
"""
- Receiving a PING acknolwedgement fires a PingAcknolwedged event.
+ Receiving a PING acknowledgement fires a PingAckReceived event.
"""
c = h2.connection.H2Connection(config=self.server_config)
c.receive_data(frame_factory.preamble())
@@ -1339,7 +1361,8 @@
assert len(events) == 1
event = events[0]
- assert isinstance(event, h2.events.PingAcknowledged)
+ assert isinstance(event, h2.events.PingAckReceived)
+ assert isinstance(event, h2.events.PingAcknowledged) # deprecated
assert event.ping_data == ping_data
def test_stream_ended_remotely(self, frame_factory):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_events.py new/h2-3.1.0/test/test_events.py
--- old/h2-3.0.1/test/test_events.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/test/test_events.py 2019-01-22 18:41:43.000000000 +0100
@@ -213,14 +213,23 @@
"new_value=32768)}>"
)
- def test_pingacknowledged_repr(self):
+ def test_pingreceived_repr(self):
"""
- PingAcknowledged has a useful debug representation.
+ PingReceived has a useful debug representation.
"""
- e = h2.events.PingAcknowledged()
+ e = h2.events.PingReceived()
e.ping_data = b'abcdefgh'
- assert repr(e) == "<PingAcknowledged ping_data:6162636465666768>"
+ assert repr(e) == "<PingReceived ping_data:6162636465666768>"
+
+ def test_pingackreceived_repr(self):
+ """
+ PingAckReceived has a useful debug representation.
+ """
+ e = h2.events.PingAckReceived()
+ e.ping_data = b'abcdefgh'
+
+ assert repr(e) == "<PingAckReceived ping_data:6162636465666768>"
def test_streamended_repr(self):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_invalid_headers.py new/h2-3.1.0/test/test_invalid_headers.py
--- old/h2-3.0.1/test/test_invalid_headers.py 2017-04-03 09:57:49.000000000 +0200
+++ new/h2-3.1.0/test/test_invalid_headers.py 2019-01-22 18:41:43.000000000 +0100
@@ -54,6 +54,7 @@
base_request_headers + [('name', 'value with trailing space ')],
[header for header in base_request_headers
if header[0] != ':authority'],
+ [(':protocol', 'websocket')] + base_request_headers,
]
server_config = h2.config.H2Configuration(
client_side=False, header_encoding='utf-8'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_rfc8441.py new/h2-3.1.0/test/test_rfc8441.py
--- old/h2-3.0.1/test/test_rfc8441.py 1970-01-01 01:00:00.000000000 +0100
+++ new/h2-3.1.0/test/test_rfc8441.py 2019-01-22 18:41:43.000000000 +0100
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+"""
+test_rfc8441
+~~~~~~~~~~~~
+
+Test the RFC 8441 extended connect request support.
+"""
+import h2.config
+import h2.connection
+import h2.events
+
+
+class TestRFC8441(object):
+ """
+ Tests that the client supports sending an extended connect request
+ and the server supports receiving it.
+ """
+
+ def test_can_send_headers(self, frame_factory):
+ headers = [
+ (b':authority', b'example.com'),
+ (b':path', b'/'),
+ (b':scheme', b'https'),
+ (b':method', b'CONNECT'),
+ (b':protocol', b'websocket'),
+ (b'user-agent', b'someua/0.0.1'),
+ ]
+
+ client = h2.connection.H2Connection()
+ client.initiate_connection()
+ client.send_headers(stream_id=1, headers=headers)
+
+ server = h2.connection.H2Connection(
+ config=h2.config.H2Configuration(client_side=False)
+ )
+ events = server.receive_data(client.data_to_send())
+ event = events[1]
+ assert isinstance(event, h2.events.RequestReceived)
+ assert event.stream_id == 1
+ assert event.headers == headers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_settings.py new/h2-3.1.0/test/test_settings.py
--- old/h2-3.0.1/test/test_settings.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/test/test_settings.py 2019-01-22 18:41:43.000000000 +0100
@@ -12,7 +12,9 @@
import h2.settings
from hypothesis import given, assume
-from hypothesis.strategies import integers
+from hypothesis.strategies import (
+ integers, booleans, fixed_dictionaries, builds
+)
class TestSettings(object):
@@ -29,6 +31,7 @@
assert s[h2.settings.SettingCodes.ENABLE_PUSH] == 1
assert s[h2.settings.SettingCodes.INITIAL_WINDOW_SIZE] == 65535
assert s[h2.settings.SettingCodes.MAX_FRAME_SIZE] == 16384
+ assert s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] == 0
def test_settings_defaults_server(self):
"""
@@ -40,6 +43,7 @@
assert s[h2.settings.SettingCodes.ENABLE_PUSH] == 0
assert s[h2.settings.SettingCodes.INITIAL_WINDOW_SIZE] == 65535
assert s[h2.settings.SettingCodes.MAX_FRAME_SIZE] == 16384
+ assert s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] == 0
@pytest.mark.parametrize('client', [True, False])
def test_can_set_initial_values(self, client):
@@ -52,6 +56,7 @@
h2.settings.SettingCodes.MAX_FRAME_SIZE: 16388,
h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS: 100,
h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE: 2**16,
+ h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL: 1,
}
s = h2.settings.Settings(client=client, initial_values=overrides)
@@ -61,6 +66,7 @@
assert s[h2.settings.SettingCodes.MAX_FRAME_SIZE] == 16388
assert s[h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS] == 100
assert s[h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE] == 2**16
+ assert s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] == 1
@pytest.mark.parametrize(
'setting,value',
@@ -72,6 +78,7 @@
(h2.settings.SettingCodes.MAX_FRAME_SIZE, 1),
(h2.settings.SettingCodes.MAX_FRAME_SIZE, 2**30),
(h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE, -1),
+ (h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL, -1),
]
)
def test_cannot_set_invalid_initial_values(self, setting, value):
@@ -106,6 +113,7 @@
h2.settings.SettingCodes.ENABLE_PUSH: 0,
h2.settings.SettingCodes.INITIAL_WINDOW_SIZE: 60,
h2.settings.SettingCodes.MAX_FRAME_SIZE: 16385,
+ h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL: 1,
}
s.update(new_settings)
@@ -169,16 +177,16 @@
Length is related only to the number of keys.
"""
s = h2.settings.Settings(client=True)
- assert len(s) == 4
+ assert len(s) == 5
s[h2.settings.SettingCodes.HEADER_TABLE_SIZE] == 8000
- assert len(s) == 4
+ assert len(s) == 5
s.acknowledge()
- assert len(s) == 4
+ assert len(s) == 5
del s[h2.settings.SettingCodes.HEADER_TABLE_SIZE]
- assert len(s) == 3
+ assert len(s) == 4
def test_new_values_work(self):
"""
@@ -232,6 +240,9 @@
assert s.max_frame_size == s[h2.settings.SettingCodes.MAX_FRAME_SIZE]
assert s.max_concurrent_streams == 2**32 + 1 # A sensible default.
assert s.max_header_list_size is None
+ assert s.enable_connect_protocol == s[
+ h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL
+ ]
def test_settings_setters(self):
"""
@@ -245,6 +256,7 @@
s.max_frame_size = 16385
s.max_concurrent_streams = 4
s.max_header_list_size = 2**16
+ s.enable_connect_protocol = 1
s.acknowledge()
assert s[h2.settings.SettingCodes.HEADER_TABLE_SIZE] == 0
@@ -253,6 +265,7 @@
assert s[h2.settings.SettingCodes.MAX_FRAME_SIZE] == 16385
assert s[h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS] == 4
assert s[h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE] == 2**16
+ assert s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] == 1
@given(integers())
def test_cannot_set_invalid_values_for_enable_push(self, val):
@@ -361,131 +374,97 @@
with pytest.raises(KeyError):
s[h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE]
-
-class TestSettingsEquality(object):
- """
- A class defining tests for the standard implementation of == and != .
- """
-
- def an_instance(self):
+ @given(integers())
+ def test_cannot_set_invalid_values_for_enable_connect_protocol(self, val):
"""
- Return an instance of the class under test. Each call to this method
- must return a different object. All objects returned must be equal to
- each other.
+ SETTINGS_ENABLE_CONNECT_PROTOCOL only allows two values: 0, 1.
"""
- overrides = {
- h2.settings.SettingCodes.HEADER_TABLE_SIZE: 0,
- h2.settings.SettingCodes.MAX_FRAME_SIZE: 16384,
- h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS: 4,
- h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE: 2**16,
- }
- return h2.settings.Settings(client=True, initial_values=overrides)
+ assume(val not in (0, 1))
+ s = h2.settings.Settings()
- def another_instance(self):
- """
- Return an instance of the class under test. Each call to this method
- must return a different object. The objects must not be equal to the
- objects returned by an_instance. They may or may not be equal to
- each other (they will not be compared against each other).
- """
- overrides = {
- h2.settings.SettingCodes.HEADER_TABLE_SIZE: 8080,
- h2.settings.SettingCodes.MAX_FRAME_SIZE: 16388,
- h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS: 100,
- h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE: 2**16,
- }
- return h2.settings.Settings(client=False, initial_values=overrides)
+ with pytest.raises(h2.exceptions.InvalidSettingsValueError) as e:
+ s.enable_connect_protocol = val
- def test_identical_eq(self):
- """
- An object compares equal to itself using the == operator.
- """
- o = self.an_instance()
- assert (o == o)
+ s.acknowledge()
+ assert e.value.error_code == h2.errors.ErrorCodes.PROTOCOL_ERROR
+ assert s.enable_connect_protocol == 0
- def test_identical_ne(self):
- """
- An object doesn't compare not equal to itself using the != operator.
- """
- o = self.an_instance()
- assert not (o != o)
+ with pytest.raises(h2.exceptions.InvalidSettingsValueError) as e:
+ s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] = val
- def test_same_eq(self):
- """
- Two objects that are equal to each other compare equal to each other
- using the == operator.
- """
- a = self.an_instance()
- b = self.an_instance()
- assert (a == b)
+ s.acknowledge()
+ assert e.value.error_code == h2.errors.ErrorCodes.PROTOCOL_ERROR
+ assert s[h2.settings.SettingCodes.ENABLE_CONNECT_PROTOCOL] == 0
- def test_same_ne(self):
- """
- Two objects that are equal to each other do not compare not equal to
- each other using the != operator.
- """
- a = self.an_instance()
- b = self.an_instance()
- assert not (a != b)
- def test_different_eq(self):
+class TestSettingsEquality(object):
+ """
+ A class defining tests for the standard implementation of == and != .
+ """
+
+ SettingsStrategy = builds(
+ h2.settings.Settings,
+ client=booleans(),
+ initial_values=fixed_dictionaries({
+ h2.settings.SettingCodes.HEADER_TABLE_SIZE:
+ integers(0, 2**32 - 1),
+ h2.settings.SettingCodes.ENABLE_PUSH: integers(0, 1),
+ h2.settings.SettingCodes.INITIAL_WINDOW_SIZE:
+ integers(0, 2**31 - 1),
+ h2.settings.SettingCodes.MAX_FRAME_SIZE:
+ integers(2**14, 2**24 - 1),
+ h2.settings.SettingCodes.MAX_CONCURRENT_STREAMS:
+ integers(0, 2**32 - 1),
+ h2.settings.SettingCodes.MAX_HEADER_LIST_SIZE:
+ integers(0, 2**32 - 1),
+ })
+ )
+
+ @given(settings=SettingsStrategy)
+ def test_equality_reflexive(self, settings):
"""
- Two objects that are not equal to each other do not compare equal to
- each other using the == operator.
+ An object compares equal to itself using the == operator and the !=
+ operator.
"""
- a = self.an_instance()
- b = self.another_instance()
- assert not (a == b)
+ assert (settings == settings)
+ assert not (settings != settings)
- def test_different_ne(self):
+ @given(settings=SettingsStrategy, o_settings=SettingsStrategy)
+ def test_equality_multiple(self, settings, o_settings):
"""
- Two objects that are not equal to each other compare not equal to each
- other using the != operator.
+ Two objects compare themselves using the == operator and the !=
+ operator.
"""
- a = self.an_instance()
- b = self.another_instance()
- assert (a != b)
+ if settings == o_settings:
+ assert settings == o_settings
+ assert not (settings != o_settings)
+ else:
+ assert settings != o_settings
+ assert not (settings == o_settings)
- def test_another_type_eq(self):
+ @given(settings=SettingsStrategy)
+ def test_another_type_equality(self, settings):
"""
The object does not compare equal to an object of an unrelated type
(which does not implement the comparison) using the == operator.
"""
- a = self.an_instance()
- b = object()
- assert not (a == b)
+ obj = object()
+ assert (settings != obj)
+ assert not (settings == obj)
- def test_another_type_ne(self):
+ @given(settings=SettingsStrategy)
+ def test_delegated_eq(self, settings):
"""
- The object compares not equal to an object of an unrelated type (which
- does not implement the comparison) using the != operator.
- """
- a = self.an_instance()
- b = object()
- assert (a != b)
-
- def test_delegated_eq(self):
- """
- The result of comparison using == is delegated to the right-hand
- operand if it is of an unrelated type.
+ The result of comparison is delegated to the right-hand operand if
+ it is of an unrelated type.
"""
class Delegate(object):
def __eq__(self, other):
return [self]
- a = self.an_instance()
- b = Delegate()
- assert (a == b) == [b]
-
- def test_delegate_ne(self):
- """
- The result of comparison using != is delegated to the right-hand
- operand if it is of an unrelated type.
- """
- class Delegate(object):
def __ne__(self, other):
return [self]
- a = self.an_instance()
- b = Delegate()
- assert (a != b) == [b]
+ delg = Delegate()
+ assert (settings == delg) == [delg]
+ assert (settings != delg) == [delg]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test/test_utility_functions.py new/h2-3.1.0/test/test_utility_functions.py
--- old/h2-3.0.1/test/test_utility_functions.py 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/test/test_utility_functions.py 2019-01-22 18:41:43.000000000 +0100
@@ -12,7 +12,7 @@
import h2.errors
import h2.events
import h2.exceptions
-from h2.utilities import extract_method_header
+from h2.utilities import SizeLimitDict, extract_method_header
# These tests require a non-list-returning range function.
try:
@@ -176,3 +176,51 @@
)
def test_extract_header_method(self, headers):
assert extract_method_header(headers) == b'GET'
+
+
+def test_size_limit_dict_limit():
+ dct = SizeLimitDict(size_limit=2)
+
+ dct[1] = 1
+ dct[2] = 2
+
+ assert len(dct) == 2
+ assert dct[1] == 1
+ assert dct[2] == 2
+
+ dct[3] = 3
+
+ assert len(dct) == 2
+ assert dct[2] == 2
+ assert dct[3] == 3
+ assert 1 not in dct
+
+
+def test_size_limit_dict_limit_init():
+ initial_dct = {
+ 1: 1,
+ 2: 2,
+ 3: 3,
+ }
+
+ dct = SizeLimitDict(initial_dct, size_limit=2)
+
+ assert len(dct) == 2
+
+
+def test_size_limit_dict_no_limit():
+ dct = SizeLimitDict(size_limit=None)
+
+ dct[1] = 1
+ dct[2] = 2
+
+ assert len(dct) == 2
+ assert dct[1] == 1
+ assert dct[2] == 2
+
+ dct[3] = 3
+
+ assert len(dct) == 3
+ assert dct[1] == 1
+ assert dct[2] == 2
+ assert dct[3] == 3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/test_requirements.txt new/h2-3.1.0/test_requirements.txt
--- old/h2-3.0.1/test_requirements.txt 2017-03-31 17:30:40.000000000 +0200
+++ new/h2-3.1.0/test_requirements.txt 2019-01-22 18:41:43.000000000 +0100
@@ -1,5 +1,5 @@
-pytest==3.0.7
-pytest-cov==2.4.0
-coverage==4.3.4
-pytest-xdist==1.15.0
-hypothesis==3.7.0
+pytest==3.4.2
+pytest-cov==2.5.1
+coverage==4.5.1
+pytest-xdist==1.22.2
+hypothesis
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/tox.ini new/h2-3.1.0/tox.ini
--- old/h2-3.0.1/tox.ini 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/tox.ini 2019-01-22 18:41:43.000000000 +0100
@@ -1,5 +1,5 @@
[tox]
-envlist = py27, py33, py34, py35, py36, pypy, lint, packaging, docs
+envlist = py27, py34, py35, py36, py37, pypy, lint, packaging, docs
[testenv]
deps= -r{toxinidir}/test_requirements.txt
@@ -15,22 +15,17 @@
# This is a validation test that confirms that Twisted's test cases haven't
# broken.
deps =
- # [tls,http2] syntax doesn't work here so we enumerate all dependencies.
- git+https://github.com/twisted/twisted
- pyopenssl
- service_identity
- idna
- priority
+ twisted[tls, http2, conch]
sphinx
commands = python -m twisted.trial --reporter=text twisted
[testenv:lint]
-basepython=python3.4
-deps = flake8==3.3.0
+basepython=python3.7
+deps = flake8==3.5.0
commands = flake8 --max-complexity 10 h2 test
[testenv:docs]
-basepython=python3.5
+basepython=python3.7
deps = sphinx==1.4.9
changedir = {toxinidir}/docs
whitelist_externals = rm
@@ -40,15 +35,15 @@
[testenv:graphs]
basepython=python2.7
-deps = graphviz==0.6
+deps = graphviz==0.8.2
commands =
python visualizer/visualize.py -i docs/source/_static
[testenv:packaging]
-basepython=python2.7
+basepython=python3.7
deps =
- check-manifest==0.35
- readme_renderer==17.2
+ check-manifest==0.36
+ readme-renderer==17.3
commands =
check-manifest
python setup.py check --metadata --restructuredtext --strict
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/h2-3.0.1/utils/backport.sh new/h2-3.1.0/utils/backport.sh
--- old/h2-3.0.1/utils/backport.sh 2017-04-03 09:57:46.000000000 +0200
+++ new/h2-3.1.0/utils/backport.sh 2019-01-22 18:41:43.000000000 +0100
@@ -16,6 +16,7 @@
if ! git pull --ff-only; then
echo "Unable to update $TARGET_BRANCH"
exit 2
+fi
if ! git checkout -b "$PR_BRANCH"; then
echo "Failed to open new branch $PR_BRANCH"
1
0
Hello community,
here is the log from the commit of package python-pbr for openSUSE:Factory checked in at 2019-03-29 20:38:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pbr (Old)
and /work/SRC/openSUSE:Factory/.python-pbr.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pbr"
Fri Mar 29 20:38:33 2019 rev:45 rq:689258 version:5.1.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pbr/python-pbr.changes 2019-03-04 09:11:31.788696323 +0100
+++ /work/SRC/openSUSE:Factory/.python-pbr.new.25356/python-pbr.changes 2019-03-29 20:38:35.954676063 +0100
@@ -1,0 +2,14 @@
+Tue Mar 26 20:02:01 UTC 2019 - John Vandenberg <jayvdb(a)gmail.com>
+
+- Add Recomends for git-core and python-reno
+- Add Suggests for python-Sphinx and python-nose
+- Increase minimum dependency versions to match upstream
+- Add build dependency pip, pyparsing, reno and testrepository
+ used by the test suite
+- Remove unnecessary test dependencies coverage and hacking
+- Use OS_TEST_TIMEOUT=60 in %check to fix sparodic failing tests
+ due to timeouts with the default 30 seconds
+- Remove no longer needed steps in %prep due to upstream changes
+- Replace build dependency git with smaller git-core
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pbr.spec ++++++
--- /var/tmp/diff_new_pack.tkKaLD/_old 2019-03-29 20:38:37.106676651 +0100
+++ /var/tmp/diff_new_pack.tkKaLD/_new 2019-03-29 20:38:37.110676653 +0100
@@ -39,23 +39,31 @@
#!BuildIgnore: python2-pyparsing
#!BuildIgnore: python3-pyparsing
Requires: python-setuptools
+Recommends: git-core
+Recommends: python-reno >= 2.5.0
+Suggests: python-Sphinx >= 1.6.5
+Suggests: python-nose
Requires(post): update-alternatives
Requires(postun): update-alternatives
Obsoletes: python-pbr-doc
BuildArch: noarch
%if %{with test}
-BuildRequires: %{python_module Sphinx >= 1.6.2}
+BuildRequires: %{python_module Sphinx >= 1.6.5}
BuildRequires: %{python_module devel}
BuildRequires: %{python_module fixtures >= 3.0.0}
BuildRequires: %{python_module mock >= 2.0}
-BuildRequires: %{python_module six >= 1.9.0}
-BuildRequires: %{python_module stestr}
+BuildRequires: %{python_module pip}
+BuildRequires: %{python_module pyparsing >= 2.0.2}
+BuildRequires: %{python_module reno >= 2.5.0}
+BuildRequires: %{python_module six >= 1.10.0}
+BuildRequires: %{python_module stestr >= 2.1.0}
+BuildRequires: %{python_module testrepository >= 0.0.18}
BuildRequires: %{python_module testresources >= 2.0.0}
BuildRequires: %{python_module testscenarios >= 0.4}
BuildRequires: %{python_module testtools >= 2.2.0}
BuildRequires: %{python_module virtualenv >= 14.0.6}
-BuildRequires: %{python_module wheel}
-BuildRequires: git
+BuildRequires: %{python_module wheel >= 0.32.0}
+BuildRequires: git-core
BuildRequires: gpg2
%endif
%python_subpackages
@@ -71,12 +79,7 @@
%setup -q -n pbr-%{version}
%autopatch -p1
-# Get rid of ugly build-time deps that require network:
-sed -i "s/, 'sphinx\.ext\.intersphinx'//" doc/source/conf.py
-
-# drop interpreter from test setup.py
-sed -i "1s|^#!/.*||" pbr/tests/testpackage/setup.py
-chmod -x pbr/tests/testpackage/setup.py
+sed -i '/coverage/d;/hacking/d' test-requirements.txt
%build
%python_build
@@ -92,6 +95,7 @@
%if %{with test}
%check
+export OS_TEST_TIMEOUT=60
%python_exec -m stestr.cli run
%endif
1
0
Hello community,
here is the log from the commit of package python-Sphinx for openSUSE:Factory checked in at 2019-03-29 20:38:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Sphinx (Old)
and /work/SRC/openSUSE:Factory/.python-Sphinx.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Sphinx"
Fri Mar 29 20:38:15 2019 rev:53 rq:689141 version:1.8.5
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Sphinx/python-Sphinx.changes 2018-12-14 20:49:06.645367178 +0100
+++ /work/SRC/openSUSE:Factory/.python-Sphinx.new.25356/python-Sphinx.changes 2019-03-29 20:38:17.614666716 +0100
@@ -1,0 +2,63 @@
+Wed Mar 27 16:39:15 UTC 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Remove last remainder of python-Sphinx-doc-man-common subpackage
+
+-------------------------------------------------------------------
+Thu Mar 14 16:25:50 CET 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Switch off test_latex_images test, because it tries to download
+ image from the www.python.org.
+
+-------------------------------------------------------------------
+Tue Mar 12 15:35:49 UTC 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Remove lang packages
+
+-------------------------------------------------------------------
+Mon Mar 11 15:32:54 CET 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Revert to multiple lang files using standard macros.
+
+-------------------------------------------------------------------
+Mon Mar 11 10:25:50 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Drop patch disable-test.patch no longer applicable
+
+-------------------------------------------------------------------
+Mon Mar 11 09:40:44 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Update to 1.8.5:
+ * LaTeX: Remove extraneous space after author names on PDF title page (refs: #6004)
+ * #6026: LaTeX: A cross reference to definition list does not work
+ * #6046: LaTeX: TypeError is raised when invalid latex_elements given
+ * #6067: LaTeX: images having a target are concatenated to next line
+ * #6067: LaTeX: images having a target are not aligned even if specified
+ * #6019: imgconverter: Including multipage PDF fails
+ * #6047: autodoc: autofunction emits a warning for method objects
+ * #6028: graphviz: Ensure the graphviz filenames are reproducible
+ * #6068: doctest: skipif option may remove the code block from documentation
+ * #6136: :name: option for math directive causes a crash
+ * #6139: intersphinx: ValueError on failure reporting
+ * #6135: changes: Fix UnboundLocalError when any module found
+
+-------------------------------------------------------------------
+Wed Mar 6 16:28:12 CET 2019 - Matej Cepl <mcepl(a)suse.com>
+
+- Rewrite the package to multibuild. Remove python-Sphinx-doc*.
+- Fix %check to make tests passing.
+
+-------------------------------------------------------------------
+Tue Mar 5 10:17:45 UTC 2019 - Thomas Bechtold <tbechtold(a)suse.com>
+
+- update to 1.8.4:
+ There are many changes so have a look at the following changes files:
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-8-4-released-fe…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-8-3-released-de…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-8-2-released-no…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-8-1-released-se…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-8-0-released-se…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-7-9-released-se…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-7-8-released-au…
+ * https://www.sphinx-doc.org/en/master/changes.html#release-1-7-7-released-au…
+
+-------------------------------------------------------------------
Old:
----
Sphinx-1.7.6.tar.gz
disable-test.patch
python-Sphinx-doc.changes
python-Sphinx-doc.spec
New:
----
Sphinx-1.8.5.tar.gz
_multibuild
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-Sphinx.spec ++++++
--- /var/tmp/diff_new_pack.t2gmzn/_old 2019-03-29 20:38:18.386667110 +0100
+++ /var/tmp/diff_new_pack.t2gmzn/_new 2019-03-29 20:38:18.394667114 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-Sphinx
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -23,15 +23,22 @@
%else
%bcond_with latex
%endif
-Name: python-Sphinx
-Version: 1.7.6
+%global flavor @BUILD_FLAVOR@%{nil}
+%if "%{flavor}" == "test"
+%define psuffix -test
+%bcond_without test
+%else
+%define psuffix %{nil}
+%bcond_with test
+%endif
+Name: python-Sphinx%{psuffix}
+Version: 1.8.5
Release: 0
Summary: Python documentation generator
License: BSD-2-Clause
Group: Development/Languages/Python
URL: http://sphinx-doc.org
Source: https://files.pythonhosted.org/packages/source/S/Sphinx/Sphinx-%{version}.t…
-Patch1: disable-test.patch
BuildRequires: %{python_module base}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
@@ -40,7 +47,7 @@
#!BuildIgnore: texinfo
Requires: python-Babel >= 1.3
Requires: python-Jinja2 >= 2.3
-Requires: python-Pygments >= 2.0
+Requires: python-Pygments >= 2.1
Requires: python-alabaster >= 0.7
Requires: python-docutils >= 0.11
Requires: python-imagesize
@@ -52,8 +59,18 @@
Requires(post): update-alternatives
Requires(postun): update-alternatives
BuildArch: noarch
+%if %{with test}
+BuildRequires: %{python_module Sphinx = %{version}}
+BuildRequires: %{python_module html5lib}
+BuildRequires: %{python_module mock}
+BuildRequires: %{python_module pytest}
+BuildRequires: %{python_module sphinxcontrib-websupport}
+BuildRequires: ImageMagick
+BuildRequires: python3-mypy
+BuildRequires: python3-typed-ast
+%endif
%if 0%{?suse_version} >= 1000 || 0%{?fedora_version} >= 24
-Recommends: %{name}-doc-man
+Recommends: python-Sphinx-doc-man
Recommends: python-SQLAlchemy >= 0.9
Recommends: python-Whoosh >= 2.0
%endif
@@ -66,9 +83,6 @@
Requires: python-typing
%endif
%endif
-%if 0%{?suse_version}
-Recommends: python-rst2pdf
-%endif
%ifpython2
Obsoletes: %{oldpython}-sphinx < %{version}
Provides: %{oldpython}-sphinx = %{version}
@@ -88,7 +102,8 @@
%package latex
Summary: Sphinx packages for LaTeX
Group: Productivity/Publishing/TeX/Base
-Requires: %{name} = %{version}
+Requires: python-Sphinx = %{version}
+Requires: texlive-gnu-freefont
Requires: texlive-latex
Requires: texlive-metafont
Requires: texlive-pdftex
@@ -161,18 +176,71 @@
projects (or other documents consisting of multiple reStructuredText
sources).
-This package contains the LaTeX components for %{name}.
+This package contains the LaTeX components for python-Sphinx.
+
+%package -n python-Sphinx-doc
+Summary: Man files for python-Sphinx
+Group: Documentation/Other
+Requires: python-Sphinx = %{version}
+
+%description -n python-Sphinx-doc
+Sphinx is a tool that facilitates creating documentation for Python
+projects (or other documents consisting of multiple reStructuredText
+sources). It was originally created for the Python documentation, and
+supports Python project documentation well, but C/C++ is likewise
+supported.
+
+Sphinx uses reStructuredText as its markup language. Sphinx draws from
+the parsing and translating suite, the Docutils.
+
+This package contains the documentation for Sphinx.
+
+%package -n python-Sphinx-doc-man
+Summary: Man files for python-Sphinx
+Group: Documentation/Man
+Requires: python-Sphinx = %{version}
+Requires(post): update-alternatives
+Requires(postun): update-alternatives
+Obsoletes: %{python_module Sphinx-doc-man-common <= %{version}}
+
+%description -n python-Sphinx-doc-man
+Sphinx is a tool that facilitates creating documentation for Python
+projects (or other documents consisting of multiple reStructuredText
+sources).
+
+This package contains the manual pages for the Sphinx executables.
+
+%package -n python-Sphinx-doc-html
+Summary: HTML Documentation for python-Sphinx
+Group: Documentation/HTML
+Provides: %{python_module Sphinx-doc-html = %{version}}
+
+%description -n python-Sphinx-doc-html
+Sphinx is a tool that facilitates creating documentation for Python
+projects (or other documents consisting of multiple reStructuredText
+sources).
+
+This package contains the HTML documentation for Sphinx.
%prep
%setup -q -n Sphinx-%{version}
-%patch1 -p1
sed -i 's/\r$//' sphinx/themes/basic/static/jquery.js # Fix wrong end-of-line encoding
%build
%python_build
+%if %{with test}
+mkdir build.doc
+
+python3 setup.py build_sphinx && rm build/sphinx/html/.buildinfo
+python3 setup.py build_sphinx -b man
+
+mv build/sphinx/{html,man} build.doc/
+%endif
+
%install
+%if ! %{with test}
%python_install
%python_clone -a %{buildroot}%{_bindir}/sphinx-apidoc
@@ -183,15 +251,51 @@
%python_expand mkdir -p %{buildroot}%{$python_sitelib}/sphinxcontrib
%python_expand %fdupes %{buildroot}%{$python_sitelib}
+# # Prepare lang lists
+# %%find_lang sphinx
+# %%python_expand grep -F "%%{$python_sitelib}" sphinx.lang > sphinx_%%{$python_bin_suffix}.lang
+
+%else
+mkdir -p %{buildroot}%{_docdir}/python-Sphinx/
+mv build.doc/html %{buildroot}%{_docdir}/python-Sphinx/
+
+mkdir -p %{buildroot}%{_mandir}/man1
+mv build.doc/man/sphinx-all.1 %{buildroot}%{_mandir}/man1/sphinx-all.1
+mv build.doc/man/sphinx-apidoc.1 %{buildroot}%{_mandir}/man1/sphinx-apidoc.1
+mv build.doc/man/sphinx-build.1 %{buildroot}%{_mandir}/man1/sphinx-build.1
+mv build.doc/man/sphinx-quickstart.1 %{buildroot}%{_mandir}/man1/sphinx-quickstart.1
+
+%python_clone %{buildroot}%{_mandir}/man1/sphinx-all.1
+%python_clone %{buildroot}%{_mandir}/man1/sphinx-apidoc.1
+%python_clone %{buildroot}%{_mandir}/man1/sphinx-build.1
+%python_clone %{buildroot}%{_mandir}/man1/sphinx-quickstart.1
+
+%endif
+
+# Always deduplicate
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
+
+%if ! %{with test}
%post
%{python_install_alternative sphinx-apidoc sphinx-autogen sphinx-build sphinx-quickstart}
%postun
%python_uninstall_alternative sphinx-apidoc
+%endif
+
+%check
+%if %{with test}
+export LC_ALL="C.utf8"
+%{python_expand export PYTHONPATH=$PYTHONPATH:%{buildroot}%{$python_sitelib}
+py.test-%{$python_bin_suffix} --ignore=_build.python3 --ignore=_build.python2 -k 'not (linkcheck or test_latex_images)' -v tests
+# $python -mpytest --ignore=_build.python3 --ignore=_build.python2 -k 'not linkcheck' -v tests
+}
+%endif
%files %{python_files}
%license LICENSE
%doc AUTHORS CHANGES README.rst
+%if ! %{with test}
%python_alternative %{_bindir}/sphinx-apidoc
%python_alternative %{_bindir}/sphinx-autogen
%python_alternative %{_bindir}/sphinx-build
@@ -210,5 +314,27 @@
%doc AUTHORS
%{python_sitelib}/sphinx/texinputs/
%endif
+%endif
+
+%if %{with test}
+%files -n python-Sphinx-doc-man
+%license LICENSE
+%doc AUTHORS
+%{_mandir}/man1/sphinx-all-*.1%{?ext_man}
+%{_mandir}/man1/sphinx-apidoc-*.1%{?ext_man}
+%{_mandir}/man1/sphinx-build-*.1%{?ext_man}
+%{_mandir}/man1/sphinx-quickstart-*.1%{?ext_man}
+%{_mandir}/man1/sphinx-all.1%{?ext_man}
+%{_mandir}/man1/sphinx-apidoc.1%{?ext_man}
+%{_mandir}/man1/sphinx-build.1%{?ext_man}
+%{_mandir}/man1/sphinx-quickstart.1%{?ext_man}
+
+%files -n python-Sphinx-doc-html
+%license LICENSE
+%doc AUTHORS
+%dir %{_docdir}/python-Sphinx/
+%{_docdir}/python-Sphinx/html/
+
+%endif
%changelog
++++++ Sphinx-1.7.6.tar.gz -> Sphinx-1.8.5.tar.gz ++++++
++++ 241710 lines of diff (skipped)
++++++ _multibuild ++++++
<multibuild>
<package>test</package>
</multibuild>
1
0
Hello community,
here is the log from the commit of package python-Markdown for openSUSE:Factory checked in at 2019-03-29 20:38:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Markdown (Old)
and /work/SRC/openSUSE:Factory/.python-Markdown.new.25356 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Markdown"
Fri Mar 29 20:38:09 2019 rev:30 rq:688991 version:3.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Markdown/python-Markdown.changes 2019-01-08 12:16:53.765014752 +0100
+++ /work/SRC/openSUSE:Factory/.python-Markdown.new.25356/python-Markdown.changes 2019-03-29 20:38:12.110663911 +0100
@@ -1,0 +2,37 @@
+Tue Mar 26 19:34:04 UTC 2019 - Benoît Monin <benoit.monin(a)gmx.fr>
+
+- update to version 3.1:
+ * The following new features have been included in the release:
+ + A Contributing Guide has been added (#732)
+ + A new configuration option to set the footnote separator has
+ been added. Also, the rel and rev attributes have been
+ removed from footnotes as they are not valid in HTML5. The
+ refs and backrefs classes already exist and serve the same
+ purpose (#723).
+ + A new option for toc_depth to set not only the bottom section
+ level, but also the top section level. A string consisting of
+ two digits separated by a hyphen in between ("2-5"), defines
+ the top (t) and the bottom (b) (<ht>..<hb>). A single integer
+ still defines the bottom section level (<h1>..<hb>) only.(#787)
+ * The following bug fixes are included in the 3.1 release:
+ + Update CLI to support PyYAML 5.1.
+ + Overlapping raw HTML matches no longer leave placeholders
+ behind (#458).
+ + Emphasis patterns now recognize newline characters as
+ whitespace (#783).
+ + Version format had been updated to be PEP 440 compliant
+ (#736).
+ + Block level elements are defined per instance, not as class
+ attributes (#731).
+ + Double escaping of block code has been eliminated (#725).
+ + Problems with newlines in references has been fixed (#742).
+ + Escaped # are now handled in header syntax (#762).
+- remove yaml5.patch: merged upstream
+
+-------------------------------------------------------------------
+Fri Mar 15 12:20:56 UTC 2019 - Tomáš Chvátal <tchvatal(a)suse.com>
+
+- Fix build with PyYAML > 5:
+ * yaml5.patch
+
+-------------------------------------------------------------------
Old:
----
Markdown-3.0.1.tar.gz
New:
----
Markdown-3.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-Markdown.spec ++++++
--- /var/tmp/diff_new_pack.B89Tuq/_old 2019-03-29 20:38:12.974664351 +0100
+++ /var/tmp/diff_new_pack.B89Tuq/_new 2019-03-29 20:38:12.978664354 +0100
@@ -12,14 +12,14 @@
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define oldpython python
Name: python-Markdown
-Version: 3.0.1
+Version: 3.1
Release: 0
Summary: Python implementation of Markdown
License: BSD-3-Clause
@@ -53,7 +53,7 @@
%prep
%setup -q -n Markdown-%{version}
-%patch0 -p1
+%autopatch -p1
%build
%python_build
++++++ Markdown-3.0.1.tar.gz -> Markdown-3.1.tar.gz ++++++
++++ 10105 lines of diff (skipped)
1
0