+ return HubApp(args.secret, args.browser, args.hubapp)
+
+
+class HubServer(Server):
+ async def startup(self, sockets: Optional[List[socket.socket]] = None) -> None:
+ await super().startup(sockets)
+ config = self.config
+ protocol_name = "https" if config.ssl else "http"
+ host = "0.0.0.0" if config.host is None else config.host
+ if ":" in host:
+ # It's an IPv6 address.
+ host = f"[{host.rstrip(']').lstrip('[')}]"
+
+ port = config.port
+ if port == 0:
+ try:
+ port = next(
+ chain.from_iterable((server.sockets for server in getattr(self, "servers", ())))
+ ).getsockname()[1]
+ except StopIteration:
+ pass
+ if {"http": 80, "https": 443}[protocol_name] != port:
+ host = f"{host}:{port}"
+ app = config.loaded_app.app
+ print("master_uri", app.sr.master_uri)
+ master_url = urlunsplit((protocol_name, host, app.sr.master_uri, "", ""))
+ print("secret:", app.secret)
+ if not app.browser:
+ print("master url", master_url)
+ else:
+ run([app.browser, master_url])
+
+
+def main():
+ HubServer(
+ Config("hub.app:get_app", factory=True, port=5000, log_level="info")
+ ).run()