def _save_attachment(self, mimepart, content_disposition, content_type, filename, content_id, namespace_id, mid): from inbox.models import Part, Block block = Block() block.namespace_id = namespace_id block.filename = _trim_filename(filename, mid=mid) block.content_type = content_type part = Part(block=block, message=self) part.content_id = content_id part.content_disposition = content_disposition data = mimepart.body or '' if isinstance(data, unicode): data = data.encode('utf-8', 'strict') block.data = data
def _save_attachment(self, mimepart, content_disposition, content_type, filename, content_id, namespace_id, mid): from inbox.models import Part, Block block = Block() block.namespace_id = namespace_id block.filename = _trim_filename(filename, mid=mid) block.content_type = content_type part = Part(block=block, message=self) part.content_id = content_id part.content_disposition = content_disposition data = mimepart.body or '' if isinstance(data, unicode): data = data.encode('utf-8', 'strict') block.data = data
def _parse_mimepart(self, mimepart, mid, index, namespace_id): """Parse a single MIME part into a Block and Part object linked to this message.""" from inbox.models.block import Block, Part disposition, disposition_params = mimepart.content_disposition if (disposition is not None and disposition not in ['inline', 'attachment']): cd = mimepart.content_disposition log.error('Unknown Content-Disposition', mid=mid, bad_content_disposition=cd, parsed_content_disposition=disposition) self._mark_error() return block = Block() block.namespace_id = namespace_id block.content_type = mimepart.content_type.value block.filename = _trim_filename( mimepart.content_type.params.get('name'), mid) new_part = Part(block=block) new_part.walk_index = index # TODO maybe also trim other headers? if disposition is not None: new_part.content_disposition = disposition if disposition == 'attachment': new_part.block.filename = _trim_filename( disposition_params.get('filename'), mid) if mimepart.body is None: data_to_write = '' elif new_part.block.content_type.startswith('text'): data_to_write = mimepart.body.encode('utf-8', 'strict') # normalize mac/win/unix newlines data_to_write = data_to_write.replace('\r\n', '\n'). \ replace('\r', '\n') else: data_to_write = mimepart.body if data_to_write is None: data_to_write = '' new_part.content_id = mimepart.headers.get('Content-Id') block.data = data_to_write # Wait until end so we don't create incomplete blocks/parts for MIME # parts which fail to parse. new_part.message = self
def _parse_mimepart(self, mimepart, mid, index, namespace_id): """Parse a single MIME part into a Block and Part object linked to this message.""" from inbox.models.block import Block, Part disposition, disposition_params = mimepart.content_disposition if (disposition is not None and disposition not in ['inline', 'attachment']): cd = mimepart.content_disposition log.error('Unknown Content-Disposition', mid=mid, bad_content_disposition=cd, parsed_content_disposition=disposition) self._mark_error() return block = Block() block.namespace_id = namespace_id block.content_type = mimepart.content_type.value block.filename = _trim_filename( mimepart.content_type.params.get('name'), mid) new_part = Part(block=block, message=self) new_part.walk_index = index # TODO maybe also trim other headers? if disposition is not None: new_part.content_disposition = disposition if disposition == 'attachment': new_part.block.filename = _trim_filename( disposition_params.get('filename'), mid) if mimepart.body is None: data_to_write = '' elif new_part.block.content_type.startswith('text'): data_to_write = mimepart.body.encode('utf-8', 'strict') # normalize mac/win/unix newlines data_to_write = data_to_write.replace('\r\n', '\n'). \ replace('\r', '\n') else: data_to_write = mimepart.body if data_to_write is None: data_to_write = '' new_part.content_id = mimepart.headers.get('Content-Id') block.data = data_to_write
def _parse_mimepart(self, mimepart, mid, index, namespace_id): """Parse a single MIME part into a Block and Part object linked to this message.""" from inbox.models.block import Block, Part block = Block() block.namespace_id = namespace_id block.content_type = mimepart.content_type.value block.filename = _trim_filename( mimepart.content_type.params.get('name'), mid) new_part = Part(block=block, message=self) new_part.walk_index = index # TODO maybe also trim other headers? if mimepart.content_disposition[0] is not None: value, params = mimepart.content_disposition if value not in ['inline', 'attachment']: cd = mimepart.content_disposition log.error('Unknown Content-Disposition', mid=mid, bad_content_disposition=cd, parsed_content_disposition=value) return else: new_part.content_disposition = value if value == 'attachment': new_part.block.filename = _trim_filename( params.get('filename'), mid) if mimepart.body is None: data_to_write = '' elif new_part.block.content_type.startswith('text'): data_to_write = mimepart.body.encode('utf-8', 'strict') # normalize mac/win/unix newlines data_to_write = data_to_write.replace('\r\n', '\n'). \ replace('\r', '\n') else: data_to_write = mimepart.body if data_to_write is None: data_to_write = '' new_part.content_id = mimepart.headers.get('Content-Id') block.data = data_to_write self.parts.append(new_part)