Spaces:
Paused
Paused
| import webbrowser | |
| from http.server import BaseHTTPRequestHandler, HTTPServer | |
| from typing import Union, Iterable, Optional | |
| def open_html_in_browser( | |
| html: Union[str, bytes], | |
| using: Union[str, Iterable[str], None] = None, | |
| port: Optional[int] = None, | |
| ): | |
| """ | |
| Display an html document in a web browser without creating a temp file. | |
| Instantiates a simple http server and uses the webbrowser module to | |
| open the server's URL | |
| Parameters | |
| ---------- | |
| html: str | |
| HTML string to display | |
| using: str or iterable of str | |
| Name of the web browser to open (e.g. "chrome", "firefox", etc.). | |
| If an iterable, choose the first browser available on the system. | |
| If none, choose the system default browser. | |
| port: int | |
| Port to use. Defaults to a random port | |
| """ | |
| # Encode html to bytes | |
| if isinstance(html, str): | |
| html_bytes = html.encode("utf8") | |
| else: | |
| html_bytes = html | |
| browser = None | |
| if using is None: | |
| browser = webbrowser.get(None) | |
| else: | |
| # normalize using to an iterable | |
| if isinstance(using, str): | |
| using = [using] | |
| for browser_key in using: | |
| try: | |
| browser = webbrowser.get(browser_key) | |
| if browser is not None: | |
| break | |
| except webbrowser.Error: | |
| pass | |
| if browser is None: | |
| raise ValueError("Failed to locate a browser with name in " + str(using)) | |
| class OneShotRequestHandler(BaseHTTPRequestHandler): | |
| def do_GET(self): | |
| self.send_response(200) | |
| self.send_header("Content-type", "text/html") | |
| self.end_headers() | |
| bufferSize = 1024 * 1024 | |
| for i in range(0, len(html_bytes), bufferSize): | |
| self.wfile.write(html_bytes[i : i + bufferSize]) | |
| def log_message(self, format, *args): | |
| # Silence stderr logging | |
| pass | |
| # Use specified port if provided, otherwise choose a random port (port value of 0) | |
| server = HTTPServer( | |
| ("127.0.0.1", port if port is not None else 0), OneShotRequestHandler | |
| ) | |
| browser.open("http://127.0.0.1:%s" % server.server_port) | |
| server.handle_request() | |