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 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')
示例#3
0
    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)
示例#4
0
    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 []
示例#5
0
    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)
示例#7
0
    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)