diff --git a/CHANGES.rst b/CHANGES.rst
index 01bb7c1..9f9da33 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -58,6 +58,14 @@
   validating invariants. See `issue 16
   <https://github.com/zopefoundation/zope.schema/issues/16>`_.
 
+- Add new fields ``Mapping`` and ``MutableMapping``, corresponding to
+  the collections ABCs of the same name; ``Dict`` now extends and
+  specializes ``MutableMapping`` to only accept instances of ``dict``.
+
+- Add new fields ``Sequence`` and ``MutableSequence``, corresponding
+  to the collections ABCs of the same name; ``Tuple`` now extends
+  ``Sequence`` and ``List`` now extends ``MutableSequence``.
+
 4.5.0 (2017-07-10)
 ==================
 
diff --git a/docs/api.rst b/docs/api.rst
index 88b9c53..35bd2be 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -60,6 +60,7 @@ Collections
 .. autoclass:: zope.schema.interfaces.IContainer
 .. autoclass:: zope.schema.interfaces.ICollection
 .. autoclass:: zope.schema.interfaces.ISequence
+.. autoclass:: zope.schema.interfaces.IMutableSequence
 .. autoclass:: zope.schema.interfaces.IUnorderedCollection
 .. autoclass:: zope.schema.interfaces.IAbstractSet
 .. autoclass:: zope.schema.interfaces.IAbstractBag
@@ -160,7 +161,6 @@ Fields
 .. autoclass:: zope.schema.Decimal
    :no-show-inheritance:
 .. autoclass:: zope.schema.Dict
-   :no-show-inheritance:
 .. autoclass:: zope.schema.DottedName
    :no-show-inheritance:
 
@@ -177,6 +177,10 @@ Fields
 .. autoclass:: zope.schema.Iterable
    :no-show-inheritance:
 .. autoclass:: zope.schema.List
+.. autoclass:: zope.schema.Mapping
+   :no-show-inheritance:
+.. autoclass:: zope.schema.MutableMapping
+.. autoclass:: zope.schema.MutableSequence
 .. autoclass:: zope.schema.MinMaxLen
 .. autoclass:: zope.schema.NativeString
 .. autoclass:: zope.schema.NativeStringLine
@@ -186,6 +190,7 @@ Fields
 .. autoclass:: zope.schema.Password
    :no-show-inheritance:
 .. autoclass:: zope.schema.Set
+.. autoclass:: zope.schema.Sequence
 .. autoclass:: zope.schema.SourceText
    :no-show-inheritance:
 .. autoclass:: zope.schema.Text
diff --git a/src/zope/schema/__init__.py b/src/zope/schema/__init__.py
index f850724..895459b 100644
--- a/src/zope/schema/__init__.py
+++ b/src/zope/schema/__init__.py
@@ -34,6 +34,9 @@ from zope.schema._field import Int
 from zope.schema._field import InterfaceField
 from zope.schema._field import Iterable
 from zope.schema._field import List
+from zope.schema._field import Mapping
+from zope.schema._field import MutableMapping
+from zope.schema._field import MutableSequence
 from zope.schema._field import MinMaxLen
 from zope.schema._field import NativeString
 from zope.schema._field import NativeStringLine
@@ -41,6 +44,7 @@ from zope.schema._field import Object
 from zope.schema._field import Orderable
 from zope.schema._field import Password
 from zope.schema._field import Set
+from zope.schema._field import Sequence
 from zope.schema._field import SourceText
 from zope.schema._field import Text
 from zope.schema._field import TextLine
@@ -64,14 +68,52 @@ from zope.schema.accessors import accessors
 from zope.schema.interfaces import ValidationError
 from zope.schema._bootstrapinterfaces import NO_VALUE
 
