Source code for mishmash.console

""""""
from nicfit.console.ansi import Fg
from eyed3.utils.prompt import prompt, parseIntList
from .orm import Artist


[docs]def selectArtist(heading, choices=None, multiselect=False, allow_create=True): color = Fg.green artist = None name = None menu_num = 0 if heading: print(heading) while artist is None: if choices: name = choices[0].name for menu_num, a in enumerate(choices, start=1): print(" %d) %s" % (menu_num + 1, a.origin())) if not multiselect: if allow_create: menu_num += 1 print(" %d) Enter a new artist" % menu_num) choice = prompt("Which artist", type_=int, choices=range(1, menu_num + 1)) choice -= 1 if choice < len(choices): artist = choices[choice] # Otherwise fall through to select artist below else: def _validate(_resp): try: _ints = [_i for _i in parseIntList(_resp) if _i in range(1, menu_num + 1)] return bool(_ints) except Exception: return False resp = prompt(color("Choose one or more artists"), validate=_validate) artists = [] for choice in [i - 1 for i in parseIntList(resp)]: artists.append(choices[choice]) # XXX: blech, returning a list here and a single value below return artists if artist is None: artist = promptArtist(None, name=name) if choices: if not Artist.checkUnique(choices + [artist]): print(Fg.red("Artist entered is not unique, try again...")) artist = None return artist
[docs]def promptArtist(text, name=None, default_name=None, default_city=None, default_state=None, default_country=None, artist=None): if text: print(text) if name is None: name = prompt(Fg.green("Artist name"), default=default_name) origin = {} for o in ("city", "state", "country"): origin["origin_%s" % o] = prompt(" %s" % Fg.green(o.title()), default=locals()["default_%s" % o], required=False) if not artist: artist = Artist(name=name, **origin) else: artist.name = name for o in origin: setattr(artist, o, origin[o]) return artist