def iterFields(ob): # noinspection PyUnresolvedReferences ob = Acquisition.aq_base(ob) primary = ob.getPrimaryField() if primary: clone = cloneField(primary, primary=True) yield clone.__name__, clone for name in ob.schema.getSchemataNames(): for field in ob.schema.getSchemataFields(name): if primary and primary.__name__ == field.__name__: continue # Mark 'primary fields', which get marshaled into payload if (bool(getattr(field, 'primary', None)) is True or IBlobField.providedBy(field) or (IFileField.providedBy(field) and not ITextField.providedBy(field)) or getattr(field, 'widget', None) == RichWidget or isinstance(field, ZPTField)): clone = cloneField(field, primary=True) else: clone = cloneField(field, primary=False) yield clone.__name__, clone
def _ce_fields(self): ce_fields = [ field for field in self.context.schema.fields() if (IStringField.providedBy(field) or ITextField.providedBy(field)) and field.schemata == 'default' and field.getName() != 'id' ] return ce_fields
def _getTextFields(self, obj): # Get all text fields, except ones that are handled separately. text_fields = [] if getattr(aq_base(obj), 'Schema', None): # Archetypes for field in obj.Schema().values(): if field.__name__ in CUSTOM_HANDLED_TEXT_FIELDS: continue if not ITextField.providedBy(field): continue text_fields.append(field) elif HAS_DEXTERITY: # Dexterity for schemata in iterSchemata(obj): fields = getFieldsInOrder(schemata) for name, field in fields: if name in CUSTOM_HANDLED_TEXT_FIELDS: continue if IRichText.providedBy(field): text_fields.append(field) continue # ITextLine inherits from IText. # We want to replace in texts, but not textlines. # Maybe this can be made configurable. if ITextLine.providedBy(field): continue if not IText.providedBy(field): continue text_fields.append(field) return text_fields
def _ce_fields(self): ce_fields = [field for field in self.context.schema.fields() if (IStringField.providedBy(field) or ITextField.providedBy(field)) and field.schemata=='default' and field.getName()!='id'] return ce_fields
def fieldFilter(field): return ( ( IBlobField.providedBy(field) or IFileField.providedBy(field) or IImageField.providedBy(field) ) and not ITextField.providedBy(field) )
def _expand_binary_data(self, obj, data): max_size = es_config.max_blobsize is_archetype = False if HAS_ARCHETYPES and IBaseContent.providedBy(obj): is_archetype = True schema = obj.Schema() for fieldname in self._iterate_binary_fields(obj, data): if fieldname not in data: data[fieldname] = None continue if is_archetype: field = schema[fieldname] value = field.get(obj) if value is None: data[fieldname] = None continue data[fieldname + '_meta'] = data[fieldname] if IBlobWrapper.providedBy(value): if max_size and value.get_size() > max_size: data[fieldname] = None del data[fieldname + '_meta'] msg = 'File too big for ElasticSearch Indexing: {0}' logger.info(msg.format(obj.absolute_url(), ), ) continue with value.getBlob().open() as fh: data[fieldname] = base64.b64encode(fh.read()) elif ITextField.providedBy(field): data[fieldname] = base64.b64encode( data[fieldname + '_meta']['data'].encode('utf8')) else: field = getattr(obj, fieldname, None) if field is None: data[fieldname] = None continue data[fieldname + '_meta'] = data[fieldname] if IBlobby.providedBy(field): if max_size and field.getSize() > max_size: data[fieldname] = None del data[fieldname + '_meta'] msg = 'File too big for ElasticSearch Indexing: {0}' logger.info(msg.format(obj.absolute_url(), ), ) continue with field.open() as fh: data[fieldname] = base64.b64encode(fh.read()) elif IRichTextValue.providedBy(field): data[fieldname] = base64.b64encode( data[fieldname + '_meta']['data'].encode('utf8'), ) if max_size and len(data[fieldname]) > max_size: data[fieldname] = None del data[fieldname + '_meta'] logger.info( 'File too big for ElasticSearch Indexing: {0}'.format( obj.absolute_url(), ), )
def getTextFields(obj): include_textline_fields = settings().include_textline_fields include_lines_fields = settings().include_lines_fields text_fields = [] if HAS_ARCHETYPES and getattr(aq_base(obj), "Schema", None): # Archetypes for field in obj.Schema().values(): if field.__name__ in CUSTOM_HANDLED_TEXT_FIELDS: continue if include_textline_fields and IStringField.providedBy(field): text_fields.append(field) continue if ITextField.providedBy(field): text_fields.append(field) if include_lines_fields and ILinesField.providedBy(field): text_fields.append(field) elif HAS_DEXTERITY: # Dexterity for schemata in iterSchemata(obj): fields = getFieldsInOrder(schemata) for name, field in fields: if name in CUSTOM_HANDLED_TEXT_FIELDS: continue if IRichText.providedBy(field): text_fields.append(field) continue # ITextLine inherits from IText. # That we want to replace in texts, but not textlines # is by configuration. if not include_textline_fields and ITextLine.providedBy(field): continue if IText.providedBy(field): text_fields.append(field) if (include_lines_fields and ITuple.providedBy(field) and ITextLine.providedBy(field.value_type)): text_fields.append(field) return text_fields
def fieldFilter(field): return ((IBlobField.providedBy(field) or IFileField.providedBy(field) or IImageField.providedBy(field)) and not ITextField.providedBy(field))