Example #1
0
    def test_box_provider_detail_filled_in_on_upload_completion(self):
        content = b'test'
        bu = BoxUploadFactory(
            file_content=content,
            provider__date_updated=timezone.now() - timedelta(hours=1),
        )
        f = StringIO(content.decode('utf8'))
        f.size = 4
        f.name = 'test.box'
        old_date_updated = bu.provider.date_updated

        self.assertEqual(bu.provider.status, BoxProvider.EMPTY)

        bu.append_chunk(f)

        self.assertEqual(bu.status, BoxUpload.COMPLETED)

        bu.provider.refresh_from_db()
        self.assertEqual(bu.provider.status, BoxProvider.FILLED_IN)
        self.assertEqual(bu.provider.file.read(), content)
        self.assertNotEqual(bu.provider.date_updated, old_date_updated)

        bu.provider.version.refresh_from_db()
        self.assertEqual(
            bu.provider.version.date_updated,
            bu.provider.date_updated
        )

        bu.provider.version.box.refresh_from_db()
        self.assertEqual(
            bu.provider.version.box.date_updated,
            bu.provider.date_updated
        )
Example #2
0
def parse_attachment(message_part):
    '''Parse an email message part into an attachment object.'''
    content_disposition = message_part.get("Content-Disposition", None)
    if content_disposition:
        dispositions = content_disposition.strip().split(";")
        if bool(content_disposition and dispositions[0].lower() == "attachment"):
            file_data = message_part.get_payload(decode=True)
            attachment = StringIO(file_data)
            attachment.content_type = message_part.get_content_type()
            attachment.size = len(file_data)
            attachment.name = message_part.get_filename()
            attachment.create_date = None
            attachment.mod_date = None
            attachment.read_date = None

            for param in dispositions[1:]:
                name,value = param.split("=")
                name = name.lower()

                if name == "filename":
                    attachment.name = value
                elif name == "create-date":
                    attachment.create_date = value
                    attachment.ctime = parse_time(value)
                elif name == "modification-date":
                    attachment.mod_date = value
                    attachment.mtime = parse_time(value)
                elif name == "read-date":
                    attachment.read_date = value
                    attachment.atime = parse_time(value)
            return attachment
    return None
Example #3
0
def parse_attachment(message_part):
    """Function to parse attachment from MIME message part.

        Args:
            message_part (obj): part in the MIME message object tree.

        Returns:
            obj of either StringIO (for strings) else BytesIO. If no
            attachments were present, 'None' is returned.
    """
    content_disposition = message_part.get("Content-Disposition", None)
    content_id = message_part.get("Content-ID", None)
    if content_disposition:
        dispositions = content_disposition.strip().split(";")
        if (content_disposition and (dispositions[0].lower() == "attachment"
                                     or dispositions[0].lower() == "inline")):
            file_data = message_part.get_payload(decode=True)
            if isinstance(file_data, str):
                attachment = StringIO(file_data)
            else:
                attachment = BytesIO(file_data)

            attachment.content_type = message_part.get_content_type()
            attachment.size = len(file_data)
            attachment.name = None
            attachment.create_date = None
            attachment.mod_date = None
            attachment.read_date = None
            attachment.disposition = dispositions[0]
            attachment.id = content_id

            for param in dispositions[1:]:
                name, value = param.strip().split("=")
                name = name.lower()
                value = value.replace('"', "")
                value = value.replace("'", "")

                if name == "filename":
                    attachment.name = value
                elif name == "create-date":
                    attachment.create_date = value  # TODO: datetime
                elif name == "modification-date":
                    attachment.mod_date = value  # TODO: datetime
                elif name == "read-date":
                    attachment.read_date = value  # TODO: datetime
            return attachment

    return None
Example #4
0
def parse_attachment(message_part):
    content_disposition = message_part.get("Content-Disposition", None)
    content_id = message_part.get("Content-ID", None)
    if content_disposition:
        dispositions = content_disposition.strip().split(";")
        if (content_disposition and (dispositions[0].lower() == "attachment"
                                     or dispositions[0].lower() == "inline")):
            file_data = message_part.get_payload(decode=True)
            if isinstance(file_data, str):
                attachment = StringIO(file_data)
            else:
                attachment = BytesIO(file_data)

            attachment.content_type = message_part.get_content_type()
            attachment.size = len(file_data)
            attachment.name = None
            attachment.create_date = None
            attachment.mod_date = None
            attachment.read_date = None
            attachment.disposition = dispositions[0]
            attachment.id = content_id

            for param in dispositions[1:]:
                name, value = param.strip().split("=")
                name = name.lower()
                value = value.replace('"', "")
                value = value.replace("'", "")

                if name == "filename":
                    attachment.name = value
                elif name == "create-date":
                    attachment.create_date = value  #TODO: datetime
                elif name == "modification-date":
                    attachment.mod_date = value  #TODO: datetime
                elif name == "read-date":
                    attachment.read_date = value  #TODO: datetime
            return attachment

    return None