def close(self): if self.simple_server and not (self.simple_server.fileno() == -1 ): # checks to see if server is running print("Closing Gradio server on port {}...".format( self.server_port)) networking.close_server(self.simple_server)
def launch(self, inline=None, inbrowser=None, share=True, validate=True): """ Standard method shared by interfaces that creates the interface and sets up a websocket to communicate with it. :param inline: boolean. If True, then a gradio interface is created inline (e.g. in jupyter or colab notebook) :param inbrowser: boolean. If True, then a new browser window opens with the gradio interface. :param share: boolean. If True, then a share link is generated using ngrok is displayed to the user. :param validate: boolean. If True, then the validation is run if the interface has not already been validated. """ if validate and not self.validate_flag: self.validate() # If an existing interface is running with this instance, close it. if self.status == self.STATUS_TYPES["RUNNING"]: if self.verbose: print("Closing existing server...") if self.simple_server is not None: try: networking.close_server(self.simple_server) except OSError: pass output_directory = tempfile.mkdtemp() # Set up a port to serve the directory containing the static files with interface. server_port, httpd = networking.start_simple_server(self, output_directory) path_to_local_server = "http://localhost:{}/".format(server_port) networking.build_template( output_directory, self.input_interface, self.output_interface ) self.update_config_file(output_directory) self.status = self.STATUS_TYPES["RUNNING"] self.simple_server = httpd is_colab = False try: # Check if running interactively using ipython. from_ipynb = get_ipython() if "google.colab" in str(from_ipynb): is_colab = True except NameError: pass try: current_pkg_version = pkg_resources.require("gradio")[0].version latest_pkg_version = requests.get(url=PKG_VERSION_URL).json()["version"] if StrictVersion(latest_pkg_version) > StrictVersion(current_pkg_version): print(f"IMPORTANT: You are using gradio version {current_pkg_version}, " f"however version {latest_pkg_version} " f"is available, please upgrade.") print('--------') except: # TODO(abidlabs): don't catch all exceptions pass if self.verbose: print(strings.en["BETA_MESSAGE"]) if not is_colab: print(strings.en["RUNNING_LOCALLY"].format(path_to_local_server)) if share: try: share_url = networking.setup_tunnel(server_port) except RuntimeError: share_url = None if self.verbose: print(strings.en["NGROK_NO_INTERNET"]) else: if ( is_colab ): # For a colab notebook, create a public link even if share is False. share_url = networking.setup_tunnel(server_port) if self.verbose: print(strings.en["COLAB_NO_LOCAL"]) else: # If it's not a colab notebook and share=False, print a message telling them about the share option. if self.verbose: print(strings.en["PUBLIC_SHARE_TRUE"]) share_url = None if share_url is not None: networking.set_share_url_in_config_file(output_directory, share_url) if self.verbose: print(strings.en["GENERATING_PUBLIC_LINK"], end='\r') time.sleep(5) print(strings.en["MODEL_PUBLICLY_AVAILABLE_URL"].format(share_url)) if inline is None: try: # Check if running interactively using ipython. get_ipython() inline = True if inbrowser is None: inbrowser = False except NameError: inline = False if inbrowser is None: inbrowser = True else: if inbrowser is None: inbrowser = False if inbrowser and not is_colab: webbrowser.open( path_to_local_server ) # Open a browser tab with the interface. if inline: from IPython.display import IFrame, display if ( is_colab ): # Embed the remote interface page if on google colab; otherwise, embed the local page. display(IFrame(share_url, width=1000, height=500)) else: display(IFrame(path_to_local_server, width=1000, height=500)) return httpd, path_to_local_server, share_url