示例#1
0
class CalendarCLI():
    def __init__(self):
        self.calendar = Calendar()

        self.choices = {
            "view": self.view,
            "create": self.create,
            "contacts": self.contacts,
            "delete": self.delete,
            "load": self.load,
            "save": self.save,
            "quit": self.quit
        }

    def _print_event(self, event):
        print(tabulate([[str(event)]], tablefmt='grid'))

    def display_menu(self):
        print(
            "Enter command \nview, contacts, create, delete, load, save, quit")

    def run(self):
        """Display the menu and respond to choices."""
        logging.basicConfig(filename='calendar.log',
                            filemode='w',
                            level=logging.DEBUG)
        try:
            while True:
                self.display_menu()
                choice = input(">")
                action = self.choices.get(choice)
                if action:
                    action()
                else:
                    print("{0} is not a valid choice".format(choice))

        except Exception as e:
            print(
                "Sorry! Something unexpected happened. If this problem persists please contact our support team for assistance."
            )
            logging.exception(str(e))
            return

    def view(self):
        view_type = input('"all" or "<contact name>"\n>')
        if view_type == "all":
            try:
                events = self.calendar.show_events()
            except Calendar_exceptions.EmptyCalendarError:
                print("No meetings to show")
                return
        else:
            try:
                events = self.calendar.show_events_by_contact(view_type)
            except Calendar_exceptions.EmptyCalendarError:
                print("No meetings to show")
                return

        for event in events:
            self._print_event(event)

    def contacts(self):
        for contact in self.calendar.show_contacts():
            print(contact)

    def create(self):
        title = input("Title?\n>")
        date = input("Date? (YYYY-MM-DD)\n>")
        start = input("Start time? (HH:MM in 24-hour format)\n>")
        end = input("End time? (HH:MM in 24-hour format)\n>")
        is_meeting = input('Invite others? "yes" or "no"\n>')
        if is_meeting == "yes":
            invites = []
            invite = input('"<Contact name>" or "done"\n>')
            while (invite != "done"):
                invites.append(invite)
                invite = input('"<Contact name>" or "done"\n>')
            try:
                self.calendar.add_event(title, date, start, end, *invites)
            except Calendar_exceptions.InvalidDateError as e:
                print(
                    "Cannot create an event with a date of %s. Try again with this date format YYYY-MM-DD."
                    % e.val)
                return

            except Calendar_exceptions.InvalidTimeError as e:
                print(
                    "Cannot create an event with a time of %s. Try again with this time format HH:MM."
                    % e.val)
                return

            except ValueError as e:
                print(e.args[0])
                return

            except Calendar_exceptions.CalendarConflictError as e:
                print(
                    "Cannot add this event because it conflicts with this event..."
                )
                self._print_event(e.val)
                return

        else:
            try:
                self.calendar.add_event(title, date, start, end)
            except Calendar_exceptions.InvalidDateError as e:
                print(
                    "Cannot create an event with a date of %s. Try again with this date format YYYY-MM-DD."
                    % e.val)
                return

            except Calendar_exceptions.InvalidTimeError as e:
                print(
                    "Cannot create an event with a time of %s. Try again with this time format HH:MM."
                    % e.val)
                return

            except ValueError as e:
                print(e.args[0])
                return

            except Calendar_exceptions.CalendarConflictError as e:
                print(
                    "Cannot add this event because it conflicts with this event..."
                )
                self._print_event(e.args[0])
                return

    def delete(self):
        index = input(
            "Which event?\nEnter an index 1..n to identify the event from the sorted list\n>"
        )
        try:
            self.calendar.delete(int(index) - 1)
        except IndexError:
            print("No such event.")
            return

    def load(self):
        self.calendar = Calendar()
        with open("save.csv", "r") as f:
            for line in f.readlines():
                fields = line.strip().split(",")
                self.calendar.add_event(*fields)
            path = os.getcwd() + "/save.csv"
            logging.debug("%s, Loaded calendar from %s" %
                          (datetime.now().isoformat(), path))

    def save(self):
        with open("save.csv", "w") as f:
            try:
                events = self.calendar.show_events()
            except Calendar_exceptions.EmptyCalendarError:
                print("No meetings to show")
                return
            else:
                for e in self.calendar.show_events():
                    f.write(repr(e) + "\n")

                path = os.getcwd() + "/save.csv"
                logging.debug("%s, Saved calendar to %s" %
                              (datetime.now().isoformat(), path))

    def quit(self):
        sys.exit(0)
