From dac8d31567b4b47c32f41e8c38e634d784d6553b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn-Andre=20Skaar?= <31540110+bjornandre@users.noreply.github.com> Date: Tue, 13 Sep 2022 14:52:30 +0200 Subject: [PATCH] Pick a random port number at startup (#59) * Pick a random port at startup --- DataDoc.ipynb | 2 +- datadoc/app.py | 4 ++-- datadoc/utils.py | 9 +++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/DataDoc.ipynb b/DataDoc.ipynb index 47b171d4..6c02729b 100644 --- a/DataDoc.ipynb +++ b/DataDoc.ipynb @@ -35,4 +35,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/datadoc/app.py b/datadoc/app.py index c03d0ef2..f9278b76 100644 --- a/datadoc/app.py +++ b/datadoc/app.py @@ -21,7 +21,7 @@ progress_bar, ) from datadoc.frontend.components.VariablesTab import get_variables_tab -from datadoc.utils import running_in_notebook +from datadoc.utils import running_in_notebook, pick_random_port logger = logging.getLogger(__name__) @@ -90,7 +90,7 @@ def main(dataset_path: str = None): JupyterDash.infer_jupyter_proxy_config() app = build_app(JupyterDash) - app.run_server(mode="jupyterlab") + app.run_server(mode="jupyterlab", port=pick_random_port()) else: # Assume running in server mode is better (largely for development purposes) logger.debug("Starting in development mode") diff --git a/datadoc/utils.py b/datadoc/utils.py index 1bbe9418..5a16e786 100644 --- a/datadoc/utils.py +++ b/datadoc/utils.py @@ -30,3 +30,12 @@ def get_display_values( value = value.dict()[current_language.value] return_dict[field_name] = value return return_dict + + +def pick_random_port(): + """Pick a random free port number. The function will bind a socket to port 0, and + a random free port from 1024 to 65535 will be selected by the operating system.""" + import socket + sock = socket.socket() + sock.bind(('', 0)) + return sock.getsockname()[1]