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'])
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'])
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)
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
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
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
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
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
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)