Example #1
0
        def validate_invariants(self):
            '''Return <errors>'''
            errors = []

            obj = self.obj
            schema = obj.get_schema()

            # Descend into field invariants

            recurse = False
            try:
                recurse = schema.getTaggedValue('recurse-on-invariants')
            except KeyError:
                pass
            if recurse:
                for k, field in obj.iter_fields():
                    f = field.get(obj)
                    ef = self._validate_invariants_for_field(f, field)
                    if ef:
                        errors.append((k, ef))

            # Check own invariants

            try:
                ef = []
                schema.validateInvariants(obj, ef)
            except zope.interface.Invalid:
                errors.append((None, ef))

            return errors
        def validate_invariants(self):
            '''Return <errors>'''
            errors = []

            obj = self.obj
            schema = obj.get_schema()

            # Descend into field invariants
            
            recurse = False
            try:
                recurse = schema.getTaggedValue('recurse-on-invariants')
            except KeyError:
                pass
            if recurse:
                for k, field in obj.iter_fields():
                    f = field.get(obj)
                    ef = self._validate_invariants_for_field(f, field)
                    if ef:
                        errors.append((k, ef))

            # Check own invariants
            
            try:
                ef = []
                schema.validateInvariants(obj, ef)
            except zope.interface.Invalid:
                errors.append((None, ef))

            return errors
Example #3
0
def get_field_fieldset(field_id, schema):
    fieldsets = schema.getTaggedValue(FIELDSETS_KEY)
    for fieldset in fieldsets:
        if field_id in fieldset.fields:
            return fieldset
    else:
        return None
Example #4
0
        def validate_invariants(self, errors=[] ):
            '''Return <errors>'''
            #errors = []

            obj = self.obj
            schema = obj.get_schema()

            #log1.debug('\n\n IN VALIDATE INVARIANTS obj is %s\n\n', obj)
            # Descend into field invariants
            
            recurse = False
            try:
                recurse = schema.getTaggedValue('recurse-on-invariants')
            except KeyError:
                pass
            if recurse:
                for k, field in obj.iter_fields():
                    f = field.get(obj)
                    ef = self._validate_invariants_for_field(f, field)
                    #log1.debug('\n\n IN INNER VALIDATE k is %s, field is %s, f is %s, ef is %s\n\n', k, field, f ,ef)
                    if ef:
                        errors.append(ef)

            # Check own invariants
            
            try:
                ef = []
                schema.validateInvariants(obj, ef)
            except zope.interface.Invalid:
                errors.append(ef)

            return errors
def get_field_fieldset(field_id, schema):
    fieldsets = schema.getTaggedValue(FIELDSETS_KEY)
    for fieldset in fieldsets:
        if field_id in fieldset.fields:
            return fieldset
    else:
        return None
Example #6
0
def convert_schema_to_list_table(schema, level='-', header=True):
    """
    Introspects a Schema-based Interface and returns
    a ReStructured Text representation of it.
    """
    if schema.__name__ in ('IFunction', 'IDBParameters'):
        return ''
    schema_name = strip_interface_char(schema.__name__)
    output = []

    # Header
    output = [
"""
{name}
{divider}

""".format(**{
        'name': schema_name,
        'divider': (len(schema_name) + 1) * level
        })
    ]

    # Documentation
    output.append(schema.__doc__)
    output.append('\n')

    # No table for schemas with no fields, e.g. IDBParameters
    if len(zope.schema.getFields(schema).keys()) > 0:

        # Indicate if object is a container
        if schema.extends(IMapping):
            try:
                contained_schema = schema.getTaggedValue('contains')
            except KeyError:
                print('IMapping tagged value for contains not set for {}'.format(schema.__name__))
                contained_schema = ' unknown'
            caption = ":guilabel:`{}`".format(schema_name)
            if contained_schema != 'mixed':
                caption += " |bars| Container<`{}`_>".format(
                    strip_interface_char(contained_schema)
                )
        else:
            caption = ':guilabel:`{}`'.format(schema_name)

        output.append(
"""
.. _{}:

.. list-table:: {}
    :widths: 15 28 30 16 11
    :header-rows: 1

    * - Field name
      - Type
      - Purpose
      - Constraints
      - Default
""".format(schema_name, caption)
        )
        table_row_template = \
            '    * - {name}\n' + \
            '      - {type}\n' + \
            '      - {purpose}\n' + \
            '      - {constraints}\n' + \
            '      - {default}\n'

    base_fields = []
    base_schemas = {}
    specific_fields = []
    for fieldname, field in sorted(zope.schema.getFields(schema).items()):
        if field.interface.__name__ != schema.__name__:
            base_fields.append(field)
            if field.interface.__name__ not in base_schemas:
                base_schemas[
                    strip_interface_char(field.interface.__name__)
                ] = None
        else:
            specific_fields.append(field)

    #base_fields = sorted(base_fields, key=lambda field: field.getName())
    #base_fields = sorted(base_fields, key=lambda field: field.interface.__name__)

    #for field in base_fields:
    #    output.append(convert_field_to_table_row(schema, field, table_row_template))
    for field in specific_fields:
        output.append(convert_field_to_table_row(schema, field, table_row_template))
    if len(specific_fields) == 0:
        output.append("""    * -
      -
      -
      -
      -
""")

    if len(base_schemas.keys()) > 0:
        base_schema_str = '\n*Base Schemas* '
        for base_schema in base_schemas.keys():
            base_schema_str += "`{}`_, ".format(base_schema)
        base_schema_str = base_schema_str[:-2]
        output.append(base_schema_str)

    return ''.join(output)