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 - pgaj...@suse.com + +- 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='zodb-...@zope.org', @@ -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