mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-07-16 02:02:53 -07:00
Dependencies: * backports.functools-lru-cache 1.2.1 * jaraco.classes 1.3 * jaraco.collections 1.3.2 * jaraco.functools 1.11 * jaraco.structures 1.0 * jaraco.text 1.7 * jaraco.ui 1.4 * jaraco.windows 3.6 * more-itertools 2.2 * path.py 8.2.1 * six 1.10.0
34 lines
879 B
Python
34 lines
879 B
Python
from __future__ import print_function, absolute_import, unicode_literals
|
|
|
|
import itertools
|
|
|
|
import six
|
|
|
|
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(six.moves.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
|