def test_date_to_int_conversion(self): converter = DateConverter() self.assertTrue(self.sunday_date.weekday() == converter.get_week_day_as_python_int('Sunday')) self.assertTrue(self.monday_date.weekday() == converter.get_week_day_as_python_int('Monday')) self.assertTrue(self.tuesday_date.weekday() == converter.get_week_day_as_python_int('Tuesday')) self.assertTrue(self.wednesday_date.weekday() == converter.get_week_day_as_python_int('Wednesday')) self.assertTrue(self.thursday_date.weekday() == converter.get_week_day_as_python_int('Thursday')) self.assertTrue(self.friday_date.weekday() == converter.get_week_day_as_python_int('Friday')) self.assertTrue(self.saturday_date.weekday() == converter.get_week_day_as_python_int('Saturday')) self.assertRaises(ValueError, converter.get_week_day_as_python_int, 'SGTSDFS') self.assertRaises(ValueError, converter.get_week_day_as_python_int, '') self.assertRaises(ValueError, converter.get_week_day_as_python_int, 'monday') self.assertRaises(ValueError, converter.get_week_day_as_python_int, 'hello') self.assertRaises(ValueError, converter.get_week_day_as_python_int, 'test')
def test_convert(self): converter = DateConverter() expected_start_date = datetime.datetime(2019, 1, 14, 6, 0) expected_end_date = datetime.datetime(2019, 1, 14, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Monday') expected_start_date = datetime.datetime(2019, 1, 15, 6, 0) expected_end_date = datetime.datetime(2019, 1, 15, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Tuesday') expected_start_date = datetime.datetime(2019, 1, 16, 6, 0) expected_end_date = datetime.datetime(2019, 1, 16, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Wednesday') expected_start_date = datetime.datetime(2019, 1, 17, 6, 0) expected_end_date = datetime.datetime(2019, 1, 17, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Thursday') expected_start_date = datetime.datetime(2019, 1, 18, 6, 0) expected_end_date = datetime.datetime(2019, 1, 18, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Friday') expected_start_date = datetime.datetime(2019, 1, 19, 6, 0) expected_end_date = datetime.datetime(2019, 1, 19, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Saturday') expected_start_date = datetime.datetime(2019, 1, 20, 6, 0) expected_end_date = datetime.datetime(2019, 1, 20, 10, 0) self.__test_convert(expected_start_date, expected_end_date, 'Sunday')
def parse_task(t): converter = DateConverter() duration = converter.create_duration_on_next_day( t.get_start_day_string(), t.get_end_day_string(), t.start_time, t.end_time) group = GroupAssembler.parse_group(t.required_group) if t.location == None: location = None else: location = LocationAssembler.assemble(t.location) if t.category == None: category = None else: category = CategoryAssembler.assemble(t.category) return Task(t.id, t.task_name, duration, t.required_number_of_employees, group, location, category)
def run(self, dispatcher, tracker, domain): # utter wait message #dispatcher.utter_message("Einen Augenblick. Ich sehe mal im Kalender nach.") date_conv = DateConverter() # check if time was given by the user and convert relative dates and time periods if tracker.get_slot('date'): given_date = tracker.get_slot('date') start_time = given_date end_time = 0 bot_reply_message = self._generate_reply_message_with_date( start_time, end_time, given_date) dispatcher.utter_message(bot_reply_message) return [SlotSet('date', None)] elif tracker.get_slot('relativedate'): given_date = tracker.get_slot('relativedate') start_time, end_time = date_conv.convert_relativedate(given_date) bot_reply_message = self._generate_reply_message_with_date( start_time, end_time, given_date) dispatcher.utter_message(bot_reply_message) return [SlotSet('relativedate', None)] elif tracker.get_slot('dateperiod'): given_date = tracker.get_slot('dateperiod') start_time, end_time = date_conv.convert_dateperiod(given_date) bot_reply_message = self._generate_reply_message_with_date( start_time, end_time, given_date) dispatcher.utter_message(bot_reply_message) return [SlotSet('dateperiod', None)] elif tracker.get_slot( 'activity' ): # if only activity (subject) is given search an event by activity name subject = tracker.get_slot('activity') bot_reply_message = self._generate_reply_message_with_subject( subject) dispatcher.utter_message(bot_reply_message) return [SlotSet('activity', None)] else: bot_reply_message = "Mir fehlen leider noch Informationen zum Finden deiner Termine. \n" \ "Versuche es noch einmal mit Uhrzeit oder Betreff." dispatcher.utter_message(bot_reply_message) return []
def run(self, dispatcher, tracker, domain): date_conv = DateConverter() gcal_tasks = GoogleCalendarTasks() if tracker.get_slot('time') and tracker.get_slot('activity'): if tracker.get_slot('relativedate'): start_date = date_conv.convert_date( tracker.get_slot('relativedate'), 'relativedate') elif tracker.get_slot('date'): start_date = date_conv.convert_date(tracker.get_slot('date'), 'date') elif tracker.get_slot('dateperiod'): bot_reply_message = "An welchem Tag möchtest du einen Termin erstellen?" dispatcher.utter_message(bot_reply_message) return else: return hour, minute = date_conv.convert_time(tracker.get_slot('time')) start_date = start_date.replace(hour=int(hour), minute=int(minute), second=0, microsecond=0) # use default duration of 1 hour if end_time is not given end_date = start_date end_date = end_date.replace(hour=int(hour) + 1, minute=int(minute), second=0, microsecond=0) subject = tracker.get_slot('activity') gcal_tasks.create_event_in_google_calendar(start_date, end_date, subject) bot_reply_message = "Ok ich habe den Termin " + subject + " in den Kalendar eingetragen und werde dich erinnern." else: bot_reply_message = "Mir fehlen leider noch Information zur Erstellung des Termins." dispatcher.utter_message(bot_reply_message) return []
def __test_convert(self, expected_start_date, expected_end_date, day_string): converter = DateConverter() six = datetime.time(6, 0) ten = datetime.time(10, 0) day_list = [ self.sunday_date, self.monday_date, self.tuesday_date, self.wednesday_date, self.thursday_date, self.friday_date, self.saturday_date, ] for day in day_list: duration = converter.create_duration_on_next_day( day_string, day_string, six, ten, day) self.assertEqual(duration.start_time, expected_start_date) self.assertEqual(duration.end_time, expected_end_date)
def assemble(database_availabilities, database_days_off, current_date=datetime.datetime.now()): availability = [] converter = DateConverter() for time in database_availabilities: day = time.get_day_as_string() start_time = time.start_time end_time = time.end_time duration = Availability( converter.create_duration_on_next_day(day, day, start_time, end_time, current_date)) # Hack because the dateConverter isn't working properly but it'll work so we'll leave it. if day == 'Sunday': duration.start_time = duration.start_time - timedelta(days=7) duration.end_time = duration.end_time - timedelta(days=7) availability.append(duration) for day_off in database_days_off: if not day_off.get_is_approved(): continue date = day_off.day start_time = datetime.datetime(date.year, date.month, date.day, 0, 0) end_time = datetime.datetime(date.year, date.month, date.day, 23, 59) duration = Duration(start_time, end_time) to_remove = [] for a in availability: if a.can_happen_inside_of(duration): to_remove.append(a) for t in to_remove: availability.remove(t) return availability
def test_search_google_calendar_by_time_period(): dc = DateConverter() start_time, end_time = dc.convert_dateperiod('diese Woche') gct = GoogleCalendarTasks() appointment = gct.search_google_calendar_by_time(start_time, end_time)
def test_search_google_calendar_by_time_today(): dc = DateConverter() start_time, end_time = dc.convert_relativedate('heute') gct = GoogleCalendarTasks() appointment = gct.search_google_calendar_by_time(start_time, end_time)