Ejemplo n.º 1
0
def download_file_from_url(url):
    rv = requests.get(url, timeout=15)
    if rv.status_code not in (200, 201):
        raise KoldoctaApiError.internalError('Failed to retrieve file from URL: %s' % url)

    mime = magic.from_buffer(rv.content, mime=True).decode('UTF-8')
    ext = mime.split('/')[1]
    name = str(ObjectId()) + ext
    return BytesIO(rv.content), name, mime
Ejemplo n.º 2
0
def download_file_from_url(url):
    rv = requests.get(url, timeout=15)
    if rv.status_code not in (200, 201):
        raise KoldoctaApiError.internalError(
            'Failed to retrieve file from URL: %s' % url)

    mime = magic.from_buffer(rv.content, mime=True).decode('UTF-8')
    ext = mime.split('/')[1]
    name = str(ObjectId()) + ext
    return BytesIO(rv.content), name, mime
Ejemplo n.º 3
0
def process_file_from_stream(content, content_type=None):
    content_type = content_type or content.content_type
    content = BytesIO(content.read())
    if 'application/' in content_type:
        content_type = magic.from_buffer(content.getvalue(), mime=True).decode('UTF-8')
        content.seek(0)
    file_type, ext = content_type.split('/')
    try:
        metadata = process_file(content, file_type)
    except OSError:  # error from PIL when image is supposed to be an image but is not.
        raise KoldoctaApiError.internalError('Failed to process file')
    file_name = get_file_name(content)
    content.seek(0)
    metadata = encode_metadata(metadata)
    metadata.update({'length': json.dumps(len(content.getvalue()))})
    return file_name, content_type, metadata
Ejemplo n.º 4
0
def process_file_from_stream(content, content_type=None):
    content_type = content_type or content.content_type
    content = BytesIO(content.read())
    if 'application/' in content_type:
        content_type = magic.from_buffer(content.getvalue(),
                                         mime=True).decode('UTF-8')
        content.seek(0)
    file_type, ext = content_type.split('/')
    try:
        metadata = process_file(content, file_type)
    except OSError:  # error from PIL when image is supposed to be an image but is not.
        raise KoldoctaApiError.internalError('Failed to process file')
    file_name = get_file_name(content)
    content.seek(0)
    metadata = encode_metadata(metadata)
    metadata.update({'length': json.dumps(len(content.getvalue()))})
    return file_name, content_type, metadata
Ejemplo n.º 5
0
 def store_file(self, doc, content, filename, content_type):
     # retrieve file name and metadata from file
     file_name, content_type, metadata = process_file_from_stream(content, content_type=content_type)
     try:
         logger.debug('Going to save media file with %s ' % file_name)
         content.seek(0)
         file_id = app.media.put(content, filename=file_name, content_type=content_type,
                                 resource=self.datasource, metadata=metadata)
         doc['media'] = file_id
         doc['mimetype'] = content_type
         doc['filemeta'] = decode_metadata(metadata)
         inserted = [doc['media']]
     except Exception as io:
         logger.exception(io)
         for file_id in inserted:
             delete_file_on_error(doc, file_id)
         raise KoldoctaApiError.internalError('Generating renditions failed')
Ejemplo n.º 6
0
 def store_file(self, doc, content, filename, content_type):
     # retrieve file name and metadata from file
     file_name, content_type, metadata = process_file_from_stream(
         content, content_type=content_type)
     try:
         logger.debug('Going to save media file with %s ' % file_name)
         content.seek(0)
         file_id = app.media.put(content,
                                 filename=file_name,
                                 content_type=content_type,
                                 resource=self.datasource,
                                 metadata=metadata)
         doc['media'] = file_id
         doc['mimetype'] = content_type
         doc['filemeta'] = decode_metadata(metadata)
         inserted = [doc['media']]
     except Exception as io:
         logger.exception(io)
         for file_id in inserted:
             delete_file_on_error(doc, file_id)
         raise KoldoctaApiError.internalError(
             'Generating renditions failed')
Ejemplo n.º 7
0
    def server_error_handler(error):
        """Log server errors."""
#         app.sentry.captureException()
#         app.logger.exception(error)
        return_error = KoldoctaApiError.internalError()
        return client_error_handler(return_error)