def gen_walker(self): """Creates a SimpleFocusListWalker :returns: TODO """ return urwid.MonitoredList([ self.type_aware_wrap(choice) for choice in self.file_walker.get_dir_list() ])
def __init__(self, server=None, palette='default', keymap='default', debug=False, verbose=False, disable_sync=False, disable_background_sync=False, fetch_missing_refs=False, path=config.DEFAULT_CONFIG_PATH): self.server = server self.config = config.Config(server, palette, keymap, path) if debug: level = logging.DEBUG elif verbose: level = logging.INFO else: level = logging.WARNING logging.basicConfig(filename=self.config.log_file, filemode='w', format='%(asctime)s %(message)s', level=level) # Python2.6 Logger.setLevel doesn't convert string name # to integer code. Here, we set the requests logger level to # be less verbose, since our logging output duplicates some # requests logging content in places. req_level_name = 'WARN' req_logger = logging.getLogger('requests') if sys.version_info < (2, 7): level = logging.getLevelName(req_level_name) req_logger.setLevel(level) else: req_logger.setLevel(req_level_name) self.log = logging.getLogger('mqtty.App') self.log.debug("Starting") self.lock_fd = open(self.config.lock_file, 'w') try: fcntl.lockf(self.lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) except IOError: print("error: another instance of mqtty is running for: %s" % self.config.server['name']) sys.exit(1) self.project_cache = ProjectCache() self.ring = mywid.KillRing() self.input_buffer = [] webbrowser.register('xdg-open', None, BackgroundBrowser("xdg-open")) self.fetch_missing_refs = fetch_missing_refs self.config.keymap.updateCommandMap() # self.search = search.SearchCompiler(self.config.username) self.search = None self.db = db.Database(self, self.config.dburi, self.search) self.sync = sync.Sync(self, disable_background_sync) self.status = StatusHeader(self) self.header = urwid.AttrMap(self.status, 'header') self.screens = urwid.MonitoredList() self.breadcrumbs = BreadCrumbBar() self.screens.set_modified_callback( functools.partial(self.breadcrumbs._update, self.screens)) if self.config.breadcrumbs: self.footer = urwid.AttrMap(self.breadcrumbs, 'footer') else: self.footer = None screen = view_topic_list.TopicListView(self) self.status.update(title=screen.title) self.updateStatusQueries() self.frame = urwid.Frame(body=screen, footer=self.footer) self.loop = urwid.MainLoop(self.frame, palette=self.config.palette.getPalette(), handle_mouse=self.config.handle_mouse, unhandled_input=self.unhandledInput, input_filter=self.inputFilter) self.sync_pipe = self.loop.watch_pipe(self.refresh) self.error_queue = queue.Queue() self.error_pipe = self.loop.watch_pipe(self._errorPipeInput) self.logged_warnings = set() self.command_pipe = self.loop.watch_pipe(self._commandPipeInput) self.command_queue = queue.Queue() warnings.showwarning = self._showWarning has_subscribed_projects = False # FIXME: add a feature to subscribe topics # with self.db.getSession() as session: # if session.getProjects(subscribed=True): # has_subscribed_projects = True if not has_subscribed_projects: self.welcome() self.loop.screen.tty_signal_keys(start='undefined', stop='undefined') # self.loop.screen.set_terminal_properties(colors=88) self.startSocketListener() if not disable_sync: self.sync_thread = threading.Thread(target=self.sync.run, args=(self.sync_pipe, )) self.sync_thread.daemon = True self.sync_thread.start() else: self.sync_thread = None self.sync.offline = True self.status.update(offline=True)
def __init__(self, content): self.content = urwid.MonitoredList(content) self.content.modified = self._modified self.focus = (0, 0) # everyone can share the same divider widget self.div = urwid.Divider("-")