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), )