summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Howitz <mh@gocept.com>2022-12-15 08:27:52 +0100
committerGitHub <noreply@github.com>2022-12-15 07:27:52 +0000
commitad06f3ef6097123b7d66e0782c25308eb288efd8 (patch)
tree4b0203d0d33fee3b6f5890b073520a3a13ae324e
parentd93f13aa39e5e66521a03deb62416516fa2b5d1e (diff)
downloadzope-configuration-ad06f3ef6097123b7d66e0782c25308eb288efd8.tar.gz
Config with pure python (#58)
* Fix GHA: ubuntu-latest no longer contains Python 3.5 and 3.6 * Add support for Python 3.11. * isort imports
-rw-r--r--.github/workflows/tests.yml12
-rw-r--r--.gitignore1
-rw-r--r--.meta.toml3
-rw-r--r--CHANGES.rst6
-rw-r--r--setup.cfg11
-rw-r--r--setup.py14
-rw-r--r--src/zope/configuration/_compat.py1
-rw-r--r--src/zope/configuration/config.py21
-rw-r--r--src/zope/configuration/docutils.py1
-rw-r--r--src/zope/configuration/exceptions.py1
-rw-r--r--src/zope/configuration/fields.py3
-rw-r--r--src/zope/configuration/interfaces.py1
-rw-r--r--src/zope/configuration/name.py1
-rw-r--r--src/zope/configuration/tests/directives.py2
-rw-r--r--src/zope/configuration/tests/nested.py3
-rw-r--r--src/zope/configuration/tests/samplepackage/foo.py2
-rw-r--r--src/zope/configuration/tests/test_config.py27
-rw-r--r--src/zope/configuration/tests/test_docs.py6
-rw-r--r--src/zope/configuration/tests/test_fields.py3
-rw-r--r--src/zope/configuration/tests/test_name.py5
-rw-r--r--src/zope/configuration/tests/test_xmlconfig.py46
-rw-r--r--src/zope/configuration/tests/test_zopeconfigure.py1
-rw-r--r--src/zope/configuration/tests/unicode_all/__init__.py1
-rw-r--r--src/zope/configuration/tests/victim.py1
-rw-r--r--src/zope/configuration/xmlconfig.py16
-rw-r--r--src/zope/configuration/zopeconfigure.py1
-rw-r--r--tox.ini24
27 files changed, 148 insertions, 66 deletions
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 927d9f3..cedf24b 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -17,7 +17,7 @@ jobs:
fail-fast: false
matrix:
os:
- - ubuntu
+ - ["ubuntu", "ubuntu-20.04"]
config:
# [Python version, tox env]
- ["3.9", "lint"]
@@ -28,21 +28,23 @@ jobs:
- ["3.8", "py38"]
- ["3.9", "py39"]
- ["3.10", "py310"]
+ - ["3.11", "py311"]
- ["pypy-2.7", "pypy"]
- ["pypy-3.7", "pypy3"]
- ["3.9", "docs"]
- ["3.9", "coverage"]
- runs-on: ${{ matrix.os }}-latest
+ runs-on: ${{ matrix.os[1] }}
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
name: ${{ matrix.config[1] }}
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Set up Python
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v4
with:
python-version: ${{ matrix.config[0] }}
- name: Pip cache
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.config[0] }}-${{ hashFiles('setup.*', 'tox.ini') }}
diff --git a/.gitignore b/.gitignore
index c724a76..1f321f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,4 +28,5 @@ lib64
log/
parts/
pyvenv.cfg
+testing.log
var/
diff --git a/.meta.toml b/.meta.toml
index 5c84260..4b50c90 100644
--- a/.meta.toml
+++ b/.meta.toml
@@ -2,7 +2,7 @@
# https://github.com/zopefoundation/meta/tree/master/config/pure-python
[meta]
template = "pure-python"
-commit-id = "3b712f305ca8207e971c5bf81f2bdb5872489f2f"
+commit-id = "200573eb414d2228d463da3de7d71a6d6335a704"
[python]
with-pypy = true
@@ -11,6 +11,7 @@ with-docs = true
with-sphinx-doctests = true
with-windows = false
with-future-python = false
+with-macos = false
[tox]
use-flake8 = true
diff --git a/CHANGES.rst b/CHANGES.rst
index 69f2889..a7309e1 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,10 +1,10 @@
Changes
=======
-4.4.2 (unreleased)
-------------------
+4.5 (unreleased)
+----------------
-- Nothing changed yet.
+- Add support for Python 3.11.
4.4.1 (2022-04-07)
diff --git a/setup.cfg b/setup.cfg
index 55ad5a6..9dd98cb 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -16,3 +16,14 @@ ignore =
docs/_build/html/_sources/*
docs/_build/doctest/*
docs/_build/html/_sources/api/*
+
+[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
diff --git a/setup.py b/setup.py
index 2ba1f6e..3cc4a7d 100644
--- a/setup.py
+++ b/setup.py
@@ -18,7 +18,9 @@
##############################################################################
import os
-from setuptools import setup, find_packages
+
+from setuptools import find_packages
+from setuptools import setup
def read(*rnames):
@@ -37,7 +39,7 @@ TESTS_REQUIRE = [
]
setup(name='zope.configuration',
- version='4.4.2.dev0',
+ version='4.5.dev0',
author='Zope Foundation and Contributors',
author_email='zope-dev@zope.org',
description='Zope Configuration Markup Language (ZCML)',
@@ -53,21 +55,23 @@ setup(name='zope.configuration',
'Intended Audience :: Developers',
'License :: OSI Approved :: Zope Public License',
'Programming Language :: Python',
- "Programming Language :: Python :: 2",
+ 'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
- "Programming Language :: Python :: 3",
+ 'Programming Language :: Python :: 3',
'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',
'Natural Language :: English',
'Operating System :: OS Independent',
'Topic :: Internet :: WWW/HTTP',
- 'Framework :: Zope :: 3'],
+ 'Framework :: Zope :: 3',
+ ],
url='https://github.com/zopefoundation/zope.configuration',
license='ZPL 2.1',
packages=find_packages('src'),
diff --git a/src/zope/configuration/_compat.py b/src/zope/configuration/_compat.py
index a5fb4a1..05a5e61 100644
--- a/src/zope/configuration/_compat.py
+++ b/src/zope/configuration/_compat.py
@@ -13,6 +13,7 @@
##############################################################################
import sys
+
PY3 = sys.version_info[0] >= 3
if PY3: # pragma: PY3
diff --git a/src/zope/configuration/config.py b/src/zope/configuration/config.py
index 2d99b36..c3eedd3 100644
--- a/src/zope/configuration/config.py
+++ b/src/zope/configuration/config.py
@@ -13,31 +13,32 @@
##############################################################################
"""Configuration processor
"""
-from keyword import iskeyword
import operator
import os.path
import sys
+from keyword import iskeyword
-from zope.interface.adapter import AdapterRegistry
from zope.interface import Interface
from zope.interface import implementer
from zope.interface import providedBy
-from zope.schema import TextLine
+from zope.interface.adapter import AdapterRegistry
from zope.schema import URI
+from zope.schema import TextLine
from zope.schema import ValidationError
+from zope.configuration._compat import builtins
+from zope.configuration._compat import implementer_if_needed
+from zope.configuration._compat import reraise
+from zope.configuration._compat import string_types
+from zope.configuration._compat import text_type
from zope.configuration.exceptions import ConfigurationError
from zope.configuration.exceptions import ConfigurationWrapperError
-from zope.configuration.interfaces import IConfigurationContext
-from zope.configuration.interfaces import IGroupingContext
from zope.configuration.fields import GlobalInterface
from zope.configuration.fields import GlobalObject
from zope.configuration.fields import PathProcessor
-from zope.configuration._compat import builtins
-from zope.configuration._compat import reraise
-from zope.configuration._compat import string_types
-from zope.configuration._compat import text_type
-from zope.configuration._compat import implementer_if_needed
+from zope.configuration.interfaces import IConfigurationContext
+from zope.configuration.interfaces import IGroupingContext
+
__all__ = [
'ConfigurationContext',
diff --git a/src/zope/configuration/docutils.py b/src/zope/configuration/docutils.py
index f64f9f6..df7e129 100644
--- a/src/zope/configuration/docutils.py
+++ b/src/zope/configuration/docutils.py
@@ -17,6 +17,7 @@ __docformat__ = 'restructuredtext'
import re
+
__all__ = [
'wrap',
'makeDocStructures',
diff --git a/src/zope/configuration/exceptions.py b/src/zope/configuration/exceptions.py
index 296ff73..faa9bfb 100644
--- a/src/zope/configuration/exceptions.py
+++ b/src/zope/configuration/exceptions.py
@@ -16,6 +16,7 @@
import traceback
+
__all__ = [
'ConfigurationError',
]
diff --git a/src/zope/configuration/fields.py b/src/zope/configuration/fields.py
index 37c9797..c2dbbe5 100644
--- a/src/zope/configuration/fields.py
+++ b/src/zope/configuration/fields.py
@@ -29,9 +29,10 @@ from zope.schema import ValidationError
from zope.schema.interfaces import IFromUnicode
from zope.schema.interfaces import InvalidValue
+from zope.configuration._compat import implementer_if_needed
from zope.configuration.exceptions import ConfigurationError
from zope.configuration.interfaces import InvalidToken
-from zope.configuration._compat import implementer_if_needed
+
__all__ = [
'Bool',
diff --git a/src/zope/configuration/interfaces.py b/src/zope/configuration/interfaces.py
index e6342d7..0d29239 100644
--- a/src/zope/configuration/interfaces.py
+++ b/src/zope/configuration/interfaces.py
@@ -17,6 +17,7 @@ from zope.interface import Interface
from zope.schema import BytesLine
from zope.schema.interfaces import ValidationError
+
__all__ = [
'InvalidToken',
'IConfigurationContext',
diff --git a/src/zope/configuration/name.py b/src/zope/configuration/name.py
index 5df88a5..096f7ac 100644
--- a/src/zope/configuration/name.py
+++ b/src/zope/configuration/name.py
@@ -21,6 +21,7 @@ Provide configuration object name resolution.
import os
from types import ModuleType
+
__all__ = [
'resolve',
'getNormalizedName',
diff --git a/src/zope/configuration/tests/directives.py b/src/zope/configuration/tests/directives.py
index 0a17f89..832ec01 100644
--- a/src/zope/configuration/tests/directives.py
+++ b/src/zope/configuration/tests/directives.py
@@ -19,8 +19,8 @@ from zope.schema import NativeStringLine
from zope.schema import Text
from zope.configuration.config import GroupingContextDecorator
-from zope.configuration.interfaces import IConfigurationContext
from zope.configuration.fields import GlobalObject
+from zope.configuration.interfaces import IConfigurationContext
class F(object):
diff --git a/src/zope/configuration/tests/nested.py b/src/zope/configuration/tests/nested.py
index f804f13..bf6da1c 100644
--- a/src/zope/configuration/tests/nested.py
+++ b/src/zope/configuration/tests/nested.py
@@ -17,11 +17,12 @@
from zope.interface import Attribute
from zope.interface import Interface
from zope.interface import implementer
-from zope.schema import NativeStringLine
from zope.schema import Id
from zope.schema import Int
+from zope.schema import NativeStringLine
from zope.schema import Text
from zope.schema import TextLine
+
from zope.configuration.config import GroupingContextDecorator
from zope.configuration.fields import Bool
diff --git a/src/zope/configuration/tests/samplepackage/foo.py b/src/zope/configuration/tests/samplepackage/foo.py
index f1060c1..e01bc78 100644
--- a/src/zope/configuration/tests/samplepackage/foo.py
+++ b/src/zope/configuration/tests/samplepackage/foo.py
@@ -14,8 +14,10 @@
"""Sample module used for testing
"""
from zope.interface import Interface
+
from zope import schema
+
data = []
diff --git a/src/zope/configuration/tests/test_config.py b/src/zope/configuration/tests/test_config.py
index 714e7e2..cf215ad 100644
--- a/src/zope/configuration/tests/test_config.py
+++ b/src/zope/configuration/tests/test_config.py
@@ -13,8 +13,9 @@
##############################################################################
"""Test configuration machinery.
"""
-import unittest
import sys
+import unittest
+
# pylint:disable=inherit-non-class,protected-access
# pylint:disable=attribute-defined-outside-init, arguments-differ
@@ -199,6 +200,7 @@ class ConfigurationContextTests(unittest.TestCase):
def test_checkDuplicate_hit(self):
import os
+
from zope.configuration.exceptions import ConfigurationError
c = self._makeOne()
c.checkDuplicate('/path')
@@ -502,6 +504,7 @@ class ConfigurationAdapterRegistryTests(unittest.TestCase):
def test_factory_hit_on_fqn_lookup_fails(self):
from zope.interface import Interface
+
from zope.configuration.exceptions import ConfigurationError
class IFoo(Interface):
@@ -528,11 +531,13 @@ class _ConformsToIConfigurationContext(object):
def test_class_conforms_to_IConfigurationContext(self):
from zope.interface.verify import verifyClass
+
from zope.configuration.interfaces import IConfigurationContext
verifyClass(IConfigurationContext, self._getTargetClass())
def test_instance_conforms_to_IConfigurationContext(self):
from zope.interface.verify import verifyObject
+
from zope.configuration.interfaces import IConfigurationContext
verifyObject(IConfigurationContext, self._makeOne())
@@ -584,6 +589,7 @@ class ConfigurationMachineTests(_ConformsToIConfigurationContext,
def test_begin_w___data_no_kw(self):
from zope.interface import Interface
+
from zope.configuration.config import IConfigurationContext
from zope.configuration.config import RootStackItem
@@ -626,6 +632,7 @@ class ConfigurationMachineTests(_ConformsToIConfigurationContext,
def test_begin_wo___data_w_kw(self):
from zope.interface import Interface
+
from zope.configuration.config import IConfigurationContext
from zope.configuration.config import RootStackItem
@@ -686,6 +693,7 @@ class ConfigurationMachineTests(_ConformsToIConfigurationContext,
def test___call__(self):
from zope.interface import Interface
+
from zope.configuration.config import IConfigurationContext
from zope.configuration.config import RootStackItem
@@ -905,11 +913,13 @@ class _ConformsToIStackItem(object):
def test_class_conforms_to_IStackItem(self):
from zope.interface.verify import verifyClass
+
from zope.configuration.config import IStackItem
verifyClass(IStackItem, self._getTargetClass())
def test_instance_conforms_to_IStackItem(self):
from zope.interface.verify import verifyObject
+
from zope.configuration.config import IStackItem
verifyObject(IStackItem, self._makeOne())
@@ -941,6 +951,7 @@ class SimpleStackItemTests(_ConformsToIStackItem,
def test_ctor(self):
from zope.interface import Interface
+
from zope.configuration.config import GroupingContextDecorator
class ISchema(Interface):
@@ -1262,6 +1273,7 @@ class ComplexStackItemTests(_ConformsToIStackItem,
def test_contained_hit(self):
from zope.interface import Interface
+
from zope.configuration.config import GroupingContextDecorator
from zope.configuration.config import SimpleStackItem
NS = 'http://namespace.example.com/'
@@ -1374,11 +1386,13 @@ class _ConformsToIGroupingContext(object):
def test_class_conforms_to_IGroupingContext(self):
from zope.interface.verify import verifyClass
+
from zope.configuration.interfaces import IGroupingContext
verifyClass(IGroupingContext, self._getTargetClass())
def test_instance_conforms_to_IGroupingContext(self):
from zope.interface.verify import verifyObject
+
from zope.configuration.interfaces import IGroupingContext
verifyObject(IGroupingContext, self._makeOne())
@@ -1437,11 +1451,13 @@ class _ConformsToIDirectivesContext(object):
def test_class_conforms_to_IDirectivesContext(self):
from zope.interface.verify import verifyClass
+
from zope.configuration.config import IDirectivesContext
verifyClass(IDirectivesContext, self._getTargetClass())
def test_instance_conforms_to_IDirectivesContext(self):
from zope.interface.verify import verifyObject
+
from zope.configuration.config import IDirectivesContext
verifyObject(IDirectivesContext, self._makeOne())
@@ -1484,6 +1500,7 @@ class Test_defineSimpleDirective(unittest.TestCase):
def test_defaults(self):
from zope.interface import Interface
+
from zope.configuration.interfaces import IConfigurationContext as ICC
class ISchema(Interface):
@@ -1571,6 +1588,7 @@ class Test_defineGroupingDirective(unittest.TestCase):
def test_defaults(self):
from zope.interface import Interface
from zope.schema import Text
+
from zope.configuration.interfaces import IConfigurationContext as ICC
class ISchema(Interface):
@@ -1652,11 +1670,13 @@ class _ConformsToIComplexDirectiveContext(object):
def test_class_conforms_to_IComplexDirectiveContext(self):
from zope.interface.verify import verifyClass
+
from zope.configuration.config import IComplexDirectiveContext
verifyClass(IComplexDirectiveContext, self._getTargetClass())
def test_instance_conforms_to_IComplexDirectiveContext(self):
from zope.interface.verify import verifyObject
+
from zope.configuration.config import IComplexDirectiveContext
verifyObject(IComplexDirectiveContext, self._makeOne())
@@ -1860,9 +1880,10 @@ class Test_toargs(unittest.TestCase):
self.assertEqual(self._callFUT(context, ISchema, {}), {})
def test_w_empty_schema_w_data_no_kwargs_allowed(self):
- from zope.configuration.exceptions import ConfigurationError
from zope.interface import Interface
+ from zope.configuration.exceptions import ConfigurationError
+
class ISchema(Interface):
pass
context = FauxContext()
@@ -1894,6 +1915,7 @@ class Test_toargs(unittest.TestCase):
def test_w_field_missing_no_default(self):
from zope.interface import Interface
from zope.schema import Text
+
from zope.configuration.exceptions import ConfigurationError
class ISchema(Interface):
@@ -1928,6 +1950,7 @@ class Test_toargs(unittest.TestCase):
def test_w_invalid_value(self):
from zope.interface import Interface
from zope.schema import Int
+
from zope.configuration.exceptions import ConfigurationError
class ISchema(Interface):
diff --git a/src/zope/configuration/tests/test_docs.py b/src/zope/configuration/tests/test_docs.py
index 4cb8727..92e40eb 100644
--- a/src/zope/configuration/tests/test_docs.py
+++ b/src/zope/configuration/tests/test_docs.py
@@ -19,19 +19,19 @@ from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
-import re
+import doctest
import os.path
+import re
import unittest
-import doctest
import manuel.capture
import manuel.codeblock
import manuel.doctest
import manuel.ignore
import manuel.testing
-
from zope.testing import renormalizing
+
checker = renormalizing.RENormalizing([
# Python 3 unicode removed the "u".
(re.compile("u('.*?')"), r"\1"),
diff --git a/src/zope/configuration/tests/test_fields.py b/src/zope/configuration/tests/test_fields.py
index 8242211..998ca0e 100644
--- a/src/zope/configuration/tests/test_fields.py
+++ b/src/zope/configuration/tests/test_fields.py
@@ -15,6 +15,7 @@
"""
import unittest
+
# pylint:disable=protected-access
@@ -66,6 +67,7 @@ class GlobalObjectTests(unittest.TestCase, _ConformsToIFromUnicode):
def test_fromUnicode_w_resolve_fails(self):
from zope.schema import ValidationError
+
from zope.configuration.config import ConfigurationError
class Context(object):
@@ -187,6 +189,7 @@ class TokensTests(unittest.TestCase, _ConformsToIFromUnicode):
def test_fromUnicode_invalid(self):
from zope.schema import Int
+
from zope.configuration.interfaces import InvalidToken
tok = self._makeOne(value_type=Int(min=0))
with self.assertRaises(InvalidToken) as exc:
diff --git a/src/zope/configuration/tests/test_name.py b/src/zope/configuration/tests/test_name.py
index 6fd1b99..474eeab 100644
--- a/src/zope/configuration/tests/test_name.py
+++ b/src/zope/configuration/tests/test_name.py
@@ -36,6 +36,7 @@ class Test_resolve(unittest.TestCase):
def test_importable_but_not_attr_of_parent(self):
import sys
+
import zope.configuration.tests as zct
self.assertFalse('notyet' in zct.__dict__)
mod = self._callFUT('zope.configuration.tests.notyet')
@@ -54,8 +55,8 @@ class Test_resolve(unittest.TestCase):
Complex)
def test_class_w_same_name_as_module(self):
- from zope.configuration.tests.samplepackage.NamedForClass \
- import NamedForClass
+ from zope.configuration.tests.samplepackage.NamedForClass import \
+ NamedForClass
self.assertIs(
self._callFUT(
'zope.configuration.tests.samplepackage.NamedForClass+'),
diff --git a/src/zope/configuration/tests/test_xmlconfig.py b/src/zope/configuration/tests/test_xmlconfig.py
index 6d180b8..48b6479 100644
--- a/src/zope/configuration/tests/test_xmlconfig.py
+++ b/src/zope/configuration/tests/test_xmlconfig.py
@@ -391,9 +391,10 @@ class Test_processxmlfile(unittest.TestCase):
def test_w_empty_xml(self):
from io import StringIO
+
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.xmlconfig import ZopeSAXParseException
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
@@ -405,8 +406,8 @@ class Test_processxmlfile(unittest.TestCase):
def test_w_valid_xml_fp(self):
# Integration test, really
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests.samplepackage import foo
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
@@ -436,6 +437,7 @@ class Test_openInOrPlain(unittest.TestCase):
def _makeFilename(self, fn):
import os
+
from zope.configuration.tests.samplepackage import __file__
return os.path.join(os.path.dirname(__file__), fn)
@@ -473,8 +475,8 @@ class Test_include(unittest.TestCase):
def test_neither_file_nor_files_passed_already_seen(self):
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests import samplepackage
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
context.package = samplepackage
@@ -489,9 +491,9 @@ class Test_include(unittest.TestCase):
def test_neither_file_nor_files_passed(self):
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
before_stack = context.stack[:]
@@ -511,11 +513,11 @@ class Test_include(unittest.TestCase):
self.assertIn(fqn, context._seen_files)
def test_w_file_passed(self):
+ from zope.configuration import tests
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
- from zope.configuration import tests
from zope.configuration.tests import simple
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
before_stack = context.stack[:]
@@ -549,9 +551,9 @@ class Test_include(unittest.TestCase):
def test_w_files_passed_and_package(self):
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
before_stack = context.stack[:]
@@ -609,8 +611,8 @@ class Test_exclude(unittest.TestCase):
self.assertIn(fqn, context._seen_files)
def test_w_file_passed(self):
- from zope.configuration.config import ConfigurationMachine
from zope.configuration import tests
+ from zope.configuration.config import ConfigurationMachine
context = ConfigurationMachine()
context.package = tests
fqn = _packageFile(tests, 'simple.zcml')
@@ -656,11 +658,11 @@ class Test_includeOverrides(unittest.TestCase):
return includeOverrides(*args, **kw)
def test_actions_have_parents_includepath(self):
+ from zope.configuration import tests
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
- from zope.configuration import tests
from zope.configuration.tests import simple
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
fqp = _packageFile(tests, 'configure.zcml')
registerCommonDirectives(context)
@@ -748,9 +750,9 @@ class Test_file(unittest.TestCase):
def test_wo_execute_w_context(self):
from zope.configuration import xmlconfig
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
context.package = samplepackage
registerCommonDirectives(context)
@@ -771,6 +773,7 @@ class Test_file(unittest.TestCase):
def test_w_execute(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests.samplepackage import foo
file_name = path("samplepackage", "configure.zcml")
@@ -814,8 +817,8 @@ class Test_string(unittest.TestCase):
def test_wo_execute_w_context(self):
from zope.configuration.config import ConfigurationMachine
- from zope.configuration.xmlconfig import registerCommonDirectives
from zope.configuration.tests.samplepackage import foo
+ from zope.configuration.xmlconfig import registerCommonDirectives
context = ConfigurationMachine()
registerCommonDirectives(context)
file_name = path("samplepackage", "configure.zcml")
@@ -850,14 +853,14 @@ class Test_string(unittest.TestCase):
class XMLConfigTests(unittest.TestCase):
def setUp(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
def tearDown(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
@@ -870,6 +873,7 @@ class XMLConfigTests(unittest.TestCase):
def test_ctor_w_global_context_missing(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests.samplepackage import foo
here = os.path.dirname(__file__)
@@ -906,8 +910,8 @@ class XMLConfigTests(unittest.TestCase):
def test_ctor_w_module(self):
from zope.configuration import xmlconfig
- from zope.configuration.tests.samplepackage import foo
from zope.configuration.tests import samplepackage
+ from zope.configuration.tests.samplepackage import foo
fqn = _packageFile(samplepackage, 'configure.zcml')
logger = LoggerStub()
with _Monkey(xmlconfig, logger=logger):
@@ -923,6 +927,7 @@ class XMLConfigTests(unittest.TestCase):
def test___call__(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
@@ -949,14 +954,14 @@ class XMLConfigTests(unittest.TestCase):
class Test_xmlconfig(unittest.TestCase):
def setUp(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
def tearDown(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
@@ -966,6 +971,7 @@ class Test_xmlconfig(unittest.TestCase):
def test_wo_testing_passed(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
@@ -995,6 +1001,7 @@ class Test_xmlconfig(unittest.TestCase):
def test_w_testing_passed(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
@@ -1026,14 +1033,14 @@ class Test_xmlconfig(unittest.TestCase):
class Test_testxmlconfig(unittest.TestCase):
def setUp(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
def tearDown(self):
- from zope.configuration.xmlconfig import _clearContext
from zope.configuration.tests.samplepackage.foo import data
+ from zope.configuration.xmlconfig import _clearContext
_clearContext()
del data[:]
@@ -1043,6 +1050,7 @@ class Test_testxmlconfig(unittest.TestCase):
def test_w_testing_passed(self):
import os
+
from zope.configuration import xmlconfig
from zope.configuration.tests import samplepackage
from zope.configuration.tests.samplepackage import foo
diff --git a/src/zope/configuration/tests/test_zopeconfigure.py b/src/zope/configuration/tests/test_zopeconfigure.py
index 92575f2..f5f34b2 100644
--- a/src/zope/configuration/tests/test_zopeconfigure.py
+++ b/src/zope/configuration/tests/test_zopeconfigure.py
@@ -31,6 +31,7 @@ class ZopeConfigureTests(unittest.TestCase):
def test_ctor_w_package(self):
import os
+
import zope.configuration.tests as zct
zc = self._makeOne(Context(), package=zct)
self.assertEqual(zc.basepath, os.path.dirname(zct.__file__))
diff --git a/src/zope/configuration/tests/unicode_all/__init__.py b/src/zope/configuration/tests/unicode_all/__init__.py
index c44dfed..994e0c3 100644
--- a/src/zope/configuration/tests/unicode_all/__init__.py
+++ b/src/zope/configuration/tests/unicode_all/__init__.py
@@ -1,5 +1,6 @@
from __future__ import unicode_literals
+
__all__ = ['foo']
foo = 'sentinel'
diff --git a/src/zope/configuration/tests/victim.py b/src/zope/configuration/tests/victim.py
index 5f33d5a..0c5b2fe 100644
--- a/src/zope/configuration/tests/victim.py
+++ b/src/zope/configuration/tests/victim.py
@@ -1,2 +1,3 @@
from __future__ import absolute_import
+
from zope.configuration.tests import bad # pylint:disable=unused-import
diff --git a/src/zope/configuration/xmlconfig.py b/src/zope/configuration/xmlconfig.py
index 5a8c586..3192f22 100644
--- a/src/zope/configuration/xmlconfig.py
+++ b/src/zope/configuration/xmlconfig.py
@@ -20,31 +20,33 @@ test_includeOverrides in tests/test_xmlconfig.py
__docformat__ = 'restructuredtext'
import errno
-from glob import glob
-import logging
import io
+import logging
import os
import sys
+from glob import glob
+from xml.sax import SAXParseException
from xml.sax import make_parser
+from xml.sax.handler import ContentHandler
+from xml.sax.handler import feature_namespaces
from xml.sax.xmlreader import InputSource
-from xml.sax.handler import ContentHandler, feature_namespaces
-from xml.sax import SAXParseException
from zope.interface import Interface
from zope.schema import NativeStringLine
+from zope.configuration._compat import reraise
from zope.configuration.config import ConfigurationMachine
-from zope.configuration.config import defineGroupingDirective
-from zope.configuration.config import defineSimpleDirective
from zope.configuration.config import GroupingContextDecorator
from zope.configuration.config import GroupingStackItem
+from zope.configuration.config import defineGroupingDirective
+from zope.configuration.config import defineSimpleDirective
from zope.configuration.config import resolveConflicts
from zope.configuration.exceptions import ConfigurationError
from zope.configuration.exceptions import ConfigurationWrapperError
from zope.configuration.fields import GlobalObject
from zope.configuration.zopeconfigure import IZopeConfigure
from zope.configuration.zopeconfigure import ZopeConfigure
-from zope.configuration._compat import reraise
+
__all__ = [
'ParserInfo',
diff --git a/src/zope/configuration/zopeconfigure.py b/src/zope/configuration/zopeconfigure.py
index 26c3b74..a21faa7 100644
--- a/src/zope/configuration/zopeconfigure.py
+++ b/src/zope/configuration/zopeconfigure.py
@@ -108,6 +108,7 @@ from zope.schema import BytesLine
from zope.configuration.config import GroupingContextDecorator
from zope.configuration.fields import GlobalObject
+
__all__ = [
'IZopeConfigure',
'ZopeConfigure',
diff --git a/tox.ini b/tox.ini
index b272d82..ccdf371 100644
--- a/tox.ini
+++ b/tox.ini
@@ -11,6 +11,7 @@ envlist =
py38
py39
py310
+ py311
pypy
pypy3
docs
@@ -29,15 +30,26 @@ extras =
[testenv:lint]
basepython = python3
skip_install = true
+commands =
+ isort --check-only --diff {toxinidir}/src {toxinidir}/setup.py
+ flake8 src setup.py
+ check-manifest
+ check-python-versions
deps =
- flake8
check-manifest
check-python-versions >= 0.19.1
wheel
+ flake8
+ isort
+
+[testenv:isort-apply]
+basepython = python3
+skip_install = true
+commands_pre =
+deps =
+ isort
commands =
- flake8 src setup.py
- check-manifest
- check-python-versions
+ isort {toxinidir}/src {toxinidir}/setup.py []
[testenv:docs]
basepython = python3
@@ -58,8 +70,8 @@ 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=99.5
+ coverage html --ignore-errors
+ coverage report --ignore-errors --show-missing --fail-under=99.5
[coverage:run]
branch = True