Source code for swimlane.core.resources.attachment

from io import BytesIO

import pendulum

from swimlane.core.resources.base import APIResource


[docs]class Attachment(APIResource): """Abstraction of an attachment from an AttachmentsField Attributes: file_id (str): Full file ID used in download request URL filename (str): Attachment filename upload_date (pendulum.DateTime): Pendulum datetime when attachment was uploaded record_id (str): Associated record ID used in download request URL field_id (str): Assocated field ID used in download request URL """ _type = 'Core.Models.Record.Attachment, Core' def __init__(self, swimlane, raw, record_id, field_id): super(Attachment, self).__init__(swimlane, raw) self.file_id = self._raw['fileId'] self.filename = self._raw['filename'] self.upload_date = pendulum.parse(self._raw['uploadDate']) self.record_id = record_id self.field_id = field_id def __str__(self): return str(self.filename) def __hash__(self): return hash(self.file_id)
[docs] def download(self, chunk_size=1024): """Download attachment Args: chunk_size (int): Byte-size of chunked download request stream Returns: BytesIO: Stream ready for reading containing the attachment file contents """ stream = BytesIO() response = self._swimlane.request( 'get', 'attachment/{}/{}/{}'.format(self.record_id, self.field_id, self.file_id), stream=True ) for chunk in response.iter_content(chunk_size): stream.write(chunk) stream.seek(0) return stream
[docs] def for_json(self): """Return metadata for JSON-compatible representation""" return_value = self._raw.copy() return_value.pop('$type') return return_value