annotate libervia/cli/cmd_application.py @ 4306:94e0968987cd

plugin XEP-0033: code modernisation, improve delivery, data validation: - Code has been rewritten using Pydantic models and `async` coroutines for data validation and cleaner element parsing/generation. - Delivery has been completely rewritten. It now works even if server doesn't support multicast, and send to local multicast service first. Delivering to local multicast service first is due to bad support of XEP-0033 in server (notably Prosody which has an incomplete implementation), and the current impossibility to detect if a sub-domain service handles fully multicast or only for local domains. This is a workaround to have a good balance between backward compatilibity and use of bandwith, and to make it work with the incoming email gateway implementation (the gateway will only deliver to entities of its own domain). - disco feature checking now uses `async` corountines. `host` implementation still use Deferred return values for compatibility with legacy code. rel 450
author Goffi <goffi@goffi.org>
date Thu, 26 Sep 2024 16:12:01 +0200
parents 0d7bb4df2343
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
4075
47401850dec6 refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents: 4074
diff changeset
3 # Libervia CLI
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3377
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
19 from . import base
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
20 from libervia.backend.core.i18n import _
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
21 from libervia.backend.tools.common import data_format
4075
47401850dec6 refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents: 4074
diff changeset
22 from libervia.cli.constants import Const as C
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
23
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 __commands__ = ["Application"]
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
25
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
26
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 class List(base.CommandBase):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 """List available applications"""
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 def __init__(self, host):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 super(List, self).__init__(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
32 host,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
33 "list",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
34 use_profile=False,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
35 use_output=C.OUTPUT_LIST,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
36 help=_("list available applications"),
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
38
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 def add_parser_options(self):
3377
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
40 # FIXME: "extend" would be better here, but it's only available from Python 3.8+
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
41 # so we use "append" until minimum version of Python is raised.
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 self.parser.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 "-f",
3377
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
44 "--filter",
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
45 dest="filters",
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
46 action="append",
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 choices=["available", "running"],
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
48 help=_("show applications with this status"),
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
50
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 async def start(self):
3377
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
52
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
53 # FIXME: this is only needed because we can't use "extend" in
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
54 # add_parser_options, see note there
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
55 if self.args.filters:
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
56 self.args.filters = list(set(self.args.filters))
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
57 else:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
58 self.args.filters = ["available"]
3377
297389b1563c jp (application/list): don't use `extend` in argument as in it Python 3.8+ only
Goffi <goffi@goffi.org>
parents: 3374
diff changeset
59
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3563
diff changeset
61 found_apps = await self.host.bridge.applications_list(self.args.filters)
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 except Exception as e:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 self.disp(f"can't get applications list: {e}", error=True)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 self.host.quit(C.EXIT_BRIDGE_ERRBACK)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 await self.output(found_apps)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 self.host.quit()
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
68
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
69
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 class Start(base.CommandBase):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 """Start an application"""
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
72
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 def __init__(self, host):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 super(Start, self).__init__(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 host, "start", use_profile=False, help=_("start an application")
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
77
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 def add_parser_options(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 self.parser.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 "name",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 help=_("name of the application to start"),
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
83
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 async def start(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3563
diff changeset
86 await self.host.bridge.application_start(
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 self.args.name,
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 "",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 except Exception as e:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 self.disp(f"can't start {self.args.name}: {e}", error=True)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 self.host.quit(C.EXIT_BRIDGE_ERRBACK)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 self.host.quit()
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
95
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
96
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 class Stop(base.CommandBase):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
98
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 def __init__(self, host):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
100 super(Stop, self).__init__(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 host, "stop", use_profile=False, help=_("stop a running application")
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
103
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 def add_parser_options(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 id_group = self.parser.add_mutually_exclusive_group(required=True)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 id_group.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 "name",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
108 nargs="?",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
109 help=_("name of the application to stop"),
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
111 id_group.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 "-i",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 "--id",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 help=_("identifier of the instance to stop"),
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
115 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
116
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 async def start(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 try:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
119 if self.args.name is not None:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 args = [self.args.name, "name"]
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 args = [self.args.id, "instance"]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3563
diff changeset
123 await self.host.bridge.application_stop(
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 *args,
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 "",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 except Exception as e:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 if self.args.name is not None:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
129 self.disp(f"can't stop application {self.args.name!r}: {e}", error=True)
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
131 self.disp(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
132 f"can't stop application instance with id {self.args.id!r}: {e}",
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
133 error=True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
134 )
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 self.host.quit(C.EXIT_BRIDGE_ERRBACK)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
136 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 self.host.quit()
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
138
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
139
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
140 class Exposed(base.CommandBase):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
141
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 def __init__(self, host):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 super(Exposed, self).__init__(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
144 host,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
145 "exposed",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
146 use_profile=False,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
147 use_output=C.OUTPUT_DICT,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
148 help=_("show data exposed by a running application"),
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
150
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
151 def add_parser_options(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 id_group = self.parser.add_mutually_exclusive_group(required=True)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 id_group.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
154 "name",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 nargs="?",
3563
267e4987b58b doc: fix remaining SàT references/typos + add `libervia-cli` missing commands
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
156 help=_("name of the application to check"),
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 id_group.add_argument(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 "-i",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 "--id",
3563
267e4987b58b doc: fix remaining SàT references/typos + add `libervia-cli` missing commands
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
161 help=_("identifier of the instance to check"),
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
162 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
163
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 async def start(self):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 try:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 if self.args.name is not None:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 args = [self.args.name, "name"]
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 args = [self.args.id, "instance"]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3563
diff changeset
170 exposed_data_raw = await self.host.bridge.application_exposed_get(
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
171 *args,
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 "",
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
173 )
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
174 except Exception as e:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
175 if self.args.name is not None:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
176 self.disp(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
177 f"can't get values exposed from application {self.args.name!r}: {e}",
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
178 error=True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
179 )
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
180 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
181 self.disp(
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
182 f"can't values exposed from application instance with id {self.args.id!r}: {e}",
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
183 error=True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
184 )
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
185 self.host.quit(C.EXIT_BRIDGE_ERRBACK)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
186 else:
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
187 exposed_data = data_format.deserialise(exposed_data_raw)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
188 await self.output(exposed_data)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
189 self.host.quit()
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
190
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
191
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 class Application(base.CommandBase):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 subcommands = (List, Start, Stop, Exposed)
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
194
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
195 def __init__(self, host):
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
196 super(Application, self).__init__(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
197 host,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
198 "application",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
199 use_profile=False,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
200 help=_("manage applications"),
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4075
diff changeset
201 aliases=["app"],
3374
47755614b82a jp (application): new `application` (or `app`) commands:
Goffi <goffi@goffi.org>
parents:
diff changeset
202 )