-
-# pep 8 friendlyness
-ASCII, ASCIILine, Bool, Bytes, BytesLine, Choice, Container, Date, Datetime
-Decimal, Dict, DottedName, Field, Float, FrozenSet, Id, Int, InterfaceField
-Iterable, List, MinMaxLen, NativeString, NativeStringLine, Object, Orderable
-Password, Set, SourceText, Text, TextLine, Time, Timedelta, Tuple, URI
-getFields, getFieldsInOrder, getFieldNames, getFieldNamesInOrder,
-getValidationErrors, getSchemaValidationErrors
-accessors
-ValidationError
-NO_VALUE
+__all__ = [
+    'ASCII',
+    'ASCIILine',
+    'Bool',
+    'Bytes',
+    'BytesLine',
+    'Choice',
+    'Container',
+    'Date',
+    'Datetime',
+    'Decimal',
+    'Dict',
+    'DottedName',
+    'Field',
+    'Float',
+    'FrozenSet',
+    'Id',
+    'Int',
+    'InterfaceField',
+    'Iterable',
+    'List',
+    'Mapping',
+    'MutableMapping',
+    'MutableSequence',
+    'MinMaxLen',
+    'NativeString',
+    'NativeStringLine',
+    'Object',
+    'Orderable',
+    'Password',
+    'Set',
+    'Sequence',
+    'SourceText',
+    'Text',
+    'TextLine',
+    'Time',
+    'Timedelta',
+    'Tuple',
+    'URI',
+    'getFields',
+    'getFieldsInOrder',
+    'getFieldNames',
+    'getFieldNamesInOrder',
+    'getValidationErrors',
+    'getSchemaValidationErrors',
+    'accessors',
+    'ValidationError',
+    'NO_VALUE'
+]
diff --git a/src/zope/schema/_field.py b/src/zope/schema/_field.py
index 807ca48..9570ce8 100644
--- a/src/zope/schema/_field.py
+++ b/src/zope/schema/_field.py
@@ -15,6 +15,12 @@
 """
 __docformat__ = 'restructuredtext'
 
+try:
+    from collections import abc
+except ImportError: # pragma: no cover
+    # Python 2
+    import collections as abc
+
 from datetime import datetime
 from datetime import date
 from datetime import timedelta
@@ -54,9 +60,13 @@ from zope.schema.interfaces import IInt
 from zope.schema.interfaces import IInterfaceField
 from zope.schema.interfaces import IList
 from zope.schema.interfaces import IMinMaxLen
+from zope.schema.interfaces import IMapping
+from zope.schema.interfaces import IMutableMapping
+from zope.schema.interfaces import IMutableSequence
 from zope.schema.interfaces import IObject
 from zope.schema.interfaces import IPassword
 from zope.schema.interfaces import ISet
+from zope.schema.interfaces import ISequence
 from zope.schema.interfaces import ISource
 from zope.schema.interfaces import ISourceText
 from zope.schema.interfaces import IText
@@ -562,14 +572,34 @@ class AbstractCollection(MinMaxLen, Iterable):
             _validate_uniqueness(self, value)
 
 
+@implementer(ISequence)
+class Sequence(AbstractCollection):
+    """
+    A field representing an ordered sequence.
+
+    .. versionadded:: 4.6.0
+    """
+    _type = abc.Sequence
+
+
 @implementer(ITuple)
-class Tuple(AbstractCollection):
+class Tuple(Sequence):
     """A field representing a Tuple."""
     _type = tuple
 
 
+@implementer(IMutableSequence)
+class MutableSequence(Sequence):
+    """
+    A field representing a mutable sequence.
+
+    .. versionadded:: 4.6.0
+    """
+    _type = abc.MutableSequence
+
+
 @implementer(IList)
-class List(AbstractCollection):
+class List(MutableSequence):
     """A field representing a List."""
     _type = list
 
@@ -725,15 +755,19 @@ class BeforeObjectAssignedEvent(object):
         self.context = context
 
 
-@implementer(IDict)
-class Dict(MinMaxLen, Iterable):
-    """A field representing a Dict."""
-    _type = dict
+@implementer(IMapping)
+class Mapping(MinMaxLen, Iterable):
+    """
+    A field representing a mapping.
+
+    .. versionadded:: 4.6.0
+    """
+    _type = abc.Mapping
     key_type = None
     value_type = None
 
     def __init__(self, key_type=None, value_type=None, **kw):
-        super(Dict, self).__init__(**kw)
+        super(Mapping, self).__init__(**kw)
         # whine if key_type or value_type is not a field
         if key_type is not None and not IField.providedBy(key_type):
             raise ValueError("'key_type' must be field instance.")
@@ -743,7 +777,7 @@ class Dict(MinMaxLen, Iterable):
         self.value_type = value_type
 
     def _validate(self, value):
-        super(Dict, self)._validate(value)
+        super(Mapping, self)._validate(value)
         errors = []
         if self.value_type:
             errors = _validate_sequence(self.value_type, value.values(),
@@ -759,7 +793,7 @@ class Dict(MinMaxLen, Iterable):
 
     def bind(self, object):
         """See zope.schema._bootstrapinterfaces.IField."""
-        clone = super(Dict, self).bind(object)
+        clone = super(Mapping, self).bind(object)
         # binding value_type is necessary for choices with named vocabularies,
         # and possibly also for other fields.
         if clone.key_type is not None:
@@ -767,3 +801,19 @@ class Dict(MinMaxLen, Iterable):
         if clone.value_type is not None:
             clone.value_type = clone.value_type.bind(object)
         return clone
+
+
+@implementer(IMutableMapping)
+class MutableMapping(Mapping):
+    """
+    A field representing a mutable mapping.
+
+    .. versionadded:: 4.6.0
+    """
+    _type = abc.MutableMapping
+
+
+@implementer(IDict)
+class Dict(MutableMapping):
+    """A field representing a Dict."""
+    _type = dict
diff --git a/src/zope/schema/interfaces.py b/src/zope/schema/interfaces.py
index e6fe30d..a1c7f35 100644
--- a/src/zope/schema/interfaces.py
+++ b/src/zope/schema/interfaces.py
@@ -504,6 +504,14 @@ class ISequence(ICollection):
     """Abstract interface specifying that the value is ordered"""
 
 
+class IMutableSequence(ISequence):
+    """
+    Abstract interface specifying that the value is ordered and
+    mutable.
+
+    .. versionadded:: 4.6.0
+    """
+
 class IUnorderedCollection(ICollection):
     """Abstract interface specifying that the value cannot be ordered"""
 
@@ -529,7 +537,7 @@ class ITuple(ISequence):
     Python tuple."""
 
 
