Mercurial > libervia-backend
annotate libervia/frontends/tools/misc.py @ 4119:ece304ec7077
plugin XEP-0167: fix key used to store metadata:
rel 424
| author | Goffi <goffi@goffi.org> |
|---|---|
| date | Tue, 03 Oct 2023 15:18:25 +0200 |
| parents | 26b7ed2817da |
| children |
| 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): |
|
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3604
diff
changeset
|
22 def _update_input_history(self, text=None, step=None, callback=None, mode=""): |
|
671
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 |
|
3604
80815f2f12cf
frontends (tools/misc): `FlagsHandler.__getitems__` now returns attribute
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
79 def __getitem__(self, flag): |
|
80815f2f12cf
frontends (tools/misc): `FlagsHandler.__getitems__` now returns attribute
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
80 return getattr(self, flag) |
|
80815f2f12cf
frontends (tools/misc): `FlagsHandler.__getitems__` now returns attribute
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
81 |
|
2531
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 __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
|
83 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
|
84 |
|
1dfc5516dead
frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
85 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
|
86 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
|
87 |
|
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 @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
|
89 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
|
90 """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
|
91 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
|
92 |
|
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 @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
|
94 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
|
95 """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
|
96 return self.flags.difference(self._used_flags) |
