Skip to content

Commit de712ea

Browse files
authored
Merge pull request #1141 from vkaidalov-rft/fix-default-ws-base-url
Fix default VOILA_WS_BASE_URL value in preheating mode
2 parents 9afaaf0 + 0bd5378 commit de712ea

File tree

6 files changed

+111
-5
lines changed

6 files changed

+111
-5
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import pytest
2+
import time
3+
import asyncio
4+
import os
5+
6+
7+
@pytest.fixture(params=[['--Voila.base_url="/base/"'], []])
8+
def using_base_url(request):
9+
return request.param
10+
11+
12+
@pytest.fixture(params=[['--Voila.server_url="/server/"'], []])
13+
def using_server_url(request):
14+
return request.param
15+
16+
17+
@pytest.fixture()
18+
def voila_args_extra(using_server_url, using_base_url):
19+
return using_server_url + using_base_url
20+
21+
22+
@pytest.fixture
23+
def preheat_mode(http_server_port):
24+
os.environ['VOILA_APP_PORT'] = str(http_server_port[-1])
25+
return True
26+
27+
28+
@pytest.fixture
29+
def voila_notebook(notebook_directory):
30+
return os.path.join(
31+
notebook_directory, 'preheat', 'get_query_string.ipynb'
32+
)
33+
34+
35+
NOTEBOOK_EXECUTION_TIME = 2
36+
TIME_THRESHOLD = NOTEBOOK_EXECUTION_TIME
37+
38+
39+
async def send_request(sc, url, wait=0):
40+
await asyncio.sleep(wait)
41+
real_time = time.time()
42+
response = await sc.fetch(url)
43+
real_time = time.time() - real_time
44+
html_text = response.body.decode('utf-8')
45+
return real_time, html_text
46+
47+
48+
async def test_request_with_query(
49+
http_server_client, base_url, using_base_url, using_server_url
50+
):
51+
"""
52+
We sent request with query parameter, `get_query_string` should
53+
return value.
54+
"""
55+
if len(using_server_url) > 0:
56+
url = '/server/?foo=bar'
57+
else:
58+
if len(using_base_url) > 0:
59+
url = '/base/?foo=bar'
60+
else:
61+
url = f'{base_url}?foo=bar'
62+
_, html_text = await send_request(
63+
sc=http_server_client, url=url, wait=NOTEBOOK_EXECUTION_TIME + 1
64+
)
65+
assert 'foo=bar' in html_text
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"id": "7efe3e8f-4b8d-4fd3-99d1-b06d79b88ae2",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"from voila.utils import get_query_string\n",
11+
"print(get_query_string())"
12+
]
13+
}
14+
],
15+
"metadata": {
16+
"kernelspec": {
17+
"display_name": "Python 3 (ipykernel)",
18+
"language": "python",
19+
"name": "python3"
20+
},
21+
"language_info": {
22+
"codemirror_mode": {
23+
"name": "ipython",
24+
"version": 3
25+
},
26+
"file_extension": ".py",
27+
"mimetype": "text/x-python",
28+
"name": "python",
29+
"nbconvert_exporter": "python",
30+
"pygments_lexer": "ipython3",
31+
"version": "3.9.7"
32+
}
33+
},
34+
"nbformat": 4,
35+
"nbformat_minor": 5
36+
}

voila/app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,9 @@ def start(self):
409409
self.log.info('Storing connection files in %s.' % self.connection_dir)
410410
self.log.info('Serving static files from %s.' % self.static_root)
411411

412+
# default server_url to base_url
413+
self.server_url = self.server_url or self.base_url
414+
412415
self.kernel_spec_manager = KernelSpecManager(
413416
parent=self
414417
)
@@ -444,9 +447,6 @@ def start(self):
444447
nbui = gettext.translation('nbui', localedir=os.path.join(ROOT, 'i18n'), fallback=True)
445448
env.install_gettext_translations(nbui, newstyle=False)
446449

447-
# default server_url to base_url
448-
self.server_url = self.server_url or self.base_url
449-
450450
self.app = tornado.web.Application(
451451
base_url=self.base_url,
452452
server_url=self.server_url or self.base_url,

voila/handler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ def time_out():
186186
kernel_env = {**os.environ, **request_info}
187187
kernel_env[ENV_VARIABLE.VOILA_PREHEAT] = 'False'
188188
kernel_env[ENV_VARIABLE.VOILA_BASE_URL] = self.base_url
189+
kernel_env[ENV_VARIABLE.VOILA_SERVER_URL] = self.settings.get('server_url', '/')
189190
kernel_id = await ensure_async(
190191
(
191192
self.kernel_manager.start_kernel(

voila/utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class ENV_VARIABLE(str, Enum):
2929
VOILA_PREHEAT = 'VOILA_PREHEAT'
3030
VOILA_KERNEL_ID = 'VOILA_KERNEL_ID'
3131
VOILA_BASE_URL = 'VOILA_BASE_URL'
32+
VOILA_SERVER_URL = 'VOILA_SERVER_URL'
3233
VOILA_APP_IP = 'VOILA_APP_IP'
3334
VOILA_APP_PORT = 'VOILA_APP_PORT'
3435
VOILA_WS_PROTOCOL = 'VOILA_WS_PROTOCOL'
@@ -89,8 +90,10 @@ def wait_for_request(url: str = None) -> str:
8990
protocol = os.getenv(ENV_VARIABLE.VOILA_WS_PROTOCOL, 'ws')
9091
server_ip = os.getenv(ENV_VARIABLE.VOILA_APP_IP, '127.0.0.1')
9192
server_port = os.getenv(ENV_VARIABLE.VOILA_APP_PORT, '8866')
92-
base_url = os.getenv(ENV_VARIABLE.VOILA_WS_BASE_URL, '/')
93-
url = f'{protocol}://{server_ip}:{server_port}{base_url}voila/query'
93+
server_url = os.getenv(ENV_VARIABLE.VOILA_SERVER_URL, '/')
94+
# Use `VOILA_SERVER_URL` if `VOILA_WS_BASE_URL` not specified.
95+
ws_base_url = os.getenv(ENV_VARIABLE.VOILA_WS_BASE_URL, server_url)
96+
url = f'{protocol}://{server_ip}:{server_port}{ws_base_url}voila/query'
9497

9598
kernel_id = os.getenv(ENV_VARIABLE.VOILA_KERNEL_ID)
9699
ws_url = f'{url}/{kernel_id}'

voila/voila_kernel_manager.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def fill_if_needed(
201201
if key not in kernel_env:
202202
kernel_env[key] = kernel_env_variables[key]
203203
kernel_env[ENV_VARIABLE.VOILA_BASE_URL] = self.parent.base_url
204+
kernel_env[ENV_VARIABLE.VOILA_SERVER_URL] = self.parent.server_url
204205
kernel_env[ENV_VARIABLE.VOILA_PREHEAT] = 'True'
205206
kwargs['env'] = kernel_env
206207

0 commit comments

Comments
 (0)