-class IList(ISequence):
+class IList(IMutableSequence):
     """Field containing a value that implements the API of a conventional
     Python list."""
 
@@ -583,14 +591,14 @@ class IBeforeObjectAssignedEvent(Interface):
     context = Attribute("The context object where the object will be "
                         "assigned to.")
 
+class IMapping(IMinMaxLen, IIterable, IContainer):
+    """
+    Field containing an instance of :class:`collections.Mapping`.
 
-class IDict(IMinMaxLen, IIterable, IContainer):
-    """Field containing a conventional dict.
-
-    The key_type and value_type fields allow specification
+    The *key_type* and *value_type* fields allow specification
     of restrictions for keys and values contained in the dict.
-    """
 
+    """
     key_type = Attribute(
         "key_type",
         _("Field keys must conform to the given type, expressed via a Field.")
@@ -603,6 +611,17 @@ class IDict(IMinMaxLen, IIterable, IContainer):
     )
 
 
+class IMutableMapping(IMapping):
+    """
+    Field containing an instance of :class:`collections.MutableMapping`.
+    """
+
+
+class IDict(IMutableMapping):
+    """Field containing a conventional dict.
+    """
+
+
 class ITerm(Interface):
     """Object representing a single value in a vocabulary."""
 

Schema fields don't work with PersistentList and Dict
In https://bugs.launchpad.net/zope.schema/+bug/131112, Damien Genet reported:

> `PersistentList` & `PersistentDict` aren't valid types for `List` & `Dict` schema fields. For instance the following code fails (where `IKLass` is a `zope.schema.List`) :

``` python
class Klass(Peristent):
    list = FieldProperty(IKlass['list'])

    def __init__(self):
        self.list = PersistentList ()
```

Damien attached a patch:  https://bugs.launchpad.net/zope.schema/+bug/131112/+attachment/128401/+files/_field.py.patch

@tseaver followed up:

