~reviewer/hello-hut

adec95915d97ce8956f8a575b501715abf0d656a — Priya Raman 7 months ago 1db374b
Add --time-of-day greetings
4 files changed, 31 insertions(+), 4 deletions(-)

M README.md
M src/hello_hut/cli.py
M src/hello_hut/greetings.py
M tests/test_greetings.py
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()