Пример #1
0
def convert():
    upload_file = None
    if not lock.lock():
        return ("BUSY", 503)
    try:
        converter.prepare()
        timeout = int(request.args.get("timeout", MAX_TIMEOUT))
        upload = request.files.get("file")
        file_name = FileName(upload.filename)
        mime_type = normalize_mimetype(upload.mimetype)
        if not file_name.has_extension:
            file_name.extension = extensions.get(mime_type)
        if not file_name.has_extension:
            file_name.extension = mimetype_extension(mime_type)
        upload_file = os.path.join(CONVERT_DIR, file_name.safe())
        log.info("PDF convert: %s [%s]", upload_file, mime_type)
        upload.save(upload_file)
        out_file = converter.convert_file(upload_file, timeout)
        return send_file(out_file, mimetype=PDF)
    except ConversionFailure as ex:
        converter.kill()
        return (str(ex), 400)
    except Exception as ex:
        converter.kill()
        log.warning("Error: %s", ex)
        return (str(ex), 500)
    finally:
        lock.unlock()
Пример #2
0
def convert():
    upload_file = None
    acquired = lock.acquire(timeout=1)
    if not acquired:
        return ('BUSY', 503)
    try:
        converter.prepare()
        timeout = int(request.args.get('timeout', 7200))
        for upload in request.files.values():
            file_name = FileName(upload.filename)
            mime_type = normalize_mimetype(upload.mimetype)
            if not file_name.has_extension:
                file_name.extension = extensions.get(mime_type)
            if not file_name.has_extension:
                file_name.extension = mimetype_extension(mime_type)
            upload_file = os.path.join(CONVERT_DIR, file_name.safe())
            log.info('PDF convert: %s [%s]', upload_file, mime_type)
            upload.save(upload_file)
            out_file = converter.convert_file(upload_file, timeout)
            return send_file(out_file,
                             mimetype=PDF,
                             attachment_filename='output.pdf')
        return ('No file uploaded', 400)
    except ConversionFailure as ex:
        converter.dispose()
        return (str(ex), 400)
    except (SystemFailure, Exception) as ex:
        converter.dispose()
        log.warn('Error: %s', ex)
        return ('CRASH', 503)
    finally:
        lock.release()
Пример #3
0
def convert():
    acquired = lock.acquire(timeout=1)
    if app.is_dead or not acquired:
        return ("BUSY", 503)
    timeout = int(request.args.get('timeout', 1000))
    upload_file = None
    output_format = request.form.get('format')
    if not output_format in LIBREOFFICE_EXPORT_TYPES:
        return ("%s format is not supported" % (output_format), 400)
    try:
        for upload in request.files.values():
            file_name = FileName(upload.filename)
            mime_type = normalize_mimetype(upload.mimetype)
            if not file_name.has_extension:
                file_name.extension = extensions.get(mime_type)
            if not file_name.has_extension:
                file_name.extension = mimetype_extension(mime_type)
            fd, upload_file = mkstemp(suffix=file_name.safe())
            os.close(fd)
            log.info('Convert to %s: %s [%s]',
                     output_format, upload_file, mime_type)
            upload.save(upload_file)
            converter.convert_file(upload_file, output_format, timeout)
            output_filename = "%s.%s" % (converter.OUT, output_format)
            log.info("Send file %s [Mime-type: %s]" %
                     (output_filename, OUTPUT_MIME_TYPES[output_format]))
            return send_file(output_filename,
                             mimetype=OUTPUT_MIME_TYPES[output_format],
                             attachment_filename=output_filename)
        return ('No file uploaded', 400)
    except HTTPException:
        raise
    except ConversionFailure as ex:
        app.is_dead = True
        return (str(ex), 400)
    except Exception as ex:
        app.is_dead = True
        log.error('Error: %s', ex)
        return ('FAIL', 503)
    finally:
        if upload_file is not None and os.path.exists(upload_file):
            os.unlink(upload_file)
        if os.path.exists(converter.OUT):
            os.unlink(converter.OUT)
        lock.release()
Пример #4
0
def convert():
    if app.is_dead:
        return ("DEAD", 500)
    upload_file = None
    acquired = lock.acquire(timeout=1)
    if not acquired:
        return ("BUSY", 503)
    try:
        timeout = int(request.args.get('timeout', 100))
        for upload in request.files.values():
            file_name = FileName(upload.filename)
            mime_type = normalize_mimetype(upload.mimetype)
            if not file_name.has_extension:
                file_name.extension = extensions.get(mime_type)
            if not file_name.has_extension:
                file_name.extension = mimetype_extension(mime_type)
            fd, upload_file = mkstemp(suffix=file_name.safe())
            os.close(fd)
            log.info('PDF convert: %s [%s]', upload_file, mime_type)
            upload.save(upload_file)
            log.info('About to begin conversion.')
            call('libreoffice --headless --convert-to pdf --outdir %s %s ' %
                 ('/tmp/', upload_file),
                 shell=True)
            return send_file('/tmp/output.pdf',
                             mimetype='application/pdf',
                             attachment_filename='output.pdf')
        return ('No file uploaded', 400)
    except HTTPException:
        raise
    except ConversionFailure as ex:
        app.is_dead = True
        return (str(ex), 400)
    except Exception as ex:
        app.is_dead = True
        log.error('Error: %s', ex)
        return ('FAIL', 503)
    finally:
        if upload_file is not None and os.path.exists(upload_file):
            os.unlink(upload_file)
        if os.path.exists('/tmp/output.pdf'):
            os.unlink('/tmp/output.pdf')
        lock.release()
Пример #5
0
def get_safe_file_obj(uploaded_file):
    file_name = FileName(uploaded_file.filename)
    mime_type = normalize_mimetype(uploaded_file.mimetype)
    if not file_name.has_extension:
        file_name.extension = extensions.get(mime_type)
    if not file_name.has_extension:
        file_name.extension = mimetype_extension(mime_type)
    fd, upload_file = mkstemp(suffix=file_name.safe())
    os.close(fd)
    log.info('PDF convert: %s [%s]', upload_file, mime_type)
    uploaded_file.save(upload_file)
    return {'file_obj': upload_file, 'file_name': file_name.safe()}