Mercurial > libervia-backend
annotate sat_frontends/tools/misc.py @ 3388:cc288ec8ec1a
core: use utils.asDeferred for `launchCallback` so coroutines can be used
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 12 Nov 2020 14:53:15 +0100 |
parents | 559a625a236b |
children | 80815f2f12cf |
rev | line source |
---|---|
3137 | 1 #!/usr/bin/env python3 |
2 | |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT helpers methods for plugins |
1766 | 5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
671
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 class InputHistory(object): |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 def _updateInputHistory(self, text=None, step=None, callback=None, mode=""): |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 """Update the lists of previously sent messages. Several lists can be |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
24 handled as they are stored in a dictionary, the argument "mode" being |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 used as the entry key. There's also a temporary list to allow you play |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 with previous entries before sending a new message. Parameters values |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 can be combined: text is None and step is None to initialize a main |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 list and the temporary one, step is None to update a list and |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 reinitialize the temporary one, step is not None to update |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 the temporary list between two messages. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 @param text: text to be saved. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 @param step: step to move the temporary index. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 @param callback: method to display temporary entries. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 @param mode: the dictionary key for main lists. |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 """ |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
36 if not hasattr(self, "input_histories"): |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
37 self.input_histories = {} |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 history = self.input_histories.setdefault(mode, []) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
39 if step is None and text is not None: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
40 # update the main list |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
41 if text in history: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
42 history.remove(text) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 history.append(text) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 length = len(history) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
45 if step is None or length == 0: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 # prepare the temporary list and index |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 self.input_history_tmp = history[:] |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 self.input_history_tmp.append("") |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
49 self.input_history_index = length |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 if step is None: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 return |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 # update the temporary list |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 if text is not None: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 # save the current entry |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
55 self.input_history_tmp[self.input_history_index] = text |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
56 # move to another entry if possible |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 index_tmp = self.input_history_index + step |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
58 if index_tmp >= 0 and index_tmp < len(self.input_history_tmp): |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
59 if callback is not None: |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 callback(self.input_history_tmp[index_tmp]) |
4e691a231763
frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 self.input_history_index = index_tmp |
2531
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
62 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
63 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
64 class FlagsHandler(object): |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
65 """Small class to handle easily option flags |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
66 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
67 the instance is initialized with an iterable |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
68 then attribute return True if flag is set, False else. |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
69 """ |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
70 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
71 def __init__(self, flags): |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
72 self.flags = set(flags or []) |
2615
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
73 self._used_flags = set() |
2531
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
74 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
75 def __getattr__(self, flag): |
2615
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
76 self._used_flags.add(flag) |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
77 return flag in self.flags |
2531
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
78 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
79 def __len__(self): |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
80 return len(self.flags) |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
81 |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
82 def __iter__(self): |
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
83 return self.flags.__iter__() |
2615
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
84 |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
85 @property |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
86 def all_used(self): |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
87 """Return True if all flags have been used""" |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
88 return self._used_flags.issuperset(self.flags) |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
89 |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
90 @property |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
91 def unused(self): |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
92 """Return flags which has not been used yet""" |
b4ecbcc2fd08
tools (misc): do not remove flags while using them anymore, instead added "all_used" and "unused" properties in FlagsHandler
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
93 return self.flags.difference(self._used_flags) |