diff options
author | Michael Howitz <mh@gocept.com> | 2022-08-05 07:49:05 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-05 07:49:05 +0200 |
commit | d466d9e0a60f98a69657e3624b2cb8788c8a3da2 (patch) | |
tree | 448d5c05c36c39ae5587144c508fa5949a49c5b0 | |
parent | 1282a4a8d65fc53d66b01fe81c0f4b5c14f3b2f1 (diff) | |
download | zope-schema-d466d9e0a60f98a69657e3624b2cb8788c8a3da2.tar.gz |
Fix tox lint run + isort imports. (#114)
28 files changed, 259 insertions, 151 deletions
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3880d7f..f9f622d 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,7 +20,7 @@ jobs: - ubuntu config: # [Python version, tox env] - - ["3.8", "lint"] + - ["3.9", "lint"] - ["2.7", "py27"] - ["3.5", "py35"] - ["3.6", "py36"] @@ -28,12 +28,13 @@ jobs: - ["3.8", "py38"] - ["3.9", "py39"] - ["3.10", "py310"] - - ["pypy2", "pypy"] - - ["pypy3", "pypy3"] - - ["3.8", "docs"] - - ["3.8", "coverage"] + - ["pypy-2.7", "pypy"] + - ["pypy-3.7", "pypy3"] + - ["3.9", "docs"] + - ["3.9", "coverage"] runs-on: ${{ matrix.os }}-latest + 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 @@ -28,4 +28,5 @@ lib64 log/ parts/ pyvenv.cfg +testing.log var/ @@ -2,7 +2,7 @@ # https://github.com/zopefoundation/meta/tree/master/config/pure-python [meta] template = "pure-python" -commit-id = "cf84a7fa675ab233c640c6208423a700b8cc874d" +commit-id = "ae61f414cfef4e129d275679c6a76dc67b1a2c11" [python] with-pypy = true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..31d95f0 --- /dev/null +++ b/CONTRIBUTING.md @@ -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 --git a/MANIFEST.in b/MANIFEST.in index 421aed6..24cc0f4 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,6 @@ # Generated from: # https://github.com/zopefoundation/meta/tree/master/config/pure-python +include *.md include *.rst include *.txt include buildout.cfg @@ -13,3 +13,14 @@ ignore = docs/_build/html/_sources/* docs/_build/doctest/* docs/_static + +[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 @@ -19,7 +19,9 @@ """Setup for zope.schema package """ import os -from setuptools import setup, find_packages + +from setuptools import find_packages +from setuptools import setup def read(*rnames): diff --git a/src/zope/schema/__init__.py b/src/zope/schema/__init__.py index 7991016..537f775 100644 --- a/src/zope/schema/__init__.py +++ b/src/zope/schema/__init__.py @@ -13,8 +13,10 @@ ############################################################################## """Schema package constructor """ +from zope.schema._bootstrapinterfaces import NO_VALUE # Field APIs from zope.schema._field import ASCII +from zope.schema._field import URI from zope.schema._field import ASCIILine from zope.schema._field import Bool from zope.schema._field import Bytes @@ -58,22 +60,18 @@ from zope.schema._field import TextLine from zope.schema._field import Time from zope.schema._field import Timedelta from zope.schema._field import Tuple -from zope.schema._field import URI - # Schema APIs -from zope.schema._schema import getFields -from zope.schema._schema import getFieldsInOrder from zope.schema._schema import getFieldNames from zope.schema._schema import getFieldNamesInOrder -from zope.schema._schema import getValidationErrors +from zope.schema._schema import getFields +from zope.schema._schema import getFieldsInOrder from zope.schema._schema import getSchemaValidationErrors - +from zope.schema._schema import getValidationErrors # Acessor API from zope.schema.accessors import accessors - # Error API from zope.schema.interfaces import ValidationError -from zope.schema._bootstrapinterfaces import NO_VALUE + __all__ = [ 'ASCII', diff --git a/src/zope/schema/_bootstrapfields.py b/src/zope/schema/_bootstrapfields.py index 760ae3e..e54eb02 100644 --- a/src/zope/schema/_bootstrapfields.py +++ b/src/zope/schema/_bootstrapfields.py @@ -23,17 +23,16 @@ import threading import unicodedata from math import isinf +from zope.event import notify from zope.interface import Attribute -from zope.interface import Invalid from zope.interface import Interface -from zope.interface import providedBy +from zope.interface import Invalid from zope.interface import implementer +from zope.interface import providedBy from zope.interface.interface import InterfaceClass from zope.interface.interfaces import IInterface from zope.interface.interfaces import IMethod -from zope.event import notify - from zope.schema._bootstrapinterfaces import ConstraintNotSatisfied from zope.schema._bootstrapinterfaces import IBeforeObjectAssignedEvent from zope.schema._bootstrapinterfaces import IContextAwareDefaultFactory @@ -41,8 +40,8 @@ from zope.schema._bootstrapinterfaces import IFromBytes from zope.schema._bootstrapinterfaces import IFromUnicode from zope.schema._bootstrapinterfaces import IValidatable from zope.schema._bootstrapinterfaces import NotAContainer -from zope.schema._bootstrapinterfaces import NotAnIterator from zope.schema._bootstrapinterfaces import NotAnInterface +from zope.schema._bootstrapinterfaces import NotAnIterator from zope.schema._bootstrapinterfaces import RequiredMissing from zope.schema._bootstrapinterfaces import SchemaNotCorrectlyImplemented from zope.schema._bootstrapinterfaces import SchemaNotFullyImplemented @@ -54,10 +53,9 @@ from zope.schema._bootstrapinterfaces import TooShort from zope.schema._bootstrapinterfaces import TooSmall from zope.schema._bootstrapinterfaces import ValidationError from zope.schema._bootstrapinterfaces import WrongType - -from zope.schema._compat import text_type -from zope.schema._compat import integer_types from zope.schema._compat import PY2 +from zope.schema._compat import integer_types +from zope.schema._compat import text_type class _NotGiven(object): diff --git a/src/zope/schema/_bootstrapinterfaces.py b/src/zope/schema/_bootstrapinterfaces.py index 8bddae1..7bf45d5 100644 --- a/src/zope/schema/_bootstrapinterfaces.py +++ b/src/zope/schema/_bootstrapinterfaces.py @@ -21,6 +21,7 @@ from zope.interface.interfaces import IInterface from zope.schema._messageid import _ + # pylint:disable=inherit-non-class,keyword-arg-before-vararg, # pylint:disable=no-self-argument diff --git a/src/zope/schema/_compat.py b/src/zope/schema/_compat.py index 51a4716..45512a1 100644 --- a/src/zope/schema/_compat.py +++ b/src/zope/schema/_compat.py @@ -1,5 +1,6 @@ import sys + PY3 = sys.version_info[0] >= 3 PY2 = not PY3 diff --git a/src/zope/schema/_field.py b/src/zope/schema/_field.py index c5e8ba1..44f8880 100644 --- a/src/zope/schema/_field.py +++ b/src/zope/schema/_field.py @@ -21,21 +21,47 @@ except ImportError: # pragma: PY2 # Python 2 import collections as abc -from datetime import datetime +import re from datetime import date -from datetime import timedelta +from datetime import datetime from datetime import time -import re - +from datetime import timedelta from zope.interface import classImplements from zope.interface import classImplementsFirst -from zope.interface import implementer from zope.interface import implementedBy +from zope.interface import implementer from zope.interface.interfaces import IInterface - +from zope.schema._bootstrapfields import Bool +from zope.schema._bootstrapfields import Complex +from zope.schema._bootstrapfields import Container # API import for __init__ +from zope.schema._bootstrapfields import Decimal +from zope.schema._bootstrapfields import Field +from zope.schema._bootstrapfields import Int +from zope.schema._bootstrapfields import Integral +from zope.schema._bootstrapfields import \ + InvalidDecimalLiteral # noqa: reexport +from zope.schema._bootstrapfields import Iterable +from zope.schema._bootstrapfields import MinMaxLen +from zope.schema._bootstrapfields import Number +from zope.schema._bootstrapfields import Object +from zope.schema._bootstrapfields import Orderable +from zope.schema._bootstrapfields import Password +from zope.schema._bootstrapfields import Rational +from zope.schema._bootstrapfields import Real +from zope.schema._bootstrapfields import Text +from zope.schema._bootstrapfields import TextLine +from zope.schema._bootstrapfields import _NotGiven +from zope.schema._compat import PY3 +from zope.schema._compat import binary_type +from zope.schema._compat import make_binary +from zope.schema._compat import string_types +from zope.schema._compat import text_type +from zope.schema.fieldproperty import FieldProperty from zope.schema.interfaces import IASCII +from zope.schema.interfaces import IURI +from zope.schema.interfaces import ConstraintNotSatisfied from zope.schema.interfaces import IASCIILine from zope.schema.interfaces import IBaseVocabulary from zope.schema.interfaces import IBool @@ -57,25 +83,29 @@ from zope.schema.interfaces import IFromBytes from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFrozenSet from zope.schema.interfaces import IId -from zope.schema.interfaces import IIterable from zope.schema.interfaces import IInt from zope.schema.interfaces import IIntegral from zope.schema.interfaces import IInterfaceField +from zope.schema.interfaces import IIterable from zope.schema.interfaces import IList -from zope.schema.interfaces import IMinMaxLen from zope.schema.interfaces import IMapping +from zope.schema.interfaces import IMinMaxLen from zope.schema.interfaces import IMutableMapping from zope.schema.interfaces import IMutableSequence from zope.schema.interfaces import INativeString from zope.schema.interfaces import INativeStringLine -from zope.schema.interfaces import IObject from zope.schema.interfaces import INumber +from zope.schema.interfaces import InvalidDottedName +from zope.schema.interfaces import InvalidId +from zope.schema.interfaces import InvalidURI +from zope.schema.interfaces import InvalidValue +from zope.schema.interfaces import IObject from zope.schema.interfaces import IPassword from zope.schema.interfaces import IPythonIdentifier -from zope.schema.interfaces import IReal from zope.schema.interfaces import IRational -from zope.schema.interfaces import ISet +from zope.schema.interfaces import IReal from zope.schema.interfaces import ISequence +from zope.schema.interfaces import ISet from zope.schema.interfaces import ISource from zope.schema.interfaces import ISourceText from zope.schema.interfaces import IText @@ -83,49 +113,15 @@ from zope.schema.interfaces import ITextLine from zope.schema.interfaces import ITime from zope.schema.interfaces import ITimedelta from zope.schema.interfaces import ITuple -from zope.schema.interfaces import IURI - +from zope.schema.interfaces import NotAnInterface +from zope.schema.interfaces import NotUnique from zope.schema.interfaces import ValidationError -from zope.schema.interfaces import InvalidValue -from zope.schema.interfaces import WrongType from zope.schema.interfaces import WrongContainedType -from zope.schema.interfaces import NotUnique -from zope.schema.interfaces import NotAnInterface -from zope.schema.interfaces import InvalidURI -from zope.schema.interfaces import InvalidId -from zope.schema.interfaces import InvalidDottedName -from zope.schema.interfaces import ConstraintNotSatisfied - -from zope.schema._bootstrapfields import Field -from zope.schema._bootstrapfields import Complex -from zope.schema._bootstrapfields import Container # API import for __init__ -from zope.schema._bootstrapfields import Iterable -from zope.schema._bootstrapfields import Orderable -from zope.schema._bootstrapfields import Text -from zope.schema._bootstrapfields import TextLine -from zope.schema._bootstrapfields import Bool -from zope.schema._bootstrapfields import Int -from zope.schema._bootstrapfields import Integral -from zope.schema._bootstrapfields import Number -from zope.schema._bootstrapfields import InvalidDecimalLiteral # noqa: reexport -from zope.schema._bootstrapfields import Decimal -from zope.schema._bootstrapfields import Password -from zope.schema._bootstrapfields import Rational -from zope.schema._bootstrapfields import Real -from zope.schema._bootstrapfields import MinMaxLen -from zope.schema._bootstrapfields import _NotGiven -from zope.schema._bootstrapfields import Object -from zope.schema.fieldproperty import FieldProperty -from zope.schema.vocabulary import getVocabularyRegistry +from zope.schema.interfaces import WrongType from zope.schema.vocabulary import SimpleVocabulary +from zope.schema.vocabulary import getVocabularyRegistry -from zope.schema._compat import text_type -from zope.schema._compat import string_types -from zope.schema._compat import binary_type -from zope.schema._compat import PY3 -from zope.schema._compat import make_binary - # Fix up bootstrap field types Field.title = FieldProperty(IField['title']) Field.description = FieldProperty(IField['description']) diff --git a/src/zope/schema/_schema.py b/src/zope/schema/_schema.py index bd9d780..b4010c1 100644 --- a/src/zope/schema/_schema.py +++ b/src/zope/schema/_schema.py @@ -14,10 +14,11 @@ """Schema convenience functions """ -from zope.schema._bootstrapfields import get_validation_errors from zope.schema._bootstrapfields import get_schema_validation_errors +from zope.schema._bootstrapfields import get_validation_errors from zope.schema._bootstrapfields import getFields + __all__ = [ 'getFieldNames', 'getFields', diff --git a/src/zope/schema/accessors.py b/src/zope/schema/accessors.py index 257eb7b..1b67e2d 100644 --- a/src/zope/schema/accessors.py +++ b/src/zope/schema/accessors.py @@ -34,9 +34,10 @@ Read accessors function as access method specifications and as field specifications. Write accessors are solely method specifications. """ -from zope.interface import providedBy, implementedBy -from zope.interface.interface import Method +from zope.interface import implementedBy +from zope.interface import providedBy from zope.interface.declarations import Declaration +from zope.interface.interface import Method class FieldReadAccessor(Method): diff --git a/src/zope/schema/fieldproperty.py b/src/zope/schema/fieldproperty.py index cf31382..1a9c928 100644 --- a/src/zope/schema/fieldproperty.py +++ b/src/zope/schema/fieldproperty.py @@ -14,14 +14,16 @@ """Computed attributes based on schema fields """ -from copy import copy import sys +from copy import copy + import zope.schema -from zope import interface from zope import event +from zope import interface from zope.schema import interfaces from zope.schema._bootstrapinterfaces import NO_VALUE + _marker = object() diff --git a/src/zope/schema/interfaces.py b/src/zope/schema/interfaces.py index 266bd20..809ca19 100644 --- a/src/zope/schema/interfaces.py +++ b/src/zope/schema/interfaces.py @@ -20,7 +20,6 @@ from zope.interface import Interface from zope.interface.common.mapping import IEnumerableMapping from zope.interface.interfaces import IInterface - from zope.schema._bootstrapfields import Bool from zope.schema._bootstrapfields import Complex from zope.schema._bootstrapfields import Decimal @@ -33,7 +32,6 @@ from zope.schema._bootstrapfields import Rational from zope.schema._bootstrapfields import Real from zope.schema._bootstrapfields import Text from zope.schema._bootstrapfields import TextLine - # Import from _bootstrapinterfaces only because other packages will expect # to find these interfaces here. from zope.schema._bootstrapinterfaces import ConstraintNotSatisfied @@ -41,8 +39,8 @@ from zope.schema._bootstrapinterfaces import IBeforeObjectAssignedEvent from zope.schema._bootstrapinterfaces import IContextAwareDefaultFactory from zope.schema._bootstrapinterfaces import IFromBytes from zope.schema._bootstrapinterfaces import IFromUnicode -from zope.schema._bootstrapinterfaces import IValidatable from zope.schema._bootstrapinterfaces import InvalidValue +from zope.schema._bootstrapinterfaces import IValidatable from zope.schema._bootstrapinterfaces import LenOutOfBounds from zope.schema._bootstrapinterfaces import NotAContainer from zope.schema._bootstrapinterfaces import NotAnInterface @@ -61,11 +59,10 @@ from zope.schema._bootstrapinterfaces import TooSmall from zope.schema._bootstrapinterfaces import ValidationError from zope.schema._bootstrapinterfaces import WrongContainedType from zope.schema._bootstrapinterfaces import WrongType - from zope.schema._compat import PY3 - from zope.schema._messageid import _ + __all__ = [ # Exceptions 'ConstraintNotSatisfied', @@ -1091,7 +1088,7 @@ class IVocabularyFactory(Interface): """ def __call__(context): - """The *context* provides a location that the vocabulary can make use of. + """The *context* provides a location that vocabulary can make use of. """ diff --git a/src/zope/schema/tests/__init__.py b/src/zope/schema/tests/__init__.py index f6718f0..46a4c7e 100644 --- a/src/zope/schema/tests/__init__.py +++ b/src/zope/schema/tests/__init__.py @@ -3,9 +3,10 @@ import re -from zope.schema._compat import PY3 from zope.testing import renormalizing +from zope.schema._compat import PY3 + def _make_transforms(patterns): return [(re.compile(pattern), repl) for pattern, repl in patterns] diff --git a/src/zope/schema/tests/states.py b/src/zope/schema/tests/states.py index dc3ca70..c7815d5 100644 --- a/src/zope/schema/tests/states.py +++ b/src/zope/schema/tests/states.py @@ -15,8 +15,10 @@ """ from zope.interface import implementer + from zope.schema import interfaces + # This table is based on information from the United States Postal Service: # http://www.usps.com/ncsc/lookups/abbreviations.html#states _states = { diff --git a/src/zope/schema/tests/test__bootstrapfields.py b/src/zope/schema/tests/test__bootstrapfields.py index 5994d39..d903ba0 100644 --- a/src/zope/schema/tests/test__bootstrapfields.py +++ b/src/zope/schema/tests/test__bootstrapfields.py @@ -13,8 +13,9 @@ ############################################################################## import decimal import doctest -import unittest import unicodedata +import unittest + # pylint:disable=protected-access,inherit-non-class,blacklisted-name # pylint:disable=attribute-defined-outside-init @@ -64,8 +65,8 @@ class InterfaceConformanceTestsMixin(object): self.assertIs(self._getTargetInterface(), implemented.__sro__[1]) def test_implements_consistent__sro__(self): - from zope.interface import ro from zope.interface import implementedBy + from zope.interface import ro __traceback_info__ = implementedBy(self._getTargetClass()).__sro__ self.assertTrue( ro.is_consistent(implementedBy(self._getTargetClass()))) @@ -379,8 +380,9 @@ class DefaultPropertyTests(unittest.TestCase): def test___get___w_defaultFactory_w_ICAF_w_check(self): from zope.interface import directlyProvides - from zope.schema._bootstrapinterfaces \ - import IContextAwareDefaultFactory + + from zope.schema._bootstrapinterfaces import \ + IContextAwareDefaultFactory _checked = [] def _check(inst, value): @@ -476,7 +478,9 @@ class FieldTests(EqualityTestsMixin, """) ) - field = self._makeOne(title=u'A title', description=u"""Multiline description. + field = self._makeOne( + title=u'A title', + description=u"""Multiline description. Some lines have leading whitespace. @@ -506,6 +510,7 @@ class FieldTests(EqualityTestsMixin, # The exact value of the description is preserved, # allowing for MessageID objects. import textwrap + from zope.i18nmessageid import MessageFactory msg_factory = MessageFactory('zope') @@ -1225,15 +1230,15 @@ class NumberTests(EqualityTestsMixin, return INumber def test_class_conforms_to_iface(self): - from zope.schema._bootstrapinterfaces import IFromUnicode from zope.schema._bootstrapinterfaces import IFromBytes + from zope.schema._bootstrapinterfaces import IFromUnicode verifyClass = super(NumberTests, self).test_class_conforms_to_iface() verifyClass(IFromUnicode, self._getTargetClass()) verifyClass(IFromBytes, self._getTargetClass()) def test_instance_conforms_to_iface(self): - from zope.schema._bootstrapinterfaces import IFromUnicode from zope.schema._bootstrapinterfaces import IFromBytes + from zope.schema._bootstrapinterfaces import IFromUnicode verifyObject = ( super(NumberTests, self).test_instance_conforms_to_iface()) verifyObject(IFromUnicode, self._makeOne()) @@ -1440,8 +1445,9 @@ class ObjectTests(EqualityTestsMixin, def _makeCycles(self): from zope.interface import Interface from zope.interface import implementer - from zope.schema import Object + from zope.schema import List + from zope.schema import Object from zope.schema._messageid import _ class IUnit(Interface): @@ -1486,11 +1492,13 @@ class ObjectTests(EqualityTestsMixin, def test_class_conforms_to_IObject(self): from zope.interface.verify import verifyClass + from zope.schema.interfaces import IObject verifyClass(IObject, self._getTargetClass()) def test_instance_conforms_to_IObject(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import IObject verifyObject(IObject, self._makeOne()) @@ -1514,8 +1522,8 @@ class ObjectTests(EqualityTestsMixin, objf.validate(object()) # doesn't raise def test__validate_w_value_not_providing_schema(self): - from zope.schema.interfaces import SchemaNotProvided from zope.schema._bootstrapfields import Text + from zope.schema.interfaces import SchemaNotProvided schema = self._makeSchema(foo=Text(), bar=Text()) objf = self._makeOne(schema) bad_value = object() @@ -1529,9 +1537,10 @@ class ObjectTests(EqualityTestsMixin, def test__validate_w_value_providing_schema_but_missing_fields(self): from zope.interface import implementer - from zope.schema.interfaces import SchemaNotFullyImplemented - from zope.schema.interfaces import SchemaNotCorrectlyImplemented + from zope.schema._bootstrapfields import Text + from zope.schema.interfaces import SchemaNotCorrectlyImplemented + from zope.schema.interfaces import SchemaNotFullyImplemented schema = self._makeSchema(foo=Text(), bar=Text()) @implementer(schema) @@ -1576,11 +1585,12 @@ class ObjectTests(EqualityTestsMixin, def test__validate_w_value_providing_schema_but_invalid_fields(self): from zope.interface import implementer - from zope.schema.interfaces import SchemaNotCorrectlyImplemented - from zope.schema.interfaces import RequiredMissing - from zope.schema.interfaces import WrongType + from zope.schema._bootstrapfields import Text from zope.schema._compat import text_type + from zope.schema.interfaces import RequiredMissing + from zope.schema.interfaces import SchemaNotCorrectlyImplemented + from zope.schema.interfaces import WrongType schema = self._makeSchema(foo=Text(), bar=Text()) @implementer(schema) @@ -1617,6 +1627,7 @@ class ObjectTests(EqualityTestsMixin, def test__validate_w_value_providing_schema(self): from zope.interface import implementer + from zope.schema._bootstrapfields import Text from zope.schema._field import Choice @@ -1691,9 +1702,10 @@ class ObjectTests(EqualityTestsMixin, def test_set_emits_IBOAE(self): from zope.event import subscribers from zope.interface import implementer - from zope.schema.interfaces import IBeforeObjectAssignedEvent + from zope.schema._bootstrapfields import Text from zope.schema._field import Choice + from zope.schema.interfaces import IBeforeObjectAssignedEvent schema = self._makeSchema( foo=Text(), @@ -1722,6 +1734,7 @@ class ObjectTests(EqualityTestsMixin, def test_set_allows_IBOAE_subscr_to_replace_value(self): from zope.event import subscribers from zope.interface import implementer + from zope.schema._bootstrapfields import Text from zope.schema._field import Choice @@ -1756,12 +1769,13 @@ class ObjectTests(EqualityTestsMixin, self.assertEqual(log[-1].context, inst) def test_validates_invariants_by_default(self): - from zope.interface import invariant from zope.interface import Interface - from zope.interface import implementer from zope.interface import Invalid - from zope.schema import Text + from zope.interface import implementer + from zope.interface import invariant + from zope.schema import Bytes + from zope.schema import Text class ISchema(Interface): @@ -1840,15 +1854,18 @@ class ObjectTests(EqualityTestsMixin, def test_bound_field_of_collection_with_choice(self): # https://github.com/zopefoundation/zope.schema/issues/17 - from zope.interface import Interface, implementer from zope.interface import Attribute + from zope.interface import Interface + from zope.interface import implementer - from zope.schema import Choice, Object, Set + from zope.schema import Choice + from zope.schema import Object + from zope.schema import Set from zope.schema.fieldproperty import FieldProperty - from zope.schema.interfaces import IContextSourceBinder - from zope.schema.interfaces import WrongContainedType from zope.schema.interfaces import ConstraintNotSatisfied + from zope.schema.interfaces import IContextSourceBinder from zope.schema.interfaces import SchemaNotCorrectlyImplemented + from zope.schema.interfaces import WrongContainedType from zope.schema.vocabulary import SimpleVocabulary @implementer(IContextSourceBinder) @@ -1946,8 +1963,9 @@ class DummyInst(object): def test_suite(): - import zope.schema._bootstrapfields from zope.testing.renormalizing import IGNORE_EXCEPTION_MODULE_IN_PYTHON2 + + import zope.schema._bootstrapfields suite = unittest.defaultTestLoader.loadTestsFromName(__name__) suite.addTests(doctest.DocTestSuite( zope.schema._bootstrapfields, diff --git a/src/zope/schema/tests/test__bootstrapinterfaces.py b/src/zope/schema/tests/test__bootstrapinterfaces.py index 385fa1c..f7bdc56 100644 --- a/src/zope/schema/tests/test__bootstrapinterfaces.py +++ b/src/zope/schema/tests/test__bootstrapinterfaces.py @@ -13,6 +13,7 @@ ############################################################################## import unittest + try: compare = cmp except NameError: diff --git a/src/zope/schema/tests/test__field.py b/src/zope/schema/tests/test__field.py index e7864a5..5f25bb5 100644 --- a/src/zope/schema/tests/test__field.py +++ b/src/zope/schema/tests/test__field.py @@ -17,11 +17,11 @@ import unittest from zope.schema.tests.test__bootstrapfields import EqualityTestsMixin from zope.schema.tests.test__bootstrapfields import LenTestsMixin +from zope.schema.tests.test__bootstrapfields import NumberTests from zope.schema.tests.test__bootstrapfields import OrderableMissingValueMixin from zope.schema.tests.test__bootstrapfields import OrderableTestsMixin from zope.schema.tests.test__bootstrapfields import WrongTypeTestsMixin -from zope.schema.tests.test__bootstrapfields import NumberTests # pylint:disable=protected-access # pylint:disable=too-many-lines @@ -43,8 +43,8 @@ class BytesTests(EqualityTestsMixin, return IBytes def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_validate_wrong_types(self): @@ -160,8 +160,8 @@ class BytesLineTests(EqualityTestsMixin, return IBytesLine def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_validate_wrong_types(self): @@ -440,6 +440,7 @@ class TimedeltaTests(OrderableMissingValueMixin, def test_validate_required(self): from datetime import timedelta + from zope.schema.interfaces import RequiredMissing field = self._makeOne() field.validate(timedelta(minutes=15)) @@ -477,6 +478,7 @@ class TimeTests(OrderableMissingValueMixin, def test_validate_required(self): from datetime import time + from zope.schema.interfaces import RequiredMissing field = self._makeOne() field.validate(time(12, 15, 37)) @@ -585,8 +587,9 @@ class ChoiceTests(EqualityTestsMixin, def test_bind_w_voc_not_ICSB(self): from zope.interface import implementer - from zope.schema.interfaces import ISource + from zope.schema.interfaces import IBaseVocabulary + from zope.schema.interfaces import ISource @implementer(IBaseVocabulary) @implementer(ISource) @@ -601,6 +604,7 @@ class ChoiceTests(EqualityTestsMixin, def test_bind_w_voc_is_ICSB(self): from zope.interface import implementer + from zope.schema.interfaces import IContextSourceBinder from zope.schema.interfaces import ISource @@ -623,6 +627,7 @@ class ChoiceTests(EqualityTestsMixin, def test_bind_w_voc_is_ICSB_but_not_ISource(self): from zope.interface import implementer + from zope.schema.interfaces import IContextSourceBinder @implementer(IContextSourceBinder) @@ -750,6 +755,7 @@ class ChoiceTests(EqualityTestsMixin, def test__validate_source_is_ICSB_unbound(self): from zope.interface import implementer + from zope.schema.interfaces import IContextSourceBinder @implementer(IContextSourceBinder) @@ -762,8 +768,9 @@ class ChoiceTests(EqualityTestsMixin, def test__validate_source_is_ICSB_bound(self): from zope.interface import implementer - from zope.schema.interfaces import IContextSourceBinder + from zope.schema.interfaces import ConstraintNotSatisfied + from zope.schema.interfaces import IContextSourceBinder from zope.schema.tests.test_vocabulary import _makeSampleVocabulary @implementer(IContextSourceBinder) @@ -795,8 +802,8 @@ class URITests(EqualityTestsMixin, return IURI def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_validate_wrong_types(self): @@ -868,8 +875,8 @@ class PythonIdentifierTests(EqualityTestsMixin, return PythonIdentifier def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def _getTargetInterface(self): @@ -917,8 +924,8 @@ class DottedNameTests(EqualityTestsMixin, return IDottedName def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_ctor_defaults(self): @@ -1042,8 +1049,8 @@ class IdTests(EqualityTestsMixin, return IId def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_validate_wrong_types(self): @@ -1127,9 +1134,10 @@ class InterfaceFieldTests(EqualityTestsMixin, return IInterfaceField def test_validate_wrong_types(self): - from zope.interface.interfaces import IInterface from datetime import date + from zope.interface.interfaces import IInterface + field = self._makeOne() self.assertAllRaiseWrongType( field, @@ -1158,6 +1166,7 @@ class InterfaceFieldTests(EqualityTestsMixin, def test_validate_required(self): from zope.interface import Interface + from zope.schema.interfaces import RequiredMissing class DummyInterface(Interface): @@ -1258,9 +1267,9 @@ class CollectionTests(EqualityTestsMixin, self.assertEqual(bound.unique, True) def test__validate_wrong_contained_type(self): + from zope.schema._bootstrapfields import Text from zope.schema.interfaces import WrongContainedType from zope.schema.interfaces import WrongType - from zope.schema._bootstrapfields import Text text = Text() absc = self._makeOne(text) with self.assertRaises(WrongContainedType) as exc: @@ -1275,9 +1284,9 @@ class CollectionTests(EqualityTestsMixin, self.assertIs(wct.errors[0].expected_type, text._type) def test__validate_miss_uniqueness(self): + from zope.schema._bootstrapfields import Text from zope.schema.interfaces import NotUnique from zope.schema.interfaces import WrongType - from zope.schema._bootstrapfields import Text text = Text() absc = self._makeOne(text, True) @@ -1568,9 +1577,9 @@ class MappingTests(EqualityTestsMixin, self.assertRaises(RequiredMissing, field.validate, None) def test_validate_invalid_key_type(self): + from zope.schema._bootstrapfields import Int from zope.schema.interfaces import WrongContainedType from zope.schema.interfaces import WrongType - from zope.schema._bootstrapfields import Int field = self._makeOne(key_type=Int()) field.validate({}) field.validate({1: 'b', 2: 'd'}) @@ -1587,9 +1596,9 @@ class MappingTests(EqualityTestsMixin, self.assertIs(field.key_type._type, wct.errors[0].expected_type) def test_validate_invalid_value_type(self): + from zope.schema._bootstrapfields import Int from zope.schema.interfaces import WrongContainedType from zope.schema.interfaces import WrongType - from zope.schema._bootstrapfields import Int field = self._makeOne(value_type=Int()) field.validate({}) field.validate({'b': 1, 'd': 2}) @@ -1727,8 +1736,8 @@ class NativeStringTests(EqualityTestsMixin, return INativeString def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_fromBytes(self): @@ -1756,8 +1765,8 @@ class NativeStringLineTests(EqualityTestsMixin, return INativeStringLine def _getTargetInterfaces(self): - from zope.schema.interfaces import IFromUnicode from zope.schema.interfaces import IFromBytes + from zope.schema.interfaces import IFromUnicode return [self._getTargetInterface(), IFromUnicode, IFromBytes] def test_fromBytes(self): @@ -1790,6 +1799,7 @@ class StrippedNativeStringLineTests(NativeStringLineTests): def _makeSampleVocabulary(): from zope.interface import implementer + from zope.schema.interfaces import IVocabulary @implementer(IVocabulary) diff --git a/src/zope/schema/tests/test_accessors.py b/src/zope/schema/tests/test_accessors.py index 74bd0a2..531fe47 100644 --- a/src/zope/schema/tests/test_accessors.py +++ b/src/zope/schema/tests/test_accessors.py @@ -15,6 +15,7 @@ """ import unittest + # pylint:disable=inherit-non-class @@ -41,6 +42,7 @@ class FieldReadAccessorTests(unittest.TestCase): def test_ctor_created_inside_interface(self): from zope.interface import Interface + from zope.schema import Text field = Text(title=u'Hmm') @@ -63,6 +65,7 @@ class FieldReadAccessorTests(unittest.TestCase): from zope.interface import providedBy from zope.interface.interfaces import IAttribute from zope.interface.interfaces import IMethod + from zope.schema import Text # When wrapping a field that provides stuff, @@ -170,6 +173,7 @@ class FieldReadAccessorTests(unittest.TestCase): def test_set_readonly(self): from zope.interface import Interface + from zope.schema import Text field = Text(readonly=True) @@ -257,6 +261,7 @@ class FieldWriteAccessorTests(unittest.TestCase): def test_ctor_created_inside_interface(self): from zope.interface import Interface + from zope.schema import Text field = Text(title=u'Hmm') @@ -290,6 +295,7 @@ class Test_accessors(unittest.TestCase): def test_w_only_read_accessor(self): from zope.interface import Interface + from zope.schema import Text field = Text(title=u'Hmm', readonly=True) @@ -310,6 +316,7 @@ class Test_accessors(unittest.TestCase): def test_w_read_and_write_accessors(self): from zope.interface import Interface + from zope.schema import Text field = Text(title=u'Hmm') diff --git a/src/zope/schema/tests/test_fieldproperty.py b/src/zope/schema/tests/test_fieldproperty.py index d5d090b..492d258 100644 --- a/src/zope/schema/tests/test_fieldproperty.py +++ b/src/zope/schema/tests/test_fieldproperty.py @@ -266,11 +266,12 @@ class FieldPropertyTests(_Base, _Integration): self.assertEqual(_validated, ['123']) def test_field_event(self): - from zope.schema import Text - from zope.interface.verify import verifyObject from zope.event import subscribers - from zope.schema.interfaces import IFieldUpdatedEvent + from zope.interface.verify import verifyObject + + from zope.schema import Text from zope.schema.fieldproperty import FieldUpdatedEvent + from zope.schema.interfaces import IFieldUpdatedEvent log = [] subscribers.append(log.append) self.assertEqual(log, []) @@ -300,11 +301,12 @@ class FieldPropertyTests(_Base, _Integration): self.assertEqual(event.object, marker) def test_field_event_update(self): - from zope.schema import Text - from zope.interface.verify import verifyObject from zope.event import subscribers - from zope.schema.interfaces import IFieldUpdatedEvent + from zope.interface.verify import verifyObject + + from zope.schema import Text from zope.schema.fieldproperty import FieldUpdatedEvent + from zope.schema.interfaces import IFieldUpdatedEvent field = Text( __name__='testing', description=u'DESCRIPTION', @@ -588,9 +590,9 @@ class FieldPropertyStoredThroughFieldTests(_Base, _Integration): self.assertRaises(ValueError, setattr, foo, 'testing', '123') def test_field_event_update(self): - from zope.schema import Text - from zope.event import subscribers + + from zope.schema import Text from zope.schema.fieldproperty import FieldUpdatedEvent field = Text( __name__='testing', @@ -619,9 +621,9 @@ class FieldPropertyStoredThroughFieldTests(_Base, _Integration): def test_field_event(self): # fieldproperties are everywhere including in field themselfs # so event are triggered - from zope.schema import Text - from zope.event import subscribers + + from zope.schema import Text from zope.schema.fieldproperty import FieldUpdatedEvent log = [] subscribers.append(log.append) @@ -648,6 +650,7 @@ class FieldPropertyStoredThroughFieldTests(_Base, _Integration): def _getSchema(): from zope.interface import Interface + from zope.schema import Bytes from zope.schema import Float from zope.schema import Text @@ -666,8 +669,8 @@ class CreateFieldPropertiesTests(unittest.TestCase): """Testing ..fieldproperty.createFieldProperties.""" def test_creates_fieldproperties_on_class(self): - from zope.schema.fieldproperty import createFieldProperties from zope.schema.fieldproperty import FieldProperty + from zope.schema.fieldproperty import createFieldProperties schema = _getSchema() class Dummy(object): diff --git a/src/zope/schema/tests/test_interfaces.py b/src/zope/schema/tests/test_interfaces.py index ecfb561..249776f 100644 --- a/src/zope/schema/tests/test_interfaces.py +++ b/src/zope/schema/tests/test_interfaces.py @@ -22,11 +22,11 @@ class Test__is_field(unittest.TestCase): self.assertEqual(self._callFUT(object()), False) def test_w_normal_fields(self): - from zope.schema import Text from zope.schema import Bytes - from zope.schema import Int - from zope.schema import Float from zope.schema import Decimal + from zope.schema import Float + from zope.schema import Int + from zope.schema import Text self.assertEqual(self._callFUT(Text()), True) self.assertEqual(self._callFUT(Bytes()), True) self.assertEqual(self._callFUT(Int()), True) @@ -35,6 +35,7 @@ class Test__is_field(unittest.TestCase): def test_w_explicitly_provided(self): from zope.interface import directlyProvides + from zope.schema.interfaces import IField class Foo(object): @@ -62,11 +63,11 @@ class Test__fields(unittest.TestCase): self.assertEqual(self._callFUT([object()]), False) def test_w_fields(self): - from zope.schema import Text from zope.schema import Bytes - from zope.schema import Int - from zope.schema import Float from zope.schema import Decimal + from zope.schema import Float + from zope.schema import Int + from zope.schema import Text self.assertEqual(self._callFUT([Text()]), True) self.assertEqual(self._callFUT([Bytes()]), True) self.assertEqual(self._callFUT([Int()]), True) @@ -78,11 +79,11 @@ class Test__fields(unittest.TestCase): ) def test_w_mixed(self): - from zope.schema import Text from zope.schema import Bytes - from zope.schema import Int - from zope.schema import Float from zope.schema import Decimal + from zope.schema import Float + from zope.schema import Int + from zope.schema import Text self.assertEqual(self._callFUT([Text(), 0]), False) self.assertEqual( self._callFUT([Text(), Bytes(), Int(), Float(), Decimal(), 0]), @@ -93,6 +94,7 @@ class Test__fields(unittest.TestCase): """If class Bool is used as a schema itself, it must not be required. """ from zope.schema.interfaces import IBool + # treat IBool as schema with fields field = IBool.get("required") self.assertFalse(field.required) @@ -101,6 +103,7 @@ class Test__fields(unittest.TestCase): """If class Bool is used as a schema itself, it must default to False """ from zope.schema.interfaces import IBool + # treat IBool as schema with fields field = IBool.get("default") self.assertFalse(field.default) diff --git a/src/zope/schema/tests/test_schema.py b/src/zope/schema/tests/test_schema.py index e19dfeb..6172abe 100644 --- a/src/zope/schema/tests/test_schema.py +++ b/src/zope/schema/tests/test_schema.py @@ -19,6 +19,7 @@ import unittest def _makeSchema(): from zope.interface import Interface + from zope.schema import Bytes class ISchemaTest(Interface): @@ -160,6 +161,7 @@ class Test_getValidationErrors(unittest.TestCase): def test_schema_with_field_errors(self): from zope.interface import Interface + from zope.schema import Text from zope.schema.interfaces import SchemaNotFullyImplemented @@ -209,8 +211,8 @@ class Test_getSchemaValidationErrors(unittest.TestCase): return getSchemaValidationErrors(schema, object) def test_schema_wo_fields(self): - from zope.interface import Interface from zope.interface import Attribute + from zope.interface import Interface class INoFields(Interface): def method(): @@ -222,6 +224,7 @@ class Test_getSchemaValidationErrors(unittest.TestCase): def test_schema_with_fields_ok(self): from zope.interface import Interface + from zope.schema import Text class IWithFields(Interface): @@ -237,6 +240,7 @@ class Test_getSchemaValidationErrors(unittest.TestCase): def test_schema_with_missing_field(self): from zope.interface import Interface + from zope.schema import Text from zope.schema.interfaces import SchemaNotFullyImplemented @@ -253,6 +257,7 @@ class Test_getSchemaValidationErrors(unittest.TestCase): def test_schema_with_invalid_field(self): from zope.interface import Interface + from zope.schema import Int from zope.schema.interfaces import TooSmall diff --git a/src/zope/schema/tests/test_states.py b/src/zope/schema/tests/test_states.py index 7b81cc1..bc1d7a5 100644 --- a/src/zope/schema/tests/test_states.py +++ b/src/zope/schema/tests/test_states.py @@ -19,9 +19,9 @@ import unittest class StateSelectionTest(unittest.TestCase): def setUp(self): + from zope.schema.tests.states import StateVocabulary from zope.schema.vocabulary import _clear from zope.schema.vocabulary import getVocabularyRegistry - from zope.schema.tests.states import StateVocabulary _clear() vr = getVocabularyRegistry() vr.register("states", StateVocabulary) @@ -33,6 +33,7 @@ class StateSelectionTest(unittest.TestCase): def _makeSchema(self): from zope.interface import Interface + from zope.schema import Choice from zope.schema.tests.states import StateVocabulary @@ -63,6 +64,7 @@ class StateSelectionTest(unittest.TestCase): def test_default_presentation(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import IVocabulary schema = self._makeSchema() field = schema.getDescriptionFor("state1") @@ -72,6 +74,7 @@ class StateSelectionTest(unittest.TestCase): def test_contains(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import IVocabulary from zope.schema.tests.states import StateVocabulary vocab = StateVocabulary() @@ -91,6 +94,7 @@ class StateSelectionTest(unittest.TestCase): def test_prebound_vocabulary(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import IVocabulary schema = self._makeSchema() field = schema.getDescriptionFor("state3") diff --git a/src/zope/schema/tests/test_vocabulary.py b/src/zope/schema/tests/test_vocabulary.py index eef246b..24383df 100644 --- a/src/zope/schema/tests/test_vocabulary.py +++ b/src/zope/schema/tests/test_vocabulary.py @@ -27,11 +27,13 @@ class SimpleTermTests(unittest.TestCase): def test_class_conforms_to_ITokenizedTerm(self): from zope.interface.verify import verifyClass + from zope.schema.interfaces import ITokenizedTerm verifyClass(ITokenizedTerm, self._getTargetClass()) def test_instance_conforms_to_ITokenizedTerm(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import ITokenizedTerm verifyObject(ITokenizedTerm, self._makeOne('VALUE')) @@ -116,16 +118,19 @@ class SimpleVocabularyTests(unittest.TestCase): def test_class_conforms_to_IVocabularyTokenized(self): from zope.interface.verify import verifyClass + from zope.schema.interfaces import IVocabularyTokenized verifyClass(IVocabularyTokenized, self._getTargetClass()) def test_instance_conforms_to_IVocabularyTokenized(self): from zope.interface.verify import verifyObject + from zope.schema.interfaces import IVocabularyTokenized verifyObject(IVocabularyTokenized, self._makeOne(())) def test_ctor_additional_interfaces(self): from zope.interface import Interface + from zope.schema.vocabulary import SimpleTerm class IStupid(Interface): @@ -146,6 +151,7 @@ class SimpleVocabularyTests(unittest.TestCase): def test_fromValues(self): from zope.interface import Interface + from zope.schema.interfaces import ITokenizedTerm class IStupid(Interface): @@ -162,6 +168,7 @@ class SimpleVocabularyTests(unittest.TestCase): def test_fromItems(self): from zope.interface import Interface + from zope.schema.interfaces import ITokenizedTerm class IStupid(Interface): @@ -179,6 +186,7 @@ class SimpleVocabularyTests(unittest.TestCase): def test_fromItems_triples(self): from zope.interface import Interface + from zope.schema.interfaces import ITitledTokenizedTerm class IStupid(Interface): @@ -363,8 +371,9 @@ class TreeVocabularyTests(unittest.TestCase): self.assertTrue(ITitledTokenizedTerm.providedBy(term)) def test_implementation(self): - from zope.interface.verify import verifyObject from zope.interface.common.mapping import IEnumerableMapping + from zope.interface.verify import verifyObject + from zope.schema.interfaces import ITreeVocabulary from zope.schema.interfaces import IVocabulary from zope.schema.interfaces import IVocabularyTokenized @@ -689,8 +698,8 @@ class RegistryTests(unittest.TestCase): _clear() def test_setVocabularyRegistry(self): - from zope.schema.vocabulary import setVocabularyRegistry from zope.schema.vocabulary import getVocabularyRegistry + from zope.schema.vocabulary import setVocabularyRegistry r = _makeDummyRegistry() setVocabularyRegistry(r) self.assertTrue(getVocabularyRegistry() is r) @@ -706,6 +715,7 @@ class RegistryTests(unittest.TestCase): def _makeSampleVocabulary(): from zope.interface import implementer + from zope.schema.interfaces import IVocabulary class SampleTerm(object): @@ -29,15 +29,25 @@ 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 +commands_pre = +deps = + isort commands = - flake8 src setup.py - check-manifest - check-python-versions + isort {toxinidir}/src {toxinidir}/setup.py [] [testenv:docs] basepython = python3 |