def test_send_to_controller(self):
        """Tests to see if a method is dynamically invoked"""
        req = RequestHandler(controller)
        req.controller.typed_method = mock.Mock()

        req.send_to_controller(['method','data'])

        self.assertTrue(hasattr(req.controller, 'typed_method')), \
            "typed_method does not exist in Controller"
        self.assertTrue(req.controller.typed_method.called)
Example #2
0
 def __init__(self, screen, content_manager):
     super(CursedUI, self).__init__()
     self.screen = screen
     self.content_manager = content_manager
     self.request_handler = RequestHandler(content_manager)
Example #3
0
class CursedUI(CursedObject):
    """Handles keypress input from the user"""

    def __init__(self, screen, content_manager):
        super(CursedUI, self).__init__()
        self.screen = screen
        self.content_manager = content_manager
        self.request_handler = RequestHandler(content_manager)

    def __running__(self):
        """Runs an infinite loop so long as the request is not an exit cmd"""
        request = ""
        while request != "exit":
            request = self.get_user_input()
            self.handle_request(request)

        self.content_manager.exit()

    def get_user_input(self):
        """Gets the user's input and acts appropriately"""
        user_in = self.screen.getch()  # Gets user input

        # Enter Key
        if user_in == 10:
            return self.content_manager.handle_execute().lower()

        # Escape
        if user_in == 27:
            self.content_manager.exit()
            return "exit"

        # Spacebar
        if user_in == ord(" "):
            return "pause"

        # i (text entry)
        if user_in == ord("i") or user_in == ord("I"):
            result = self.handle_text_entry()
            self.content_manager.menu.draw()
            return result

        # n (next)
        if user_in == ord("n"):
            return "next"

        # Page Increment/Decrement
        if user_in == ord("["):
            self.content_manager.change_page(-1)
            return
        if user_in == ord("]"):
            self.content_manager.change_page(1)
            return

        # Increment or Decrement
        if user_in == curses.KEY_NPAGE:
            self.content_manager.adjust_selection(10)
        if user_in == curses.KEY_PPAGE:
            self.content_manager.adjust_selection(-10)
        if user_in == curses.KEY_DOWN:  # down arrow
            self.content_manager.adjust_selection(1)
        if user_in == curses.KEY_UP:  # up arrow
            self.content_manager.adjust_selection(-1)
        return

    def handle_text_entry(self):
        """Handles full-text entry, instead of keypresses"""
        curses.echo()
        height, width = self.screen.getmaxyx()
        self.screen.addstr(height - 2, 2, "> ")
        self.screen.refresh()
        rin = self.screen.getstr(height - 2, 4, width - 4)
        curses.noecho()
        return rin

    def handle_request(self, request):
        """This is where you do things with the request"""
        if request is None:
            return

        self.request_handler.parse(request)
        if (
            "artist" in request or "album" in request or "song" in request
        ) and request not in self.content_manager.most_recent_searches:
            self.content_manager.most_recent_searches.append(request)
        self.content_manager.menu.draw()