From adec95915d97ce8956f8a575b501715abf0d656a Mon Sep 17 00:00:00 2001 From: Priya Raman Date: Fri, 27 Mar 2026 08:55:00 +0530 Subject: [PATCH] Add --time-of-day greetings --- README.md | 2 ++ src/hello_hut/cli.py | 7 +++++-- src/hello_hut/greetings.py | 17 +++++++++++++++-- tests/test_greetings.py | 9 +++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e2728d88227f7109a20c396b0d52db463fac8626..c6f4d571a1d1c4998658780032e52caffba0c23e 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ $ hello-hut Ada Hello, Ada! $ hello-hut Ada --shout HELLO, ADA! +$ hello-hut --time-of-day Grace +Good evening, Grace! ``` ## License diff --git a/src/hello_hut/cli.py b/src/hello_hut/cli.py index b8cd9bd124af7a30a8fd31259100dd03c8f98ef2..d0a71a5a947ab2b2f06553eac49d8a7172b23b4a 100644 --- a/src/hello_hut/cli.py +++ b/src/hello_hut/cli.py @@ -4,7 +4,7 @@ import argparse import sys from . import __version__ -from .greetings import DEFAULT_NAME, greet +from .greetings import DEFAULT_NAME, greet, time_of_day_greeting def build_parser(): @@ -15,6 +15,8 @@ def build_parser(): parser.add_argument("name", nargs="?", help="who to greet") parser.add_argument("--shout", action="store_true", help="print the greeting in capitals") + parser.add_argument("--time-of-day", action="store_true", + help="say good morning, afternoon or evening") parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}") return parser @@ -25,6 +27,7 @@ def main(argv=None): name = args.name or DEFAULT_NAME shout = args.shout - message = greet(name, shout=shout) + salutation = time_of_day_greeting() if args.time_of_day else None + message = greet(name, shout=shout, salutation=salutation) print(message) return 0 diff --git a/src/hello_hut/greetings.py b/src/hello_hut/greetings.py index 4e8891ed3e37cade88ad5871c2729e6cfe56182c..3b776fc5ad6543f49e7096c37eefb9b91df3f2ad 100644 --- a/src/hello_hut/greetings.py +++ b/src/hello_hut/greetings.py @@ -1,10 +1,23 @@ """Greeting construction: pure functions with no I/O, easy to test.""" +import datetime + DEFAULT_NAME = "friend" -def greet(name=DEFAULT_NAME, shout=False): +def time_of_day_greeting(now=None): + """Return a salutation that matches the local time of day.""" + hour = (now or datetime.datetime.now()).hour + if 5 <= hour < 12: + return "Good morning" + if 12 <= hour < 18: + return "Good afternoon" + return "Good evening" + + +def greet(name=DEFAULT_NAME, shout=False, salutation=None): """Build a greeting such as "Hello, Ada!".""" - salutation = "Hello" + if salutation is None: + salutation = "Hello" message = f"{salutation}, {name}!" return message.upper() if shout else message diff --git a/tests/test_greetings.py b/tests/test_greetings.py index 616e79a544a6726f2bb5301c6b8ca0009c7c6673..60cdf016c5e6a2032edac09e4ee4cf095c365270 100644 --- a/tests/test_greetings.py +++ b/tests/test_greetings.py @@ -1,6 +1,8 @@ import unittest +from datetime import datetime from hello_hut.greetings import greet +from hello_hut.greetings import time_of_day_greeting class GreetTest(unittest.TestCase): @@ -16,6 +18,13 @@ class GreetTest(unittest.TestCase): def test_shout_keeps_accents(self): self.assertEqual(greet("Zoë", shout=True), "HELLO, ZOË!") + def test_time_of_day(self): + def at(hour): + return datetime(2026, 1, 1, hour) + self.assertEqual(time_of_day_greeting(at(8)), "Good morning") + self.assertEqual(time_of_day_greeting(at(13)), "Good afternoon") + self.assertEqual(time_of_day_greeting(at(21)), "Good evening") + if __name__ == "__main__": unittest.main()