M README.md => README.md +2 -0
@@ 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
M src/hello_hut/cli.py => src/hello_hut/cli.py +5 -2
@@ 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
M src/hello_hut/greetings.py => src/hello_hut/greetings.py +15 -2
@@ 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
M tests/test_greetings.py => tests/test_greetings.py +9 -0
@@ 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()