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)