diff --git a/CHANGES.rst b/CHANGES.rst
index edd1fb6..b1687df 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -9,6 +9,8 @@
   numeric and bytes fields, as well as ``URI``, ``DottedName``, and
   ``Id``.
 
+- Fix passing ``None`` as the description to a field constructor. See
+  `issue 69 <https://github.com/zopefoundation/zope.schema/issues/69>`_.
 
 4.7.0 (2018-09-11)
 ==================
diff --git a/src/zope/schema/_bootstrapfields.py b/src/zope/schema/_bootstrapfields.py
index 0cfa398..0ba053f 100644
--- a/src/zope/schema/_bootstrapfields.py
+++ b/src/zope/schema/_bootstrapfields.py
@@ -244,7 +244,9 @@ class Field(Attribute):
         # Fix leading whitespace that occurs when using multi-line
         # strings, but don't overwrite the original, we need to
         # preserve it (it could be a MessageID).
-        doc_description = '\n'.join(_DocStringHelpers.docstring_to_lines(description)[:-1])
+        doc_description = '\n'.join(
+            _DocStringHelpers.docstring_to_lines(description or u'')[:-1]
+        )
 
         if title:
             if doc_description:

When a field has no description (description=None) initialization fails
The recent changes broke the Plone-biuld (e.g. https://jenkins.plone.org/view/PLIPs/job/plip-py3/707)

```
Traceback (most recent call last):
  File "/home/jenkins/workspace/plip-py3/src/plone.supermodel/plone/supermodel/parser.py", line 72, in parse
    return _parse(source, policy)
  File "/home/jenkins/workspace/plip-py3/src/plone.supermodel/plone/supermodel/parser.py", line 161, in _parse
    baseFields
  File "/home/jenkins/workspace/plip-py3/src/plone.supermodel/plone/supermodel/parser.py", line 122, in readField
    field = handler.read(fieldElement)
  File "/home/jenkins/workspace/plip-py3/src/plone.supermodel/plone/supermodel/exportimport.py", line 136, in read
    field_instance = self._constructField(attributes)
  File "/home/jenkins/workspace/plip-py3/src/plone.supermodel/plone/supermodel/exportimport.py", line 81, in _constructField
    return self.klass(**attributes)
  File "/home/jenkins/workspace/plip-py3/src/zope.schema/src/zope/schema/_bootstrapfields.py", line 494, in __init__
    super(Text, self).__init__(*args, **kw)
  File "/home/jenkins/workspace/plip-py3/src/zope.schema/src/zope/schema/_bootstrapfields.py", line 476, in __init__
    super(MinMaxLen, self).__init__(**kw)
  File "/home/jenkins/workspace/plip-py3/src/zope.schema/src/zope/schema/_bootstrapfields.py", line 244, in __init__
    doc_description = '\n'.join(_DocStringHelpers.docstring_to_lines(description)[:-1])
  File "/home/jenkins/workspace/plip-py3/src/zope.schema/src/zope/schema/_bootstrapfields.py", line 133, in docstring_to_lines
    lines = docstring.expandtabs().splitlines()
plone.supermodel.parser.SupermodelParseError: 'NoneType' object has no attribute 'expandtabs'
```
diff --git a/src/zope/schema/tests/test__bootstrapfields.py b/src/zope/schema/tests/test__bootstrapfields.py
index 3932e85..c8bb2b0 100644
--- a/src/zope/schema/tests/test__bootstrapfields.py
+++ b/src/zope/schema/tests/test__bootstrapfields.py
@@ -486,6 +486,31 @@ class FieldTests(EqualityTestsMixin,
             """)
         )
 
+    def test_ctor_description_none(self):
+        # None values for description don't break the docs.
+        import textwrap
+
+        description = None
+
+        title = u'A title'
+
+        field = self._makeOne(title=title, description=description)
+
+        self.assertIs(field.title, title)
+        self.assertIs(field.description, description)
+
+        self.assertEqual(
+            field.getDoc(),
+            textwrap.dedent("""\
+            A title
+
+            :Implementation: :class:`zope.schema.Field`
+            :Read Only: False
+            :Required: True
+            :Default Value: None
+            """)
+        )
+
     def test_ctor_defaults(self):
 
         field = self._makeOne()

pip install -e .[test]
parse_log_pytest
pytest
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
six==1.17.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work
zope.event==4.6
zope.exceptions==4.6
zope.i18nmessageid==5.1.1
zope.interface==5.5.2
-e git+https://github.com/zopefoundation/zope.schema.git@b5964f548c8ecb87b0c8c3b3b1463cd478a05237#egg=zope.schema
zope.testing==5.0.1
zope.testrunner==5.6

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=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - six==1.17.0
      - zope-event==4.6
      - zope-exceptions==4.6
      - zope-i18nmessageid==5.1.1
      - zope-interface==5.5.2
      - zope-testing==5.0.1
      - zope-testrunner==5.6
prefix: /opt/conda/envs/zope.schema

src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_description_none
src/zope/schema/tests/test__bootstrapfields.py::test_suite
src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___get__ src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_w_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___not_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::ValidatedPropertyTests::test___set___w_missing_wo_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_not_ICAF_no_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___w_defaultFactory_w_ICAF_w_check src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_hit src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test___get___wo_defaultFactory_miss src/zope/schema/tests/test__bootstrapfields.py::DefaultPropertyTests::test__get___wo_defaultFactory_in_dict src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_bind src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_description_preserved src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_order_madness src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_both_title_and_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_w_title_wo_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_ctor_wo_title_w_description src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_constraint_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_defaultFactory_returning_missing_value src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_explicit_required_readonly_missingValue src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_getDoc src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_get_miss src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_no_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_query_miss_w_default src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_hit src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_set_readonly src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_fails src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_raises_StopValidation src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_raises_custom_exception src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_constraint_raises_custom_exception_no_overwrite src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_and_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_missing_not_required src/zope/schema/tests/test__bootstrapfields.py::FieldTests::test_validate_wrong_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::ContainerTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_collection_but_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_but_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_not_collection_not_iterable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test__validate_w_collections src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IterableTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_large src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_default_too_small src/zope/schema/tests/test__bootstrapfields.py::OrderableTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_long src/zope/schema/tests/test__bootstrapfields.py::MinMaxLenTests::test_validate_too_short src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_w_invalid_default src/zope/schema/tests/test__bootstrapfields.py::TextTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::TextLineTests::test_validate_wrong_types src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_constraint src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_normal src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_set_unchanged src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_already_set src/zope/schema/tests/test__bootstrapfields.py::PasswordTests::test_validate_unchanged_not_already_set src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test__validate_w_int src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::BoolTests::test_set_w_int src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::NumberTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::ComplexTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::RealTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_ctor_real_min_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::RealTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::RationalTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IntegralTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_ctor_defaults src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_hit src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_fromUnicode_miss src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_missing_value_no_min_or_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_min_and_max src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::IntTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test___eq___different_type src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test___eq___same_type_different_attrs src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test___eq___same_type_same_attrs src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test__validate_w_empty_schema src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test__validate_w_value_not_providing_schema src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test__validate_w_value_providing_schema src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test__validate_w_value_providing_schema_but_invalid_fields src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test__validate_w_value_providing_schema_but_missing_fields src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_bound_field_of_collection_with_choice src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_class_conforms_to_IObject src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_class_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_ctor_w_bad_schema src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_equal_instances_have_same_hash src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_getDoc src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_hash_across_unequal_instances src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_instance_conforms_to_IObject src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_instance_conforms_to_iface src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_instances_in_different_interfaces_not_equal src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_is_hashable src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_schema_defined_by_subclass src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_set_allows_IBOAE_subscr_to_replace_value src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_set_emits_IBOAE src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validate_not_required src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validate_required src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validate_w_cycles src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validate_w_cycles_collection_not_valid src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validate_w_cycles_object_not_valid src/zope/schema/tests/test__bootstrapfields.py::ObjectTests::test_validates_invariants_by_default
src/zope/schema/_bootstrapfields.py CHANGES.rst
src/zope/schema/_bootstrapfields.py CHANGES.rst