def pydoc(self, job, url): from pygments.formatters import HtmlFormatter from pygments.lexers.python import Python3Lexer from pygments import highlight modname = url.path().lstrip("/") query = QUrlQuery(url) extras = {} if query.hasQueryItem("hl_lines"): start, end = query.queryItemValue("hl_lines").split("-") extras["hl_lines"] = list(range(int(start), int(end) + 1)) mod = importlib.import_module(modname) filepath = inspect.getsourcefile(mod) formatter = HtmlFormatter(title="Module %s" % modname, full=True, lineanchors="line", **extras) with open(filepath) as f: code = highlight(f.read(), Python3Lexer(), formatter) buffer = QBuffer(self) buffer.setData(code.encode("utf-8")) job.reply(b"text/html", buffer)
def acceptNavigationRequest(self, url, _type, isMainFrame): query = QUrlQuery(url) if query.hasQueryItem("requrl"): orig_url = query.queryItemValue("requrl", QUrl.FullyDecoded) url = QUrl(orig_url) QDesktopServices.openUrl(url) return False return super().acceptNavigationRequest(url, _type, isMainFrame)
def qute_log(url: QUrl) -> _HandlerRet: """Handler for qute://log. There are three query parameters: - level: The minimum log level to print. For example, qute://log?level=warning prints warnings and errors. Level can be one of: vdebug, debug, info, warning, error, critical. - plain: If given (and not 'false'), plaintext is shown. - logfilter: A filter string like the --logfilter commandline argument accepts. """ query = QUrlQuery(url) plain = (query.hasQueryItem('plain') and query.queryItemValue('plain').lower() != 'false') if log.ram_handler is None: content = "Log output was disabled." if plain else None else: level = query.queryItemValue('level') if not level: level = 'vdebug' filter_str = query.queryItemValue('logfilter') try: logfilter = (log.LogFilter.parse(filter_str, only_debug=False) if filter_str else None) except log.InvalidLogFilterError as e: raise UrlInvalidError(e) content = log.ram_handler.dump_log(html=not plain, level=level, logfilter=logfilter) template = 'pre.html' if plain else 'log.html' src = jinja.render(template, title='log', content=content) return 'text/html', src