def fromHumaneString(line): """Take a string following t_recurs format, returns a RecurrenceRule instance or None """ freq = byminute = byhour = byweekday = bymonthday = bymonth = None tokens = line.split() tokens[0] = tokens[0].lower() if tokens[0] == "none": return RecurrenceRule() if tokens[0] == "daily": if len(tokens) != 2: raise YokadiException("You should give time for daily task") freq = rrule.DAILY byhour, byminute = getHourAndMinute(tokens[1]) elif tokens[0] == "weekly": freq = rrule.WEEKLY if len(tokens) != 3: raise YokadiException( "You should give day and time for weekly task") byweekday = getWeekDayNumberFromDay(tokens[1].lower()) byhour, byminute = getHourAndMinute(tokens[2]) elif tokens[0] in ("monthly", "quarterly"): if tokens[0] == "monthly": freq = rrule.MONTHLY else: # quarterly freq = rrule.YEARLY bymonth = (1, 4, 7, 10) if len(tokens) < 3: raise YokadiException( "You should give day and time for %s task" % (tokens[0], )) try: bymonthday = int(tokens[1]) byhour, byminute = getHourAndMinute(tokens[2]) except ValueError: POSITION = { "first": 1, "second": 2, "third": 3, "fourth": 4, "last": -1 } if tokens[1].lower() in POSITION and len(tokens) == 4: byweekday = RecurrenceRule.createWeekDay( weekday=getWeekDayNumberFromDay(tokens[2].lower()), pos=POSITION[tokens[1]]) byhour, byminute = getHourAndMinute(tokens[3]) bymonthday = None # Default to current day number - need to be blanked else: raise YokadiException( "Unable to understand date. See help t_recurs for details" ) elif tokens[0] == "yearly": freq = rrule.YEARLY rDate = parseHumaneDateTime(" ".join(tokens[1:])) bymonth = rDate.month bymonthday = rDate.day byhour = rDate.hour byminute = rDate.minute else: raise YokadiException( "Unknown frequency. Available: daily, weekly, monthly and yearly" ) return RecurrenceRule( freq, bymonth=bymonth, bymonthday=bymonthday, byweekday=byweekday, byhour=byhour, byminute=byminute, )
def fromHumaneString(line): """Take a string following t_recurs format, returns a RecurrenceRule instance or None """ freq = byminute = byhour = byweekday = bymonthday = bymonth = None tokens = line.split() tokens[0] = tokens[0].lower() if tokens[0] == "none": return RecurrenceRule() if tokens[0] == "daily": if len(tokens) != 2: raise YokadiException("You should give time for daily task") freq = rrule.DAILY byhour, byminute = getHourAndMinute(tokens[1]) elif tokens[0] == "weekly": freq = rrule.WEEKLY if len(tokens) != 3: raise YokadiException("You should give day and time for weekly task") byweekday = getWeekDayNumberFromDay(tokens[1].lower()) byhour, byminute = getHourAndMinute(tokens[2]) elif tokens[0] in ("monthly", "quarterly"): if tokens[0] == "monthly": freq = rrule.MONTHLY else: # quarterly freq = rrule.YEARLY bymonth = (1, 4, 7, 10) if len(tokens) < 3: raise YokadiException("You should give day and time for %s task" % (tokens[0],)) try: bymonthday = int(tokens[1]) byhour, byminute = getHourAndMinute(tokens[2]) except ValueError: POSITION = {"first": 1, "second": 2, "third": 3, "fourth": 4, "last":-1} if tokens[1].lower() in POSITION and len(tokens) == 4: byweekday = RecurrenceRule.createWeekDay( weekday=getWeekDayNumberFromDay(tokens[2].lower()), pos=POSITION[tokens[1]]) byhour, byminute = getHourAndMinute(tokens[3]) bymonthday = None # Default to current day number - need to be blanked else: raise YokadiException("Unable to understand date. See help t_recurs for details") elif tokens[0] == "yearly": freq = rrule.YEARLY rDate = parseHumaneDateTime(" ".join(tokens[1:])) bymonth = rDate.month bymonthday = rDate.day byhour = rDate.hour byminute = rDate.minute else: raise YokadiException("Unknown frequency. Available: daily, weekly, monthly and yearly") return RecurrenceRule(freq, bymonth=bymonth, bymonthday=bymonthday, byweekday=byweekday, byhour=byhour, byminute=byminute, )
def do_t_recurs(self, line): """Make a task recurs t_recurs <id> yearly <dd/mm> <HH:MM> t_recurs <id> monthly <dd> <HH:MM> t_recurs <id> monthly <first/second/third/last> <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> quarterly <dd> <HH:MM> t_recurs <id> quarterly <first/second/third/last> <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> weekly <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> daily <HH:MM> t_recurs <id> none (remove recurrence)""" tokens = parseutils.simplifySpaces(line).split() if len(tokens) < 2: raise YokadiException("You should give at least two arguments: <task id> <recurrence>") task = self.getTaskFromId(tokens[0]) # Define recurrence: freq = byminute = byhour = byweekday = bymonthday = bymonth = None tokens[1] = tokens[1].lower() if tokens[1] == "none": if task.recurrence: self.session.delete(task.recurrence) task.recurrence = None return elif tokens[1] == "daily": if len(tokens) != 3: raise YokadiException("You should give time for daily task") freq = rrule.DAILY byhour, byminute = ydateutils.getHourAndMinute(tokens[2]) elif tokens[1] == "weekly": freq = rrule.WEEKLY if len(tokens) != 4: raise YokadiException("You should give day and time for weekly task") byweekday = ydateutils.getWeekDayNumberFromDay(tokens[2].lower()) byhour, byminute = ydateutils.getHourAndMinute(tokens[3]) elif tokens[1] in ("monthly", "quarterly"): if tokens[1] == "monthly": freq = rrule.MONTHLY else: # quarterly freq = rrule.YEARLY bymonth = [1, 4, 7, 10] if len(tokens) < 4: raise YokadiException("You should give day and time for %s task" % (tokens[1],)) try: bymonthday = int(tokens[2]) byhour, byminute = ydateutils.getHourAndMinute(tokens[3]) except ValueError: POSITION = {"first": 1, "second": 2, "third": 3, "fourth": 4, "last":-1} if tokens[2].lower() in list(POSITION.keys()) and len(tokens) == 5: byweekday = rrule.weekday(ydateutils.getWeekDayNumberFromDay(tokens[3].lower()), POSITION[tokens[2]]) byhour, byminute = ydateutils.getHourAndMinute(tokens[4]) bymonthday = None # Default to current day number - need to be blanked else: raise YokadiException("Unable to understand date. See help t_recurs for details") elif tokens[1] == "yearly": freq = rrule.YEARLY rDate = ydateutils.parseHumaneDateTime(" ".join(tokens[2:])) bymonth = rDate.month bymonthday = rDate.day byhour = rDate.hour byminute = rDate.minute else: raise YokadiException("Unknown frequency. Available: daily, weekly, monthly and yearly") if task.recurrence is None: task.recurrence = Recurrence() rr = rrule.rrule(freq, byhour=byhour, byminute=byminute, byweekday=byweekday, bymonthday=bymonthday, bymonth=bymonth) task.recurrence.setRrule(rr) task.dueDate = task.recurrence.getNext() self.session.merge(task) self.session.commit()
def do_t_recurs(self, line): """Make a task recurs t_recurs <id> yearly <dd/mm> <HH:MM> t_recurs <id> monthly <dd> <HH:MM> t_recurs <id> monthly <first/second/third/last> <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> quarterly <dd> <HH:MM> t_recurs <id> quarterly <first/second/third/last> <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> weekly <mo, tu, we, th, fr, sa, su> <hh:mm> t_recurs <id> daily <HH:MM> t_recurs <id> none (remove recurrence)""" tokens = parseutils.simplifySpaces(line).split() if len(tokens) < 2: raise YokadiException( "You should give at least two arguments: <task id> <recurrence>" ) task = self.getTaskFromId(tokens[0]) # Define recurrence: freq = byminute = byhour = byweekday = bymonthday = bymonth = None tokens[1] = tokens[1].lower() if tokens[1] == "none": if task.recurrence: task.recurrence.destroySelf() task.recurrence = None return elif tokens[1] == "daily": if len(tokens) != 3: raise YokadiException("You should give time for daily task") freq = rrule.DAILY byhour, byminute = ydateutils.getHourAndMinute(tokens[2]) elif tokens[1] == "weekly": freq = rrule.WEEKLY if len(tokens) != 4: raise YokadiException( "You should give day and time for weekly task") byweekday = ydateutils.getWeekDayNumberFromDay(tokens[2].lower()) byhour, byminute = ydateutils.getHourAndMinute(tokens[3]) elif tokens[1] in ("monthly", "quarterly"): if tokens[1] == "monthly": freq = rrule.MONTHLY else: # quarterly freq = rrule.YEARLY bymonth = [1, 4, 7, 10] if len(tokens) < 4: raise YokadiException( "You should give day and time for %s task" % (tokens[1], )) try: bymonthday = int(tokens[2]) byhour, byminute = ydateutils.getHourAndMinute(tokens[3]) except ValueError: POSITION = { "first": 1, "second": 2, "third": 3, "fourth": 4, "last": -1 } if tokens[2].lower() in POSITION.keys() and len(tokens) == 5: byweekday = rrule.weekday( ydateutils.getWeekDayNumberFromDay(tokens[3].lower()), POSITION[tokens[2]]) byhour, byminute = ydateutils.getHourAndMinute(tokens[4]) bymonthday = None # Default to current day number - need to be blanked else: raise YokadiException( "Unable to understand date. See help t_recurs for details" ) elif tokens[1] == "yearly": freq = rrule.YEARLY rDate = ydateutils.parseHumaneDateTime(" ".join(tokens[2:])) bymonth = rDate.month bymonthday = rDate.day byhour = rDate.hour byminute = rDate.minute else: raise YokadiException( "Unknown frequency. Available: daily, weekly, monthly and yearly" ) if task.recurrence is None: task.recurrence = Recurrence() rr = rrule.rrule(freq, byhour=byhour, byminute=byminute, byweekday=byweekday, bymonthday=bymonthday, bymonth=bymonth) task.recurrence.setRrule(rr) task.dueDate = task.recurrence.getNext()