Hello community,
here is the log from the commit of package python-jsonpickle for openSUSE:Factory checked in at 2019-03-20 13:19:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jsonpickle (Old)
and /work/SRC/openSUSE:Factory/.python-jsonpickle.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jsonpickle"
Wed Mar 20 13:19:24 2019 rev:3 rq:686312 version:1.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-jsonpickle/python-jsonpickle.changes 2018-12-24 11:38:51.413587081 +0100
+++ /work/SRC/openSUSE:Factory/.python-jsonpickle.new.28833/python-jsonpickle.changes 2019-03-20 13:19:26.929341552 +0100
@@ -1,0 +2,21 @@
+Tue Mar 19 08:12:54 UTC 2019 - Tomáš Chvátal
+
+- Add patch to work with sqlalchemy 1.3:
+ * sqlalchemy13.patch
+
+-------------------------------------------------------------------
+Fri Mar 15 13:00:30 UTC 2019 - Tomáš Chvátal
+
+- Update to 1.1:
+ * Python 3.7 collections.Iterator deprecation warnings have been fixed. (#229).
+ * Improved Pandas support for datetime and complex numbers. (#245)
+ * NOTE jsonpickle no longer supports Python2.6, or Python3 < 3.4. The officially supported Python versions are now 2.7 and 3.4+.
+ * Improved Pandas and Numpy support. (#227)
+ * Improved support for pickling iterators. (#216)
+ * Better support for the stdlib json module when simplejson is not installed. (#217)
+ * jsonpickle will now output python3-style module names when pickling builtins methods or functions. (#223)
+ * jsonpickle will always flatten primitives, even when max_depth is reached, which avoids encoding unicode strings into their u'string' representation.
+ * Nested classes are now supported on Python 3. (#206, #176).
+ * Better support for older (pre-1.9) versions of numpy (#195).
+
+-------------------------------------------------------------------
Old:
----
jsonpickle-0.9.6.tar.gz
New:
----
jsonpickle-1.1.tar.gz
sqlalchemy13.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jsonpickle.spec ++++++
--- /var/tmp/diff_new_pack.BCc5w4/_old 2019-03-20 13:19:28.821341092 +0100
+++ /var/tmp/diff_new_pack.BCc5w4/_new 2019-03-20 13:19:28.821341092 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-jsonpickle
#
-# 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,30 +18,31 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-jsonpickle
-Version: 0.9.6
+Version: 1.1
Release: 0
-Url: http://jsonpickle.github.com/
Summary: Python library for serializing any arbitrary object graph into JSON
License: BSD-3-Clause
Group: Development/Languages/Python
+URL: https://github.com/jsonpickle/jsonpickle
Source: https://files.pythonhosted.org/packages/source/j/jsonpickle/jsonpickle-%{version}.tar.gz
+Patch0: sqlalchemy13.patch
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
+Recommends: python-simplejson
+Suggests: python-demjson
+Suggests: python-ujson
+Suggests: python-yajl
# SECTION test requirements
BuildRequires: %{python_module SQLAlchemy}
BuildRequires: %{python_module coverage}
-BuildRequires: %{python_module nose}
BuildRequires: %{python_module numpy}
BuildRequires: %{python_module pymongo}
+BuildRequires: %{python_module pytest}
# /SECTION
# SECTION python 2 test requirements
BuildRequires: python-enum34
# /SECTION
-Recommends: python-simplejson
-Suggests: python-demjson
-Suggests: python-ujson
-Suggests: python-yajl
# SECTION python 2 requirements
Suggests: python-feedparser
Suggests: python-jsonlib
@@ -56,6 +57,7 @@
%prep
%setup -q -n jsonpickle-%{version}
+%patch0 -p1
%build
%python_build
@@ -65,10 +67,10 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-%python_expand nosetests-%{$python_bin_suffix}
+%pytest
%files %{python_files}
-%doc README.rst
+%doc README.rst docs/source/changelog.rst
%license COPYING
%{python_sitelib}/*
++++++ jsonpickle-0.9.6.tar.gz -> jsonpickle-1.1.tar.gz ++++++
++++ 3421 lines of diff (skipped)
++++++ sqlalchemy13.patch ++++++
From 838c29e43267e3578d077698386e1adbcc0657c5 Mon Sep 17 00:00:00 2001
From: David Aguilar
Date: Mon, 18 Mar 2019 22:32:54 -0700
Subject: [PATCH] unpickler: better support for sqlalchemy >= 1.3
The _safe_hasattr() workaround for older versions of SQLAlchemy
surprisingly breaks newer versions.
Be optimistic and catch the runtime error so that newer versions do not
incur the cost of the original workaround. The older versions are still
supported since they'll land in the old code path.
This is justifiable since it's a generic code path and will speed up
things for 99% of the other objects out there, including newer
sqlalchemy versions.
Closes #254
Signed-off-by: David Aguilar
---
jsonpickle/unpickler.py | 11 +++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/jsonpickle/unpickler.py b/jsonpickle/unpickler.py
index f0a93d1..40af4e0 100644
--- a/jsonpickle/unpickler.py
+++ b/jsonpickle/unpickler.py
@@ -42,8 +42,15 @@ def decode(string, backend=None, context=None, keys=False, reset=True,
def _safe_hasattr(obj, attr):
- """A safe (but slow) hasattr() that avoids hasattr"""
- return attr in dir(obj)
+ """Workaround unreliable hasattr() availability on sqlalchemy objects"""
+ try:
+ # In sqlalchemy >= 1.3 we can use hasattr().
+ return hasattr(obj, attr)
+ except RuntimeError:
+ # In older versions we use a safe (but slow) method to avoid hasattr().
+ # Older versions of sqlalchemy hit maximum recursion errors during
+ # deserialization. The workaround is to avoid hasattr().
+ return attr in dir(obj)
class _Proxy(object):
From 670b678a109a7fab91e3e50fb35f65bf75aff1e9 Mon Sep 17 00:00:00 2001
From: David Aguilar
Date: Tue, 19 Mar 2019 00:21:19 -0700
Subject: [PATCH] unpickler: make _safe_hasattr() even safer
Use object.__getattribute__() to implement our hasattr() workaround,
which is even more robust (and performant) than the previous solution.
The old version did work on Python2, but Python3 is unable to catch
recursion
errors so a better solution was needed.
Related-to: #254
Signed-off-by: David Aguilar
---
jsonpickle/unpickler.py | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/jsonpickle/unpickler.py b/jsonpickle/unpickler.py
index 40af4e0..e1f9e75 100644
--- a/jsonpickle/unpickler.py
+++ b/jsonpickle/unpickler.py
@@ -44,13 +44,10 @@ def decode(string, backend=None, context=None, keys=False, reset=True,
def _safe_hasattr(obj, attr):
"""Workaround unreliable hasattr() availability on sqlalchemy objects"""
try:
- # In sqlalchemy >= 1.3 we can use hasattr().
- return hasattr(obj, attr)
- except RuntimeError:
- # In older versions we use a safe (but slow) method to avoid hasattr().
- # Older versions of sqlalchemy hit maximum recursion errors during
- # deserialization. The workaround is to avoid hasattr().
- return attr in dir(obj)
+ object.__getattribute__(obj, attr)
+ return True
+ except AttributeError:
+ return False
class _Proxy(object):