Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-zope.copy for 
openSUSE:Factory checked in at 2022-12-09 13:16:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zope.copy (Old)
 and      /work/SRC/openSUSE:Factory/.python-zope.copy.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-zope.copy"

Fri Dec  9 13:16:39 2022 rev:3 rq:1041382 version:4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-zope.copy/python-zope.copy.changes        
2022-10-14 15:40:30.035714140 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-zope.copy.new.1835/python-zope.copy.changes  
    2022-12-09 13:16:45.270674511 +0100
@@ -1,0 +2,7 @@
+Wed Dec  7 22:50:21 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- Update to version 4.3 
+  * Add support for Python 3.8, 3.9, 3.10, 3.11.
+  * Drop support for Python 3.4.
+
+-------------------------------------------------------------------

Old:
----
  zope.copy-4.2.tar.gz

New:
----
  zope.copy-4.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-zope.copy.spec ++++++
--- /var/tmp/diff_new_pack.yyb0U1/_old  2022-12-09 13:16:45.834677507 +0100
+++ /var/tmp/diff_new_pack.yyb0U1/_new  2022-12-09 13:16:45.838677528 +0100
@@ -26,7 +26,7 @@
 %bcond_with test
 %endif
 Name:           python-zope.copy
-Version:        4.2
+Version:        4.3
 Release:        0
 Summary:        Pluggable object copying mechanism
 License:        ZPL-2.1

++++++ zope.copy-4.2.tar.gz -> zope.copy-4.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/.bzrignore new/zope.copy-4.3/.bzrignore
--- old/zope.copy-4.2/.bzrignore        2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/.bzrignore        1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-*.egg-info
-docs/_build
-.coverage
-coverage.xml
-nosetests.xml
-.tox
-__pycache__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/.coveragerc 
new/zope.copy-4.3/.coveragerc
--- old/zope.copy-4.2/.coveragerc       2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/.coveragerc       1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-[run]
-source = zope.copy
-
-[report]
-precision = 2
-exclude_lines =
-    pragma: no cover
-    if __name__ == '__main__':
-    raise NotImplementedError
-    self.fail
-    raise AssertionError
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/.gitignore new/zope.copy-4.3/.gitignore
--- old/zope.copy-4.2/.gitignore        2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/.gitignore        1970-01-01 01:00:00.000000000 +0100
@@ -1,14 +0,0 @@
-*.pyc
-__pycache__
-*.egg-info
-docs/_build
-.installed.cfg
-bin
-develop-eggs
-eggs
-parts
-.tox
-.coverage
-coverage.xml
-nosetests.xml
-htmlcov/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/.travis.yml 
new/zope.copy-4.3/.travis.yml
--- old/zope.copy-4.2/.travis.yml       2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/.travis.yml       1970-01-01 01:00:00.000000000 +0100
@@ -1,26 +0,0 @@
-language: python
-sudo: false
-python:
-    - 2.7
-    - 3.4
-    - 3.5
-    - 3.6
-    - pypy
-    - pypy3
-matrix:
-    include:
-        - python: "3.7"
-          dist: xenial
-          sudo: true
-install:
-    - pip install -U pip setuptools
-    - pip install -U coverage coveralls
-    - pip install -U -e .[test,docs]
-script:
-    - coverage run -m zope.testrunner --test-path=src
-    - coverage run -a -m sphinx -b doctest -d docs/_build/doctrees docs 
docs/_build/doctest
-after_success:
-    - coveralls
-notifications:
-    email: false
-cache: pip
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/CHANGES.rst 
new/zope.copy-4.3/CHANGES.rst
--- old/zope.copy-4.2/CHANGES.rst       2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/CHANGES.rst       2022-11-29 09:59:02.000000000 +0100
@@ -2,6 +2,14 @@
  Changes
 =========
 
+4.3 (2022-11-29)
+================
+
+- Add support for Python 3.8, 3.9, 3.10, 3.11.
+
+- Drop support for Python 3.4.
+
+
 4.2 (2018-10-04)
 ================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/CONTRIBUTING.md 
