Using argparse to interface with a grocery cart
Level: Advanced (score: 4)
Below is a Groceries class with add/delete/show/search methods.
You as a Python Developer are asked to give your users a command line interface so they can use the program. In real life we would have a persistent DB behind it, but let's focus on practicing argparse.
If new to argparse you might want to check out these Bites first:
- Add a command line interface to our bmi calculator
- Create a simple calculator that receives command line arguments
The program should work as shown here:
$ python groceries.py -h
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
optional arguments:
-h, --help            show this help message and exit
-a ADD ADD ADD, --add ADD ADD ADD
                        add item providing name (str), price (int), and
                        craving (bool)
-d DELETE, --delete DELETE
                        delete a product by name (str)
-l, --list            show items in cart
-s SEARCH, --search SEARCH
                        search items by name
$ python groceries.py -l
celery                         |   1
apples                         |   4
water                          |   2
coffee                         |   5
chicken                        |   6
pizza (craving)                |   4
------------------------------------
Total                          |  22
$ python groceries.py -s coffee
coffee                         |   5
------------------------------------
Total                          |   5
$ python groceries.py -a honey 5 False
celery                         |   1
apples                         |   4
water                          |   2
coffee                         |   5
chicken                        |   6
pizza (craving)                |   4
honey                          |   5
------------------------------------
Total                          |  27
$ python groceries.py -a chocolate 3 True
celery                         |   1
apples                         |   4
water                          |   2
coffee                         |   5
chicken                        |   6
pizza (craving)                |   4
chocolate (craving)            |   3
------------------------------------
Total                          |  25
$ python groceries.py -d chicken
celery                         |   1
apples                         |   4
water                          |   2
coffee                         |   5
pizza (craving)                |   4
------------------------------------
Total                          |  16
$ python groceries.py -d water
celery                         |   1
apples                         |   4
coffee                         |   5
chicken                        |   6
pizza (craving)                |   4
------------------------------------
Total                          |  20
$ python groceries.py -d none
Traceback (most recent call last):
File "groceries.py", line 101, in
    cart.delete(product)
File "groceries.py", line 53, in delete
    raise IndexError(f'{product} not in cart')
IndexError: none not in cart
$ python groceries.py -a bread
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -a/--add: expected 3 arguments
$ python groceries.py -ad
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -a/--add: expected 3 arguments
$ python groceries.py -dl
Traceback (most recent call last):
File "groceries.py", line 101, in
    cart.delete(product)
File "groceries.py", line 53, in delete
    raise IndexError(f'{product} not in cart')
IndexError: l not in cart
$ python groceries.py -l -s
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -s/--search: expected 1 argument
$ python groceries.py -s -d
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -s/--search: expected 1 argument
Good luck and keep calm and code in Python!
