Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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)