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 <[email protected]> + +- Add patch to work with sqlalchemy 1.3: + * sqlalchemy13.patch + +------------------------------------------------------------------- +Fri Mar 15 13:00:30 UTC 2019 - Tomáš Chvátal <[email protected]> + +- 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 <[email protected]> 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 <[email protected]> --- 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 <[email protected]> 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 <[email protected]> --- 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):