> The intent of the patch looks reasonable, although it doesn't apply cleanly to the current zope.schema trunk. However, the patch needs to be extended with new tests showing the use of the new `PersistentList` / `PersistentDict` types.

diff --git a/src/zope/schema/tests/test__field.py b/src/zope/schema/tests/test__field.py
index 9327299..dd9bd14 100644
--- a/src/zope/schema/tests/test__field.py
+++ b/src/zope/schema/tests/test__field.py
@@ -1536,35 +1536,33 @@ class TupleTests(unittest.TestCase):
         self.assertRaises(TooLong, field.validate, (1, 2, 3))
 
 
-class ListTests(unittest.TestCase):
+class SequenceTests(unittest.TestCase):
 
     def _getTargetClass(self):
-        from zope.schema._field import List
-        return List
+        from zope.schema._field import Sequence
+        return Sequence
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import ISequence
+        return ISequence
 
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
-    def test_class_conforms_to_IList(self):
+    def test_class_conforms_to_iface(self):
         from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IList
-        verifyClass(IList, self._getTargetClass())
+        verifyClass(self._getTargetInterface(), self._getTargetClass())
 
     def test_instance_conforms_to_IList(self):
         from zope.interface.verify import verifyObject
-        from zope.schema.interfaces import IList
-        verifyObject(IList, self._makeOne())
+        verifyObject(self._getTargetInterface(), self._makeOne())
 
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
 
-
         field = self._makeOne()
-        self.assertRaises(WrongType, field.validate, u'')
-        self.assertRaises(WrongType, field.validate, b'')
         self.assertRaises(WrongType, field.validate, 1)
         self.assertRaises(WrongType, field.validate, 1.0)
-        self.assertRaises(WrongType, field.validate, ())
         self.assertRaises(WrongType, field.validate, {})
         self.assertRaises(WrongType, field.validate, set())
         self.assertRaises(WrongType, field.validate, frozenset())
@@ -1611,6 +1609,80 @@ class ListTests(unittest.TestCase):
         self.assertRaises(TooShort, field.validate, [])
         self.assertRaises(TooLong, field.validate, [1, 2, 3])
 
+    def test_sequence(self):
+        from zope.schema._field import abc
+
+        class Sequence(abc.Sequence):
+            def __getitem__(self, i):
+                raise AssertionError("Not implemented")
+            def __len__(self):
+                return 0
+
+        sequence = Sequence()
+        field = self._makeOne()
+        field.validate(sequence)
+
+    def test_mutable_sequence(self):
+        from zope.schema._field import abc
+
+        class MutableSequence(abc.MutableSequence):
+            def insert(self, item, ix):
+                raise AssertionError("not implemented")
+            def __getitem__(self, name):
+                raise AssertionError("not implemented")
+            def __iter__(self):
+                return iter(())
+            def __setitem__(self, name, value):
+                raise AssertionError("Not implemented")
+            def __len__(self):
+                return 0
+            __delitem__ = __getitem__
+
+
+        sequence = MutableSequence()
+        field = self._makeOne()
+        field.validate(sequence)
+
+class MutableSequenceTests(SequenceTests):
+
+    def _getTargetClass(self):
+        from zope.schema._field import MutableSequence
+        return MutableSequence
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IMutableSequence
+        return IMutableSequence
+
+    def test_validate_wrong_types(self):
+        from zope.schema.interfaces import WrongType
+        field = self._makeOne()
+        self.assertRaises(WrongType, field.validate, u'')
+        self.assertRaises(WrongType, field.validate, b'')
+        self.assertRaises(WrongType, field.validate, ())
+
+        super(MutableSequenceTests, self).test_validate_wrong_types()
+
+    def test_sequence(self):
+        from zope.schema.interfaces import WrongType
+        with self.assertRaises(WrongType):
+            super(MutableSequenceTests, self).test_sequence()
+
+
+class ListTests(MutableSequenceTests):
+
+    def _getTargetClass(self):
+        from zope.schema._field import List
+        return List
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IList
+        return IList
+
+    def test_mutable_sequence(self):
+        from zope.schema.interfaces import WrongType
+        with self.assertRaises(WrongType):
+            super(ListTests, self).test_mutable_sequence()
+
 
 class SetTests(unittest.TestCase):
 
