Example #1
0
    def test_get_pdfjs_res_system(self, read_system_mock):
        read_system_mock.return_value = (b'content', 'path')

        assert pdfjs.get_pdfjs_res_and_path('web/test') == (b'content', 'path')
        assert pdfjs.get_pdfjs_res('web/test') == b'content'

        read_system_mock.assert_called_with('/usr/share/pdf.js/',
                                            ['web/test', 'test'])
Example #2
0
    def test_get_pdfjs_res_system(self, read_system_mock):
        read_system_mock.return_value = (b'content', 'path')

        assert pdfjs.get_pdfjs_res_and_path('web/test') == (b'content', 'path')
        assert pdfjs.get_pdfjs_res('web/test') == b'content'

        read_system_mock.assert_called_with('/usr/share/pdf.js/',
                                            ['web/test', 'test'])
Example #3
0
    def test_get_pdfjs_res_bundled(self, read_system_mock, read_file_mock):
        read_system_mock.return_value = (None, None)

        read_file_mock.return_value = b'content'

        assert pdfjs.get_pdfjs_res_and_path('web/test') == (b'content', None)
        assert pdfjs.get_pdfjs_res('web/test') == b'content'

        for path in pdfjs.SYSTEM_PDFJS_PATHS:
            read_system_mock.assert_any_call(path, ['web/test', 'test'])
Example #4
0
def qute_pdfjs(_win_id, request):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    urlpath = request.url().path()
    try:
        return pdfjs.get_pdfjs_res(urlpath)
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning(
            "pdfjs resource requested but not found: {}".format(e.path))
        raise QuteSchemeError("Can't find pdfjs resource '{}'".format(e.path),
                              QNetworkReply.ContentNotFoundError)
Example #5
0
def qute_pdfjs(_win_id, request):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    urlpath = request.url().path()
    try:
        return pdfjs.get_pdfjs_res(urlpath)
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning(
            "pdfjs resource requested but not found: {}".format(e.path))
        raise QuteSchemeError("Can't find pdfjs resource '{}'".format(e.path),
                              QNetworkReply.ContentNotFoundError)
Example #6
0
    def test_get_pdfjs_res_bundled(self, read_system_mock, read_file_mock,
                                   tmpdir):
        read_system_mock.return_value = (None, None)

        read_file_mock.return_value = b'content'

        assert pdfjs.get_pdfjs_res_and_path('web/test') == (b'content', None)
        assert pdfjs.get_pdfjs_res('web/test') == b'content'

        for path in ['/usr/share/pdf.js/',
                     str(tmpdir / 'data' / 'pdfjs'),
                     # hardcoded for --temp-basedir
                     os.path.expanduser('~/.local/share/qutebrowser/pdfjs/')]:
            read_system_mock.assert_any_call(path, ['web/test', 'test'])
Example #7
0
    def test_get_pdfjs_res_bundled(self, read_system_mock, read_file_mock,
                                   tmpdir):
        read_system_mock.return_value = (None, None)

        read_file_mock.return_value = b'content'

        assert pdfjs.get_pdfjs_res_and_path('web/test') == (b'content', None)
        assert pdfjs.get_pdfjs_res('web/test') == b'content'

        for path in ['/usr/share/pdf.js/',
                     str(tmpdir / 'data' / 'pdfjs'),
                     # hardcoded for --temp-basedir
                     os.path.expanduser('~/.local/share/qutebrowser/pdfjs/')]:
            read_system_mock.assert_any_call(path, ['web/test', 'test'])
def qute_pdfjs(url: QUrl) -> _HandlerRet:
    """Handler for qute://pdfjs.

    Return the pdf.js viewer or redirect to original URL if the file does not
    exist.
    """
    if url.path() == '/file':
        filename = QUrlQuery(url).queryItemValue('filename')
        if not filename:
            raise UrlInvalidError("Missing filename")
        if '/' in filename or os.sep in filename:
            raise RequestDeniedError("Path separator in filename.")

        path = _pdf_path(filename)
        with open(path, 'rb') as f:
            data = f.read()

        mimetype = utils.guess_mimetype(filename, fallback=True)
        return mimetype, data

    if url.path() == '/web/viewer.html':
        query = QUrlQuery(url)
        filename = query.queryItemValue("filename")
        if not filename:
            raise UrlInvalidError("Missing filename")

        path = _pdf_path(filename)
        if not os.path.isfile(path):
            source = query.queryItemValue('source')
            if not source:  # This may happen with old URLs stored in history
                raise UrlInvalidError("Missing source")
            raise Redirect(QUrl(source))

        data = pdfjs.generate_pdfjs_page(filename, url)
        return 'text/html', data

    try:
        data = pdfjs.get_pdfjs_res(url.path())
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning(
            "pdfjs resource requested but not found: {}".format(e.path))
        raise NotFoundError("Can't find pdfjs resource '{}'".format(e.path))
    else:
        mimetype = utils.guess_mimetype(url.fileName(), fallback=True)
        return mimetype, data
