From fe1bb6819ece6fcd4a8c0792af0ae118c1803968 Mon Sep 17 00:00:00 2001 From: Jeremy Tuloup Date: Thu, 18 Mar 2021 15:04:05 +0100 Subject: [PATCH] Backport PR #854: Fall back to language_info name when searching for kernel --- tests/app/no_metadata.py | 17 +++++++++++++++++ tests/notebooks/no_metadata.ipynb | 17 +++++++++++++++++ voila/handler.py | 3 ++- 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/app/no_metadata.py create mode 100644 tests/notebooks/no_metadata.ipynb diff --git a/tests/app/no_metadata.py b/tests/app/no_metadata.py new file mode 100644 index 000000000..2655e6e67 --- /dev/null +++ b/tests/app/no_metadata.py @@ -0,0 +1,17 @@ +import pytest + + +@pytest.fixture +def non_existing_notebook_metadata(base_url): + return base_url + "voila/render/no_metadata.ipynb" + + +@pytest.fixture +def voila_args(notebook_directory, voila_args_extra): + return ['--VoilaTest.root_dir=%r' % notebook_directory] + voila_args_extra + + +async def test_non_existing_metadata(http_server_client, non_existing_notebook_metadata): + response = await http_server_client.fetch(non_existing_notebook_metadata) + assert response.code == 200 + assert 'Executing without notebook metadata' in response.body.decode('utf-8') diff --git a/tests/notebooks/no_metadata.ipynb b/tests/notebooks/no_metadata.ipynb new file mode 100644 index 000000000..2ef015db0 --- /dev/null +++ b/tests/notebooks/no_metadata.ipynb @@ -0,0 +1,17 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print('Executing without notebook metadata')" + ] + } + ], + "metadata": { + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/voila/handler.py b/voila/handler.py index ce883cd22..4827f0639 100644 --- a/voila/handler.py +++ b/voila/handler.py @@ -183,7 +183,8 @@ async def fix_notebook(self, notebook): # Find a spec matching the language if the kernel name does not exist in the kernelspecs if kernel_name not in all_kernel_specs: missing_kernel_name = kernel_name - kernel_name = await self.find_kernel_name_for_language(kernelspec.language.lower(), kernel_specs=all_kernel_specs) + language = kernelspec.get('language', notebook.metadata.get('language_info', {}).get('name', '')) + kernel_name = await self.find_kernel_name_for_language(language.lower(), kernel_specs=all_kernel_specs) self.log.warning('Could not find a kernel named %r, will use %r', missing_kernel_name, kernel_name) # We make sure the notebook's kernelspec is correct notebook.metadata.kernelspec.name = kernel_name