def ajax_remind(request): # if this reminder isn't coming from you, make it a reminder request instead if not request.user.is_authenticated(): return _invite(request) # if the exact form is being used, we don't need to parse the times elif 'time' in request.POST: return _remindexact(request) # in all other cases, parse the string to generate a task and datetime else: try: task = request.POST['task'] except (KeyError): response = HttpResponse("Error with form") response.status_code = 400 return response p = Parser() try: result = p.parse(str(task)) except: response = HttpResponse("Parsing error") response.status_code = 500 return response t = Task(task=result[0], time=result[1], sendnotification=result[2], is_approved=True) t.save() j = {'id':t.id, 'task':result[0], 'from': 'you', 'time': result[1].strftime("%A %d %B, %Y, at %H:%M"), } response = HttpResponse(json.dumps(j)) response.status_code = 200 return response
def _invite(request): try: task = request.POST['task'] sfrom = request.POST['from'] except KeyError: return HttpResponseRedirect('/') p = Parser() result = p.parse(str(task)) t = Task(task=result[0], time=result[1], sendnotification=result[2], \ sentfrom=sfrom, is_approved=False) t.save() return render_to_response('success.html', {'task':t})
def _remindexact(request): try: task = request.POST['task'] date = request.POST['date'] time = request.POST['time'] except (KeyError): return HttpResponse("Error with form") p = Parser() # Pass the exact date and times into an easily parsed string, then parse it # @TODO: refactor this to use strftime, much faster. result = p.parse("task on " + str(date) + " at " + str(time)) t = Task(task=str(task), time=result[1], sendnotification=result[2]) t.save() return HttpResponseRedirect('/')
def remind(request): # if this reminder isn't coming from you, make it a reminder request instead if not request.user.is_authenticated(): return _invite(request) # if the exact form is being used, we don't need to parse the times elif 'time' in request.POST: return _remindexact(request) # in all other cases, parse the string to generate a task and datetime else: try: task = request.POST['task'] except (KeyError): return HttpResponse("Error with form") p = Parser() result = p.parse(str(task)) t = Task(task=result[0], time=result[1], sendnotification=result[2], is_approved=True) t.save() return HttpResponseRedirect('/')
class ParserTestCase(unittest.TestCase): def setUp(self): self.parser = Parser() now = datetime.now() self.now = datetime(now.year, now.month, now.day, now.hour, now.minute) def testTomorrow(self): self.assertEquals(self.parser.parse('do this tomorrow')[1], self.now + timedelta(days=1)) def testNextWeek(self): self.assertEquals(self.parser.parse('do this next week')[1], self.now + timedelta(days=7)) def testToday(self): self.assertEquals(self.parser.parse('do this today')[1], self.now) def testRelativeWeeks(self): self.assertEquals(self.parser.parse('do this in 2 weeks')[1], self.now + timedelta(days=14)) def testRelativeWeeks(self): self.assertEquals(self.parser.parse('do this in 2 days')[1], self.now + timedelta(days=2)) def testSimpleTime(self): now = datetime.now().replace(hour=5) if now < datetime.now(): now = now + timedelta(hours=12) date = datetime(now.year, now.month, now.day, now.hour, now.minute) self.assertEquals(self.parser.parse('do this at 5')[1], date) def testExplicitTime(self): self.assertEquals(self.parser.parse('do this at 12:00')[1], self.now.replace(hour=12, minute=0)) self.assertEquals(self.parser.parse('do this at 12.45')[1], self.now.replace(hour=12, minute=45)) def testAmPm(self): self.assertEquals(self.parser.parse('do this tomorrow at 5 pm')[1], self.now.replace(hour=17) + timedelta(days=1)) self.assertEquals(self.parser.parse('do this at 5 am tomorrow')[1], self.now.replace(hour=05) + timedelta(days=1))
def setUp(self): self.parser = Parser() now = datetime.now() self.now = datetime(now.year, now.month, now.day, now.hour, now.minute)