Example #9
0
def _pdfjs_version():
    """Get the pdf.js version.

    Return:
        A string with the version number.
    """
    try:
        pdfjs_file = pdfjs.get_pdfjs_res('build/pdf.js').decode('utf-8')
    except pdfjs.PDFJSNotFound:
        return 'no'
    else:
        version_re = re.compile(r"^PDFJS\.version = '([^']+)';$", re.MULTILINE)
        match = version_re.search(pdfjs_file)
        if not match:
            return 'unknown'
        else:
            return match.group(1)
def qute_pdfjs(url):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    try:
        data = pdfjs.get_pdfjs_res(url.path())
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning("pdfjs resource requested but not found: {}".format(
            e.path))
        raise qutescheme.QuteSchemeError(
            "Can't find pdfjs resource "
            "'{}'".format(e.path), QNetworkReply.ContentNotFoundError)
    else:
        mimetype, _encoding = mimetypes.guess_type(url.fileName())
        assert mimetype is not None, url
        return mimetype, data
Example #11
0
def qute_pdfjs(url):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    try:
        data = pdfjs.get_pdfjs_res(url.path())
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning(
            "pdfjs resource requested but not found: {}".format(e.path))
        raise qutescheme.QuteSchemeError("Can't find pdfjs resource "
                                         "'{}'".format(e.path),
                                         QNetworkReply.ContentNotFoundError)
    else:
        mimetype, _encoding = mimetypes.guess_type(url.fileName())
        assert mimetype is not None, url
        return mimetype, data
Example #12
0
def _pdfjs_version():
    """Get the pdf.js version.

    Return:
        A string with the version number.
    """
    try:
        pdfjs_file = pdfjs.get_pdfjs_res('build/pdf.js').decode('utf-8')
    except pdfjs.PDFJSNotFound:
        return 'no'
    else:
        version_re = re.compile(r"^PDFJS\.version = '([^']+)';$", re.MULTILINE)
        match = version_re.search(pdfjs_file)
        if not match:
            return 'unknown'
        else:
            return match.group(1)
Example #13
0
def qute_pdfjs(url):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    if url.path() == '/file':
        filename = QUrlQuery(url).queryItemValue('filename')
        if not filename:
            raise UrlInvalidError("Missing filename")
        if '/' in filename or os.sep in filename:
            raise RequestDeniedError("Path separator in filename.")

        path = os.path.join(downloads.temp_download_manager.get_tmpdir().name,
                            filename)

        with open(path, 'rb') as f:
            data = f.read()

        mimetype = utils.guess_mimetype(filename, fallback=True)
        return mimetype, data

    if url.path() == '/web/viewer.html':
        filename = QUrlQuery(url).queryItemValue("filename")
        if not filename:
            raise UrlInvalidError("Missing filename")
        data = pdfjs.generate_pdfjs_page(filename, url)
        return 'text/html', data

    try:
        data = pdfjs.get_pdfjs_res(url.path())
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning("pdfjs resource requested but not found: {}".format(
            e.path))
        raise NotFoundError("Can't find pdfjs resource '{}'".format(e.path))
    else:
        mimetype = utils.guess_mimetype(url.fileName(), fallback=True)
        return mimetype, data
Example #14
0
def qute_pdfjs(url):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    if url.path() == '/file':
        filename = QUrlQuery(url).queryItemValue('filename')
        if not filename:
            raise UrlInvalidError("Missing filename")
        if '/' in filename or os.sep in filename:
            raise RequestDeniedError("Path separator in filename.")

        path = os.path.join(downloads.temp_download_manager.get_tmpdir().name,
                            filename)

        with open(path, 'rb') as f:
            data = f.read()

        mimetype = utils.guess_mimetype(filename, fallback=True)
        return mimetype, data

    if url.path() == '/web/viewer.html':
        filename = QUrlQuery(url).queryItemValue("filename")
        if not filename:
            raise UrlInvalidError("Missing filename")
        data = pdfjs.generate_pdfjs_page(filename, url)
        return 'text/html', data

    try:
        data = pdfjs.get_pdfjs_res(url.path())
    except pdfjs.PDFJSNotFound as e:
        # Logging as the error might get lost otherwise since we're not showing
        # the error page if a single asset is missing. This way we don't lose
        # information, as the failed pdfjs requests are still in the log.
        log.misc.warning(
            "pdfjs resource requested but not found: {}".format(e.path))
        raise NotFoundError("Can't find pdfjs resource '{}'".format(e.path))
    else:
        mimetype = utils.guess_mimetype(url.fileName(), fallback=True)
        return mimetype, data
Example #15
0
def qute_pdfjs(_win_id, request):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    urlpath = request.url().path()
    return pdfjs.get_pdfjs_res(urlpath)
Example #16
0
def qute_pdfjs(_win_id, request):
    """Handler for qute://pdfjs. Return the pdf.js viewer."""
    urlpath = request.url().path()
    return pdfjs.get_pdfjs_res(urlpath)