Mercurial > libervia-backend
diff sat_frontends/tools/misc.py @ 2562:26edcf3a30eb
core, setup: huge cleaning:
- moved directories from src and frontends/src to sat and sat_frontends, which is the recommanded naming convention
- move twisted directory to root
- removed all hacks from setup.py, and added missing dependencies, it is now clean
- use https URL for website in setup.py
- removed "Environment :: X11 Applications :: GTK", as wix is deprecated and removed
- renamed sat.sh to sat and fixed its installation
- added python_requires to specify Python version needed
- replaced glib2reactor which use deprecated code by gtk3reactor
sat can now be installed directly from virtualenv without using --system-site-packages anymore \o/
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 02 Apr 2018 19:44:50 +0200 |
parents | frontends/src/tools/misc.py@1dfc5516dead |
children | b4ecbcc2fd08 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sat_frontends/tools/misc.py Mon Apr 02 19:44:50 2018 +0200 @@ -0,0 +1,90 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +# SAT helpers methods for plugins +# Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +class InputHistory(object): + + def _updateInputHistory(self, text=None, step=None, callback=None, mode=""): + """Update the lists of previously sent messages. Several lists can be + handled as they are stored in a dictionary, the argument "mode" being + used as the entry key. There's also a temporary list to allow you play + with previous entries before sending a new message. Parameters values + can be combined: text is None and step is None to initialize a main + list and the temporary one, step is None to update a list and + reinitialize the temporary one, step is not None to update + the temporary list between two messages. + @param text: text to be saved. + @param step: step to move the temporary index. + @param callback: method to display temporary entries. + @param mode: the dictionary key for main lists. + """ + if not hasattr(self, "input_histories"): + self.input_histories = {} + history = self.input_histories.setdefault(mode, []) + if step is None and text is not None: + # update the main list + if text in history: + history.remove(text) + history.append(text) + length = len(history) + if step is None or length == 0: + # prepare the temporary list and index + self.input_history_tmp = history[:] + self.input_history_tmp.append("") + self.input_history_index = length + if step is None: + return + # update the temporary list + if text is not None: + # save the current entry + self.input_history_tmp[self.input_history_index] = text + # move to another entry if possible + index_tmp = self.input_history_index + step + if index_tmp >= 0 and index_tmp < len(self.input_history_tmp): + if callback is not None: + callback(self.input_history_tmp[index_tmp]) + self.input_history_index = index_tmp + + +class FlagsHandler(object): + """Small class to handle easily option flags + + the instance is initialized with an iterable + then attribute return True if flag is set, False else. + WARNING: If a flag is checked, it is removed (i.e. unset) + this is done to use bool(flags_handler) to check if all flags + have been used + """ + + def __init__(self, flags): + self.flags = set(flags or []) + + def __getattr__(self, flag): + try: + self.flags.remove(flag) + except KeyError: + return False + else: + return True + + def __len__(self): + return len(self.flags) + + def __iter__(self): + return self.flags.__iter__()