[m] 27-fix-http-server

1. update http-server
This commit is contained in:
Siarhei Siniak 2025-04-26 14:40:16 +03:00
commit 56c2eb1671
6 changed files with 71 additions and 6 deletions

@ -1158,6 +1158,7 @@ done'
)
def http_server(argv):
from .commands_typed import os as commands_os
assert isinstance(argv, list) and all([isinstance(o, str) for o in argv])
parser = optparse.OptionParser()
parser.add_option(
@ -1214,11 +1215,33 @@ def http_server(argv):
assert options.port >= 1
try:
if not options.docker and options.host == '0.0.0.0':
found : bool = False
for o in commands_os.interfaces_index():
if found:
break
for o2 in o.addr_info:
if o2.family == 'inet' and o2.local != '127.0.0.1':
options.host = o2.local
logger.info(dict(
host=options.host,
msg='found',
))
found = True
break
assert not socket.inet_aton(options.host) is None
subprocess.check_call([
'ping', '-w', '1',
options.host
])
# subprocess.check_call([
# 'ping', '-w', '1',
# options.host
# ])
assert options.host in sum([
[
o2.local
for o2 in o.addr_info
]
for o in commands_os.interfaces_index()
], [])
except Exception:
raise RuntimeError('invalid ip address %s' % options.host)

@ -1,14 +1,17 @@
import shutil
import glob
import subprocess
import pydantic
import pathlib
import ctypes
import os
import sys
import logging
import dataclasses
logger = logging.getLogger(__name__)
from typing import (overload, Optional, Literal,)
from typing import (overload, Optional, Literal, Any, Annotated,)
from .cli_bootstrap import PyProject
@ -90,3 +93,30 @@ def runtime_libdirs_init(
ctypes.cdll.LoadLibrary(preload_found)
else:
raise NotImplementedError
class interfaces_index_t:
@dataclasses.dataclass
class Interface:
@dataclasses.dataclass
class AddrInfo:
family: str
local: str
name: Annotated[
str,
pydantic.Field(
alias='ifname',
)
]
addr_info: list[AddrInfo]
def interfaces_index() -> list[interfaces_index_t.Interface]:
res = pydantic.RootModel[
list[interfaces_index_t.Interface]
].model_validate_json(
subprocess.check_output([
'ip', '-j', 'addr',
]).decode('utf-8')
).root
return res

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.