def serialize(self, dom, parent_node, instance): values = self.get(instance) if not values: return False for value in values: elname = "%s:%s"%(self.namespace.prefix, self.name) node = dom.createElementNS(base.DublinCore.xmlns, elname) # try to get 'utf-8' encoded string if isinstance(value, unicode): value = value.encode('utf-8') elif IBaseUnit.providedBy(value): value = value.getRaw(encoding='utf-8') else: value = str(value) if isinstance(value, str) and has_ctrlchars(value): value = value.encode('base64') attr = dom.createAttributeNS(base.DublinCore.xmlns, 'transfer_encoding') attr.value = 'base64' node.setAttributeNode(attr) value_node = dom.createCDATASection(value) else: value_node = dom.createTextNode(value) node.appendChild(value_node) node.normalize() parent_node.appendChild(node) return True
def serialize(self, dom, parent_node, instance): values = self.get(instance) if not values: return False for value in values: elname = "%s:%s" % (self.namespace.prefix, self.name) node = dom.createElementNS(base.DublinCore.xmlns, elname) # try to get 'utf-8' encoded string if isinstance(value, unicode): value = value.encode('utf-8') elif IBaseUnit.providedBy(value): value = value.getRaw(encoding='utf-8') else: value = str(value) if isinstance(value, str) and has_ctrlchars(value): value = value.encode('base64') attr = dom.createAttributeNS(base.DublinCore.xmlns, 'transfer_encoding') attr.value = 'base64' node.setAttributeNode(attr) value_node = dom.createCDATASection(value) else: value_node = dom.createTextNode(value) node.appendChild(value_node) node.normalize() parent_node.appendChild(node) return True
def serialize(self, dom, parent_node, instance, options={}): values = self.get(instance) if not values: return is_ref = self.isReference(instance) for value in values: if instance.Type() == 'Folder': # allowed types are acquired from parent if instance.getConstrainTypesMode() != 1 and self.name in ['locallyAllowedTypes', 'immediatelyAddableTypes']: continue node = dom.createElementNS(self.namespace.xmlns, "field") name_attr = dom.createAttribute("name") name_attr.value = self.name node.setAttributeNode(name_attr) # try to get 'utf-8' encoded string if isinstance(value, unicode): value = value.encode('utf-8') elif IBaseUnit.providedBy(value): value = value.getRaw(encoding='utf-8') else: value = str(value) if is_ref: if config.HANDLE_REFS: ref_node = dom.createElementNS(self.namespace.xmlns, 'reference') uid_node = dom.createElementNS(self.namespace.xmlns, 'uid') value = dom.createTextNode(value) uid_node.append(value) ref_node.append(uid_node) node.append(ref_node) elif isinstance(value, str) and has_ctrlchars(value): value = value.encode('base64') attr = dom.createAttributeNS(self.namespace.xmlns, 'transfer_encoding') attr.value = 'base64' node.setAttributeNode(attr) value_node = dom.createCDATASection(value) node.appendChild(value_node) else: value_node = dom.createTextNode(value) node.appendChild(value_node) schema = ISchema(instance) field = schema._fields[self.name] if IObjectField.providedBy(field): mime_attr = dom.createAttribute('mimetype') mime_attr.value = field.getContentType(instance) node.setAttributeNode(mime_attr) node.normalize() parent_node.appendChild(node) return True
def serialize(self, dom, parent_node, instance, options={}): values = self.get(instance) if not values: return is_ref = self.isReference(instance) for value in values: if instance.Type() == 'Folder': # allowed types are acquired from parent if instance.getConstrainTypesMode() != 1 and self.name in ['locallyAllowedTypes','immediatelyAddableTypes']: continue node = dom.createElementNS(self.namespace.xmlns, "field") name_attr = dom.createAttribute("name") name_attr.value = self.name node.setAttributeNode(name_attr) # try to get 'utf-8' encoded string if isinstance(value, unicode): value = value.encode('utf-8') elif IBaseUnit.providedBy(value): value = value.getRaw(encoding='utf-8') else: value = str(value) if is_ref: if config.HANDLE_REFS: ref_node = dom.createElementNS(self.namespace.xmlns, 'reference') uid_node = dom.createElementNS(self.namespace.xmlns, 'uid') value = dom.createTextNode(value) uid_node.append(value) ref_node.append(uid_node) node.append(ref_node) elif isinstance(value, str) and has_ctrlchars(value): value = value.encode('base64') attr = dom.createAttributeNS(self.namespace.xmlns, 'transfer_encoding') attr.value = 'base64' node.setAttributeNode(attr) value_node = dom.createCDATASection(value) node.appendChild(value_node) else: value_node = dom.createTextNode(value) node.appendChild(value_node) schema = ISchema(instance) field = schema._fields[self.name] if IObjectField.providedBy(field): mime_attr = dom.createAttribute('mimetype') mime_attr.value = field.getContentType(instance) node.setAttributeNode(mime_attr) node.normalize() parent_node.appendChild(node) return True
def serialize(self, dom, parent_node, instance, options={}): encode_ctrlchars = options.get('encode_ctrlchars', True) values = self.get(instance) if not values: return for value in values: node = dom.createElementNS(self.namespace.xmlns, "field") name_attr = dom.createAttribute("name") name_attr.value = self.name node.setAttributeNode(name_attr) # try to get 'utf-8' encoded string if isinstance(value, unicode): value = value.encode('utf-8') elif IBaseUnit.providedBy(value): value = value.getRaw(encoding='utf-8') else: value = str(value) if self.isReference(instance): if config.HANDLE_REFS: ref_node = dom.createElementNS(self.namespace.xmlns, 'reference') uid_node = dom.createElementNS(self.namespace.xmlns, 'uid') value = dom.createTextNode(value) uid_node.append(value) ref_node.append(uid_node) node.append(ref_node) elif (encode_ctrlchars and isinstance(value, str) and has_ctrlchars(value)): value = value.encode('base64') attr = dom.createAttributeNS(self.namespace.xmlns, 'transfer_encoding') attr.value = 'base64' node.setAttributeNode(attr) value_node = dom.createCDATASection(value) node.appendChild(value_node) else: value_node = dom.createTextNode(value) node.appendChild(value_node) # set the mimetype if it is available field = instance.schema._fields[self.name] if IObjectField.providedBy(field): mime_attr = dom.createAttribute('mimetype') mime_attr.value = field.getContentType(instance) node.setAttributeNode(mime_attr) node.normalize() parent_node.appendChild(node) return True