annotate libervia/backend/tools/common/ansi.py @ 4226:3f7ca590a5da

cli (pubsub): use `PEP` when service is not specified in error message.
author Goffi <goffi@goffi.org>
date Tue, 05 Mar 2024 17:31:56 +0100
parents 4b842c1fb686
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
3
3480
7550ae9cfbac Renamed the project from "Salut à Toi" to "Libervia":
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
4 # Libervia: an XMPP client
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
6
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
11
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
16
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
19
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
20 import sys
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
21
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
22
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
23 class ANSI(object):
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
24
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
25 ## ANSI escape sequences ##
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
26 RESET = "\033[0m"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
27 NORMAL_WEIGHT = "\033[22m"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
28 FG_BLACK, FG_RED, FG_GREEN, FG_YELLOW, FG_BLUE, FG_MAGENTA, FG_CYAN, FG_WHITE = (
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
29 "\033[3%dm" % nb for nb in range(8)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
30 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
31 BOLD = "\033[1m"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
32 BLINK = "\033[5m"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
33 BLINK_OFF = "\033[25m"
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
34
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
35 @classmethod
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
36 def color(cls, *args):
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
37 """output text using ANSI codes
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
38
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
39 this method simply merge arguments, and add RESET if is not the last arguments
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
40 """
2196
d3e48c9a255e plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents: 2167
diff changeset
41 # XXX: we expect to have at least one argument
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
42 if args[-1] != cls.RESET:
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
43 args = list(args)
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
44 args.append(cls.RESET)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
45 return "".join(args)
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
46
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
47
2165
a0fbb2b11fd0 tools (common): fixed tty detection when isatty is not available
Goffi <goffi@goffi.org>
parents: 2154
diff changeset
48 try:
a0fbb2b11fd0 tools (common): fixed tty detection when isatty is not available
Goffi <goffi@goffi.org>
parents: 2154
diff changeset
49 tty = sys.stdout.isatty()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
50 except (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
51 AttributeError,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
52 TypeError,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
53 ): # FIXME: TypeError is here for Pyjamas, need to be removed
2165
a0fbb2b11fd0 tools (common): fixed tty detection when isatty is not available
Goffi <goffi@goffi.org>
parents: 2154
diff changeset
54 tty = False
a0fbb2b11fd0 tools (common): fixed tty detection when isatty is not available
Goffi <goffi@goffi.org>
parents: 2154
diff changeset
55 if not tty:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
56 #  we don't want ANSI escape codes if we are not outputing to a tty!
2154
7cbffd754b4a core (constants), tools (common/ansi): moved ANSI escape codes to a dedicated class, with helper methods
Goffi <goffi@goffi.org>
parents:
diff changeset
57 for attr in dir(ANSI):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
58 if isinstance(getattr(ANSI, attr), str):
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
59 setattr(ANSI, attr, "")
2165
a0fbb2b11fd0 tools (common): fixed tty detection when isatty is not available
Goffi <goffi@goffi.org>
parents: 2154
diff changeset
60 del tty