def display(self) -> None: """Draws all windows and sub-features, including titles and borders. """ # check if the screen size has changed self.update_parent_dimensions() # add header playing_str = "" if self._queue.first is not None: state = self._queue.first.state if state == 0: playing_str = " - Stopped [%s]: " % self._queue.first.time_str elif state == 1: playing_str = " - Playing [%s]: " % self._queue.first.time_str elif state == 2: playing_str = " - Paused [%s]: " % self._queue.first.time_str playing_str += self._queue.first.title if self._queue.length > 1: playing_str += " (+%d in queue)" % (self._queue.length - 1) self._header_window.attron(curses.A_BOLD) self._header_window.addstr(0, 0, " " * self._parent_x) self._header_window.addstr(0, 0, castero.__title__ + playing_str) # add footer footer_str = "" if self._status == "": # always display the status instead if needed if len(self._feeds) > 0: total_feeds = len(self._feeds) lengths_of_feeds = [ len(self._feeds[key].episodes) for key in self._feeds ] total_episodes = sum(lengths_of_feeds) median_episodes = helpers.median(lengths_of_feeds) footer_str += "Processed %d feeds with %d total episodes (av" \ "g. %d episodes, med. %d)" % ( total_feeds, total_episodes, total_episodes / total_feeds, median_episodes ) else: footer_str += "No feeds added" else: footer_str = self._status footer_str += " -- Press %s for help" % Config["key_help"] self._footer_window.attron(curses.A_BOLD) self._footer_window.addstr( 1, 0, " " * (self._footer_window.getmaxyx()[1] - 1)) footer_str = footer_str[:self._footer_window.getmaxyx()[1] - 1] self._footer_window.addstr(1, 0, footer_str) # add window borders self._header_window.hline(1, 0, 0, self._header_window.getmaxyx()[1]) self._footer_window.hline(0, 0, 0, self._footer_window.getmaxyx()[1]) # update display for current perspective self._perspectives[self._active_perspective].display()
def display(self) -> None: """Draws all windows and sub-features, including titles and borders. """ # check if the screen size has changed self.update_parent_dimensions() # check to see if menu contents have been invalidated if not self.menus_valid: for perspective_id in self._perspectives: self._perspectives[perspective_id].update_menus() self.menus_valid = True # update window colors self._header_window.bkgd(curses.color_pair(4)) self._footer_window.bkgd(curses.color_pair(4)) # add header playing_str = castero.__title__ if self._queue.first is not None: state = self._queue.first.state playing_str = ["Stopped", "Playing", "Paused"][state] + \ ": %s" % self._queue.first.title if self._queue.length > 1: playing_str += " (+%d in queue)" % (self._queue.length - 1) if helpers.is_true(Config["right_align_time"]): playing_str += ("[%s]" % self._queue.first.time_str ).rjust(self._header_window.getmaxyx()[1] - len(playing_str)) else: playing_str += " [%s]" % self._queue.first.time_str self._header_window.attron(curses.A_BOLD) self._header_window.addstr(0, 0, " " * self._header_window.getmaxyx()[1]) self._header_window.addstr(0, 0, playing_str) # add footer footer_str = "" if self._status == "" and not \ helpers.is_true(Config["disable_default_status"]): feeds = self.database.feeds() if len(feeds) > 0: total_feeds = len(feeds) lengths_of_feeds = \ [len(self.database.episodes(feed)) for feed in feeds] total_episodes = sum(lengths_of_feeds) median_episodes = helpers.median(lengths_of_feeds) footer_str += "Found %d feeds with %d total episodes (avg." \ " %d episodes, med. %d)" % ( total_feeds, total_episodes, total_episodes / total_feeds, median_episodes ) else: footer_str += "No feeds added" else: footer_str = self._status if footer_str != "": footer_str += " -- Press %s for help" % Config["key_help"] self._footer_window.attron(curses.A_BOLD) footer_str = footer_str[:self._footer_window.getmaxyx()[1] - 1] self._footer_window.addstr(1, 0, footer_str) # add window borders self._header_window.hline(1, 0, 0, self._header_window.getmaxyx()[1]) self._footer_window.hline(0, 0, 0, self._footer_window.getmaxyx()[1]) # update display for current perspective self._perspectives[self._active_perspective].display()
def test_median_3(): values = [1, 2, 3] result = helpers.median(values) assert result == 2
def test_median_1(): values = [1] result = helpers.median(values) assert result == 1
def test_median_empty(): values = [] result = helpers.median(values) assert result is None