def edit_event(event, collection, locale, allow_quit=False, width=80): options = OrderedDict() if allow_quit: options["no"] = {"short": "n"} else: options["done"] = {"short": "n"} options["summary"] = {"short": "s", "attr": "summary"} options["description"] = { "short": "d", "attr": "description", "none": True } options["datetime range"] = {"short": "t"} options["repeat"] = {"short": "p"} options["location"] = {"short": "l", "attr": "location", "none": True} options["categories"] = {"short": "c", "attr": "categories", "none": True} options["alarm"] = {"short": "a"} options["Delete"] = {"short": "D"} if allow_quit: options["quit"] = {"short": "q"} now = datetime.now() while True: choice = present_options(options, prefix="Edit?", width=width) if choice is None: echo("unknown choice") continue if choice == "no": return True if choice == "quit": return False edited = False if choice == "Delete": if confirm("Delete all occurences of event?"): collection.delete(event.href, event.etag, event.calendar) return True elif choice == "datetime range": current = event.format("{start} {end}", relative_to=now) value = prompt("datetime range", default=current) try: start, end, allday = utils.guessrangefstr(value, locale) event.update_start_end(start, end) edited = True except: echo("error parsing range") elif choice == "repeat": recur = event.recurobject freq = recur["freq"] if "freq" in recur else "" until = recur["until"] if "until" in recur else "" if not freq: freq = 'None' freq = prompt('frequency (or "None")', freq) if freq == 'None': event.update_rrule(None) else: until = prompt('until (or "None")', until) if until == 'None': until = None rrule = utils.rrulefstr(freq, until, locale) event.update_rrule(rrule) edited = True elif choice == "alarm": default_alarms = [] for a in event.alarms: s = utils.timedelta2str(-1 * a[0]) default_alarms.append(s) default = ', '.join(default_alarms) if not default: default = 'None' alarm = prompt('alarm (or "None")', default) if alarm == "None": alarm = "" alarm_list = [] for a in alarm.split(","): alarm_trig = -1 * utils.guesstimedeltafstr(a.strip()) new_alarm = (alarm_trig, event.description) alarm_list += [new_alarm] event.update_alarms(alarm_list) edited = True else: attr = options[choice]["attr"] default = getattr(event, attr) question = choice allow_none = False if "none" in options[choice] and options[choice]["none"]: question += ' (or "None")' allow_none = True if not default: default = 'None' value = prompt(question, default) if allow_none and value == "None": value = "" getattr(event, "update_" + attr)(value) edited = True if edited: event.increment_sequence() collection.update(event)
def test_days(self): assert timedelta2str(timedelta(days=2)) == '2d'
def test_multi(self): assert timedelta2str( timedelta(days=6, hours=-3, minutes=10, seconds=-3)) == '5d 21h 9m 57s'
def test_single(self): assert timedelta2str(timedelta(minutes=10)) == '10m'
def test_negative(self): assert timedelta2str(timedelta(minutes=-10)) == '-10m'
def test_multi(self): assert timedelta2str(timedelta(days=6, hours=-3, minutes=10, seconds=-3)) == '5d 21h 9m 57s'
def edit_event(event, collection, locale, allow_quit=False, width=80): options = OrderedDict() if allow_quit: options["no"] = {"short": "n"} else: options["done"] = {"short": "n"} options["summary"] = {"short": "s", "attr": "summary"} options["description"] = {"short": "d", "attr": "description", "none": True} options["datetime range"] = {"short": "t"} options["repeat"] = {"short": "p"} options["location"] = {"short": "l", "attr": "location", "none": True} options["categories"] = {"short": "c", "attr": "categories", "none": True} options["alarm"] = {"short": "a"} options["Delete"] = {"short": "D"} if allow_quit: options["quit"] = {"short": "q"} now = datetime.now() while True: choice = present_options(options, prefix="Edit?", width=width) if choice is None: echo("unknown choice") continue if choice == "no": return True if choice == "quit": return False edited = False if choice == "Delete": if confirm("Delete all occurances of event?"): collection.delete(event.href, event.etag, event.calendar) return True elif choice == "datetime range": current = event.format("{start} {end}", relative_to=now) value = prompt("datetime range", default=current) try: start, end, allday = utils.guessrangefstr(value, locale, default_timedelta="60m") event.update_start_end(start, end) edited = True except: echo("error parsing range") elif choice == "repeat": recur = event.recurobject freq = recur["freq"] if "freq" in recur else "" until = recur["until"] if "until" in recur else "" if not freq: freq = 'None' freq = prompt('frequency (or "None")', freq) if freq == 'None': event.update_rrule(None) else: until = prompt('until (or "None")', until) if until == 'None': until = None rrule = utils.rrulefstr(freq, until, locale) event.update_rrule(rrule) edited = True elif choice == "alarm": default_alarms = [] for a in event.alarms: s = utils.timedelta2str(-1 * a[0]) default_alarms.append(s) default = ', '.join(default_alarms) if not default: default = 'None' alarm = prompt('alarm (or "None")', default) if alarm == "None": alarm = "" alarm_list = [] for a in alarm.split(","): alarm_trig = -1 * utils.guesstimedeltafstr(a.strip()) new_alarm = (alarm_trig, event.description) alarm_list += [new_alarm] event.update_alarms(alarm_list) edited = True else: attr = options[choice]["attr"] default = getattr(event, attr) question = choice allow_none = False if "none" in options[choice] and options[choice]["none"]: question += ' (or "None")' allow_none = True if not default: default = 'None' value = prompt(question, default) if allow_none and value == "None": value = "" getattr(event, "update_" + attr)(value) edited = True if edited: event.increment_sequence() collection.update(event)