Esempio n. 1
0
def test_broken_installation(data_tmpdir, monkeypatch):
    """Make sure we don't crash with a broken local installation."""
    monkeypatch.setattr(pdfjs, '_SYSTEM_PATHS', [])
    (data_tmpdir / 'pdfjs' / 'pdf.js').ensure()  # But no viewer.html

    content = pdfjs.generate_pdfjs_page('example.pdf', QUrl())
    assert '<h1>No pdf.js installation found</h1>' in content
Esempio n. 2
0
 def _show_pdfjs(self, reply):
     """Show the reply with pdfjs."""
     try:
         page = pdfjs.generate_pdfjs_page(reply.url())
     except pdfjs.PDFJSNotFound:
         page = jinja.render('no_pdfjs.html',
                             url=reply.url().toDisplayString())
     self.mainFrame().setContent(page.encode('utf-8'), 'text/html',
                                 reply.url())
     reply.deleteLater()
Esempio n. 3
0
 def _show_pdfjs(self, reply):
     """Show the reply with pdfjs."""
     try:
         page = pdfjs.generate_pdfjs_page(reply.url())
     except pdfjs.PDFJSNotFound:
         page = jinja.render('no_pdfjs.html',
                             url=reply.url().toDisplayString())
     self.mainFrame().setContent(page.encode('utf-8'), 'text/html',
                                 reply.url())
     reply.deleteLater()
Esempio n. 4
0
def test_generate_pdfjs_page(available, snippet, monkeypatch):
    if available == 'force':
        monkeypatch.setattr(pdfjs, 'is_available', lambda: True)
        monkeypatch.setattr(pdfjs, 'get_pdfjs_res',
                            lambda filename: b'fake PDF.js')
    else:
        monkeypatch.setattr(pdfjs, 'is_available', lambda: available)

    content = pdfjs.generate_pdfjs_page('example.pdf', QUrl())
    print(content)
    assert snippet in content
Esempio n. 5
0
 def _show_pdfjs(self, reply):
     """Show the reply with pdfjs."""
     try:
         page = pdfjs.generate_pdfjs_page(reply.url()).encode('utf-8')
     except pdfjs.PDFJSNotFound:
         # pylint: disable=no-member
         # WORKAROUND for https://bitbucket.org/logilab/pylint/issue/490/
         page = (jinja.env.get_template('no_pdfjs.html').render(
             url=reply.url().toDisplayString()).encode('utf-8'))
     self.mainFrame().setContent(page, 'text/html', reply.url())
     reply.deleteLater()
    def test_broken_installation(self, data_tmpdir, tmpdir, monkeypatch,
                                 read_file_mock):
        """Make sure we don't crash with a broken local installation."""
        monkeypatch.setattr(pdfjs, '_SYSTEM_PATHS', [])
        monkeypatch.setattr(pdfjs.os.path, 'expanduser',
                            lambda _in: tmpdir / 'fallback')
        read_file_mock.side_effect = FileNotFoundError

        (data_tmpdir / 'pdfjs' / 'pdf.js').ensure()  # But no viewer.html

        content = pdfjs.generate_pdfjs_page('example.pdf', QUrl())
        assert '<h1>No pdf.js installation found</h1>' in content
Esempio n. 7
0
 def _show_pdfjs(self, reply):
     """Show the reply with pdfjs."""
     try:
         page = pdfjs.generate_pdfjs_page(reply.url()).encode('utf-8')
     except pdfjs.PDFJSNotFound:
         # pylint: disable=no-member
         # WORKAROUND for https://bitbucket.org/logilab/pylint/issue/490/
         page = (jinja.env.get_template('no_pdfjs.html')
                 .render(url=reply.url().toDisplayString())
                 .encode('utf-8'))
     self.mainFrame().setContent(page, 'text/html', reply.url())
     reply.deleteLater()
Esempio n. 8
0
def test_generate_pdfjs_page(available, snippet, monkeypatch):
    if available == 'force':
        monkeypatch.setattr(pdfjs, 'is_available', lambda: True)
        monkeypatch.setattr(pdfjs, 'get_pdfjs_res',
                            lambda filename: b'fake PDF.js')
    elif available:
        if not pdfjs.is_available():
            pytest.skip("PDF.js unavailable")
        monkeypatch.setattr(pdfjs, 'is_available', lambda: True)
    else:
        monkeypatch.setattr(pdfjs, 'is_available', lambda: False)

    content = pdfjs.generate_pdfjs_page('example.pdf', QUrl())
    print(content)
    assert snippet in content
Esempio n. 9
0
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
Esempio n. 10
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
Esempio n. 11
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