def main():
    """
	Samuraiz Calendar App

	Usage:
		calendar -h| --help
		calendar --version

	Options:
		-h --help
		--version

	Examples:
		calendar create

	"""

    print("\n\n")
    print("Welcome to your Personal Calendar\n\n")
    count = 0

    while True:
        now = datetime.datetime.now()
        if count <= 1:  # Checks if there are more than one calendar created.
            print(
                " 1. Create calendar\n 2. Add Event\n 3. View Events \n 4. View Last Entry \n 5. Exit \n \n"
            )
        else:
            print(
                " 1. Create calendar\n 2. Add Event\n 3. View Events \n 4. View Last Entry \n 4.5. View other calendar's events \n 5. Exit \n\n"
            )
        action = input('Enter your choice: ')
        if action == '1':
            month = input("Enter month (e.g 7 for 'July') : ")
            try:
                if int(month) in range(1, 13):
                    year = input('Enter year (e.g 2016) : ')
                    if int(year) >= now.year:
                        calendar_name = input('Enter your calendar name: ')
                        name = calendar_name
                        calendar_name = Calendar()
                        calendar_name.create_calendar(int(year), int(month))
                        count += 1  #increments every time a new calendar is created.
                        print('\n')
                        print('Calendar created.')
                        print('\n')
                    else:
                        print('You can only create events for future dates')
                else:
                    print('Sorry month entered should be between 1 to 12')
                    print('\n')
            except:
                print('Please key in month in numbers.')
                print('\n')
        elif action == '2':
            try:
                if calendar_name._days:
                    event_day = int(input("Add Event day: "))
                    if event_day in calendar_name._days:
                        event_name = input("Add Event name: ")
                        event_desc = input("Add Event description: ")
                        print(
                            calendar_name.add_event(event_day, event_name,
                                                    event_desc))
                        save(
                            name, calendar_name
                        )  # calls the save function in Calendar.py. This creates a json file.
                        print('\n')
                    else:
                        print('No such day in the {} month'.format(
                            calendar_name.calendar_month))
                        print('\n')
            except UnboundLocalError:
                print('No calendars created yet, Create a Calendar first')
                print("\n")
        elif action == '3':
            try:
                if calendar_name._days:
                    print(calendar_name.view_events())
            except UnboundLocalError:
                print('No calendars created yet, Create a Calendar first')
                print("\n")
        elif action == '4':
            try:
                if calendar_name._days:
                    print(calendar_name.view_last_event())
            except UnboundLocalError:
                print('No calendars created yet, Create a Calendar first')
                print("\n")
        elif action == '4.5':
            """
            Prints all the events in all the calendars created.
            Option only available if more than one calendar created.
            Calls except when no event has been added to any calendar thus no json file was created.
            """
            try:
                open_file()
                print("\n \n")
            except:
                print('No event added to any calendar')
                print('\n')
        elif action == '5':
            break
        else:
            print("Invalid choice: select again")
示例#3
0
文件: braian.py 项目: hancia/braian
class Braian(object):
    def __init__(self):
        self.engine = pyttsx3.init()
        self.engine.setProperty('rate', 130)
        self.engine.setProperty('volume', 0.9)

        self.contactnumber = 610890608
        self.BASE_PATH = "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/da417be9-5a0f-4e02-972a-d16c59ee77f8?subscription-key=855fe00606ef48ecb4dafc6a30b92845&verbose=true&timezoneOffset=0&q="
        self.calendar = Calendar()

    def say(self, text):
        self.engine.say(text)
        print(text)
        self.engine.runAndWait()

    def _replace(self, a):
        return a.replace(' ', "%20")

    def _get_request(self, message):
        return requests.get(self.BASE_PATH + self._replace(message)).json()

    def _best_intent(self, answer):
        return answer['topScoringIntent']['intent']

    def _serve_message(self, answer):
        intent = self._best_intent(answer)
        if intent == "Signal":
            self._signal_message(answer)
        elif intent == "None":
            self._none_message(answer)
        elif intent == "Calendar.Add":
            self._calendaradd(answer)
        elif intent == "Weather":
            self._checkweather(answer)
        else:
            self.say("No idea")

        drug_list = self.calendar.current_event()
        for i in drug_list:
            self.say("Please take {} now".format(i.text))

    def _checkweather(self, answer):
        weather = requests.get(
            'http://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22'
        ).json()
        temp = str(int(weather['main']['temp']) - 273)
        wind = weather['wind']['speed']
        self.say(
            "Today its {} degrees and the wind speed is {} kilometers per hour"
            .format(temp, wind))

    def _none_message(self, answer):
        self.say("Hi, how can i help you?")

    def _signal_message(self, answer):
        self.say("Sending SOS message to the number: {}".format(
            self.contactnumber))

    def _calendaradd(self, answer):
        try:
            for i in answer['entities']:
                type = str(i['type'])
                if type == 'time':
                    time = i['entity']
                elif type == "drug":
                    drug = i["entity"]
                elif type == "day":
                    day = i["entity"]
                elif type == "minutes":
                    minutes = i["entity"]

            event = Event(drug, day, time, minutes)
            self.calendar.add_event(event)
            self.say("I added your reminder")
        except:
            self.say("Bad message")

    def run(self):
        self.say("Hi, How can I help you my friend?")
        while (1):
            input_message = input()
            answer = self._get_request(input_message)
            self._serve_message(answer)