forked from pool/python-jsonpickle
Accepting request 686312 from devel:languages:python
- Add patch to work with sqlalchemy 1.3: * sqlalchemy13.patch - 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). OBS-URL: https://build.opensuse.org/request/show/686312 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-jsonpickle?expand=0&rev=3
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:545b3bee0d65e1abb4baa1818edcc9ec239aa9f2ffbfde8084d71c056180054f
|
||||
size 67137
|
||||
3
jsonpickle-1.1.tar.gz
Normal file
3
jsonpickle-1.1.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:625098cc8e5854b8c23b587aec33bc8e33e0e597636bfaca76152249c78fe5c1
|
||||
size 71602
|
||||
@@ -1,3 +1,24 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 19 08:12:54 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||
|
||||
- Add patch to work with sqlalchemy 1.3:
|
||||
* sqlalchemy13.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 15 13:00:30 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||
|
||||
- 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).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Dec 4 12:49:37 UTC 2018 - Matej Cepl <mcepl@suse.com>
|
||||
|
||||
|
||||
@@ -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
|
||||
# SECTION test requirements
|
||||
BuildRequires: %{python_module SQLAlchemy}
|
||||
BuildRequires: %{python_module coverage}
|
||||
BuildRequires: %{python_module nose}
|
||||
BuildRequires: %{python_module numpy}
|
||||
BuildRequires: %{python_module pymongo}
|
||||
# /SECTION
|
||||
# SECTION python 2 test requirements
|
||||
BuildRequires: python-enum34
|
||||
# /SECTION
|
||||
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 numpy}
|
||||
BuildRequires: %{python_module pymongo}
|
||||
BuildRequires: %{python_module pytest}
|
||||
# /SECTION
|
||||
# SECTION python 2 test requirements
|
||||
BuildRequires: python-enum34
|
||||
# /SECTION
|
||||
# SECTION python 2 requirements
|
||||
Suggests: python-feedparser
|
||||
Suggests: python-jsonlib
|
||||
@@ -56,6 +57,7 @@ Additionally, it can reconstitute the object back into Python.
|
||||
|
||||
%prep
|
||||
%setup -q -n jsonpickle-%{version}
|
||||
%patch0 -p1
|
||||
|
||||
%build
|
||||
%python_build
|
||||
@@ -65,10 +67,10 @@ Additionally, it can reconstitute the object back into Python.
|
||||
%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}/*
|
||||
|
||||
|
||||
84
sqlalchemy13.patch
Normal file
84
sqlalchemy13.patch
Normal file
@@ -0,0 +1,84 @@
|
||||
From 838c29e43267e3578d077698386e1adbcc0657c5 Mon Sep 17 00:00:00 2001
|
||||
From: David Aguilar <davvid@gmail.com>
|
||||
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 <davvid@gmail.com>
|
||||
---
|
||||
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 <davvid@gmail.com>
|
||||
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 <davvid@gmail.com>
|
||||
---
|
||||
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):
|
||||
Reference in New Issue
Block a user