Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-zodbpickle for
openSUSE:Factory checked in at 2021-09-25 00:35:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zodbpickle (Old)
and /work/SRC/openSUSE:Factory/.python-zodbpickle.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-zodbpickle"
Sat Sep 25 00:35:44 2021 rev:7 rq:921375 version:2.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-zodbpickle/python-zodbpickle.changes
2021-01-22 21:52:40.509878961 +0100
+++
/work/SRC/openSUSE:Factory/.python-zodbpickle.new.1899/python-zodbpickle.changes
2021-09-25 00:36:40.747209845 +0200
@@ -1,0 +2,7 @@
+Fri Sep 24 09:50:50 UTC 2021 - [email protected]
+
+- version update to 2.1.0
+ * Add support for Python 3.9.
+- use %pyunittest_arch rpm macro
+
+-------------------------------------------------------------------
Old:
----
zodbpickle-2.0.0.tar.gz
New:
----
zodbpickle-2.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-zodbpickle.spec ++++++
--- /var/tmp/diff_new_pack.XYN3Rd/_old 2021-09-25 00:36:41.175210292 +0200
+++ /var/tmp/diff_new_pack.XYN3Rd/_new 2021-09-25 00:36:41.179210295 +0200
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-zodbpickle
-Version: 2.0.0
+Version: 2.1.0
Release: 0
Summary: Fork of Python 3 pickle module
License: Python-2.0 AND ZPL-2.1
@@ -57,7 +57,9 @@
}
%check
-%python_exec setup.py test
+pushd src
+mv zodbpickle{,_hide}
+%pyunittest_arch -v zodbpickle_hide.tests.test_pickle.test_suite
%files %{python_files}
%license LICENSE.txt
++++++ zodbpickle-2.0.0.tar.gz -> zodbpickle-2.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/.coveragerc
new/zodbpickle-2.1.0/.coveragerc
--- old/zodbpickle-2.0.0/.coveragerc 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/.coveragerc 2021-09-24 08:23:18.000000000 +0200
@@ -1,6 +1,29 @@
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
[run]
-branch = True
source = zodbpickle
+# New in 5.0; required for the GHA coveralls submission.
+relative_files = True
+branch = true
+
+[paths]
+source =
+ src/
+ .tox/*/lib/python*/site-packages/
+ .tox/pypy*/site-packages/
[report]
+show_missing = true
precision = 2
+exclude_lines =
+ except ImportError:
+ if __name__ == '__main__':
+ pragma: no cover
+ pragma: nocover
+ raise AssertionError
+ raise NotImplementedError
+ raise unittest.Skip
+ self.fail\(
+
+[html]
+directory = parts/htmlcov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/.manylinux-install.sh
new/zodbpickle-2.1.0/.manylinux-install.sh
--- old/zodbpickle-2.0.0/.manylinux-install.sh 2019-11-13 13:40:47.000000000
+0100
+++ new/zodbpickle-2.1.0/.manylinux-install.sh 2021-09-24 08:23:18.000000000
+0200
@@ -1,16 +1,47 @@
#!/usr/bin/env bash
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
set -e -x
+# Running inside docker
+# Set a cache directory for pip. This was
+# mounted to be the same as it is outside docker so it
+# can be persisted.
+export XDG_CACHE_HOME="/cache"
+# XXX: This works for macOS, where everything bind-mounted
+# is seen as owned by root in the container. But when the host is Linux
+# the actual UIDs come through to the container, triggering
+# pip to disable the cache when it detects that the owner doesn't match.
+# The below is an attempt to fix that, taken from bcrypt. It seems to work on
+# Github Actions.
+if [ -n "$GITHUB_ACTIONS" ]; then
+ echo Adjusting pip cache permissions
+ mkdir -p $XDG_CACHE_HOME/pip
+ chown -R $(whoami) $XDG_CACHE_HOME
+fi
+ls -ld /cache
+ls -ld /cache/pip
+
+# We need some libraries because we build wheels from scratch:
+yum -y install libffi-devel
+
# Compile wheels
for PYBIN in /opt/python/*/bin; do
if [[ "${PYBIN}" == *"cp27"* ]] || \
[[ "${PYBIN}" == *"cp35"* ]] || \
[[ "${PYBIN}" == *"cp36"* ]] || \
[[ "${PYBIN}" == *"cp37"* ]] || \
- [[ "${PYBIN}" == *"cp38"* ]]; then
+ [[ "${PYBIN}" == *"cp38"* ]] || \
+ [[ "${PYBIN}" == *"cp39"* ]]; then
"${PYBIN}/pip" install -e /io/
"${PYBIN}/pip" wheel /io/ -w wheelhouse/
+ if [ `uname -m` == 'aarch64' ]; then
+ cd /io/
+ "${PYBIN}/pip" install tox
+ "${PYBIN}/tox" -e py
+ cd ..
+ fi
rm -rf /io/build /io/*.egg-info
fi
done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/.manylinux.sh
new/zodbpickle-2.1.0/.manylinux.sh
--- old/zodbpickle-2.0.0/.manylinux.sh 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/.manylinux.sh 2021-09-24 08:23:18.000000000 +0200
@@ -1,5 +1,16 @@
#!/usr/bin/env bash
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
set -e -x
-docker run --rm -v "$(pwd)":/io $DOCKER_IMAGE $PRE_CMD
/io/.manylinux-install.sh
+# Mount the current directory as /io
+# Mount the pip cache directory as /cache
+# `pip cache` requires pip 20.1
+echo Setting up caching
+python --version
+python -mpip --version
+LCACHE="$(dirname `python -mpip cache dir`)"
+echo Sharing pip cache at $LCACHE $(ls -ld $LCACHE)
+
+docker run --rm -e GITHUB_ACTIONS -v "$(pwd)":/io -v "$LCACHE:/cache"
$DOCKER_IMAGE $PRE_CMD /io/.manylinux-install.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/CHANGES.rst
new/zodbpickle-2.1.0/CHANGES.rst
--- old/zodbpickle-2.0.0/CHANGES.rst 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/CHANGES.rst 2021-09-24 08:23:18.000000000 +0200
@@ -2,6 +2,12 @@
Changelog
===========
+2.1.0 (2021-09-24)
+==================
+
+- Add support for Python 3.9.
+
+
2.0.0 (2019-11-13)
==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/MANIFEST.in
new/zodbpickle-2.1.0/MANIFEST.in
--- old/zodbpickle-2.0.0/MANIFEST.in 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/MANIFEST.in 2021-09-24 08:23:18.000000000 +0200
@@ -1,11 +1,13 @@
-include *.py
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
include *.rst
include *.txt
+include buildout.cfg
include tox.ini
include appveyor.yml
-include buildout.cfg
-include patches/*.diff
include .coveragerc
-include *.sh
+recursive-include src *.py
+include *.sh
+recursive-include patches *.diff
recursive-include src *.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/PKG-INFO
new/zodbpickle-2.1.0/PKG-INFO
--- old/zodbpickle-2.0.0/PKG-INFO 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/PKG-INFO 2021-09-24 08:23:19.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: zodbpickle
-Version: 2.0.0
+Version: 2.1.0
Summary: Fork of Python 2 and 3 pickle module.
Home-page: https://github.com/zopefoundation/zodbpickle
Author: Python and Zope Foundation
@@ -9,8 +9,8 @@
Description: ``zodbpickle`` README
=====================
- .. image::
https://travis-ci.org/zopefoundation/zodbpickle.svg?branch=master
- :target: https://travis-ci.org/zopefoundation/zodbpickle
+ .. image::
https://travis-ci.com/zopefoundation/zodbpickle.svg?branch=master
+ :target: https://travis-ci.com/zopefoundation/zodbpickle
.. image::
https://coveralls.io/repos/github/zopefoundation/zodbpickle/badge.svg
:target: https://coveralls.io/github/zopefoundation/zodbpickle
@@ -177,6 +177,12 @@
Changelog
===========
+ 2.1.0 (2021-09-24)
+ ==================
+
+ - Add support for Python 3.9.
+
+
2.0.0 (2019-11-13)
==================
@@ -365,6 +371,7 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: Implementation :: Jython
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/README.rst
new/zodbpickle-2.1.0/README.rst
--- old/zodbpickle-2.0.0/README.rst 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/README.rst 2021-09-24 08:23:18.000000000 +0200
@@ -1,8 +1,8 @@
``zodbpickle`` README
=====================
-.. image:: https://travis-ci.org/zopefoundation/zodbpickle.svg?branch=master
- :target: https://travis-ci.org/zopefoundation/zodbpickle
+.. image:: https://travis-ci.com/zopefoundation/zodbpickle.svg?branch=master
+ :target: https://travis-ci.com/zopefoundation/zodbpickle
.. image::
https://coveralls.io/repos/github/zopefoundation/zodbpickle/badge.svg
:target: https://coveralls.io/github/zopefoundation/zodbpickle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/appveyor.yml
new/zodbpickle-2.1.0/appveyor.yml
--- old/zodbpickle-2.0.0/appveyor.yml 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/appveyor.yml 2021-09-24 08:23:18.000000000 +0200
@@ -1,8 +1,12 @@
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
environment:
+ # Currently the builds use @mgedmin's Appveyor account. The PyPI token
belongs
+ # to zope.wheelbuilder, which is managed by @mgedmin and @dataflake.
global:
- TWINE_USERNAME: zope.wheelbuilder
+ TWINE_USERNAME: __token__
TWINE_PASSWORD:
- secure: UcdTh6W78cRLVGfKRFoa5A==
+ secure:
aoZC/+rvJKg8B5GMGIxd1YzSugYzr1vrR0NzX+NBCGjc64YaTc/K4kIRj4eqD0p11Nhl2aGUgHF6qMUcHIAAUybaKU/3Kyp+BwxU5eGX/NZv9S6AsBGVyiHD4oourkczzeB/HGrICEm9TeTcR3lc70SrpxSpYwnDyLv8CUpk0D/iUgQyFT/BERDsBTJEPI3HV/ngmMQrj9g2H7PkfF0yR5ss8AclYcIdWOKTvTapcGLerlK+mFm5muturTCT2njYMP2cv+NV3+Ih6OxSpQlWjw==
matrix:
- python: 27
@@ -15,8 +19,11 @@
- python: 37-x64
- python: 38
- python: 38-x64
+ - python: 39
+ - python: 39-x64
install:
+ - "SET PYTHONVERSION=%PYTHON%"
- "SET PATH=C:\\Python%PYTHON%;c:\\Python%PYTHON%\\scripts;%PATH%"
- ps: |
$env:PYTHON = "C:\\Python${env:PYTHON}"
@@ -26,21 +33,23 @@
}
- ps: if (-not (Test-Path $env:PYTHON)) { throw "No $env:PYTHON" }
- echo "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 >
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat"
- - pip install -e .
+ - python -m pip install -U pip
+ - pip install -U setuptools wheel
+ - pip install -U -e .[test]
+
+matrix:
+ fast_finish: true
build_script:
- - python -m pip install -U pip
- - pip install wheel
- python -W ignore setup.py -q bdist_wheel
test_script:
- - python setup.py -q test
-
+ - zope-testrunner --test-path=src -m zodbpickle.tests.test_pickle$
artifacts:
- path: 'dist\*.whl'
name: wheel
deploy_script:
- - ps: if ($env:APPVEYOR_REPO_TAG -eq $TRUE) { pip install twine; twine
upload --skip-existing dist/* }
+ - ps: if ($env:APPVEYOR_REPO_TAG -eq $TRUE) { pip install twine; twine
upload --skip-existing dist\*.whl }
deploy: on
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/bootstrap.py
new/zodbpickle-2.1.0/bootstrap.py
--- old/zodbpickle-2.0.0/bootstrap.py 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/bootstrap.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,210 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2006 Zope Foundation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-"""Bootstrap a buildout-based project
-
-Simply run this script in a directory containing a buildout.cfg.
-The script accepts buildout command-line options, so you can
-use the -c option to specify an alternate configuration file.
-"""
-
-import os
-import shutil
-import sys
-import tempfile
-
-from optparse import OptionParser
-
-__version__ = '2015-07-01'
-# See zc.buildout's changelog if this version is up to date.
-
-tmpeggs = tempfile.mkdtemp(prefix='bootstrap-')
-
-usage = '''\
-[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
-
-Bootstraps a buildout-based project.
-
-Simply run this script in a directory containing a buildout.cfg, using the
-Python that you want bin/buildout to use.
-
-Note that by using --find-links to point to local resources, you can keep
-this script from going over the network.
-'''
-
-parser = OptionParser(usage=usage)
-parser.add_option("--version",
- action="store_true", default=False,
- help=("Return bootstrap.py version."))
-parser.add_option("-t", "--accept-buildout-test-releases",
- dest='accept_buildout_test_releases',
- action="store_true", default=False,
- help=("Normally, if you do not specify a --version, the "
- "bootstrap script and buildout gets the newest "
- "*final* versions of zc.buildout and its recipes and "
- "extensions for you. If you use this flag, "
- "bootstrap and buildout will get the newest releases "
- "even if they are alphas or betas."))
-parser.add_option("-c", "--config-file",
- help=("Specify the path to the buildout configuration "
- "file to be used."))
-parser.add_option("-f", "--find-links",
- help=("Specify a URL to search for buildout releases"))
-parser.add_option("--allow-site-packages",
- action="store_true", default=False,
- help=("Let bootstrap.py use existing site packages"))
-parser.add_option("--buildout-version",
- help="Use a specific zc.buildout version")
-parser.add_option("--setuptools-version",
- help="Use a specific setuptools version")
-parser.add_option("--setuptools-to-dir",
- help=("Allow for re-use of existing directory of "
- "setuptools versions"))
-
-options, args = parser.parse_args()
-if options.version:
- print("bootstrap.py version %s" % __version__)
- sys.exit(0)
-
-
-######################################################################
-# load/install setuptools
-
-try:
- from urllib.request import urlopen
-except ImportError:
- from urllib2 import urlopen
-
-ez = {}
-if os.path.exists('ez_setup.py'):
- exec(open('ez_setup.py').read(), ez)
-else:
- exec(urlopen('https://bootstrap.pypa.io/ez_setup.py').read(), ez)
-
-if not options.allow_site_packages:
- # ez_setup imports site, which adds site packages
- # this will remove them from the path to ensure that incompatible versions
- # of setuptools are not in the path
- import site
- # inside a virtualenv, there is no 'getsitepackages'.
- # We can't remove these reliably
- if hasattr(site, 'getsitepackages'):
- for sitepackage_path in site.getsitepackages():
- # Strip all site-packages directories from sys.path that
- # are not sys.prefix; this is because on Windows
- # sys.prefix is a site-package directory.
- if sitepackage_path != sys.prefix:
- sys.path[:] = [x for x in sys.path
- if sitepackage_path not in x]
-
-setup_args = dict(to_dir=tmpeggs, download_delay=0)
-
-if options.setuptools_version is not None:
- setup_args['version'] = options.setuptools_version
-if options.setuptools_to_dir is not None:
- setup_args['to_dir'] = options.setuptools_to_dir
-
-ez['use_setuptools'](**setup_args)
-import setuptools
-import pkg_resources
-
-# This does not (always?) update the default working set. We will
-# do it.
-for path in sys.path:
- if path not in pkg_resources.working_set.entries:
- pkg_resources.working_set.add_entry(path)
-
-######################################################################
-# Install buildout
-
-ws = pkg_resources.working_set
-
-setuptools_path = ws.find(
- pkg_resources.Requirement.parse('setuptools')).location
-
-# Fix sys.path here as easy_install.pth added before PYTHONPATH
-cmd = [sys.executable, '-c',
- 'import sys; sys.path[0:0] = [%r]; ' % setuptools_path +
- 'from setuptools.command.easy_install import main; main()',
- '-mZqNxd', tmpeggs]
-
-find_links = os.environ.get(
- 'bootstrap-testing-find-links',
- options.find_links or
- ('http://downloads.buildout.org/'
- if options.accept_buildout_test_releases else None)
- )
-if find_links:
- cmd.extend(['-f', find_links])
-
-requirement = 'zc.buildout'
-version = options.buildout_version
-if version is None and not options.accept_buildout_test_releases:
- # Figure out the most recent final version of zc.buildout.
- import setuptools.package_index
- _final_parts = '*final-', '*final'
-
- def _final_version(parsed_version):
- try:
- return not parsed_version.is_prerelease
- except AttributeError:
- # Older setuptools
- for part in parsed_version:
- if (part[:1] == '*') and (part not in _final_parts):
- return False
- return True
-
- index = setuptools.package_index.PackageIndex(
- search_path=[setuptools_path])
- if find_links:
- index.add_find_links((find_links,))
- req = pkg_resources.Requirement.parse(requirement)
- if index.obtain(req) is not None:
- best = []
- bestv = None
- for dist in index[req.project_name]:
- distv = dist.parsed_version
- if _final_version(distv):
- if bestv is None or distv > bestv:
- best = [dist]
- bestv = distv
- elif distv == bestv:
- best.append(dist)
- if best:
- best.sort()
- version = best[-1].version
-if version:
- requirement = '=='.join((requirement, version))
-cmd.append(requirement)
-
-import subprocess
-if subprocess.call(cmd) != 0:
- raise Exception(
- "Failed to execute command:\n%s" % repr(cmd)[1:-1])
-
-######################################################################
-# Import and run buildout
-
-ws.add_entry(tmpeggs)
-ws.require(requirement)
-import zc.buildout.buildout
-
-if not [a for a in args if '=' not in a]:
- args.append('bootstrap')
-
-# if -c was provided, we push it back into args for buildout' main function
-if options.config_file is not None:
- args[0:0] = ['-c', options.config_file]
-
-zc.buildout.buildout.main(args)
-shutil.rmtree(tmpeggs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/setup.cfg
new/zodbpickle-2.1.0/setup.cfg
--- old/zodbpickle-2.0.0/setup.cfg 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/setup.cfg 2021-09-24 08:23:19.000000000 +0200
@@ -1,10 +1,23 @@
[bdist_wheel]
-universal = 0
+universal = 1
+
+[zest.releaser]
+create-wheel = no
+
+[flake8]
+doctests = 1
+per-file-ignores =
+ src/zodbpickle/fastpickle.py: F401 F403
+ src/zodbpickle/pickle.py: F401 F403
+ src/zodbpickle/pickle_2.py: E221 E262
+ src/zodbpickle/pickle_3.py: E221 E225 E262
+ src/zodbpickle/pickletools_3.py: E221
+ src/zodbpickle/slowpickle.py: F401 F403
[check-manifest]
ignore =
- bootstrap.py
- buildout.cfg
+ .editorconfig
+ .meta.toml
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/setup.py
new/zodbpickle-2.1.0/setup.py
--- old/zodbpickle-2.0.0/setup.py 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/setup.py 2021-09-24 08:23:18.000000000 +0200
@@ -19,10 +19,13 @@
from setuptools import Extension, find_packages, setup
here = os.path.abspath(os.path.dirname(__file__))
+
+
def read(fname):
with open(os.path.join(here, fname)) as f:
return f.read()
+
README = read('README.rst') + '\n\n' + read('CHANGES.rst')
if sys.version_info[:1] < (3,):
@@ -34,7 +37,7 @@
py_impl = getattr(platform, 'python_implementation', lambda: None)
is_pypy = py_impl() == 'PyPy'
is_jython = py_impl() == 'Jython'
-is_pure = 'PURE_PYTHON' in os.environ
+is_pure = int(os.environ.get('PURE_PYTHON', '0'))
if is_pypy or is_jython:
ext_modules = []
else:
@@ -44,7 +47,7 @@
setup(
name='zodbpickle',
- version='2.0.0',
+ version='2.1.0',
description='Fork of Python 2 and 3 pickle module.',
author='Python and Zope Foundation',
author_email='[email protected]',
@@ -63,6 +66,7 @@
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
+ 'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Programming Language :: Python :: Implementation :: Jython',
@@ -79,7 +83,7 @@
package_dir={'': 'src'},
ext_modules=ext_modules,
extras_require={
- 'test': [],
+ 'test': ['zope.testrunner'],
},
test_suite='zodbpickle.tests.test_pickle.test_suite',
install_requires=[
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/src/zodbpickle/pickletools_3.py
new/zodbpickle-2.1.0/src/zodbpickle/pickletools_3.py
--- old/zodbpickle-2.0.0/src/zodbpickle/pickletools_3.py 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle/pickletools_3.py 2021-09-24
08:23:18.000000000 +0200
@@ -2146,7 +2146,7 @@
def __init__(self, value):
self.value = value
-_dis_test = r"""
+_dis_test_3_6 = r"""
>>> import pickle
>>> x = [1, 2, (3, 4), {b'abc': "def"}]
>>> pkl0 = pickle.dumps(x, 0)
@@ -2401,6 +2401,269 @@
"""
+_dis_test_3_7 = r"""
+>>> import pickle
+>>> x = [1, 2, (3, 4), {b'abc': "def"}]
+>>> pkl0 = pickle.dumps(x, 0)
+>>> dis(pkl0)
+ 0: ( MARK
+ 1: l LIST (MARK at 0)
+ 2: p PUT 0
+ 5: I INT 1
+ 8: a APPEND
+ 9: I INT 2
+ 12: a APPEND
+ 13: ( MARK
+ 14: I INT 3
+ 17: I INT 4
+ 20: t TUPLE (MARK at 13)
+ 21: p PUT 1
+ 24: a APPEND
+ 25: ( MARK
+ 26: d DICT (MARK at 25)
+ 27: p PUT 2
+ 30: c GLOBAL '_codecs encode'
+ 46: p PUT 3
+ 49: ( MARK
+ 50: V UNICODE 'abc'
+ 55: p PUT 4
+ 58: V UNICODE 'latin1'
+ 66: p PUT 5
+ 69: t TUPLE (MARK at 49)
+ 70: p PUT 6
+ 73: R REDUCE
+ 74: p PUT 7
+ 77: V UNICODE 'def'
+ 82: p PUT 8
+ 85: s SETITEM
+ 86: a APPEND
+ 87: . STOP
+highest protocol among opcodes = 0
+
+Try again with a "binary" pickle.
+
+>>> pkl1 = pickle.dumps(x, 1)
+>>> dis(pkl1)
+ 0: ] EMPTY_LIST
+ 1: q BINPUT 0
+ 3: ( MARK
+ 4: K BININT1 1
+ 6: K BININT1 2
+ 8: ( MARK
+ 9: K BININT1 3
+ 11: K BININT1 4
+ 13: t TUPLE (MARK at 8)
+ 14: q BINPUT 1
+ 16: } EMPTY_DICT
+ 17: q BINPUT 2
+ 19: c GLOBAL '_codecs encode'
+ 35: q BINPUT 3
+ 37: ( MARK
+ 38: X BINUNICODE 'abc'
+ 46: q BINPUT 4
+ 48: X BINUNICODE 'latin1'
+ 59: q BINPUT 5
+ 61: t TUPLE (MARK at 37)
+ 62: q BINPUT 6
+ 64: R REDUCE
+ 65: q BINPUT 7
+ 67: X BINUNICODE 'def'
+ 75: q BINPUT 8
+ 77: s SETITEM
+ 78: e APPENDS (MARK at 3)
+ 79: . STOP
+highest protocol among opcodes = 1
+
+Exercise the INST/OBJ/BUILD family.
+
+>>> import pickletools
+>>> dis(pickle.dumps(pickletools.dis, 0))
+ 0: c GLOBAL 'pickletools dis'
+ 17: p PUT 0
+ 20: . STOP
+highest protocol among opcodes = 0
+
+>>> from pickletools import _Example
+>>> x = [_Example(42)] * 2
+>>> dis(pickle.dumps(x, 0))
+ 0: ( MARK
+ 1: l LIST (MARK at 0)
+ 2: p PUT 0
+ 5: c GLOBAL 'copy_reg _reconstructor'
+ 30: p PUT 1
+ 33: ( MARK
+ 34: c GLOBAL 'pickletools _Example'
+ 56: p PUT 2
+ 59: c GLOBAL '__builtin__ object'
+ 79: p PUT 3
+ 82: N NONE
+ 83: t TUPLE (MARK at 33)
+ 84: p PUT 4
+ 87: R REDUCE
+ 88: p PUT 5
+ 91: ( MARK
+ 92: d DICT (MARK at 91)
+ 93: p PUT 6
+ 96: V UNICODE 'value'
+ 103: p PUT 7
+ 106: I INT 42
+ 110: s SETITEM
+ 111: b BUILD
+ 112: a APPEND
+ 113: g GET 5
+ 116: a APPEND
+ 117: . STOP
+highest protocol among opcodes = 0
+
+>>> dis(pickle.dumps(x, 1))
+ 0: ] EMPTY_LIST
+ 1: q BINPUT 0
+ 3: ( MARK
+ 4: c GLOBAL 'copy_reg _reconstructor'
+ 29: q BINPUT 1
+ 31: ( MARK
+ 32: c GLOBAL 'pickletools _Example'
+ 54: q BINPUT 2
+ 56: c GLOBAL '__builtin__ object'
+ 76: q BINPUT 3
+ 78: N NONE
+ 79: t TUPLE (MARK at 31)
+ 80: q BINPUT 4
+ 82: R REDUCE
+ 83: q BINPUT 5
+ 85: } EMPTY_DICT
+ 86: q BINPUT 6
+ 88: X BINUNICODE 'value'
+ 98: q BINPUT 7
+ 100: K BININT1 42
+ 102: s SETITEM
+ 103: b BUILD
+ 104: h BINGET 5
+ 106: e APPENDS (MARK at 3)
+ 107: . STOP
+highest protocol among opcodes = 1
+
+Try "the canonical" recursive-object test.
+
+>>> L = []
+>>> T = L,
+>>> L.append(T)
+>>> L[0] is T
+True
+>>> T[0] is L
+True
+>>> L[0][0] is L
+True
+>>> T[0][0] is T
+True
+>>> dis(pickle.dumps(L, 0))
+ 0: ( MARK
+ 1: l LIST (MARK at 0)
+ 2: p PUT 0
+ 5: ( MARK
+ 6: g GET 0
+ 9: t TUPLE (MARK at 5)
+ 10: p PUT 1
+ 13: a APPEND
+ 14: . STOP
+highest protocol among opcodes = 0
+
+>>> dis(pickle.dumps(L, 1))
+ 0: ] EMPTY_LIST
+ 1: q BINPUT 0
+ 3: ( MARK
+ 4: h BINGET 0
+ 6: t TUPLE (MARK at 3)
+ 7: q BINPUT 1
+ 9: a APPEND
+ 10: . STOP
+highest protocol among opcodes = 1
+
+Note that, in the protocol 0 pickle of the recursive tuple, the disassembler
+has to emulate the stack in order to realize that the POP opcode at 16 gets
+rid of the MARK at 0.
+
+>>> dis(pickle.dumps(T, 0))
+ 0: ( MARK
+ 1: ( MARK
+ 2: l LIST (MARK at 1)
+ 3: p PUT 0
+ 6: ( MARK
+ 7: g GET 0
+ 10: t TUPLE (MARK at 6)
+ 11: p PUT 1
+ 14: a APPEND
+ 15: 0 POP
+ 16: 0 POP (MARK at 0)
+ 17: g GET 1
+ 20: . STOP
+highest protocol among opcodes = 0
+
+>>> dis(pickle.dumps(T, 1))
+ 0: ( MARK
+ 1: ] EMPTY_LIST
+ 2: q BINPUT 0
+ 4: ( MARK
+ 5: h BINGET 0
+ 7: t TUPLE (MARK at 4)
+ 8: q BINPUT 1
+ 10: a APPEND
+ 11: 1 POP_MARK (MARK at 0)
+ 12: h BINGET 1
+ 14: . STOP
+highest protocol among opcodes = 1
+
+Try protocol 2.
+
+>>> dis(pickle.dumps(L, 2))
+ 0: \x80 PROTO 2
+ 2: ] EMPTY_LIST
+ 3: q BINPUT 0
+ 5: h BINGET 0
+ 7: \x85 TUPLE1
+ 8: q BINPUT 1
+ 10: a APPEND
+ 11: . STOP
+highest protocol among opcodes = 2
+
+>>> dis(pickle.dumps(T, 2))
+ 0: \x80 PROTO 2
+ 2: ] EMPTY_LIST
+ 3: q BINPUT 0
+ 5: h BINGET 0
+ 7: \x85 TUPLE1
+ 8: q BINPUT 1
+ 10: a APPEND
+ 11: 0 POP
+ 12: h BINGET 1
+ 14: . STOP
+highest protocol among opcodes = 2
+
+Try protocol 3 with annotations:
+
+>>> dis(pickle.dumps(T, 3), annotate=1)
+ 0: \x80 PROTO 3 Protocol version indicator.
+ 2: ] EMPTY_LIST Push an empty list.
+ 3: q BINPUT 0 Store the stack top into the memo. The stack is not
popped.
+ 5: h BINGET 0 Read an object from the memo and push it on the stack.
+ 7: \x85 TUPLE1 Build a one-tuple out of the topmost item on the
stack.
+ 8: q BINPUT 1 Store the stack top into the memo. The stack is not
popped.
+ 10: a APPEND Append an object to a list.
+ 11: 0 POP Discard the top stack item, shrinking the stack by
one item.
+ 12: h BINGET 1 Read an object from the memo and push it on the stack.
+ 14: . STOP Stop the unpickling machine.
+highest protocol among opcodes = 2
+
+"""
+
+# There are some slight differences since 3.7 - for now copied
+# the whole test - this can be removed if py3.6 support is dropped.
+_dis_test = _dis_test_3_7
+
+if sys.version_info[1] < 7:
+ _dis_test = _dis_test_3_6
+
+
_memo_test = r"""
>>> import pickle
>>> import io
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/src/zodbpickle/tests/__init__.py
new/zodbpickle-2.1.0/src/zodbpickle/tests/__init__.py
--- old/zodbpickle-2.0.0/src/zodbpickle/tests/__init__.py 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle/tests/__init__.py 2021-09-24
08:23:18.000000000 +0200
@@ -4,4 +4,4 @@
py_impl = getattr(platform, 'python_implementation', lambda: None)
_is_pypy = py_impl() == 'PyPy'
_is_jython = py_impl() == 'Jython'
-_is_pure = 'PURE_PYTHON' in os.environ
+_is_pure = int(os.environ.get('PURE_PYTHON', '0'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/src/zodbpickle/tests/test_pickle.py
new/zodbpickle-2.1.0/src/zodbpickle/tests/test_pickle.py
--- old/zodbpickle-2.0.0/src/zodbpickle/tests/test_pickle.py 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle/tests/test_pickle.py 2021-09-24
08:23:18.000000000 +0200
@@ -1,24 +1,43 @@
+from . import _is_pypy
+import sys
+import types
import unittest
+if _is_pypy:
+ function_type = types.FunctionType
+elif sys.version_info[0] >= 3:
+ function_type = types.BuiltinFunctionType
+else:
+ function_type = types.FunctionType
+del sys
+del _is_pypy
+
+
class TestImportability(unittest.TestCase):
def test_Pickler(self):
from zodbpickle.pickle import Pickler
+ self.assertIsInstance(Pickler, object)
def test_Unpickler(self):
from zodbpickle.pickle import Unpickler
+ self.assertIsInstance(Unpickler, object)
def test_load(self):
from zodbpickle.pickle import load
+ self.assertIsInstance(load, function_type)
def test_loads(self):
- from zodbpickle.pickle import load
+ from zodbpickle.pickle import loads
+ self.assertIsInstance(loads, function_type)
def test_dump(self):
- from zodbpickle.pickle import dumps
+ from zodbpickle.pickle import dump
+ self.assertIsInstance(dump, function_type)
def test_dumps(self):
from zodbpickle.pickle import dumps
+ self.assertIsInstance(dumps, function_type)
def test_suite():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zodbpickle-2.0.0/src/zodbpickle/tests/test_pickle_3.py
new/zodbpickle-2.1.0/src/zodbpickle/tests/test_pickle_3.py
--- old/zodbpickle-2.0.0/src/zodbpickle/tests/test_pickle_3.py 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle/tests/test_pickle_3.py 2021-09-24
08:23:18.000000000 +0200
@@ -16,6 +16,7 @@
from . import _is_pypy
from . import _is_pure
from zodbpickle import pickle_3 as pickle
+from zodbpickle import pickletools_3 as pickletools
try:
from zodbpickle import _pickle
@@ -184,6 +185,7 @@
unittest.makeSuite(t) for t in choose_tests()
] + [
doctest.DocTestSuite(pickle),
+ doctest.DocTestSuite(pickletools),
])
if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/src/zodbpickle.egg-info/PKG-INFO
new/zodbpickle-2.1.0/src/zodbpickle.egg-info/PKG-INFO
--- old/zodbpickle-2.0.0/src/zodbpickle.egg-info/PKG-INFO 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle.egg-info/PKG-INFO 2021-09-24
08:23:19.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: zodbpickle
-Version: 2.0.0
+Version: 2.1.0
Summary: Fork of Python 2 and 3 pickle module.
Home-page: https://github.com/zopefoundation/zodbpickle
Author: Python and Zope Foundation
@@ -9,8 +9,8 @@
Description: ``zodbpickle`` README
=====================
- .. image::
https://travis-ci.org/zopefoundation/zodbpickle.svg?branch=master
- :target: https://travis-ci.org/zopefoundation/zodbpickle
+ .. image::
https://travis-ci.com/zopefoundation/zodbpickle.svg?branch=master
+ :target: https://travis-ci.com/zopefoundation/zodbpickle
.. image::
https://coveralls.io/repos/github/zopefoundation/zodbpickle/badge.svg
:target: https://coveralls.io/github/zopefoundation/zodbpickle
@@ -177,6 +177,12 @@
Changelog
===========
+ 2.1.0 (2021-09-24)
+ ==================
+
+ - Add support for Python 3.9.
+
+
2.0.0 (2019-11-13)
==================
@@ -365,6 +371,7 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python :: Implementation :: Jython
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/src/zodbpickle.egg-info/SOURCES.txt
new/zodbpickle-2.1.0/src/zodbpickle.egg-info/SOURCES.txt
--- old/zodbpickle-2.0.0/src/zodbpickle.egg-info/SOURCES.txt 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle.egg-info/SOURCES.txt 2021-09-24
08:23:19.000000000 +0200
@@ -6,7 +6,6 @@
MANIFEST.in
README.rst
appveyor.yml
-bootstrap.py
buildout.cfg
setup.cfg
setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/zodbpickle-2.0.0/src/zodbpickle.egg-info/requires.txt
new/zodbpickle-2.1.0/src/zodbpickle.egg-info/requires.txt
--- old/zodbpickle-2.0.0/src/zodbpickle.egg-info/requires.txt 2019-11-13
13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/src/zodbpickle.egg-info/requires.txt 2021-09-24
08:23:19.000000000 +0200
@@ -1,3 +1,4 @@
setuptools
[test]
+zope.testrunner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/zodbpickle-2.0.0/tox.ini new/zodbpickle-2.1.0/tox.ini
--- old/zodbpickle-2.0.0/tox.ini 2019-11-13 13:40:47.000000000 +0100
+++ new/zodbpickle-2.1.0/tox.ini 2021-09-24 08:23:18.000000000 +0200
@@ -1,30 +1,56 @@
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/c-code
[tox]
-# Jython 2.7rc2 does work, but unfortunately has an issue running
-# with Tox 1.9.2 (http://bugs.jython.org/issue2325)
-envlist = py27,py35,py36,py37,py38,pypy,pypy3,coverage-report
+minversion = 3.18
+envlist =
+ lint
+ py27,py27-pure
+ py35,py35-pure
+ py36,py36-pure
+ py37,py37-pure
+ py38,py38-pure
+ py39,py39-pure
+ pypy
+ pypy3
+ coverage
[testenv]
-usedevelop = True
+usedevelop = true
+deps =
+setenv =
+ pure: PURE_PYTHON=1
+ !pure-!pypy-!pypy3: PURE_PYTHON=0
commands =
- coverage run setup.py -q test
+ # there's test_pickle_2 for Python 2 and test_pickle_3 for Python 3
+ # different test files because metaclass syntax differs on Pythons
+ # test_pickle picks and returns the appropriate one
+ # without this we'd get an import error (actually syntax error) for one
+ # of them
+ zope-testrunner --test-path=src -m zodbpickle.tests.test_pickle$
{posargs:-vc}
+extras =
+ test
+
+[testenv:coverage]
+basepython = python3
+allowlist_externals =
+ mkdir
deps =
coverage
setenv =
- COVERAGE_FILE=.coverage.{envname}
-
-[testenv:jython]
+ PURE_PYTHON=1
commands =
- jython setup.py -q test -q
+ mkdir -p {toxinidir}/parts/htmlcov
+ coverage run -m zope.testrunner --test-path=src -m
zodbpickle.tests.test_pickle$ {posargs:-vc}
+ coverage html -i
+ coverage report -i -m --fail-under=63
-[testenv:coverage-report]
-basepython = python3.6
-deps = coverage
-setenv =
- COVERAGE_FILE=.coverage
+[testenv:lint]
+basepython = python3
skip_install = true
+deps =
+ check-manifest
+ check-python-versions
+ wheel
commands =
- coverage erase
- coverage combine
- coverage html -i
- coverage xml -i
- coverage report -i --fail-under=83
+ check-manifest
+ check-python-versions