new/zope.copy-4.3/CONTRIBUTING.md
--- old/zope.copy-4.2/CONTRIBUTING.md   1970-01-01 01:00:00.000000000 +0100
+++ new/zope.copy-4.3/CONTRIBUTING.md   2022-11-29 09:59:02.000000000 +0100
@@ -0,0 +1,23 @@
+<!--
+Generated from:
+https://github.com/zopefoundation/meta/tree/master/config/pure-python
+--> 
+# Contributing to zopefoundation projects
+
+The projects under the zopefoundation GitHub organization are open source and
+welcome contributions in different forms:
+
+* bug reports
+* code improvements and bug fixes
+* documentation improvements
+* pull request reviews
+
+For any changes in the repository besides trivial typo fixes you are required
+to sign the contributor agreement. See
+https://www.zope.dev/developer/becoming-a-committer.html for details.
+
+Please visit our [Developer
+Guidelines](https://www.zope.dev/developer/guidelines.html) if you'd like to
+contribute code changes and our [guidelines for reporting
+bugs](https://www.zope.dev/developer/reporting-bugs.html) if you want to file a
+bug report.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/MANIFEST.in 
new/zope.copy-4.3/MANIFEST.in
--- old/zope.copy-4.2/MANIFEST.in       2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/MANIFEST.in       2022-11-29 09:59:02.000000000 +0100
@@ -1,9 +1,15 @@
-include *.py
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/pure-python
+include *.md
 include *.rst
 include *.txt
 include buildout.cfg
 include tox.ini
-include .travis.yml
-include .coveragerc
-exclude .coverage
-recursive-include docs *.py *.bat *.rst Makefile .gitignore
+
+recursive-include docs *.py
+recursive-include docs *.rst
+recursive-include docs *.txt
+recursive-include docs Makefile
+
+recursive-include src *.py
+recursive-include docs *.bat
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/PKG-INFO new/zope.copy-4.3/PKG-INFO
--- old/zope.copy-4.2/PKG-INFO  2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/PKG-INFO  2022-11-29 09:59:06.165219500 +0100
@@ -1,112 +1,15 @@
 Metadata-Version: 2.1
 Name: zope.copy
-Version: 4.2
+Version: 4.3
 Summary: Pluggable object copying mechanism
 Home-page: http://github.com/zopefoundation/zope.copy
 Author: Zope Foundation and Contributors
 Author-email: zope-...@zope.org
 License: ZPL 2.1
-Description: ===============
-         ``zope.copy``
-        ===============
-        
-        .. image:: https://img.shields.io/pypi/v/zope.copy.svg
-                :target: https://pypi.python.org/pypi/zope.copy/
-                :alt: Latest release
-        
-        .. image:: https://img.shields.io/pypi/pyversions/zope.copy.svg
-                :target: https://pypi.org/project/zope.copy/
-                :alt: Supported Python versions
-        
-        .. image:: 
https://travis-ci.org/zopefoundation/zope.copy.svg?branch=master
-                :target: https://travis-ci.org/zopefoundation/zope.copy
-        
-        .. image:: 
https://coveralls.io/repos/github/zopefoundation/zope.copy/badge.svg?branch=master
-                :target: 
https://coveralls.io/github/zopefoundation/zope.copy?branch=master
-        
-        .. image:: 
https://readthedocs.org/projects/zopecopy/badge/?version=latest
-                :target: http://zopecopy.readthedocs.org/en/latest/
-                :alt: Documentation Status
-        
-        This package provides a pluggable mechanism for copying persistent 
objects.
-        
-        Documentation is hosted at https://zopecopy.readthedocs.io/en/latest/
-        
-        
-        =========
-         Changes
-        =========
-        
-        4.2 (2018-10-04)
-        ================
-        
-        - Use the latest and fastest protocol when pickling and unpickling and 
object
-          during the clone operation
-        
-        - Add support for Python 3.7.
-        
-        
-        4.1.0 (2017-07-31)
-        ==================
-        
-        - Drop support for Python 2.6, 3.2 and 3.3.
-        
-        - Add support for Python 3.5 and 3.6.
-        
-        - Restore ``zope.component`` as a testing requirement for running 
doctests.
-        
-        4.0.3 (2014-12-26)
-        ==================
-        
-        - Add support for PyPy3.
-        
-        4.0.2 (2014-03-19)
-        ==================
-        
-        - Add support for Python 3.3 and 3.4.
-        
-        - Update ``boostrap.py`` to version 2.2.
-        
-        4.0.1 (2012-12-31)
-        ==================
-        
-        - Flesh out PyPI Trove classifiers.
-        
-        4.0.0 (2012-06-13)
-        ==================
-        
-        - Add support for Python 3.2.
-        
-        - Drop ``zope.component`` as a testing requirement. Instead, register
-          explicit (dummy) adapter hooks where needed.
-        
-        - Add PyPy support.
-        
-        - 100% unit test coverage.
-        
-        - Add support for continuous integration using ``tox`` and ``jenkins``.
-        
-        - Add Sphinx documentation:  moved doctest examples to API reference.
-        
-        - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies).
-        
-        - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs
-          ``nose``, ``coverage``, and testing dependencies).
-        
-        - Drop support for Python 2.4 and 2.5.
-        
-        - Include tests of the LocationCopyHook from zope.location.
-        
-        3.5.0 (2009-02-09)
-        ==================
-        
-        - Initial release. The functionality was extracted from ``zc.copy`` to
-          provide a generic object copying mechanism with minimal dependencies.
-        
 Keywords: zope3 copying cloning
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: Framework :: Zope3
+Classifier: Framework :: Zope :: 3
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Zope Public License
 Classifier: Operating System :: OS Independent
