check port in use and add itself

This commit is contained in:
zhiiw 2022-12-06 20:40:05 +08:00
parent 23085ffef4
commit d2de601b7b
2 changed files with 28 additions and 17 deletions

View File

@ -11,20 +11,20 @@ from .render import DependencyRenderer, EntityRenderer, SpanRenderer
from ..tokens import Doc, Span from ..tokens import Doc, Span
from ..errors import Errors, Warnings from ..errors import Errors, Warnings
from ..util import is_in_jupyter from ..util import is_in_jupyter
from ..util import is_port_in_use
_html = {} _html = {}
RENDER_WRAPPER = None RENDER_WRAPPER = None
def render( def render(
docs: Union[Iterable[Union[Doc, Span, dict]], Doc, Span, dict], docs: Union[Iterable[Union[Doc, Span, dict]], Doc, Span, dict],
style: str = "dep", style: str = "dep",
page: bool = False, page: bool = False,
minify: bool = False, minify: bool = False,
jupyter: Optional[bool] = None, jupyter: Optional[bool] = None,
options: Dict[str, Any] = {}, options: Dict[str, Any] = {},
manual: bool = False, manual: bool = False,
) -> str: ) -> str:
"""Render displaCy visualisation. """Render displaCy visualisation.
@ -74,14 +74,14 @@ def render(
def serve( def serve(
docs: Union[Iterable[Doc], Doc], docs: Union[Iterable[Doc], Doc],
style: str = "dep", style: str = "dep",
page: bool = True, page: bool = True,
minify: bool = False, minify: bool = False,
options: Dict[str, Any] = {}, options: Dict[str, Any] = {},
manual: bool = False, manual: bool = False,
port: int = 5000, port: int = 5000,
host: str = "0.0.0.0", host: str = "0.0.0.0",
) -> None: ) -> None:
"""Serve displaCy visualisation. """Serve displaCy visualisation.
@ -99,9 +99,15 @@ def serve(
""" """
from wsgiref import simple_server from wsgiref import simple_server
if is_port_in_use(port):
port += 1
while is_port_in_use(port) and port < 65535:
port += 1
if is_in_jupyter(): if is_in_jupyter():
warnings.warn(Warnings.W011) warnings.warn(Warnings.W011)
render(docs, style=style, page=page, minify=minify, options=options, manual=manual) render(docs, style=style, page=page, minify=minify, options=options, manual=manual)
httpd = simple_server.make_server(host, port, app) httpd = simple_server.make_server(host, port, app)
print(f"\nUsing the '{style}' visualizer") print(f"\nUsing the '{style}' visualizer")
print(f"Serving on http://{host}:{port} ...\n") print(f"Serving on http://{host}:{port} ...\n")

View File

@ -31,7 +31,7 @@ import shlex
import inspect import inspect
import pkgutil import pkgutil
import logging import logging
import socket
try: try:
import cupy.random import cupy.random
except ImportError: except ImportError:
@ -1736,3 +1736,8 @@ def all_equal(iterable):
(or if the input is an empty sequence), False otherwise.""" (or if the input is an empty sequence), False otherwise."""
g = itertools.groupby(iterable) g = itertools.groupby(iterable)
return next(g, True) and not next(g, False) return next(g, True) and not next(g, False)
def is_port_in_use(port):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
return s.connect_ex(('localhost', port)) == 0