31a32 > import datetime 539c540,597 < --- > > def canonical_date(self, arg) : > """ > Transform "arg" in a valid yyyy-mm-dd date or return None. > "arg" can be a yyyy-mm-dd, yyyymmdd, mmdd, today or a weekday name. > """ > day_names_en = ["monday", "tuesday", "wednesday", "thursday", > "friday", "saturday", "sunday"] > if re.match(r'\d{4}-\d{2}-\d{2}', arg) : > date = arg > elif arg.isdigit() : > if len(arg) == 8 : > date = "%s-%s-%s" % (arg[:4],arg[4:6],arg[6:]) > elif len(arg) == 4 : > year = datetime.date.today().year > date = "%i-%s-%s" % (year,arg[:2],arg[2:]) > elif arg.lower() == "today" : > today = datetime.date.today() > year = today.year > month = today.month > day = today.day > date = "%i-%i-%i" % (year,month,day) > elif arg.lower() in day_names_en : > today = datetime.date.today() > today_day = today.weekday() > arg_day = day_names_en.index(arg) > if arg_day > today_day : > delta = datetime.timedelta(days = arg_day-today_day) > else : > delta = datetime.timedelta(days = arg_day-today_day+7) > next_date = today + delta > year = next_date.year > month = next_date.month > day = next_date.day > date = "%i-%i-%i" % (year,month,day) > else : > return None > if self.is_date_valid(date) : > return date > else : > return None > > def is_date_valid(self, fulldate) : > """ > Return True if the date exists. False else. > "fulldate" is yyyy-mm-dd > """ > splited_date = fulldate.split("-") > if len(splited_date) != 3 : > return False > year,month,day = splited_date > try : > date = datetime.date(int(year),int(month),int(day)) > except ValueError : > return False > else : > return True > 541a600,601 > due_date = None > defer_date = None 556,558c616,623 < # Here you can add new commands < #elif attribute.lower() == "defer" : < #elif attribute.lower() == "due" : --- > elif attribute.lower() == "defer" : > defer_date = self.canonical_date(args) > if defer_date is None : > valid_attribute = False > elif attribute.lower() == "due" : > due_date = self.canonical_date(args) > if due_date is None : > valid_attribute = False 569a635,638 > if not due_date is None : > task.set_due_date(due_date) > if not defer_date is None : > task.set_start_date(defer_date)