@@ -114,12 +17,123 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 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 :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Database
 Provides-Extra: test
 Provides-Extra: docs
+License-File: LICENSE.txt
+
+===============
+ ``zope.copy``
+===============
+
+.. image:: https://img.shields.io/pypi/v/zope.copy.svg
+        :target: https://pypi.python.org/pypi/zope.copy/
+        :alt: Latest release
+
+.. image:: https://img.shields.io/pypi/pyversions/zope.copy.svg
+        :target: https://pypi.org/project/zope.copy/
+        :alt: Supported Python versions
+
+.. image:: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml/badge.svg
+        :target: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml
+
+.. image:: 
https://coveralls.io/repos/github/zopefoundation/zope.copy/badge.svg?branch=master
+        :target: 
https://coveralls.io/github/zopefoundation/zope.copy?branch=master
+
+.. image:: https://readthedocs.org/projects/zopecopy/badge/?version=latest
+        :target: http://zopecopy.readthedocs.org/en/latest/
+        :alt: Documentation Status
+
+This package provides a pluggable mechanism for copying persistent objects.
+
+Documentation is hosted at https://zopecopy.readthedocs.io/
+
+
+=========
+ Changes
+=========
+
+4.3 (2022-11-29)
+================
+
+- Add support for Python 3.8, 3.9, 3.10, 3.11.
+
+- Drop support for Python 3.4.
+
+
+4.2 (2018-10-04)
+================
+
+- Use the latest and fastest protocol when pickling and unpickling and object
+  during the clone operation
+
+- Add support for Python 3.7.
+
+
+4.1.0 (2017-07-31)
+==================
+
+- Drop support for Python 2.6, 3.2 and 3.3.
+
+- Add support for Python 3.5 and 3.6.
+
+- Restore ``zope.component`` as a testing requirement for running doctests.
+
+4.0.3 (2014-12-26)
+==================
+
+- Add support for PyPy3.
+
+4.0.2 (2014-03-19)
+==================
+
+- Add support for Python 3.3 and 3.4.
+
+- Update ``boostrap.py`` to version 2.2.
+
+4.0.1 (2012-12-31)
+==================
+
+- Flesh out PyPI Trove classifiers.
+
+4.0.0 (2012-06-13)
+==================
+
+- Add support for Python 3.2.
+
+- Drop ``zope.component`` as a testing requirement. Instead, register
+  explicit (dummy) adapter hooks where needed.
+
+- Add PyPy support.
+
+- 100% unit test coverage.
+
+- Add support for continuous integration using ``tox`` and ``jenkins``.
+
+- Add Sphinx documentation:  moved doctest examples to API reference.
+
+- Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies).
+
+- Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs
+  ``nose``, ``coverage``, and testing dependencies).
+
+- Drop support for Python 2.4 and 2.5.
+
+- Include tests of the LocationCopyHook from zope.location.
+
+3.5.0 (2009-02-09)
+==================
+
+- Initial release. The functionality was extracted from ``zc.copy`` to
+  provide a generic object copying mechanism with minimal dependencies.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/README.rst new/zope.copy-4.3/README.rst
--- old/zope.copy-4.2/README.rst        2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/README.rst        2022-11-29 09:59:02.000000000 +0100
@@ -10,8 +10,8 @@
         :target: https://pypi.org/project/zope.copy/
         :alt: Supported Python versions
 
-.. image:: https://travis-ci.org/zopefoundation/zope.copy.svg?branch=master
-        :target: https://travis-ci.org/zopefoundation/zope.copy
+.. image:: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml/badge.svg
+        :target: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml
 
 .. image:: 
https://coveralls.io/repos/github/zopefoundation/zope.copy/badge.svg?branch=master
         :target: 
https://coveralls.io/github/zopefoundation/zope.copy?branch=master
@@ -22,4 +22,4 @@
 
 This package provides a pluggable mechanism for copying persistent objects.
 
