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 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
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 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)