import argparse import random import time def do_work(duration, result): t = random.uniform(duration/5 * 0.5, duration/5 * 1.5) time.sleep(t) return result def fetch_olive_oil(): print('Fetching olive oil…') return do_work(5, 'oil') def fetch_dako_rusk(): print('Fetching dako rusk…') return do_work(5, 'rusk') def fetch_tomato(): print('Fetching tomato…') return do_work(3, 'tomato') def fetch_feta(): print('Fetching feta…') return do_work(3, 'feta') def chop_tomato(tomato): assert tomato == 'tomato' print('Chopping tomato…') return do_work(1, f'chopped {tomato}') def water_rusk(rusk): assert rusk == 'rusk' print('Watering rusk…') return do_work(0.2, f'wet {rusk}') def oil_rusk(rusk, oil): assert rusk == 'wet rusk' assert oil == 'oil' print(f'Pouring {oil} on {rusk}…') return do_work(0.5, f'{rusk} with {oil}') def decorate_rusk(rusk, *toppings): result = rusk for topping in toppings: print(f'Putting {topping} on {result}…') result = do_work(1, f'{result} with {topping}') return result def store_dako(dako): print(f'Storing {dako}') do_work(1, None) def prepare_dako(): print('Making dako…') oil = fetch_olive_oil() rusk = fetch_dako_rusk() tomato = fetch_tomato() tomato = chop_tomato(tomato) rusk = water_rusk(rusk) rusk = oil_rusk(rusk, oil) feta = fetch_feta() dako = decorate_rusk(rusk, tomato, feta) store_dako(dako) print(f'{dako} is ready!') def prepare_dakos(n_dakos): for n in range(args.n_dakos): prepare_dako() def parse_args(): p = argparse.ArgumentParser() p.add_argument( 'n_dakos', type=int, nargs='?', default=1, help='How many dakos to make?', ) return p.parse_args() if __name__ == '__main__': args = parse_args() prepare_dakos(args.n_dakos)