Mercurial > libervia-backend
annotate libervia/cli/cmd_list.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 | 89a0999884ac |
children |
rev | line source |
---|---|
3458 | 1 #!/usr/bin/env python3 |
2 | |
3 | |
4075
47401850dec6
refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents:
4074
diff
changeset
|
4 # Libervia CLI |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
3458 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 | |
21 import json | |
22 import os | |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
23 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
24 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
|
25 from libervia.cli import common |
47401850dec6
refactoring: rename `libervia.frontends.jp` to `libervia.cli`
Goffi <goffi@goffi.org>
parents:
4074
diff
changeset
|
26 from libervia.cli.constants import Const as C |
3458 | 27 from . import base |
28 | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
29 __commands__ = ["List"] |
3458 | 30 |
31 FIELDS_MAP = "mapping" | |
32 | |
33 | |
34 class Get(base.CommandBase): | |
35 def __init__(self, host): | |
36 base.CommandBase.__init__( | |
37 self, | |
38 host, | |
39 "get", | |
40 use_verbose=True, | |
41 use_pubsub=True, | |
42 pubsub_flags={C.MULTI_ITEMS}, | |
43 pubsub_defaults={"service": _("auto"), "node": _("auto")}, | |
44 use_output=C.OUTPUT_LIST_XMLUI, | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
45 help=_("get lists"), |
3458 | 46 ) |
47 | |
48 def add_parser_options(self): | |
49 pass | |
50 | |
51 async def start(self): | |
52 await common.fill_well_known_uri(self, os.getcwd(), "tickets", meta_map={}) | |
53 try: | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
54 lists_data = data_format.deserialise( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
55 await self.host.bridge.list_get( |
3458 | 56 self.args.service, |
57 self.args.node, | |
58 self.args.max, | |
59 self.args.items, | |
60 "", | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
61 self.get_pubsub_extra(), |
3458 | 62 self.profile, |
63 ), | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
64 type_check=list, |
3458 | 65 ) |
66 except Exception as e: | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
67 self.disp(f"can't get lists: {e}", error=True) |
3458 | 68 self.host.quit(C.EXIT_BRIDGE_ERRBACK) |
69 else: | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
70 await self.output(lists_data[0]) |
3458 | 71 self.host.quit(C.EXIT_OK) |
72 | |
73 | |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
74 class Set(base.CommandBase): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
75 def __init__(self, host): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
76 base.CommandBase.__init__( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
77 self, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
78 host, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
79 "set", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
80 use_pubsub=True, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
81 pubsub_defaults={"service": _("auto"), "node": _("auto")}, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
82 help=_("set a list item"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
83 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
84 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
85 def add_parser_options(self): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
86 self.parser.add_argument( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
87 "-f", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
88 "--field", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
89 action="append", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
90 nargs="+", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
91 dest="fields", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
92 required=True, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
93 metavar=("NAME", "VALUES"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
94 help=_("field(s) to set (required)"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
95 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
96 self.parser.add_argument( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
97 "-U", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
98 "--update", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
99 choices=("auto", "true", "false"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
100 default="auto", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
101 help=_("update existing item instead of replacing it (DEFAULT: auto)"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
102 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
103 self.parser.add_argument( |
4272
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
104 "-C", |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
105 "--comments", |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
106 choices=("auto", "true", "false"), |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
107 default="auto", |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
108 help=_("create comments node (DEFAULT: auto)"), |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
109 ) |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
110 self.parser.add_argument( |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
111 "item", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
112 nargs="?", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
113 default="", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
114 help=_("id, URL of the item to update, or nothing for new item"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
115 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
116 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
117 async def start(self): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
118 await common.fill_well_known_uri(self, os.getcwd(), "tickets", meta_map={}) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
119 if self.args.update == "auto": |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
120 # we update if we have a item id specified |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
121 update = bool(self.args.item) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
122 else: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
123 update = C.bool(self.args.update) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
124 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
125 values = {} |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
126 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
127 for field_data in self.args.fields: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
128 values.setdefault(field_data[0], []).extend(field_data[1:]) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
129 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
130 extra = {"update": update} |
4272
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
131 if self.args.comments != "auto": |
89a0999884ac
cli (list/set): add "--comments" argument.
Goffi <goffi@goffi.org>
parents:
4075
diff
changeset
|
132 extra["comments"] = bool(self.args.comments) |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
133 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
134 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
135 item_id = await self.host.bridge.list_set( |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
136 self.args.service, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
137 self.args.node, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
138 values, |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
139 "", |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
140 self.args.item, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
141 data_format.serialise(extra), |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
142 self.profile, |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
143 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
144 except Exception as e: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
145 self.disp(f"can't set list item: {e}", error=True) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
146 self.host.quit(C.EXIT_BRIDGE_ERRBACK) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
147 else: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
148 self.disp(f"item {str(item_id or self.args.item)!r} set successfully") |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
149 self.host.quit(C.EXIT_OK) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
150 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
151 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
152 class Delete(base.CommandBase): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
153 def __init__(self, host): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
154 base.CommandBase.__init__( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
155 self, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
156 host, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
157 "delete", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
158 use_pubsub=True, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
159 pubsub_defaults={"service": _("auto"), "node": _("auto")}, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
160 help=_("delete a list item"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
161 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
162 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
163 def add_parser_options(self): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
164 self.parser.add_argument( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
165 "-f", "--force", action="store_true", help=_("delete without confirmation") |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
166 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
167 self.parser.add_argument( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
168 "-N", "--notify", action="store_true", help=_("notify deletion") |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
169 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
170 self.parser.add_argument( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
171 "item", |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
172 help=_("id of the item to delete"), |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
173 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
174 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
175 async def start(self): |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
176 await common.fill_well_known_uri(self, os.getcwd(), "tickets", meta_map={}) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
177 if not self.args.item: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
178 self.parser.error(_("You need to specify a list item to delete")) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
179 if not self.args.force: |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
180 message = _("Are you sure to delete list item {item_id} ?").format( |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
181 item_id=self.args.item |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
182 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
183 await self.host.confirm_or_quit(message, _("item deletion cancelled")) |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
184 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
185 await self.host.bridge.list_delete_item( |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
186 self.args.service, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
187 self.args.node, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
188 self.args.item, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
189 self.args.notify, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
190 self.profile, |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
191 ) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
192 except Exception as e: |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
193 self.disp(_("can't delete item: {e}").format(e=e), error=True) |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
194 self.host.quit(C.EXIT_BRIDGE_ERRBACK) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
195 else: |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
196 self.disp(_("item {item} has been deleted").format(item=self.args.item)) |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
197 self.host.quit(C.EXIT_OK) |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
198 |
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
199 |
3458 | 200 class Import(base.CommandBase): |
201 # TODO: factorize with blog/import | |
202 | |
203 def __init__(self, host): | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
204 super().__init__( |
3458 | 205 host, |
206 "import", | |
207 use_progress=True, | |
208 use_verbose=True, | |
209 help=_("import tickets from external software/dataset"), | |
210 ) | |
211 | |
212 def add_parser_options(self): | |
213 self.parser.add_argument( | |
214 "importer", | |
215 nargs="?", | |
216 help=_("importer name, nothing to display importers list"), | |
217 ) | |
218 self.parser.add_argument( | |
219 "-o", | |
220 "--option", | |
221 action="append", | |
222 nargs=2, | |
223 default=[], | |
224 metavar=("NAME", "VALUE"), | |
225 help=_("importer specific options (see importer description)"), | |
226 ) | |
227 self.parser.add_argument( | |
228 "-m", | |
229 "--map", | |
230 action="append", | |
231 nargs=2, | |
232 default=[], | |
233 metavar=("IMPORTED_FIELD", "DEST_FIELD"), | |
234 help=_( | |
235 "specified field in import data will be put in dest field (default: use " | |
236 "same field name, or ignore if it doesn't exist)" | |
237 ), | |
238 ) | |
239 self.parser.add_argument( | |
240 "-s", | |
241 "--service", | |
242 default="", | |
243 metavar="PUBSUB_SERVICE", | |
244 help=_("PubSub service where the items must be uploaded (default: server)"), | |
245 ) | |
246 self.parser.add_argument( | |
247 "-n", | |
248 "--node", | |
249 default="", | |
250 metavar="PUBSUB_NODE", | |
251 help=_( | |
252 "PubSub node where the items must be uploaded (default: tickets' " | |
253 "defaults)" | |
254 ), | |
255 ) | |
256 self.parser.add_argument( | |
257 "location", | |
258 nargs="?", | |
259 help=_( | |
260 "importer data location (see importer description), nothing to show " | |
261 "importer description" | |
262 ), | |
263 ) | |
264 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
265 async def on_progress_started(self, metadata): |
3458 | 266 self.disp(_("Tickets upload started"), 2) |
267 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
268 async def on_progress_finished(self, metadata): |
3458 | 269 self.disp(_("Tickets uploaded successfully"), 2) |
270 | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3568
diff
changeset
|
271 async def on_progress_error(self, error_msg): |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
272 self.disp( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
273 _("Error while uploading tickets: {error_msg}").format(error_msg=error_msg), |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
274 error=True, |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
275 ) |
3458 | 276 |
277 async def start(self): | |
278 if self.args.location is None: | |
279 # no location, the list of importer or description is requested | |
280 for name in ("option", "service", "node"): | |
281 if getattr(self.args, name): | |
282 self.parser.error( | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
283 _( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
284 "{name} argument can't be used without location argument" |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
285 ).format(name=name) |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
286 ) |
3458 | 287 if self.args.importer is None: |
288 self.disp( | |
289 "\n".join( | |
290 [ | |
291 f"{name}: {desc}" | |
292 for name, desc in await self.host.bridge.ticketsImportList() | |
293 ] | |
294 ) | |
295 ) | |
296 else: | |
297 try: | |
298 short_desc, long_desc = await self.host.bridge.ticketsImportDesc( | |
299 self.args.importer | |
300 ) | |
301 except Exception as e: | |
302 self.disp(f"can't get importer description: {e}", error=True) | |
303 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
304 else: | |
305 self.disp(f"{name}: {short_desc}\n\n{long_desc}") | |
306 self.host.quit() | |
307 else: | |
308 # we have a location, an import is requested | |
309 | |
310 if self.args.progress: | |
311 # we use a custom progress bar template as we want a counter | |
312 self.pbar_template = [ | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
313 _("Progress: "), |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
314 ["Percentage"], |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
315 " ", |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
316 ["Bar"], |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
317 " ", |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
318 ["Counter"], |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
319 " ", |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
320 ["ETA"], |
3458 | 321 ] |
322 | |
323 options = {key: value for key, value in self.args.option} | |
324 fields_map = dict(self.args.map) | |
325 if fields_map: | |
326 if FIELDS_MAP in options: | |
327 self.parser.error( | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
328 _( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
329 "fields_map must be specified either preencoded in --option or " |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
330 "using --map, but not both at the same time" |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
331 ) |
3458 | 332 ) |
333 options[FIELDS_MAP] = json.dumps(fields_map) | |
334 | |
335 try: | |
336 progress_id = await self.host.bridge.ticketsImport( | |
337 self.args.importer, | |
338 self.args.location, | |
339 options, | |
340 self.args.service, | |
341 self.args.node, | |
342 self.profile, | |
343 ) | |
344 except Exception as e: | |
345 self.disp( | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3510
diff
changeset
|
346 _("Error while trying to import tickets: {e}").format(e=e), |
3458 | 347 error=True, |
348 ) | |
349 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
350 else: | |
351 await self.set_progress_id(progress_id) | |
352 | |
353 | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
354 class List(base.CommandBase): |
3510
059742e925f2
jp (list): implement `set` and `delete` subcommands.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
355 subcommands = (Get, Set, Delete, Import) |
3458 | 356 |
357 def __init__(self, host): | |
3459
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
358 super(List, self).__init__( |
8dc26e5edcd3
plugin tickets, merge_requests: renamed "tickets" feature to "lists":
Goffi <goffi@goffi.org>
parents:
3458
diff
changeset
|
359 host, "list", use_profile=False, help=_("pubsub lists handling") |
3458 | 360 ) |