Hello community,
here is the log from the commit of package python-Paste for openSUSE:Factory checked in at 2019-11-04 17:04:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Paste (Old)
and /work/SRC/openSUSE:Factory/.python-Paste.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Paste"
Mon Nov 4 17:04:30 2019 rev:24 rq:735885 version:3.2.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Paste/python-Paste.changes 2019-09-30 15:55:06.709901178 +0200
+++ /work/SRC/openSUSE:Factory/.python-Paste.new.2990/python-Paste.changes 2019-11-04 17:04:31.980141043 +0100
@@ -1,0 +2,6 @@
+Mon Oct 7 14:54:45 UTC 2019 - Tomáš Chvátal
+
+- Update to 3.2.1:
+ * no changelog
+
+-------------------------------------------------------------------
Old:
----
Paste-3.2.0.tar.gz
New:
----
Paste-3.2.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-Paste.spec ++++++
--- /var/tmp/diff_new_pack.4OC0C1/_old 2019-11-04 17:04:32.700141813 +0100
+++ /var/tmp/diff_new_pack.4OC0C1/_new 2019-11-04 17:04:32.704141817 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define oldpython python
Name: python-Paste
-Version: 3.2.0
+Version: 3.2.1
Release: 0
Summary: Tools for using a Web Server Gateway Interface stack
License: MIT
++++++ Paste-3.2.0.tar.gz -> Paste-3.2.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/PKG-INFO new/Paste-3.2.1/PKG-INFO
--- old/Paste-3.2.0/PKG-INFO 2019-09-05 12:31:04.000000000 +0200
+++ new/Paste-3.2.1/PKG-INFO 2019-09-25 14:32:20.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: Paste
-Version: 3.2.0
+Version: 3.2.1
Summary: Tools for using a Web Server Gateway Interface stack
Home-page: https://pythonpaste.readthedocs.io/
Author: Chris Dent
@@ -130,8 +130,8 @@
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server
Classifier: Framework :: Paste
-Provides-Extra: openid
-Provides-Extra: Flup
Provides-Extra: hotshot
Provides-Extra: subprocess
+Provides-Extra: openid
Provides-Extra: Paste
+Provides-Extra: Flup
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/Paste.egg-info/PKG-INFO new/Paste-3.2.1/Paste.egg-info/PKG-INFO
--- old/Paste-3.2.0/Paste.egg-info/PKG-INFO 2019-09-05 12:31:04.000000000 +0200
+++ new/Paste-3.2.1/Paste.egg-info/PKG-INFO 2019-09-25 14:32:19.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: Paste
-Version: 3.2.0
+Version: 3.2.1
Summary: Tools for using a Web Server Gateway Interface stack
Home-page: https://pythonpaste.readthedocs.io/
Author: Chris Dent
@@ -130,8 +130,8 @@
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server
Classifier: Framework :: Paste
-Provides-Extra: openid
-Provides-Extra: Flup
Provides-Extra: hotshot
Provides-Extra: subprocess
+Provides-Extra: openid
Provides-Extra: Paste
+Provides-Extra: Flup
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/docs/news.txt new/Paste-3.2.1/docs/news.txt
--- old/Paste-3.2.0/docs/news.txt 2019-09-05 12:27:36.000000000 +0200
+++ new/Paste-3.2.1/docs/news.txt 2019-09-25 14:29:52.000000000 +0200
@@ -3,6 +3,11 @@
.. contents::
+3.2.1
+-----
+
+* Handle io.UnsupportedOperation from socket.tell()
+
3.2.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/paste/httpserver.py new/Paste-3.2.1/paste/httpserver.py
--- old/Paste-3.2.0/paste/httpserver.py 2019-09-05 12:21:52.000000000 +0200
+++ new/Paste-3.2.1/paste/httpserver.py 2019-09-25 14:27:36.000000000 +0200
@@ -20,6 +20,7 @@
from __future__ import print_function
import atexit
import traceback
+import io
import socket, sys, threading
import posixpath
import six
@@ -523,9 +524,11 @@
def tell(self):
if hasattr(self.file, 'tell'):
- return self.file.tell()
- else:
- return self._consumed
+ try:
+ return self.file.tell()
+ except io.UnsupportedOperation:
+ pass
+ return self._consumed
class ThreadPool(object):
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/paste/request.py new/Paste-3.2.1/paste/request.py
--- old/Paste-3.2.0/paste/request.py 2019-09-05 12:21:52.000000000 +0200
+++ new/Paste-3.2.1/paste/request.py 2019-09-25 14:27:36.000000000 +0200
@@ -161,51 +161,40 @@
return parsed
# @@: Shouldn't bother FieldStorage parsing during GET/HEAD and
# fake_out_cgi requests
- type = environ.get('CONTENT_TYPE', '').lower()
- if ';' in type:
- type = type.split(';', 1)[0]
- fake_out_cgi = type not in ('', 'application/x-www-form-urlencoded',
+ formvars = MultiDict()
+ ct = environ.get('CONTENT_TYPE', '').partition(';')[0].lower()
+ use_cgi = ct in ('', 'application/x-www-form-urlencoded',
'multipart/form-data')
# FieldStorage assumes a default CONTENT_LENGTH of -1, but a
# default of 0 is better:
if not environ.get('CONTENT_LENGTH'):
environ['CONTENT_LENGTH'] = '0'
- # Prevent FieldStorage from parsing QUERY_STRING during GET/HEAD
- # requests
- old_query_string = environ.get('QUERY_STRING','')
- environ['QUERY_STRING'] = ''
- if fake_out_cgi:
- input = six.BytesIO(b'')
- old_content_type = environ.get('CONTENT_TYPE')
- old_content_length = environ.get('CONTENT_LENGTH')
- environ['CONTENT_LENGTH'] = '0'
- environ['CONTENT_TYPE'] = ''
- else:
- input = environ['wsgi.input']
- kwparms = {}
- if six.PY3:
- if encoding:
- kwparms['encoding'] = encoding
- if errors:
- kwparms['errors'] = errors
- fs = cgi.FieldStorage(fp=input,
- environ=environ,
- keep_blank_values=1,
- **kwparms)
- environ['QUERY_STRING'] = old_query_string
- if fake_out_cgi:
- environ['CONTENT_TYPE'] = old_content_type
- environ['CONTENT_LENGTH'] = old_content_length
- formvars = MultiDict()
- if isinstance(fs.value, list):
- for name in fs.keys():
- values = fs[name]
- if not isinstance(values, list):
- values = [values]
- for value in values:
- if not value.filename:
- value = value.value
- formvars.add(name, value)
+ if use_cgi:
+ # Prevent FieldStorage from parsing QUERY_STRING during GET/HEAD
+ # requests
+ old_query_string = environ.get('QUERY_STRING','')
+ environ['QUERY_STRING'] = ''
+ inp = environ['wsgi.input']
+ kwparms = {}
+ if six.PY3:
+ if encoding:
+ kwparms['encoding'] = encoding
+ if errors:
+ kwparms['errors'] = errors
+ fs = cgi.FieldStorage(fp=inp,
+ environ=environ,
+ keep_blank_values=True,
+ **kwparms)
+ environ['QUERY_STRING'] = old_query_string
+ if isinstance(fs.value, list):
+ for name in fs.keys():
+ values = fs[name]
+ if not isinstance(values, list):
+ values = [values]
+ for value in values:
+ if not value.filename:
+ value = value.value
+ formvars.add(name, value)
environ['paste.parsed_formvars'] = (formvars, source)
if include_get_vars:
formvars.update(parse_querystring(environ))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/setup.py new/Paste-3.2.1/setup.py
--- old/Paste-3.2.0/setup.py 2019-09-05 12:22:38.000000000 +0200
+++ new/Paste-3.2.1/setup.py 2019-09-25 14:29:30.000000000 +0200
@@ -12,7 +12,7 @@
# - git push
# - python setup.py sdist bdist_wheel upload --sign
-__version__ = '3.2.0'
+__version__ = '3.2.1'
from setuptools import setup, find_packages
import sys, os
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Paste-3.2.0/tests/test_httpserver.py new/Paste-3.2.1/tests/test_httpserver.py
--- old/Paste-3.2.0/tests/test_httpserver.py 2019-09-05 12:21:52.000000000 +0200
+++ new/Paste-3.2.1/tests/test_httpserver.py 2019-09-25 14:27:36.000000000 +0200
@@ -1,5 +1,8 @@
import email
import io
+import socket
+
+import six
from paste.httpserver import LimitedLengthFile, WSGIHandler
from six.moves import StringIO
@@ -49,5 +52,23 @@
def test_limited_length_file():
backing = io.BytesIO(b'0123456789')
f = LimitedLengthFile(backing, 9)
+ assert f.tell() == 0
assert f.read() == b'012345678'
+ assert f.tell() == 9
assert f.read() == b''
+
+def test_limited_length_file_tell_on_socket():
+ backing_read, backing_write = socket.socketpair()
+ if six.PY2:
+ # On Python 2, socketpair() returns an internal socket type rather than
+ # the public one.
+ backing_read = socket.socket(_sock=backing_read)
+ f = LimitedLengthFile(backing_read.makefile('rb'), 10)
+ backing_write.send(b'0123456789')
+ backing_write.close()
+ assert f.tell() == 0
+ assert f.read(1) == b'0'
+ assert f.tell() == 1
+ assert f.read() == b'123456789'
+ assert f.tell() == 10
+ backing_read.close()