def encode_raw(self, data): """ encode complex data for raw output """ def _rewind(fid): if hasattr(fid, 'seek'): fid.seek(0) return data mime_type = getattr(data, 'mime_type', None) encoding = getattr(data, 'encoding', None) schema = getattr(data, 'schema', None) format_ = self.get_format(mime_type, encoding, schema) text_encoding = getattr(format_, 'text_encoding', 'utf-8') if format_ is None: raise ValueError("Invalid format specification! mime_type=%r, " "encoding=%r, schema=%r" % (mime_type, encoding, schema)) if isinstance(data, CDObject): data = data.data if format_.is_xml: data = FastStringIO( etree.tostring(data, pretty_print=False, xml_declaration=True, encoding=text_encoding)) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) elif format_.is_json: data = FastStringIO( json.dumps(data, ensure_ascii=False).encode(text_encoding)) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) elif format_.is_text: if isinstance(data, (CDTextBuffer, CDAsciiTextBuffer)): data.text_encoding = text_encoding else: data = FastStringIO(_rewind(data).read().encode(text_encoding)) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) else: # generic binary byte-stream if format_.encoding is not None: data_out = FastStringIO() for chunk in format_.encode(_rewind(data)): data_out.write(chunk) data = data_out content_type = format_.mime_type return _rewind(data), content_type
def encode_raw(self, data): """ encode complex data for raw output """ def _rewind(fid): if hasattr(fid, 'seek'): fid.seek(0) return data mime_type = getattr(data, 'mime_type', None) encoding = getattr(data, 'encoding', None) schema = getattr(data, 'schema', None) format_ = self.get_format(mime_type, encoding, schema) text_encoding = getattr(format_, 'text_encoding', 'utf-8') if format_ is None: raise ValueError( "Invalid format specification! mime_type=%r, " "encoding=%r, schema=%r" % (mime_type, encoding, schema) ) if isinstance(data, CDObject): data = data.data if format_.is_xml: data = FastStringIO(etree.tostring( data, pretty_print=False, xml_declaration=True, encoding=text_encoding )) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) elif format_.is_json: data = FastStringIO( json.dumps(data, ensure_ascii=False).encode(text_encoding) ) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) elif format_.is_text: if isinstance(data, (CDTextBuffer, CDAsciiTextBuffer)): data.text_encoding = text_encoding else: data = FastStringIO(_rewind(data).read().encode(text_encoding)) content_type = "%s; charset=%s" % (format_.mime_type, text_encoding) else: # generic binary byte-stream if format_.encoding is not None: data_out = FastStringIO() for chunk in format_.encode(_rewind(data)): data_out.write(chunk) data = data_out content_type = format_.mime_type return _rewind(data), content_type