Source code for zope.schema._schema
##############################################################################
#
# Copyright (c) 2002 Zope Foundation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""Schema convenience functions
"""
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',
'getFieldsInOrder',
'getFieldNamesInOrder',
'getValidationErrors',
'getSchemaValidationErrors',
]
[docs]
def getFieldNames(schema):
"""Return a list of all the Field names in a schema.
"""
return list(getFields(schema).keys())
[docs]
def getFieldsInOrder(schema, _field_key=lambda x: x[1].order):
"""Return a list of (name, value) tuples in native schema order.
"""
return sorted(getFields(schema).items(), key=_field_key)
[docs]
def getFieldNamesInOrder(schema):
"""Return a list of all the Field names in a schema in schema order.
"""
return [name for name, field in getFieldsInOrder(schema)]
[docs]
def getValidationErrors(schema, value):
"""
Validate that *value* conforms to the schema interface *schema*.
This includes checking for any schema validation errors (using
`getSchemaValidationErrors`). If that succeeds, then we proceed to
check for any declared invariants.
Note that this does not include a check to see if the *value*
actually provides the given *schema*.
:return: A sequence of (name, `zope.interface.Invalid`) tuples,
where *name* is None if the error was from an invariant.
If the sequence is empty, there were no errors.
"""
schema_error_dict, invariant_errors = get_validation_errors(
schema,
value,
)
if not schema_error_dict and not invariant_errors:
# Valid! Yay!
return []
return (
list(schema_error_dict.items()) +
[(None, e) for e in invariant_errors]
)
[docs]
def getSchemaValidationErrors(schema, value):
"""
Validate that *value* conforms to the schema interface *schema*.
All :class:`zope.schema.interfaces.IField` members of the *schema*
are validated after being bound to *value*. (Note that we do not check for
arbitrary :class:`zope.interface.Attribute` members being present.)
:return: A sequence of (name, `ValidationError`) tuples. A non-empty
sequence indicates validation failed.
"""
items = get_schema_validation_errors(schema, value).items()
return items if isinstance(items, list) else list(items)