annotate frontends/src/tools/misc.py @ 2532:772447ec070f

jp: pubsub options refactoring: There is now only "use_pubsub", and specification are set using "pubsub_flags" argument when instantiating CommandBase. Options are more Python Zen compliant by using explicit arguments for item, draft, url instead of trying to guess with magic keyword and type detection. Pubsub node and item are now always using respecively "-n" and "-i" even when required, this way shell history can be used to change command more easily, and it's globally less confusing for user. if --pubsub-url is used, elements can be overwritten with individual option (e.g. change item id with --item). New "use_draft" argument in CommandBase, to re-use current draft or open a file path as draft. Item can now be specified when using a draft. If it already exists, its content will be added to current draft (with a separator), to avoid loosing data. common.BaseEdit.getItemPath could be simplified thanks to those changes. Pubsub URI handling has been moved to base.py.
author Goffi <goffi@goffi.org>
date Wed, 21 Mar 2018 19:13:22 +0100
parents 1dfc5516dead
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
1 #!/usr/bin/env python2
671
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
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
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
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
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
23 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
24 """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
25 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
26 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
27 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
28 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
29 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
30 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
31 the temporary list between two messages.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
32 @param text: text to be saved.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
33 @param step: step to move the temporary index.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
34 @param callback: method to display temporary entries.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
35 @param mode: the dictionary key for main lists.
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
36 """
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
37 if not hasattr(self, "input_histories"):
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
38 self.input_histories = {}
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
39 history = self.input_histories.setdefault(mode, [])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
40 if step is None and text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
41 # update the main list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
42 if text in history:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
43 history.remove(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
44 history.append(text)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
45 length = len(history)
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
46 if step is None or length == 0:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
47 # prepare the temporary list and index
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
48 self.input_history_tmp = history[:]
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
49 self.input_history_tmp.append("")
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
50 self.input_history_index = length
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
51 if step is None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
52 return
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
53 # update the temporary list
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
54 if text is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
55 # save the current entry
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
56 self.input_history_tmp[self.input_history_index] = text
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
57 # move to another entry if possible
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
58 index_tmp = self.input_history_index + step
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
59 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
60 if callback is not None:
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
61 callback(self.input_history_tmp[index_tmp])
4e691a231763 frontend, primitivus: added input history (mode-wise)
souliane <souliane@mailoo.org>
parents:
diff changeset
62 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
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
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
65 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
66 """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
67
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
68 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
69 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
70 WARNING: If a flag is checked, it is removed (i.e. unset)
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
71 this is done to use bool(flags_handler) to check if all 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 have been used
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
73 """
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 __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
76 self.flags = set(flags or [])
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
77
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
78 def __getattr__(self, flag):
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
79 try:
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
80 self.flags.remove(flag)
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
81 except KeyError:
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
82 return False
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
83 else:
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
84 return True
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
85
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
86 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
87 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
88
1dfc5516dead frontends (tools/misc): new FlagsHandler class, a simple class to help handling option flags
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
89 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
90 return self.flags.__iter__()