def submit_input_text(self, proc_view=None): if not self.nlp: self.nlp = ModuleSelector() self.nlp.automate.response_callback = self.handle_response self.proc_view = proc_view self.process_text_edit.save_cursor_pos() query = self.process_text_edit.get_text() query_parts = query.split(".") if query == "": return try: for query_part in query_parts: task = self.nlp.prepare(query_part)[0] if task is None: modal.ModalMessageWindow( self.main_window, "Failed to understand what task you wanted to perform. Please check spelling mistakes " + "or simplify your sentence and try again!", "Error", modal.MSG_ERROR, ) return except Exception: traceback.print_exc() self.process_text_edit.restore_cursor_pos() modal.ModalMessageWindow(self.main_window, str(sys.exc_info()[1]), "Oops! Something went wrong!", modal.MSG_ERROR) return self.process_text_edit.set_cursor_pos(0) self.process_text_edit.clear()
def load_selector(spinner): click.secho("· Loading models... ", bold=True) with spinner: n = ModuleSelector() print("", end="\x1b[1K\r") click.secho("---> DONE", fg="green", bold=True) click.secho("· Natural language processing ready!", bold=True) return n
def selector(monkeymodule, session_user_with_config): """ Yields a module selector This fixture will only be executed once since the scope is session, this prevents having to load the models for every test. """ # mock settings everywhere monkeymodule.setattr("lib.selector.selector.SETTINGS", session_user_with_config) monkeymodule.setattr("lib.automate.SETTINGS", session_user_with_config) monkeymodule.setattr("lib.automate.modules.schedule.SETTINGS", session_user_with_config) selector = ModuleSelector() yield selector
import sys sys.path.append(".") sys.path.append("..") from lib import Error # noqa: E402 from lib.selector.selector import ModuleSelector # noqa: E402 from lib.settings import load_settings # noqa: E402 load_settings() n = ModuleSelector() # Enable the CalDav server before running the following try: text = "Reschedule meeting with John to 21:00" response = n.run(text) print(response) except Error as err: print(err, file=sys.stdout)
class DesignView(QtWidgets.QWidget): def __init__(self, main_window, *args, **kwargs): super(DesignView, self).__init__(*args, **kwargs) self.main_window = main_window self.model = self.main_window.model layout = QtWidgets.QGridLayout() layout.setVerticalSpacing(8) layout.setHorizontalSpacing(8) # TODO(alexander): should all models be loaded before application starts instead? self.nlp = None self.title = QtWidgets.QLabel("Design") self.title.setObjectName("viewTitle") self.title.setMaximumHeight(48) layout.addWidget(self.title) self.process_text_edit = ProcessTextEditView(self, "") self.process_text_edit.setMaximumHeight(180) self.main_process = proc_models.EntryPointModel() self.model.append_process(self.main_process) self.process_editor = ProcessEditorView(self, self.model) layout.addWidget(self.process_text_edit) layout.addWidget(self.process_editor) self.setLayout(layout) self.save_shortcut = QtWidgets.QShortcut(QtGui.QKeySequence("Ctrl+S"), self) self.save_shortcut.activated.connect(self.save_model) self.load_shortcut = QtWidgets.QShortcut(QtGui.QKeySequence("Ctrl+F"), self) self.load_shortcut.activated.connect(self.load_model) self.select_all_shortcut = QtWidgets.QShortcut( QtGui.QKeySequence("Ctrl+A"), self) self.select_all_shortcut.activated.connect( self.process_editor.select_all_processes) self.copy_all_shortcut = QtWidgets.QShortcut( QtGui.QKeySequence("Ctrl+C"), self) self.copy_all_shortcut.activated.connect( self.process_editor.copy_selection) self.paste_all_shortcut = QtWidgets.QShortcut( QtGui.QKeySequence("Ctrl+V"), self) self.paste_all_shortcut.activated.connect( self.process_editor.paste_selection) self.delete_selected_shortcut = QtWidgets.QShortcut( QtGui.QKeySequence("Delete"), self) self.delete_selected_shortcut.activated.connect( self.process_editor.remove_selected_processes) self.cancel_actions_shortcut = QtWidgets.QShortcut( QtGui.QKeySequence("Escape"), self) self.cancel_actions_shortcut.activated.connect(self.cancel_actions) def save_model(self): if self.model.absolute_path: self.model.save() self.main_window.set_info_message("Wrote " + self.model.absolute_path) else: self.main_window.content.save_view.filename_view.setFocus() self.main_window.content.save_view.filename_view.selectAll() self.main_window.set_active_view(1) def load_model(self): self.main_window.content.load_view.filename_view.setFocus() self.main_window.content.load_view.filename_view.selectAll() self.main_window.set_active_view(2) def rebuild_from_loaded_model(self): for view in self.process_editor.process_views.values(): view.close() self.process_editor.process_views.clear() for id, proc in self.model.processes.items(): view = self.process_editor.create_process_view(proc) self.process_editor.process_views[id] = view view.show() for view in self.process_editor.process_views.values(): try: other_view = self.process_editor.process_views[ view.model.out_next] view.out_connector.connect(other_view.in_connector) except Exception: pass self.update() self.main_window.set_info_message("Loaded " + self.model.absolute_path) def cancel_actions(self): self.process_editor.deselect_all_processes() self.process_text_edit.cancel_editing() def handle_response(self, query, task, followup): def callback(followup, cancel=False): # welcome to callback hell! try: if cancel: self.handle_response(query, task, None) return followup = followup.callback() self.handle_response(query, task, followup) except Exception: if self.main_window.modal: self.main_window.modal.close_window() traceback.print_exc() self.process_text_edit.restore_cursor_pos() modal.ModalMessageWindow(self.main_window, str(sys.exc_info()[1]), "Oops! Something went wrong!", modal.MSG_ERROR) if followup: if self.main_window.modal: self.main_window.modal.close_window() folloup_modal = None # noqa: F841 it is used to setup callbacks! if isinstance(followup, MultiFollowup): followup_modal = modal.ModalMultiFollowupWindow( self.main_window, followup) followup_modal.choices.setFocus() elif isinstance(followup, StringFollowup): followup_modal = modal.ModalStringFollowupWindow( self.main_window, followup) followup_modal.answer_input.setFocus() elif isinstance(followup, BooleanFollowup): followup_modal = modal.ModalBooleanFollowupWindow( self.main_window, followup) followup_modal.setFocus() if followup_modal: followup_modal.callback = callback else: self.create_process_block_from_task(query, task) return task def create_process_block_from_task(self, query, task): model = None view = None query = query.strip() if isinstance(task, Send): model = proc_models.SendModel() model.recipients = ", ".join(task.to) model.when = str(task.when) model.body = str(task.body) elif isinstance(task, Reminder): model = proc_models.ReminderModel() model.recipients = ", ".join(task.to) model.when = str(task.when) model.body = str(task.body) elif isinstance(task, Schedule): model = proc_models.ScheduleModel() model.recipients = ", ".join(task.to) model.when = str(task.when) model.body = str(task.body) else: modal.ModalMessageWindow( self.main_window, "Failed to understand what task you wanted to perform. Please check spelling mistakes " + "or simplify your sentence and try again!", "Error", modal.MSG_ERROR, ) return if model: model.query = query # FIXME(alexander): uses same views for all tasks!!! view = SendEmailView(model) if not self.proc_view: self.proc_view = ProcessView(self.process_editor, view, model) self.proc_view.show() self.process_editor.append_process(self.proc_view, model) self.proc_view = None else: self.proc_view.title.setText(model.name) self.proc_view.layout.replaceWidget(self.proc_view.view, view) self.proc_view.view.close() self.proc_view.view = view self.model.remove_process(self.proc_view.model) self.model.append_process(model) model.id = self.proc_view.model.id self.proc_view.model = model self.update() def submit_input_text(self, proc_view=None): if not self.nlp: self.nlp = ModuleSelector() self.nlp.automate.response_callback = self.handle_response self.proc_view = proc_view self.process_text_edit.save_cursor_pos() query = self.process_text_edit.get_text() query_parts = query.split(".") if query == "": return try: for query_part in query_parts: task = self.nlp.prepare(query_part)[0] if task is None: modal.ModalMessageWindow( self.main_window, "Failed to understand what task you wanted to perform. Please check spelling mistakes " + "or simplify your sentence and try again!", "Error", modal.MSG_ERROR, ) return except Exception: traceback.print_exc() self.process_text_edit.restore_cursor_pos() modal.ModalMessageWindow(self.main_window, str(sys.exc_info()[1]), "Oops! Something went wrong!", modal.MSG_ERROR) return self.process_text_edit.set_cursor_pos(0) self.process_text_edit.clear()