From ff4500a684106164ed12b048eb69c6978fb53199 Mon Sep 17 00:00:00 2001 From: Alexander Goscinski Date: Wed, 11 Dec 2024 19:42:16 +0100 Subject: [PATCH] Allow docstring to use single quotes and to not be displayed By specifying None for the docstring no docstring is displayed. By specifying the quotation mark in the docstring the docstring is not put into triple quotes allowing a docstring in signle quotes. The implementation puts the responsibility to add the correct quotation marks to the python side so we can be more flexible. --- js/widget.js | 2 +- src/widget_code_input/__init__.py | 12 ++++++++++-- src/widget_code_input/utils.py | 5 ++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/js/widget.js b/js/widget.js index 0a4bafa..c722151 100644 --- a/js/widget.js +++ b/js/widget.js @@ -225,7 +225,7 @@ function signatureValueChanged() { // Set the value from python into the CodeMirror widget in the // frontend. - const newDocstring = '"""' + model.get('docstring') + '"""'; + const newDocstring = model.get('docstring'); if (newDocstring !== myDocstringCodeMirror.state.doc.toString()) { myDocstringCodeMirror.dispatch({ diff --git a/src/widget_code_input/__init__.py b/src/widget_code_input/__init__.py index f1458f5..acb979a 100644 --- a/src/widget_code_input/__init__.py +++ b/src/widget_code_input/__init__.py @@ -73,7 +73,7 @@ def __init__( # pylint: disable=too-many-arguments self, function_name, function_parameters="", - docstring="\n", + docstring=None, function_body="", code_theme="basicLight", ): @@ -94,7 +94,15 @@ def __init__( # pylint: disable=too-many-arguments self.function_name = function_name self.function_parameters = function_parameters - self.docstring = docstring + if docstring is not None and '"""' in docstring: + raise ValueError('Triple double quotes (""") not allowed in docstring') + if docstring is None: + self.docstring = "" + elif docstring.startswith("\"") and docstring.endswith("\""): + # assume the quotation marks have been added so we do not need to add them + self.docstring = docstring + else: + self.docstring = f"\"\"\"{docstring}\"\"\"" self.function_body = function_body self.code_theme = code_theme self.widget_instance_count_trait=f"{WidgetCodeInput.widget_instance_count}" diff --git a/src/widget_code_input/utils.py b/src/widget_code_input/utils.py index 1189de7..6670075 100644 --- a/src/widget_code_input/utils.py +++ b/src/widget_code_input/utils.py @@ -47,12 +47,11 @@ def build_pre_body(signature, docstring, indent_level=4): :param docstring: the (unindented) docstring :param indent_level: integer number of spaces to prepend to the docstring """ - if '"""' in docstring: - raise ValueError('Triple double quotes (""") not allowed in docstring') return "{}\n{}".format( signature, - prepend_indent('"""{}"""'.format(docstring), indent_level=indent_level), + prepend_indent('' if docstring is None else '"""{}"""'.format(docstring), + indent_level=indent_level), )