You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

45 lines
1.5 KiB

import asyncio
import os
import socket
from typing import List
from . import globals # pylint: disable=redefined-builtin
try:
import netifaces
globals.optional_features.add('netifaces')
except ImportError:
pass
def get_all_ips() -> List[str]:
if 'netifaces' not in globals.optional_features:
try:
hostname = socket.gethostname()
return socket.gethostbyname_ex(hostname)[2]
except socket.gaierror:
return []
ips = []
for interface in netifaces.interfaces(): # pylint: disable=c-extension-no-member
try:
ip = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr'] # pylint: disable=c-extension-no-member
ips.append(ip)
except KeyError:
pass
return ips
async def print_message() -> None:
print('NiceGUI ready to go ', end='', flush=True)
host = os.environ['NICEGUI_HOST']
port = os.environ['NICEGUI_PORT']
loop = asyncio.get_running_loop()
ips = set((await loop.run_in_executor(None, get_all_ips)) if host == '0.0.0.0' else [])
ips.discard('127.0.0.1')
addresses = [(f'http://{ip}:{port}' if port != '80' else f'http://{ip}') for ip in ['localhost'] + sorted(ips)]
if len(addresses) >= 2:
addresses[-1] = 'and ' + addresses[-1]
extra = ''
if 'netifaces' not in globals.optional_features:
extra = ' (install netifaces to show all IPs and speedup this message)'
print(f'on {", ".join(addresses)}' + extra, flush=True)