@@ -2164,24 +2236,26 @@ class ObjectTests(unittest.TestCase):
         field.validate(inst)
 
 
-class DictTests(unittest.TestCase):
+class MappingTests(unittest.TestCase):
 
     def _getTargetClass(self):
-        from zope.schema._field import Dict
-        return Dict
+        from zope.schema._field import Mapping
+        return Mapping
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IMapping
+        return IMapping
 
     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)
 
-    def test_class_conforms_to_IDict(self):
+    def test_class_conforms_to_iface(self):
         from zope.interface.verify import verifyClass
-        from zope.schema.interfaces import IDict
-        verifyClass(IDict, self._getTargetClass())
+        verifyClass(self._getTargetInterface(), self._getTargetClass())
 
-    def test_instance_conforms_to_IDict(self):
+    def test_instance_conforms_to_iface(self):
         from zope.interface.verify import verifyObject
-        from zope.schema.interfaces import IDict
-        verifyObject(IDict, self._makeOne())
+        verifyObject(self._getTargetInterface(), self._makeOne())
 
     def test_ctor_key_type_not_IField(self):
         self.assertRaises(ValueError, self._makeOne, key_type=object())
@@ -2192,7 +2266,6 @@ class DictTests(unittest.TestCase):
     def test_validate_wrong_types(self):
         from zope.schema.interfaces import WrongType
 
-
         field = self._makeOne()
         self.assertRaises(WrongType, field.validate, u'')
         self.assertRaises(WrongType, field.validate, u'')
@@ -2279,6 +2352,74 @@ class DictTests(unittest.TestCase):
         self.assertEqual(field2.key_type.context, context)
         self.assertEqual(field2.value_type.context, context)
 
+    def test_mapping(self):
+        from zope.schema._field import abc
+
+        class Mapping(abc.Mapping):
+
+            def __getitem__(self, name):
+                raise AssertionError("not implemented")
+            def __iter__(self):
+                return iter(())
+            def __len__(self):
+                return 0
+
+
+        mm = Mapping()
+        field = self._makeOne()
+        field.validate(mm)
+
+    def test_mutable_mapping(self):
+        from zope.schema._field import abc
+
+        class MutableMapping(abc.MutableMapping):
+
+            def __getitem__(self, name):
+                raise AssertionError("not implemented")
+            def __iter__(self):
+                return iter(())
+            def __setitem__(self, name, value):
+                raise AssertionError("Not implemented")
+            def __len__(self):
+                return 0
+            __delitem__ = __getitem__
+
+        mm = MutableMapping()
+        field = self._makeOne()
+        field.validate(mm)
+
+
+class MutableMappingTests(MappingTests):
+
+    def _getTargetClass(self):
+        from zope.schema._field import MutableMapping
+        return MutableMapping
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IMutableMapping
+        return IMutableMapping
+
+    def test_mapping(self):
+        from zope.schema.interfaces import WrongType
+        with self.assertRaises(WrongType):
+            super(MutableMappingTests, self).test_mapping()
+
+
+class DictTests(MutableMappingTests):
+
+    def _getTargetClass(self):
+        from zope.schema._field import Dict
+        return Dict
+
+    def _getTargetInterface(self):
+        from zope.schema.interfaces import IDict
+        return IDict
+
+    def test_mutable_mapping(self):
+        from zope.schema.interfaces import WrongType
+        with self.assertRaises(WrongType):
+            super(DictTests, self).test_mutable_mapping()
+
 
 class DummyInstance(object):
     pass

pip install -e .[test]
parse_log_pytest
pytest
pytest
3.7
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///croot/attrs_1668696182826/work
certifi @ file:///croot/certifi_1671487769961/work/certifi
flit_core @ file:///opt/conda/conda-bld/flit-core_1644941570762/work/source/flit_core
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1648562407465/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
packaging @ file:///croot/packaging_1671697413597/work
pluggy @ file:///tmp/build/80754af9/pluggy_1648042572264/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pytest==7.1.2
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
typing_extensions @ file:///croot/typing_extensions_1669924550328/work
zipp @ file:///croot/zipp_1672387121353/work
zope.event==5.0
zope.exceptions==5.1
zope.interface==6.4.post2
-e git+https://github.com/zopefoundation/zope.schema.git@f169f305112c3830f1ad84af72449aea64a2d52e#egg=zope.schema
zope.testing==5.0.1
zope.testrunner==6.5

