From 3b45c1a8ed6fde835107d0146aeef5ff8648d9bd Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Sun, 19 Apr 2026 19:10:45 +0200 Subject: [PATCH] Add function to ensure a non-empty string. --- docs/CHANGELOG.md | 3 ++- src/jcloud_docsgen/utils.py | 26 +++++++++++++++++++++- tests/unit/utils/test_non_empty_str.py | 30 ++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 tests/unit/utils/test_non_empty_str.py diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f64ea9d..36c228e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -21,4 +21,5 @@ - Add class for Python modules - Add feature to get the signature representation of a Python function argument - Add class for Python docstrings -- Add feature to parse Python docstrings \ No newline at end of file +- Add feature to parse Python docstrings +- Add function to ensure a non-empty string. \ No newline at end of file diff --git a/src/jcloud_docsgen/utils.py b/src/jcloud_docsgen/utils.py index 75e54b5..0c0d644 100644 --- a/src/jcloud_docsgen/utils.py +++ b/src/jcloud_docsgen/utils.py @@ -127,4 +127,28 @@ def assert_that_is_instance(obj: object, class_or_tuple: Union[type, types.Union exception_message_expected += human_readable_list(_list_type_names(class_or_tuple), 'or', '\'') else: exception_message_expected = '\'' + class_or_tuple.__name__ + '\'' - raise TypeError(f'expected {exception_message_expected}, got \'{type(obj).__name__}\'') \ No newline at end of file + raise TypeError(f'expected {exception_message_expected}, got \'{type(obj).__name__}\'') + +def non_empty_str(value: Union[str, None]) -> Union[str, None]: + ''' + Returns the value or ``None``. + + Returns the value if it is not empty and not `Ǹone``; otherwise, + returns ``None``. + Please note: values are stripped, i. e. if the value consists only + of spaces, it is also considered empty. + + :param value: The value. + :type value: Union[str, None] + + :return: The value or ``None``. + :rtype: Union[str, None] + ''' + + if value is None: + return None + + if value.strip() == '': + return None + + return value \ No newline at end of file diff --git a/tests/unit/utils/test_non_empty_str.py b/tests/unit/utils/test_non_empty_str.py new file mode 100644 index 0000000..8d31427 --- /dev/null +++ b/tests/unit/utils/test_non_empty_str.py @@ -0,0 +1,30 @@ +# Copyright 2026 jCloud Services GbR + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from src.jcloud_docsgen.utils import non_empty_str +import pytest + +@pytest.mark.parametrize('value,expected', [ + (None, None), + ('', None), + (' ', None), + (' ', None), + (' ', None), + (' a ', ' a '), + (' a', ' a'), + ('a ', 'a '), + ('a', 'a'), +]) +def test_non_empty_str(value, expected): + assert non_empty_str(value) == expected \ No newline at end of file