mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2024-11-14 17:40:24 -08:00
33 lines
950 B
Python
33 lines
950 B
Python
import itertools
|
|
|
|
|
|
class Menu(object):
|
|
"""
|
|
A simple command-line based menu
|
|
"""
|
|
|
|
def __init__(self, choices=None, formatter=str):
|
|
self.choices = choices or list()
|
|
self.formatter = formatter
|
|
|
|
def get_choice(self, prompt="> "):
|
|
n = len(self.choices)
|
|
number_width = len(str(n)) + 1
|
|
menu_fmt = '{number:{number_width}}) {choice}'
|
|
formatted_choices = map(self.formatter, self.choices)
|
|
for number, choice in zip(itertools.count(1), formatted_choices):
|
|
print(menu_fmt.format(**locals()))
|
|
print()
|
|
try:
|
|
answer = int(input(prompt))
|
|
result = self.choices[answer - 1]
|
|
except ValueError:
|
|
print('invalid selection')
|
|
result = None
|
|
except IndexError:
|
|
print('invalid selection')
|
|
result = None
|
|
except KeyboardInterrupt:
|
|
result = None
|
|
return result
|