From de9e5d4fb5a4425564849b64e5b6e5766f7d1f0e Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 29 Jan 2026 20:28:09 +0000 Subject: [PATCH 1/6] Add paths to logit decorator --- src/wxflow/logger.py | 2 ++ tests/test_logger.py | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/wxflow/logger.py b/src/wxflow/logger.py index b252c76..c7d136d 100644 --- a/src/wxflow/logger.py +++ b/src/wxflow/logger.py @@ -237,6 +237,7 @@ def decorate(func): log_name = name if name else func.__module__ log_msg = message if message else log_name + "." + func.__name__ + file_path = func.__code__.co_filename # Get the file path of the function @wraps(func) def wrapper(*args, **kwargs): @@ -246,6 +247,7 @@ def wrapper(*args, **kwargs): call_msg = 'BEGIN: ' + log_msg logger.info(call_msg) + logger.info("Called function file path: " + file_path) logger.debug(f"( {', '.join(passed_args + passed_kwargs)} )") # Call the function diff --git a/tests/test_logger.py b/tests/test_logger.py index 10af54e..2d3f481 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -80,9 +80,10 @@ def test_logger_file(tmp_path, logger_init): f"Expected message '{reference[lev]}' but found '{message}' in log file" -def test_logger_logit(logger_init): +def test_logger_logit(tmp_path, logger_init): - logger = Logger('test_logit', level=level, colored_log=True) + logfile = tmp_path / "logit.log" + logger = Logger('test_logit', level=level, colored_log=True, logfile_path=logfile) @logit(logger) def add(x, y): @@ -101,4 +102,11 @@ def spam(): usedict(2, k=3) spam() - assert True + # Verify that file paths are logged + with open(logfile, 'r') as fh: + log_contents = fh.read() + + assert 'Called function file path:' in log_contents, \ + "Expected 'Called function file path:' to be in log messages" + assert 'test_logger.py' in log_contents, \ + "Expected test file name to be logged" From 34c068f065d478c0efcfc411a5ba25c2ff32e7ef Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 29 Jan 2026 20:52:54 +0000 Subject: [PATCH 2/6] Move the filename to the first logit message --- src/wxflow/logger.py | 3 +-- tests/test_logger.py | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/wxflow/logger.py b/src/wxflow/logger.py index c7d136d..0eff040 100644 --- a/src/wxflow/logger.py +++ b/src/wxflow/logger.py @@ -236,8 +236,8 @@ def logit(logger: logging.Logger, name: str = None, message: str = None): def decorate(func): log_name = name if name else func.__module__ - log_msg = message if message else log_name + "." + func.__name__ file_path = func.__code__.co_filename # Get the file path of the function + log_msg = message if message else log_name + "." + func.__name__ + ": " + file_path @wraps(func) def wrapper(*args, **kwargs): @@ -247,7 +247,6 @@ def wrapper(*args, **kwargs): call_msg = 'BEGIN: ' + log_msg logger.info(call_msg) - logger.info("Called function file path: " + file_path) logger.debug(f"( {', '.join(passed_args + passed_kwargs)} )") # Call the function diff --git a/tests/test_logger.py b/tests/test_logger.py index 2d3f481..ba032ce 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -106,7 +106,6 @@ def spam(): with open(logfile, 'r') as fh: log_contents = fh.read() - assert 'Called function file path:' in log_contents, \ - "Expected 'Called function file path:' to be in log messages" - assert 'test_logger.py' in log_contents, \ + # Assert that the message contains the test file name full path + assert 'Begin: tests.test_logger.add: '+ str(__file__) in log_contents, \ "Expected test file name to be logged" From f3bd34febf893c3f6f6a9b38c0ca4ea024a5e5cf Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 30 Jan 2026 13:50:01 +0000 Subject: [PATCH 3/6] Correct the test for logging --- tests/test_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_logger.py b/tests/test_logger.py index ba032ce..fdfec06 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -107,5 +107,5 @@ def spam(): log_contents = fh.read() # Assert that the message contains the test file name full path - assert 'Begin: tests.test_logger.add: '+ str(__file__) in log_contents, \ + assert 'BEGIN: tests.test_logger.add: '+ str(__file__) in log_contents, \ "Expected test file name to be logged" From bb76ba271f1cd57e4d78690d0cb01b4e08a4caa9 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 30 Jan 2026 13:50:29 +0000 Subject: [PATCH 4/6] Ignore the tmp directory created by testing --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4286df6..57a44eb 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,7 @@ coverage.xml *.py,cover .hypothesis/ .pytest_cache/ +tmp/ # Translations *.mo From fea8a3381896c120839913fb4fe2df69b6e9e241 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 30 Jan 2026 13:54:09 +0000 Subject: [PATCH 5/6] Add missing whitespace --- tests/test_logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_logger.py b/tests/test_logger.py index fdfec06..e421138 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -107,5 +107,5 @@ def spam(): log_contents = fh.read() # Assert that the message contains the test file name full path - assert 'BEGIN: tests.test_logger.add: '+ str(__file__) in log_contents, \ + assert 'BEGIN: tests.test_logger.add: ' + str(__file__) in log_contents, \ "Expected test file name to be logged" From c2daa31e238aac553115f9efaa32cfa98ac5ce64 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 30 Jan 2026 15:33:11 +0000 Subject: [PATCH 6/6] Create a separate test for log file logging --- tests/test_logger.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tests/test_logger.py b/tests/test_logger.py index e421138..850272b 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -80,7 +80,31 @@ def test_logger_file(tmp_path, logger_init): f"Expected message '{reference[lev]}' but found '{message}' in log file" -def test_logger_logit(tmp_path, logger_init): +def test_logger_logit_stdout(logger_init): + + logger = Logger('test_logit', level=level, colored_log=True) + + @logit(logger) + def add(x, y): + return x + y + + @logit(logger) + def usedict(n, j=0, k=1): + return n + j + k + + @logit(logger, 'example') + def spam(): + print('Spam!') + + add(2, 3) + usedict(2, 3) + usedict(2, k=3) + spam() + + assert True + + +def test_logger_logit_logfile(tmp_path, logger_init): logfile = tmp_path / "logit.log" logger = Logger('test_logit', level=level, colored_log=True, logfile_path=logfile)