-Documentation is hosted at https://zopecopy.readthedocs.io/en/latest/
+Documentation is hosted at https://zopecopy.readthedocs.io/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/bootstrap.py 
new/zope.copy-4.3/bootstrap.py
--- old/zope.copy-4.2/bootstrap.py      2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/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/zope.copy-4.2/setup.cfg new/zope.copy-4.3/setup.cfg
--- old/zope.copy-4.2/setup.cfg 2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/setup.cfg 2022-11-29 09:59:06.167215000 +0100
@@ -1,10 +1,27 @@
-[aliases]
-dev = develop easy_install zope.copy[testing]
-docs = easy_install zope.copy[docs]
-
 [bdist_wheel]
 universal = 1
 
+[flake8]
+doctests = 1
+
+[check-manifest]
+ignore = 
+       .editorconfig
+       .meta.toml
+       docs/_build/html/_sources/*
+       docs/_build/doctest/*
+
+[isort]
+force_single_line = True
+combine_as_imports = True
+sections = FUTURE,STDLIB,THIRDPARTY,ZOPE,FIRSTPARTY,LOCALFOLDER
+known_third_party = six, docutils, pkg_resources
+known_zope = 
+known_first_party = 
+default_section = ZOPE
+line_length = 79
+lines_after_imports = 2
+
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/setup.py new/zope.copy-4.3/setup.py
--- old/zope.copy-4.2/setup.py  2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/setup.py  2022-11-29 09:59:02.000000000 +0100
@@ -14,13 +14,16 @@
 """Setup for zope.copy package
 """
 import os
-from setuptools import setup, find_packages
+
+from setuptools import find_packages
+from setuptools import setup
 
 
 def read(*rnames):
     with open(os.path.join(os.path.dirname(__file__), *rnames)) as f:
         return f.read()
 
+
 TESTS_REQUIRE = [
     'zope.component',
     'zope.location',
@@ -29,7 +32,7 @@
 ]
 
 setup(name='zope.copy',
-      version='4.2',
+      version='4.3',
       author='Zope Foundation and Contributors',
       author_email='zope-...@zope.org',
       description='Pluggable object copying mechanism',
@@ -37,7 +40,7 @@
       keywords="zope3 copying cloning",
       classifiers=[
           'Development Status :: 5 - Production/Stable',
-          'Framework :: Zope3',
+          'Framework :: Zope :: 3',
           'Intended Audience :: Developers',
           'License :: OSI Approved :: Zope Public License',
           'Operating System :: OS Independent',
@@ -45,10 +48,13 @@
           'Programming Language :: Python :: 2',
           'Programming Language :: Python :: 2.7',
           'Programming Language :: Python :: 3',
-          'Programming Language :: Python :: 3.4',
           'Programming Language :: Python :: 3.5',
           'Programming Language :: Python :: 3.6',
           'Programming Language :: Python :: 3.7',
+          'Programming Language :: Python :: 3.8',
+          'Programming Language :: Python :: 3.9',
+          'Programming Language :: Python :: 3.10',
+          'Programming Language :: Python :: 3.11',
           'Programming Language :: Python :: Implementation :: CPython',
           'Programming Language :: Python :: Implementation :: PyPy',
           'Topic :: Database',
@@ -72,4 +78,4 @@
               'repoze.sphinx.autointerface',
           ],
       },
-)
+      )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/__init__.py 
new/zope.copy-4.3/src/zope/__init__.py
--- old/zope.copy-4.2/src/zope/__init__.py      2018-10-04 10:44:56.000000000 
+0200
+++ new/zope.copy-4.3/src/zope/__init__.py      2022-11-29 09:59:02.000000000 
+0100
@@ -1 +1 @@
-__import__('pkg_resources').declare_namespace(__name__) # pragma: no cover
+__import__('pkg_resources').declare_namespace(__name__)  # pragma: no cover
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/copy/__init__.py 
new/zope.copy-4.3/src/zope/copy/__init__.py
--- old/zope.copy-4.2/src/zope/copy/__init__.py 2018-10-04 10:44:56.000000000 
+0200
+++ new/zope.copy-4.3/src/zope/copy/__init__.py 2022-11-29 09:59:02.000000000 
+0100
@@ -16,8 +16,8 @@
 from zope.copy import interfaces
 from zope.copy._compat import Pickler
 from zope.copy._compat import Unpickler
-from zope.copy._compat import _get_pid
 from zope.copy._compat import _get_obj
+from zope.copy._compat import _get_pid
 
 
 def clone(obj):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/copy/_compat.py 
new/zope.copy-4.3/src/zope/copy/_compat.py
--- old/zope.copy-4.2/src/zope/copy/_compat.py  2018-10-04 10:44:56.000000000 
+0200
+++ new/zope.copy-4.3/src/zope/copy/_compat.py  2022-11-29 09:59:02.000000000 
+0100
@@ -14,27 +14,30 @@
 
 import sys
 
+
 PY3 = sys.version_info[0] >= 3
 
 try:
     from cPickle import Pickler
-    from cPickle import Unpickler
+    from cPickle import Unpickler  # pragma: no cover
 except ImportError:
-    from pickle import Pickler
-    from pickle import Unpickler
+    from pickle import Pickler  # noqa: F401 imported but unused
+    from pickle import Unpickler  # noqa: F401 imported but unused
 
 if PY3:
     def _memo(pickler):
         # Python 3 uses a "PicklerMemoProxy" which is not subscriptable
         # by itself
         return pickler.memo.copy()
-else:
+else:  # pragma: no cover
     from operator import attrgetter
 
     _memo = attrgetter('memo')
 
+
 def _get_pid(pickler, oid):
     return _memo(pickler)[oid][0]
 
+
 def _get_obj(unpickler, pid):
     return _memo(unpickler)[pid]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/copy/interfaces.py 
new/zope.copy-4.3/src/zope/copy/interfaces.py
--- old/zope.copy-4.2/src/zope/copy/interfaces.py       2018-10-04 
10:44:56.000000000 +0200
+++ new/zope.copy-4.3/src/zope/copy/interfaces.py       2022-11-29 
09:59:02.000000000 +0100
@@ -15,6 +15,7 @@
 """
 import zope.interface
 
+
 class ResumeCopy(Exception):
     """Don't use the hook, resume the copy.
 
@@ -24,6 +25,7 @@
     See ICopyHook.__call__ method documentation.
     """
 
+
 class ICopyHook(zope.interface.Interface):
     """An adapter to an object that is being copied"""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/copy/tests/__init__.py 
new/zope.copy-4.3/src/zope/copy/tests/__init__.py
--- old/zope.copy-4.2/src/zope/copy/tests/__init__.py   2018-10-04 
10:44:56.000000000 +0200
+++ new/zope.copy-4.3/src/zope/copy/tests/__init__.py   2022-11-29 
09:59:02.000000000 +0100
@@ -1 +1 @@
-#package
+# package
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope/copy/tests/test_copy.py 
new/zope.copy-4.3/src/zope/copy/tests/test_copy.py
--- old/zope.copy-4.2/src/zope/copy/tests/test_copy.py  2018-10-04 
10:44:56.000000000 +0200
+++ new/zope.copy-4.3/src/zope/copy/tests/test_copy.py  2022-11-29 
09:59:02.000000000 +0100
@@ -13,6 +13,7 @@
 ##############################################################################
 import unittest
 
+
 class _Base(object):
 
     def setUp(self):
@@ -41,16 +42,19 @@
         self.assertTrue(copied.isFrozen())
 
     def test_w_simple_hook(self):
-        from zope.copy.interfaces import ICopyHook
         from zope.copy.examples import Data
         from zope.copy.examples import Demo
+        from zope.copy.interfaces import ICopyHook
         demo = Demo()
         demo.freeze()
+
         class Hook(object):
             def __init__(self, context):
                 self.context = context
+
             def __call__(self, obj, register):
                 return None
+
         def _adapt(iface, obj):
             if iface is ICopyHook and isinstance(obj, Data):
                 return Hook(obj)
@@ -63,6 +67,7 @@
     def test_subobject_wo_post_copy_hook(self):
         from zope.location.location import Location
         from zope.location.location import locate
+
         from zope.copy.examples import Subobject
         o = Location()
         s = Subobject()
@@ -78,10 +83,11 @@
         self.assertEqual(o.subobject(), 3)
 
     def test_subobject_w_post_copy_hook(self):
-        from zope.copy.interfaces import ICopyHook
         from zope.location.location import Location
         from zope.location.location import locate
+
         from zope.copy.examples import Subobject
+        from zope.copy.interfaces import ICopyHook
         o = Location()
         s = Subobject()
         o.subobject = s
@@ -90,15 +96,19 @@
         self.assertEqual(o.subobject(), 0)
         self.assertEqual(o.subobject(), 1)
         self.assertEqual(o.subobject(), 2)
+
         class Hook(object):
             def __init__(self, context):
                 self.context = context
+
             def __call__(self, obj, register):
                 obj = Subobject()
+
                 def reparent(translate):
                     obj.__parent__ = translate(self.context.__parent__)
                 register(reparent)
                 return obj
+
         def _adapt(iface, obj):
             if iface is ICopyHook and isinstance(obj, Subobject):
                 return Hook(obj)
@@ -128,12 +138,14 @@
         self.assertEqual(copied.__name__, None)
 
     def test_w_readonly___parent___and___name__(self):
-        global Foo #make unpicklable
+        global Foo  # make unpicklable
         parent = object()
+
         class Foo(object):
             @property
             def __parent__(self):
                 return parent
+
             @property
             def __name__(self):
                 return 'foo'
@@ -172,14 +184,17 @@
         obj = object()
         cp = self._makeOne(obj)
         cp.pids_by_id[id(obj)] = 'PID'
+
         class Hook(object):
             def __init__(self, context):
                 self.context = context
+
             def __call__(self, obj, register):
                 raise AssertionError("Not called")
+
         def _adapt(iface, obj):
-            if iface is ICopyHook:
-                return Hook(obj)
+            assert iface is ICopyHook
+            return Hook(obj)
         _registerAdapterHook(_adapt)
         self.assertEqual(cp.id(obj), 'PID')
 
@@ -188,14 +203,17 @@
         from zope.copy.interfaces import ResumeCopy
         obj = object()
         cp = self._makeOne(obj)
+
         class Hook(object):
             def __init__(self, context):
                 self.context = context
+
             def __call__(self, obj, register):
                 raise ResumeCopy()
+
         def _adapt(iface, obj):
-            if iface is ICopyHook:
-                return Hook(obj)
+            assert iface is ICopyHook
+            return Hook(obj)
         _registerAdapterHook(_adapt)
         self.assertEqual(cp.id(obj), None)
 
@@ -203,14 +221,17 @@
         from zope.copy.interfaces import ICopyHook
         obj = object()
         cp = self._makeOne(obj)
+
         class Hook(object):
             def __init__(self, context):
                 self.context = context
+
             def __call__(self, obj, register):
                 return None
+
         def _adapt(iface, obj):
-            if iface is ICopyHook:
-                return Hook(obj)
+            assert iface is ICopyHook
+            return Hook(obj)
         _registerAdapterHook(_adapt)
         self.assertEqual(cp.id(obj), 1)
         obj2 = object()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope.copy.egg-info/PKG-INFO 
new/zope.copy-4.3/src/zope.copy.egg-info/PKG-INFO
--- old/zope.copy-4.2/src/zope.copy.egg-info/PKG-INFO   2018-10-04 
10:44:56.000000000 +0200
+++ new/zope.copy-4.3/src/zope.copy.egg-info/PKG-INFO   2022-11-29 
09:59:04.000000000 +0100
@@ -1,112 +1,15 @@
 Metadata-Version: 2.1
 Name: zope.copy
-Version: 4.2
+Version: 4.3
 Summary: Pluggable object copying mechanism
 Home-page: http://github.com/zopefoundation/zope.copy
 Author: Zope Foundation and Contributors
 Author-email: zope-...@zope.org
 License: ZPL 2.1
-Description: ===============
-         ``zope.copy``
-        ===============
-        
-        .. image:: https://img.shields.io/pypi/v/zope.copy.svg
-                :target: https://pypi.python.org/pypi/zope.copy/
-                :alt: Latest release
-        
-        .. image:: https://img.shields.io/pypi/pyversions/zope.copy.svg
-                :target: https://pypi.org/project/zope.copy/
-                :alt: Supported Python versions
-        
-        .. image:: 
https://travis-ci.org/zopefoundation/zope.copy.svg?branch=master
-                :target: https://travis-ci.org/zopefoundation/zope.copy
-        
-        .. image:: 
https://coveralls.io/repos/github/zopefoundation/zope.copy/badge.svg?branch=master
-                :target: 
https://coveralls.io/github/zopefoundation/zope.copy?branch=master
-        
-        .. image:: 
https://readthedocs.org/projects/zopecopy/badge/?version=latest
-                :target: http://zopecopy.readthedocs.org/en/latest/
-                :alt: Documentation Status
-        
-        This package provides a pluggable mechanism for copying persistent 
objects.
-        
-        Documentation is hosted at https://zopecopy.readthedocs.io/en/latest/
-        
-        
-        =========
-         Changes
-        =========
-        
-        4.2 (2018-10-04)
-        ================
-        
-        - Use the latest and fastest protocol when pickling and unpickling and 
object
-          during the clone operation
-        
-        - Add support for Python 3.7.
-        
-        
-        4.1.0 (2017-07-31)
-        ==================
-        
-        - Drop support for Python 2.6, 3.2 and 3.3.
-        
-        - Add support for Python 3.5 and 3.6.
-        
-        - Restore ``zope.component`` as a testing requirement for running 
doctests.
-        
-        4.0.3 (2014-12-26)
-        ==================
-        
-        - Add support for PyPy3.
-        
-        4.0.2 (2014-03-19)
-        ==================
-        
-        - Add support for Python 3.3 and 3.4.
-        
-        - Update ``boostrap.py`` to version 2.2.
-        
-        4.0.1 (2012-12-31)
-        ==================
-        
-        - Flesh out PyPI Trove classifiers.
-        
-        4.0.0 (2012-06-13)
-        ==================
-        
-        - Add support for Python 3.2.
-        
-        - Drop ``zope.component`` as a testing requirement. Instead, register
-          explicit (dummy) adapter hooks where needed.
-        
-        - Add PyPy support.
-        
-        - 100% unit test coverage.
-        
-        - Add support for continuous integration using ``tox`` and ``jenkins``.
-        
-        - Add Sphinx documentation:  moved doctest examples to API reference.
-        
-        - Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies).
-        
-        - Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs
-          ``nose``, ``coverage``, and testing dependencies).
-        
-        - Drop support for Python 2.4 and 2.5.
-        
-        - Include tests of the LocationCopyHook from zope.location.
-        
-        3.5.0 (2009-02-09)
-        ==================
-        
-        - Initial release. The functionality was extracted from ``zc.copy`` to
-          provide a generic object copying mechanism with minimal dependencies.
-        
 Keywords: zope3 copying cloning
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
-Classifier: Framework :: Zope3
+Classifier: Framework :: Zope :: 3
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: Zope Public License
 Classifier: Operating System :: OS Independent
@@ -114,12 +17,123 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 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 :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Database
 Provides-Extra: test
 Provides-Extra: docs
+License-File: LICENSE.txt
+
+===============
+ ``zope.copy``
+===============
+
+.. image:: https://img.shields.io/pypi/v/zope.copy.svg
+        :target: https://pypi.python.org/pypi/zope.copy/
+        :alt: Latest release
+
+.. image:: https://img.shields.io/pypi/pyversions/zope.copy.svg
+        :target: https://pypi.org/project/zope.copy/
+        :alt: Supported Python versions
+
+.. image:: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml/badge.svg
+        :target: 
https://github.com/zopefoundation/zope.copy/actions/workflows/tests.yml
+
+.. image:: 
https://coveralls.io/repos/github/zopefoundation/zope.copy/badge.svg?branch=master
+        :target: 
https://coveralls.io/github/zopefoundation/zope.copy?branch=master
+
+.. image:: https://readthedocs.org/projects/zopecopy/badge/?version=latest
+        :target: http://zopecopy.readthedocs.org/en/latest/
+        :alt: Documentation Status
+
+This package provides a pluggable mechanism for copying persistent objects.
+
+Documentation is hosted at https://zopecopy.readthedocs.io/
+
+
+=========
+ Changes
+=========
+
+4.3 (2022-11-29)
+================
+
+- Add support for Python 3.8, 3.9, 3.10, 3.11.
+
+- Drop support for Python 3.4.
+
+
+4.2 (2018-10-04)
+================
+
+- Use the latest and fastest protocol when pickling and unpickling and object
+  during the clone operation
+
+- Add support for Python 3.7.
+
+
+4.1.0 (2017-07-31)
+==================
+
+- Drop support for Python 2.6, 3.2 and 3.3.
+
+- Add support for Python 3.5 and 3.6.
+
+- Restore ``zope.component`` as a testing requirement for running doctests.
+
+4.0.3 (2014-12-26)
+==================
+
+- Add support for PyPy3.
+
+4.0.2 (2014-03-19)
+==================
+
+- Add support for Python 3.3 and 3.4.
+
+- Update ``boostrap.py`` to version 2.2.
+
+4.0.1 (2012-12-31)
+==================
+
+- Flesh out PyPI Trove classifiers.
+
+4.0.0 (2012-06-13)
+==================
+
+- Add support for Python 3.2.
+
+- Drop ``zope.component`` as a testing requirement. Instead, register
+  explicit (dummy) adapter hooks where needed.
+
+- Add PyPy support.
+
+- 100% unit test coverage.
+
+- Add support for continuous integration using ``tox`` and ``jenkins``.
+
+- Add Sphinx documentation:  moved doctest examples to API reference.
+
+- Add 'setup.py docs' alias (installs ``Sphinx`` and dependencies).
+
+- Add 'setup.py dev' alias (runs ``setup.py develop`` plus installs
+  ``nose``, ``coverage``, and testing dependencies).
+
+- Drop support for Python 2.4 and 2.5.
+
+- Include tests of the LocationCopyHook from zope.location.
+
+3.5.0 (2009-02-09)
+==================
+
+- Initial release. The functionality was extracted from ``zc.copy`` to
+  provide a generic object copying mechanism with minimal dependencies.
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/src/zope.copy.egg-info/SOURCES.txt 
new/zope.copy-4.3/src/zope.copy.egg-info/SOURCES.txt
--- old/zope.copy-4.2/src/zope.copy.egg-info/SOURCES.txt        2018-10-04 
10:44:56.000000000 +0200
+++ new/zope.copy-4.3/src/zope.copy.egg-info/SOURCES.txt        2022-11-29 
09:59:05.000000000 +0100
@@ -1,13 +1,9 @@
-.bzrignore
-.coveragerc
-.gitignore
-.travis.yml
 CHANGES.rst
+CONTRIBUTING.md
 COPYRIGHT.txt
 LICENSE.txt
 MANIFEST.in
 README.rst
-bootstrap.py
 buildout.cfg
 rtd.txt
 setup.cfg
@@ -20,7 +16,6 @@
 docs/index.rst
 docs/make.bat
 docs/narr.rst
-docs/_static/.gitignore
 src/zope/__init__.py
 src/zope.copy.egg-info/PKG-INFO
 src/zope.copy.egg-info/SOURCES.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/zope.copy-4.2/tox.ini new/zope.copy-4.3/tox.ini
--- old/zope.copy-4.2/tox.ini   2018-10-04 10:44:56.000000000 +0200
+++ new/zope.copy-4.3/tox.ini   2022-11-29 09:59:02.000000000 +0100
@@ -1,31 +1,92 @@
+# Generated from:
+# https://github.com/zopefoundation/meta/tree/master/config/pure-python
 [tox]
+minversion = 3.18
 envlist =
-    py27,py34,py35,py36,py37,pypy,pypy3,coverage
+    lint
+    py27
+    py35
+    py36
+    py37
+    py38
+    py39
+    py310
+    py311
+    pypy
+    pypy3
+    docs
+    coverage
 
 [testenv]
-commands =
-    zope-testrunner --test-path=src []
-    sphinx-build -b doctest -d {envdir}/.cache/doctrees docs 
{envdir}/.cache/doctest
+usedevelop = true
 deps =
-    .[test,docs]
+commands =
+    zope-testrunner --test-path=src {posargs:-vc}
+    !py27-!pypy: sphinx-build -b doctest -d {envdir}/.cache/doctrees docs 
{envdir}/.cache/doctest
+extras =
+    test
+    docs
 
-[testenv:coverage]
-usedevelop = true
-basepython =
-    python3.7
+[testenv:lint]
+basepython = python3
+skip_install = true
 commands =
-    coverage run -m zope.testrunner --test-path=src
-    coverage run -a -m sphinx -b doctest -d {envdir}/.cache/doctrees docs 
{envdir}/.cache/doctest
-    coverage report
+    isort --check-only --diff {toxinidir}/src {toxinidir}/setup.py
+    flake8 src setup.py
+    check-manifest
+    check-python-versions
 deps =
-    {[testenv]deps}
-    coverage
+    check-manifest
+    check-python-versions >= 0.19.1
+    wheel
+    flake8
+    isort
+
+[testenv:isort-apply]
+basepython = python3
+commands_pre =
+deps =
+    isort
+commands =
+    isort {toxinidir}/src {toxinidir}/setup.py []
 
 [testenv:docs]
-basepython =
-    python3.7
+basepython = python3
+skip_install = false
+commands_pre =
 commands =
     sphinx-build -b html -d docs/_build/doctrees docs docs/_build/html
     sphinx-build -b doctest -d docs/_build/doctrees docs docs/_build/doctest
+
+[testenv:coverage]
+basepython = python3
+allowlist_externals =
+    mkdir
 deps =
-    .[test,docs]
+    coverage
+    coverage-python-version
+commands =
+    mkdir -p {toxinidir}/parts/htmlcov
+    coverage run -m zope.testrunner --test-path=src {posargs:-vc}
+    coverage run -a -m sphinx -b doctest -d {envdir}/.cache/doctrees docs 
{envdir}/.cache/doctest
+    coverage html
+    coverage report -m --fail-under=100
+
+[coverage:run]
+branch = True
+plugins = coverage_python_version
+source = zope.copy
+
+[coverage:report]
+precision = 2
+exclude_lines =
+    pragma: no cover
+    pragma: nocover
+    except ImportError:
+    raise NotImplementedError
+    if __name__ == '__main__':
+    self.fail
+    raise AssertionError
+
+[coverage:html]
+directory = parts/htmlcov

Reply via email to