From 43d3751435dd753572d590c04d07402b35d3cd66 Mon Sep 17 00:00:00 2001 From: Mariam Zakaria <123750992+mariam851@users.noreply.github.com> Date: Mon, 22 Dec 2025 06:00:21 +0200 Subject: [PATCH 1/3] Fix #78: Handle spaces and quotes in author argument --- watermark/magic.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/watermark/magic.py b/watermark/magic.py index 01dd9b5..05359fa 100644 --- a/watermark/magic.py +++ b/watermark/magic.py @@ -27,7 +27,7 @@ class WaterMark(Magics): and various system information. """ @magic_arguments() - @argument('-a', '--author', type=str, + @argument('-a', '--author', type=str, nargs='+', help='prints author name') @argument('-gu', '--github_username', type=str, help='prints author github username') @@ -87,6 +87,12 @@ def watermark(self, line): """ args = vars(parse_argstring(self.watermark, line)) + if isinstance(args.get('author'), list): + args['author'] = " ".join(args['author']) + + if isinstance(args.get('website'), list): + args['website'] = " ".join(args['website']) + # renaming not to pollute the namespace # while preserving backward compatibility args['current_date'] = args.pop('date') @@ -96,6 +102,8 @@ def watermark(self, line): formatted_text = watermark.watermark(**args) print(formatted_text) + + def load_ipython_extension(ipython): ipython.register_magics(WaterMark) From 4da004c373a1c35f24d708355832aa831906edd4 Mon Sep 17 00:00:00 2001 From: Mariam Zakaria <123750992+mariam851@users.noreply.github.com> Date: Mon, 22 Dec 2025 06:40:00 +0200 Subject: [PATCH 2/3] Feat #60: Implement CLI version using argparse and verify with pytest --- setup.py | 7 +++++++ watermark/watermark.py | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/setup.py b/setup.py index 59f126f..2d0f996 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,13 @@ packages=find_packages(exclude=[]), install_requires=install_reqs, extras_require={'gpu': ['py3nvml>=0.2']}, + entry_points={ + 'console_scripts': [ + 'watermark=watermark.watermark:main', + ], + }, long_description=long_description, long_description_content_type="text/markdown", ) + + diff --git a/watermark/watermark.py b/watermark/watermark.py index 1950bce..f81106d 100644 --- a/watermark/watermark.py +++ b/watermark/watermark.py @@ -472,3 +472,27 @@ def _get_latest_version(package_name): return data['info']['version'] except Exception: return None + +def main(): + import argparse + import sys + from watermark.watermark import watermark + + parser = argparse.ArgumentParser(description='Watermark CLI') + parser.add_argument('-a', '--author', type=str, nargs='+', help='author name') + parser.add_argument('-v', '--python', action='store_true', help='python version') + parser.add_argument('-p', '--packages', type=str, help='comma-separated packages') + + if len(sys.argv) == 1: + parser.print_help() + sys.exit(0) + + args = vars(parser.parse_args()) + + if args.get('author'): + args['author'] = " ".join(args['author']) + + print(watermark(**args)) + +if __name__ == '__main__': + main() \ No newline at end of file From fd682430526774956b6164cd865d745514fe3347 Mon Sep 17 00:00:00 2001 From: Mariam Zakaria <123750992+mariam851@users.noreply.github.com> Date: Mon, 22 Dec 2025 07:56:26 +0200 Subject: [PATCH 3/3] Fix #35: Remove colons and align output for consistency --- watermark/tests/test_watermark.py | 3 ++- watermark/tests/test_watermark_gpu.py | 4 ++-- watermark/watermark.py | 3 +-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/watermark/tests/test_watermark.py b/watermark/tests/test_watermark.py index 23cb466..32e270e 100644 --- a/watermark/tests/test_watermark.py +++ b/watermark/tests/test_watermark.py @@ -34,7 +34,8 @@ def test_defaults(): 'Architecture'] for i in expected: - assert i in clean_txt, print(f'{i} not in {clean_txt}') + assert any (i in line for line in clean_txt), f'{i} not found in {clean_txt}' + def test_sorted_iversion(): a = watermark.watermark(iversions=True, globals_=globals()) diff --git a/watermark/tests/test_watermark_gpu.py b/watermark/tests/test_watermark_gpu.py index 3c99f31..7d736b0 100644 --- a/watermark/tests/test_watermark_gpu.py +++ b/watermark/tests/test_watermark_gpu.py @@ -9,7 +9,7 @@ def test_gpu_info(): a = watermark.watermark(gpu=True) txt = a.split('\n') - clean_txt = [] + clean_txt = [t.strip() for t in txt if t.strip()] for t in txt: t = t.strip() if t: @@ -22,4 +22,4 @@ def test_gpu_info(): ] for i in expected: - assert i in clean_txt, print(f'{i} not in {clean_txt}') \ No newline at end of file + assert any (i in line for line in clean_txt), f'{i} not found in {clean_txt}' \ No newline at end of file diff --git a/watermark/watermark.py b/watermark/watermark.py index f81106d..7a06adf 100644 --- a/watermark/watermark.py +++ b/watermark/watermark.py @@ -240,9 +240,8 @@ def _generate_formatted_text(list_of_dicts): for section in list_of_dicts: if section: text = "" - longest = max(len(key) for key in section) for key, value in section.items(): - text += f"{key.ljust(longest)}: {value}\n" + text += f"{key} {value}\n" result.append(text) return "\n".join(result)