import sys import re import parsedatetime.parsedatetime as pdt import parsedatetime.parsedatetime_consts as pdc import datetime # Define Globals theTask = sys.argv[1] # Accepts a command line argument from the terminal # theTask = "Lunch next monday with John @work" taskContext = 0 taskProject = 0 taskStart = 0 taskDue = 0 taskDate = 0 # Function for parsing a string and returning a datetime value def datetimeFromString( s ): c = pdc.Constants() p = pdt.Calendar(c) result, what = p.parse( s ) dt = 0 # See http://stackoverflow.com/questions/1810432/handling-the-different-results-from-parsedatetime # what was returned (see http://code-bear.com/code/parsedatetime/docs/) # 0 = failed to parse # 1 = date (with current time, as a struct_time) # 2 = time (with current date, as a struct_time) # 3 = datetime if what in (1,2,3): # result is struct_time dt = datetime.datetime( *result[:6] ) if what == 0: # Failed to parse raise ValueError, ("Don't understand date '"+s+"'") dt = "Don't understand date " return dt # Function for getting a specified tag. def getFlag(taskString, flag): global theTask if flag not in taskString: return 0; stringArray = re.split('\s', taskString); newStringArray = []; returnArray = []; for w in stringArray: if w.startswith(flag): flagString = w.strip(flag); else: newStringArray.append(w); theTask = " ".join(newStringArray) return flagString def testFlag(taskString, flag): if flag in taskString: return 1; taskDate = datetimeFromString(theTask) if taskDate is not 0: taskStart = taskDate print "Start Date: %s" % (taskStart) taskContext = getFlag(theTask, '@') taskProject = getFlag(theTask, '>') taskDue = getFlag(theTask, 'Due:') if taskContext is not 0: print "Context: %s" % (taskContext) if taskProject is not 0: print "Project: %s" % (taskProject) print theTask