name: zope.schema
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=22.1.0=py37h06a4308_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - flit-core=3.6.0=pyhd3eb1b0_0
  - importlib-metadata=4.11.3=py37h06a4308_0
  - importlib_metadata=4.11.3=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=22.0=py37h06a4308_0
  - pip=22.3.1=py37h06a4308_0
  - pluggy=1.0.0=py37h06a4308_1
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=7.1.2=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py37h06a4308_0
  - typing_extensions=4.4.0=py37h06a4308_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.11.0=py37h06a4308_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - zope-event==5.0
      - zope-exceptions==5.1
      - zope-interface==6.4.post2
      - zope-testing==5.0.1
      - zope-testrunner==6.5
prefix: /opt/conda/envs/zope.schema

src/zope/schema/tests/test__field.py::SequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::SequenceTests::test_instance_conforms_to_IList src/zope/schema/tests/test__field.py::SequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_sequence src/zope/schema/tests/test__field.py::SequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_required src/zope/schema/tests/test__field.py::SequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableSequenceTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableSequenceTests::test_instance_conforms_to_IList src/zope/schema/tests/test__field.py::MutableSequenceTests::test_mutable_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_sequence src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_required src/zope/schema/tests/test__field.py::MutableSequenceTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ListTests::test_mutable_sequence src/zope/schema/tests/test__field.py::ListTests::test_sequence src/zope/schema/tests/test__field.py::MappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MappingTests::test_mapping src/zope/schema/tests/test__field.py::MappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_required src/zope/schema/tests/test__field.py::MappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::MutableMappingTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::MutableMappingTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::MutableMappingTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::MutableMappingTests::test_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_mutable_mapping src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_not_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_required src/zope/schema/tests/test__field.py::MutableMappingTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DictTests::test_mapping src/zope/schema/tests/test__field.py::DictTests::test_mutable_mapping
src/zope/schema/tests/test__field.py::BytesTests::test_class_conforms_to_IBytes src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::BytesTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::BytesTests::test_instance_conforms_to_IBytes src/zope/schema/tests/test__field.py::BytesTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_required src/zope/schema/tests/test__field.py::BytesTests::test_validate_w_invalid_default src/zope/schema/tests/test__field.py::BytesTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIITests::test__validate_empty src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_hit src/zope/schema/tests/test__field.py::ASCIITests::test__validate_non_empty_miss src/zope/schema/tests/test__field.py::ASCIITests::test_class_conforms_to_IASCII src/zope/schema/tests/test__field.py::ASCIITests::test_instance_conforms_to_IASCII src/zope/schema/tests/test__field.py::ASCIITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::BytesLineTests::test_class_conforms_to_IBytesLine src/zope/schema/tests/test__field.py::BytesLineTests::test_constraint src/zope/schema/tests/test__field.py::BytesLineTests::test_instance_conforms_to_IBytesLine src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_not_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_required src/zope/schema/tests/test__field.py::BytesLineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ASCIILineTests::test_class_conforms_to_IASCIILine src/zope/schema/tests/test__field.py::ASCIILineTests::test_constraint src/zope/schema/tests/test__field.py::ASCIILineTests::test_instance_conforms_to_IASCIILine src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_not_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_required src/zope/schema/tests/test__field.py::ASCIILineTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FloatTests::test_class_conforms_to_IFloat src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::FloatTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::FloatTests::test_instance_conforms_to_IFloat src/zope/schema/tests/test__field.py::FloatTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_min src/zope/schema/tests/test__field.py::FloatTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::FloatTests::test_validate_not_required src/zope/schema/tests/test__field.py::FloatTests::test_validate_required src/zope/schema/tests/test__field.py::DecimalTests::test_class_conforms_to_IDecimal src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::DecimalTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::DecimalTests::test_instance_conforms_to_IDecimal src/zope/schema/tests/test__field.py::DecimalTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min src/zope/schema/tests/test__field.py::DecimalTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::DecimalTests::test_validate_not_required src/zope/schema/tests/test__field.py::DecimalTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test_class_conforms_to_IDatetime src/zope/schema/tests/test__field.py::DatetimeTests::test_instance_conforms_to_IDatetime src/zope/schema/tests/test__field.py::DatetimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_required src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DatetimeTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DateTests::test_class_conforms_to_IDate src/zope/schema/tests/test__field.py::DateTests::test_instance_conforms_to_IDate src/zope/schema/tests/test__field.py::DateTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::DateTests::test_validate_not_required src/zope/schema/tests/test__field.py::DateTests::test_validate_required src/zope/schema/tests/test__field.py::DateTests::test_validate_w_max src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min src/zope/schema/tests/test__field.py::DateTests::test_validate_w_min_and_max src/zope/schema/tests/test__field.py::DateTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::TimedeltaTests::test_class_conforms_to_ITimedelta src/zope/schema/tests/test__field.py::TimedeltaTests::test_instance_conforms_to_ITimedelta src/zope/schema/tests/test__field.py::TimedeltaTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimedeltaTests::test_validate_required src/zope/schema/tests/test__field.py::TimeTests::test_class_conforms_to_ITime src/zope/schema/tests/test__field.py::TimeTests::test_instance_conforms_to_ITime src/zope/schema/tests/test__field.py::TimeTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_min src/zope/schema/tests/test__field.py::TimeTests::test_validate_min_and_max src/zope/schema/tests/test__field.py::TimeTests::test_validate_not_required src/zope/schema/tests/test__field.py::TimeTests::test_validate_required src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_int src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_mixed src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_bound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_source_is_ICSB_unbound src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_string src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_tuple src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test__validate_w_named_vocabulary_invalid src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_is_ICSB_but_not_ISource src/zope/schema/tests/test__field.py::ChoiceTests::test_bind_w_voc_not_ICSB src/zope/schema/tests/test__field.py::ChoiceTests::test_class_conforms_to_IChoice src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_both_vocabulary_and_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_source src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_invalid_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_named_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_preconstructed_vocabulary src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_unicode_non_ascii_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_w_values src/zope/schema/tests/test__field.py::ChoiceTests::test_ctor_wo_values_vocabulary_or_source src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_hit src/zope/schema/tests/test__field.py::ChoiceTests::test_fromUnicode_miss src/zope/schema/tests/test__field.py::ChoiceTests::test_instance_conforms_to_IChoice src/zope/schema/tests/test__field.py::URITests::test_class_conforms_to_IURI src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::URITests::test_fromUnicode_ok src/zope/schema/tests/test__field.py::URITests::test_instance_conforms_to_IURI src/zope/schema/tests/test__field.py::URITests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::URITests::test_validate_not_required src/zope/schema/tests/test__field.py::URITests::test_validate_required src/zope/schema/tests/test__field.py::URITests::test_validate_wrong_types src/zope/schema/tests/test__field.py::DottedNameTests::test_class_conforms_to_IDottedName src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_defaults src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_max_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_ctor_min_dots_valid src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::DottedNameTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::DottedNameTests::test_instance_conforms_to_IDottedName src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_a_dotted_name src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_not_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_required src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_max_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_w_min_dots src/zope/schema/tests/test__field.py::DottedNameTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::IdTests::test_class_conforms_to_IId src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_dotted_name_ok src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_invalid src/zope/schema/tests/test__field.py::IdTests::test_fromUnicode_url_ok src/zope/schema/tests/test__field.py::IdTests::test_instance_conforms_to_IId src/zope/schema/tests/test__field.py::IdTests::test_validate_not_a_uri src/zope/schema/tests/test__field.py::IdTests::test_validate_not_required src/zope/schema/tests/test__field.py::IdTests::test_validate_required src/zope/schema/tests/test__field.py::IdTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_class_conforms_to_IInterfaceField src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_instance_conforms_to_IInterfaceField src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_not_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_required src/zope/schema/tests/test__field.py::InterfaceFieldTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::AbstractCollectionTests::test__validate_miss_uniqueness src/zope/schema/tests/test__field.py::AbstractCollectionTests::test__validate_wrong_contained_type src/zope/schema/tests/test__field.py::AbstractCollectionTests::test_bind_w_value_Type src/zope/schema/tests/test__field.py::AbstractCollectionTests::test_bind_wo_value_Type src/zope/schema/tests/test__field.py::AbstractCollectionTests::test_ctor_defaults src/zope/schema/tests/test__field.py::AbstractCollectionTests::test_ctor_explicit src/zope/schema/tests/test__field.py::AbstractCollectionTests::test_ctor_w_non_field_value_type src/zope/schema/tests/test__field.py::TupleTests::test_class_conforms_to_ITuple src/zope/schema/tests/test__field.py::TupleTests::test_instance_conforms_to_ITuple src/zope/schema/tests/test__field.py::TupleTests::test_validate_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::TupleTests::test_validate_not_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_required src/zope/schema/tests/test__field.py::TupleTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ListTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::ListTests::test_instance_conforms_to_IList src/zope/schema/tests/test__field.py::ListTests::test_validate_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length src/zope/schema/tests/test__field.py::ListTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::ListTests::test_validate_not_required src/zope/schema/tests/test__field.py::ListTests::test_validate_required src/zope/schema/tests/test__field.py::ListTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::SetTests::test_class_conforms_to_ISet src/zope/schema/tests/test__field.py::SetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::SetTests::test_instance_conforms_to_ISet src/zope/schema/tests/test__field.py::SetTests::test_validate_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length src/zope/schema/tests/test__field.py::SetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::SetTests::test_validate_not_required src/zope/schema/tests/test__field.py::SetTests::test_validate_required src/zope/schema/tests/test__field.py::SetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::FrozenSetTests::test_class_conforms_to_IFrozenSet src/zope/schema/tests/test__field.py::FrozenSetTests::test_ctor_disallows_unique src/zope/schema/tests/test__field.py::FrozenSetTests::test_instance_conforms_to_IFrozenSet src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_not_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_required src/zope/schema/tests/test__field.py::FrozenSetTests::test_validate_wrong_types src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_empty_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_not_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_invalid_fields src/zope/schema/tests/test__field.py::ObjectTests::test__validate_w_value_providing_schema_but_missing_fields src/zope/schema/tests/test__field.py::ObjectTests::test_class_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_ctor_w_bad_schema src/zope/schema/tests/test__field.py::ObjectTests::test_instance_conforms_to_IObject src/zope/schema/tests/test__field.py::ObjectTests::test_set_allows_IBOAE_subscr_to_replace_value src/zope/schema/tests/test__field.py::ObjectTests::test_set_emits_IBOAE src/zope/schema/tests/test__field.py::ObjectTests::test_validate_not_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_required src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_collection_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validate_w_cycles_object_not_valid src/zope/schema/tests/test__field.py::ObjectTests::test_validates_invariants_by_default src/zope/schema/tests/test__field.py::DictTests::test_bind_binds_key_and_value_types src/zope/schema/tests/test__field.py::DictTests::test_class_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_ctor_key_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_ctor_value_type_not_IField src/zope/schema/tests/test__field.py::DictTests::test_instance_conforms_to_iface src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_key_type src/zope/schema/tests/test__field.py::DictTests::test_validate_invalid_value_type src/zope/schema/tests/test__field.py::DictTests::test_validate_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length src/zope/schema/tests/test__field.py::DictTests::test_validate_min_length_and_max_length src/zope/schema/tests/test__field.py::DictTests::test_validate_not_required src/zope/schema/tests/test__field.py::DictTests::test_validate_required src/zope/schema/tests/test__field.py::DictTests::test_validate_wrong_types
src/zope/schema/_field.py CHANGES.rst docs/api.rst src/zope/schema/interfaces.py src/zope/schema/__init__.py
src/zope/schema/_field.py CHANGES.rst docs/api.rst src/zope/schema/interfaces.py src/zope/schema/__init__.py