Mercurial > libervia-backend
annotate sat_frontends/jp/cmd_merge_request.py @ 3704:c143e7f35074
cli (base): better background detection:
- ANSI escape code detection is only used on terminals known to be compatible (currently
xterm, konsole, and all VTE based ones)
- `COLORFGBG` environment variable is used as fallback
- if both methods fail, `dark` is used
This should avoid problems with incompatible terminals (e.g. on QTerminal, users had to
press `[ENTER]` each time).
fix 406
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 06 Nov 2021 17:08:50 +0100 |
parents | 04283582966f |
children | 5f65f4e9f8cb |
rev | line source |
---|---|
3137 | 1 #!/usr/bin/env python3 |
2 | |
2450 | 3 |
4 # jp: a SàT command line tool | |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
2450 | 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 | |
3040 | 21 import os.path |
3028 | 22 from . import base |
2450 | 23 from sat.core.i18n import _ |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
24 from sat.tools.common import data_format |
2450 | 25 from sat_frontends.jp.constants import Const as C |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
26 from sat_frontends.jp import xmlui_manager |
2551
b27165bf160c
jp (merge-request/set): if service and node are not specified, URIFinder is now used + ask confirmation before publishing
Goffi <goffi@goffi.org>
parents:
2545
diff
changeset
|
27 from sat_frontends.jp import common |
2450 | 28 |
29 __commands__ = ["MergeRequest"] | |
30 | |
31 | |
32 class Set(base.CommandBase): | |
33 def __init__(self, host): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
34 base.CommandBase.__init__( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
35 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
36 host, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
37 "set", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
38 use_pubsub=True, |
3028 | 39 pubsub_defaults={"service": _("auto"), "node": _("auto")}, |
40 help=_("publish or update a merge request"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
41 ) |
2450 | 42 |
43 def add_parser_options(self): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
44 self.parser.add_argument( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
45 "-i", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
46 "--item", |
3028 | 47 default="", |
48 help=_("id or URL of the request to update, or nothing for a new one"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
49 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
50 self.parser.add_argument( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
51 "-r", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
52 "--repository", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
53 metavar="PATH", |
3028 | 54 default=".", |
55 help=_("path of the repository (DEFAULT: current directory)"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
56 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
57 self.parser.add_argument( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
58 "-f", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
59 "--force", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
60 action="store_true", |
3028 | 61 help=_("publish merge request without confirmation"), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
62 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 self.parser.add_argument( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
64 "-l", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
65 "--label", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 dest="labels", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
67 action="append", |
3028 | 68 help=_("labels to categorize your request"), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
69 ) |
2450 | 70 |
3040 | 71 async def start(self): |
72 self.repository = os.path.expanduser(os.path.abspath(self.args.repository)) | |
73 await common.fill_well_known_uri(self, self.repository, "merge requests") | |
74 if not self.args.force: | |
75 message = _( | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
76 "You are going to publish your changes to service " |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
77 "[{service}], are you sure ?" |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
78 ).format(service=self.args.service) |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
79 await self.host.confirmOrQuit( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
80 message, _("merge request publication cancelled") |
3040 | 81 ) |
2450 | 82 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
83 extra = {"update": True} if self.args.item else {} |
2554
0062d3e79d12
plugin uri finder, jp (merge-request): labels handling:
Goffi <goffi@goffi.org>
parents:
2553
diff
changeset
|
84 values = {} |
0062d3e79d12
plugin uri finder, jp (merge-request): labels handling:
Goffi <goffi@goffi.org>
parents:
2553
diff
changeset
|
85 if self.args.labels is not None: |
3028 | 86 values["labels"] = self.args.labels |
3040 | 87 try: |
88 published_id = await self.host.bridge.mergeRequestSet( | |
89 self.args.service, | |
90 self.args.node, | |
91 self.repository, | |
92 "auto", | |
93 values, | |
94 "", | |
95 self.args.item, | |
96 data_format.serialise(extra), | |
97 self.profile, | |
98 ) | |
99 except Exception as e: | |
100 self.disp(f"can't create merge requests: {e}", error=True) | |
101 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
2450 | 102 |
3040 | 103 if published_id: |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
104 self.disp( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
105 _("Merge request published at {published_id}").format( |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
106 published_id=published_id |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
107 ) |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
108 ) |
3040 | 109 else: |
110 self.disp(_("Merge request published")) | |
2551
b27165bf160c
jp (merge-request/set): if service and node are not specified, URIFinder is now used + ask confirmation before publishing
Goffi <goffi@goffi.org>
parents:
2545
diff
changeset
|
111 |
3040 | 112 self.host.quit(C.EXIT_OK) |
2551
b27165bf160c
jp (merge-request/set): if service and node are not specified, URIFinder is now used + ask confirmation before publishing
Goffi <goffi@goffi.org>
parents:
2545
diff
changeset
|
113 |
2450 | 114 |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
115 class Get(base.CommandBase): |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
116 def __init__(self, host): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
117 base.CommandBase.__init__( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
118 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
119 host, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
120 "get", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
121 use_verbose=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
122 use_pubsub=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
123 pubsub_flags={C.MULTI_ITEMS}, |
3028 | 124 pubsub_defaults={"service": _("auto"), "node": _("auto")}, |
125 help=_("get a merge request"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
126 ) |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
127 |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
128 def add_parser_options(self): |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
129 pass |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
130 |
3040 | 131 async def start(self): |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
132 await common.fill_well_known_uri(self, os.getcwd(), "merge requests", meta_map={}) |
3040 | 133 extra = {} |
134 try: | |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
135 requests_data = data_format.deserialise( |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
136 await self.host.bridge.mergeRequestsGet( |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
137 self.args.service, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
138 self.args.node, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
139 self.args.max, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
140 self.args.items, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
141 "", |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
142 extra, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
143 self.profile, |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
144 ) |
3040 | 145 ) |
146 except Exception as e: | |
147 self.disp(f"can't get merge request: {e}", error=True) | |
148 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
149 | |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
150 if self.verbosity >= 1: |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
151 whitelist = None |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
152 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
153 whitelist = {"id", "title", "body"} |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
154 for request_xmlui in requests_data["items"]: |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
155 xmlui = xmlui_manager.create(self.host, request_xmlui, whitelist=whitelist) |
3040 | 156 await xmlui.show(values_only=True) |
3028 | 157 self.disp("") |
2542
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
158 self.host.quit(C.EXIT_OK) |
100563768196
jp (merge/get): "get" command first draft:
Goffi <goffi@goffi.org>
parents:
2532
diff
changeset
|
159 |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
160 |
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
161 class Import(base.CommandBase): |
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
162 def __init__(self, host): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
163 base.CommandBase.__init__( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
164 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
165 host, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
166 "import", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
167 use_pubsub=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
168 pubsub_flags={C.SINGLE_ITEM, C.ITEM}, |
3028 | 169 pubsub_defaults={"service": _("auto"), "node": _("auto")}, |
170 help=_("import a merge request"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
171 ) |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
172 |
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
173 def add_parser_options(self): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
174 self.parser.add_argument( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
175 "-r", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
176 "--repository", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
177 metavar="PATH", |
3028 | 178 default=".", |
179 help=_("path of the repository (DEFAULT: current directory)"), | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
180 ) |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
181 |
3040 | 182 async def start(self): |
183 self.repository = os.path.expanduser(os.path.abspath(self.args.repository)) | |
184 await common.fill_well_known_uri( | |
3568
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
185 self, self.repository, "merge requests", meta_map={} |
04283582966f
core, frontends: fix invalid translatable strings.
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
186 ) |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
187 extra = {} |
3040 | 188 try: |
189 await self.host.bridge.mergeRequestsImport( | |
190 self.repository, | |
191 self.args.item, | |
192 self.args.service, | |
193 self.args.node, | |
194 extra, | |
195 self.profile, | |
196 ) | |
197 except Exception as e: | |
198 self.disp(f"can't import merge request: {e}", error=True) | |
199 self.host.quit(C.EXIT_BRIDGE_ERRBACK) | |
200 else: | |
201 self.host.quit() | |
2553
39b10475f56b
jp (merge-request): find URIs when --service and --node are not specified for get and import:
Goffi <goffi@goffi.org>
parents:
2551
diff
changeset
|
202 |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
203 |
2450 | 204 class MergeRequest(base.CommandBase): |
2545
2df1ca79cb30
jp (merge-request/import): added import command
Goffi <goffi@goffi.org>
parents:
2542
diff
changeset
|
205 subcommands = (Set, Get, Import) |
2450 | 206 |
207 def __init__(self, host): | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
208 super(MergeRequest, self).__init__( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
209 host, "merge-request", use_profile=False, help=_("merge-request management") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
210 ) |