artefacts-cli 0.8.0__py3-none-any.whl → 0.9.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  import sys
2
2
 
3
- from collections.abc import Generator
3
+ from collections.abc import Iterator
4
4
  from typing import Any, Tuple
5
5
 
6
- from artefacts.cli import errors
6
+ from artefacts.cli import errors, localise
7
7
  from artefacts.cli.containers import CMgr
8
8
  from artefacts.cli.logger import logger
9
9
 
@@ -19,7 +19,11 @@ class ContainerMgr:
19
19
  self.mgr = self._configure()
20
20
  if self.mgr is None:
21
21
  self.logger.error(
22
- f"Failed to find supported container stack. Please install and start one of {list(self.SUPPORTED_PRIORITISED_ENGINES.values())}, with default settings (custom sockets not supported at this stage)"
22
+ localise(
23
+ "Failed to find supported container stack. Please install and start one of {engines}, with default settings (custom sockets not supported at this stage)".format(
24
+ engines=list(self.SUPPORTED_PRIORITISED_ENGINES.values())
25
+ )
26
+ )
23
27
  )
24
28
  sys.exit(errors.CONTAINER_ENGINE_NOT_FOUND)
25
29
 
@@ -32,18 +36,26 @@ class ContainerMgr:
32
36
  manager = handler()
33
37
  except AttributeError:
34
38
  self.logger.warning(
35
- f"Tried to detect an unsupported engine: {engine}. WIP? Ignore and continue."
39
+ localise(
40
+ "Tried to detect an unsupported engine: {engine}. WIP? Ignore and continue.".format(
41
+ engine=engine
42
+ )
43
+ )
36
44
  )
37
45
  except Exception as e:
38
46
  self.logger.warning(
39
- f"Problem in detecting {engine} ({e}) Ignore and continue."
47
+ localise(
48
+ "Problem in detecting {engine} ({message}) Ignore and continue.".format(
49
+ engine=engine, message=e
50
+ )
51
+ )
40
52
  )
41
53
  if manager is not None:
42
54
  break
43
55
  return manager
44
56
 
45
57
  def _configure_docker(self):
46
- from artefacts.cli.containers.docker import DockerManager
58
+ from artefacts.cli.containers.docker_cm import DockerManager
47
59
 
48
60
  return DockerManager()
49
61
 
@@ -51,11 +63,11 @@ class ContainerMgr:
51
63
  # from artefacts.cli.containers import podman
52
64
  # return PodmanManager()
53
65
 
54
- def build(self, **kwargs) -> Tuple[str, Generator]:
66
+ def build(self, **kwargs) -> Tuple[str, Iterator]:
55
67
  return self.mgr.build(**kwargs)
56
68
 
57
69
  def check(self, image: str) -> bool:
58
70
  return self.mgr.check(image)
59
71
 
60
- def run(self, **kwargs) -> Tuple[Any, Generator]:
72
+ def run(self, **kwargs) -> Tuple[Any, Iterator]:
61
73
  return self.mgr.run(**kwargs)
@@ -0,0 +1,55 @@
1
+ import configparser
2
+ import os
3
+ import subprocess
4
+
5
+ from artefacts.cli.constants import CONFIG_PATH, CONFIG_DIR
6
+
7
+
8
+ def get_git_revision_hash() -> str:
9
+ try:
10
+ return (
11
+ subprocess.check_output(["git", "rev-parse", "HEAD"])
12
+ .decode("ascii")
13
+ .strip()
14
+ )
15
+ except subprocess.CalledProcessError:
16
+ return ""
17
+
18
+
19
+ def get_git_revision_branch() -> str:
20
+ try:
21
+ return (
22
+ subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"])
23
+ .decode("ascii")
24
+ .strip()
25
+ )
26
+ except subprocess.CalledProcessError:
27
+ return ""
28
+
29
+
30
+ def get_conf_from_file():
31
+ config = configparser.ConfigParser()
32
+ if not os.path.isfile(CONFIG_PATH):
33
+ os.makedirs(CONFIG_DIR, exist_ok=True)
34
+ config["DEFAULT"] = {}
35
+ with open(CONFIG_PATH, "w") as f:
36
+ config.write(f)
37
+ config.read(CONFIG_PATH)
38
+ return config
39
+
40
+
41
+ def get_artefacts_api_url(project_profile):
42
+ return os.environ.get(
43
+ "ARTEFACTS_API_URL",
44
+ project_profile.get(
45
+ "ApiUrl",
46
+ "https://app.artefacts.com/api",
47
+ ),
48
+ )
49
+
50
+
51
+ def add_key_to_conf(project_name, api_key):
52
+ config = get_conf_from_file()
53
+ config[project_name] = {"ApiKey": api_key}
54
+ with open(CONFIG_PATH, "w") as f:
55
+ config.write(f)
artefacts/cli/i18n.py ADDED
@@ -0,0 +1,35 @@
1
+ import gettext
2
+ import importlib.resources
3
+ import os
4
+ import locale
5
+ import sys
6
+
7
+
8
+ # Ensure env var requirements for gettext are fulfilled
9
+ if sys.platform.startswith("win"):
10
+ if os.getenv("LANG") is None:
11
+ lang, _ = locale.getdefaultlocale()
12
+ os.environ["LANG"] = lang
13
+
14
+
15
+ # Get path to the locale directory
16
+ try:
17
+ _localedir = importlib.resources.files("artefacts.cli") / "locales"
18
+ except FileNotFoundError:
19
+ #
20
+ # Encountered in our trials with Python 3.10 and 3.11, so fallback to pkg_resources
21
+ #
22
+ # pkg_resources is removed from setuptools in Python 3.12. From there, importlib works.
23
+ #
24
+ from pkg_resources import resource_filename
25
+
26
+ _localedir = str(resource_filename("artefacts.cli", "locales"))
27
+
28
+
29
+ # Setup the GNU gettext API
30
+ gettext.bindtextdomain("artefacts", _localedir)
31
+ gettext.textdomain("artefacts")
32
+
33
+
34
+ # Expose for other modules to import
35
+ localise = gettext.gettext
@@ -0,0 +1,524 @@
1
+ # Translations template for artefacts.
2
+ # Copyright (C) 2025 Asteria ART
3
+ # This file is distributed under the same license as the artefacts project.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: artefacts 0.9.2.dev8\n"
10
+ "Report-Msgid-Bugs-To: dev@artefacts.com\n"
11
+ "POT-Creation-Date: 2025-05-12 11:10+0900\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=utf-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Generated-By: Babel 2.17.0\n"
19
+
20
+ #: artefacts/cli/__init__.py:28
21
+ #, python-brace-format
22
+ msgid "Could not determine package version: {error_message}. Default to 0.0.0"
23
+ msgstr ""
24
+
25
+ #: artefacts/cli/__init__.py:99
26
+ #, python-brace-format
27
+ msgid "Error on job creation: {status_code}"
28
+ msgstr ""
29
+
30
+ #: artefacts/cli/__init__.py:179
31
+ #, python-brace-format
32
+ msgid "Error on scenario creation: {status_code}"
33
+ msgstr ""
34
+
35
+ #: artefacts/cli/__init__.py:290
36
+ msgid ""
37
+ "Files generated by the job are not uploaded to Artefacts, including the "
38
+ "ones specified in output_dirs"
39
+ msgstr ""
40
+
41
+ #: artefacts/cli/__init__.py:302
42
+ #, python-brace-format
43
+ msgid "Uploading {file_name} ({file_size:.2f} MB)"
44
+ msgstr ""
45
+
46
+ #: artefacts/cli/__init__.py:316
47
+ #, python-brace-format
48
+ msgid "File too large: {file_name} could not be uploaded"
49
+ msgstr ""
50
+
51
+ #: artefacts/cli/__init__.py:324
52
+ #, python-brace-format
53
+ msgid "Error uploading {file_name}: {error_message}, skipping"
54
+ msgstr ""
55
+
56
+ #: artefacts/cli/app.py:57 artefacts/cli/app.py:104 artefacts/cli/app.py:117
57
+ msgid "PROJECT_NAME"
58
+ msgstr ""
59
+
60
+ #: artefacts/cli/app.py:76
61
+ #, python-brace-format
62
+ msgid "Opening the project settings page: {url}"
63
+ msgstr ""
64
+
65
+ #: artefacts/cli/app.py:81
66
+ #, python-brace-format
67
+ msgid "Please enter your API KEY for {project}"
68
+ msgstr ""
69
+
70
+ #: artefacts/cli/app.py:88
71
+ #, python-brace-format
72
+ msgid "API KEY saved for {project}"
73
+ msgstr ""
74
+
75
+ #: artefacts/cli/app.py:91
76
+ msgid ""
77
+ "Would you like to download the generated artefacts.yaml file? This will "
78
+ "overwrite any existing config file in the current directory."
79
+ msgstr ""
80
+
81
+ #: artefacts/cli/app.py:113
82
+ #, python-brace-format
83
+ msgid "{project} config removed"
84
+ msgstr ""
85
+
86
+ #: artefacts/cli/app.py:133 artefacts/cli/app.py:635 artefacts/cli/app.py:641
87
+ #, python-brace-format
88
+ msgid "Error getting project info: {message}"
89
+ msgstr ""
90
+
91
+ #: artefacts/cli/app.py:144 artefacts/cli/app.py:518
92
+ #: artefacts/cli/app_containers.py:187
93
+ msgid "JOBNAME"
94
+ msgstr ""
95
+
96
+ #: artefacts/cli/app.py:149 artefacts/cli/app.py:502
97
+ msgid "Artefacts configuration file."
98
+ msgstr ""
99
+
100
+ #: artefacts/cli/app.py:155
101
+ msgid "Run with no tracking nor test execution"
102
+ msgstr ""
103
+
104
+ #: artefacts/cli/app.py:161
105
+ msgid "Skip configuring a simulator resource provided by Artefacts"
106
+ msgstr ""
107
+
108
+ #: artefacts/cli/app.py:168
109
+ msgid "Do not upload to Artefacts files generated during a run (e.g. rosbags)"
110
+ msgstr ""
111
+
112
+ #: artefacts/cli/app.py:176
113
+ msgid ""
114
+ "Break the 'middleware network' isolation between the test suite and the "
115
+ "host (in ROS1: --reuse-master flag; in ROS2: --disable-isolation flag). "
116
+ "Primarily for debugging"
117
+ msgstr ""
118
+
119
+ #: artefacts/cli/app.py:182 artefacts/cli/app.py:507
120
+ msgid "Optional description for this run"
121
+ msgstr ""
122
+
123
+ #: artefacts/cli/app.py:190 artefacts/cli/app.py:515
124
+ msgid ""
125
+ "Skip configuration validation, so that unsupported settings can be tried "
126
+ "out, e.g. non-ROS settings or simulators like SAPIEN."
127
+ msgstr ""
128
+
129
+ #: artefacts/cli/app.py:198
130
+ msgid ""
131
+ "[Experimental] Run the job inside a package container. The container "
132
+ "image is build if it does not exist yet, with default name as "
133
+ "\"artefacts\" (please use --with-image to override the image name). This "
134
+ "option overrides (for now) --dryrun, --nosim, --noisolation and "
135
+ "--description."
136
+ msgstr ""
137
+
138
+ #: artefacts/cli/app.py:205
139
+ msgid ""
140
+ "[Experimental] Path to a custom Dockerfile. Defaults to Dockerfile in the"
141
+ " run directory. This flag is only used together with `--in-container`"
142
+ msgstr ""
143
+
144
+ #: artefacts/cli/app.py:212
145
+ msgid ""
146
+ "[Deprecated and unused from 0.8.0; Image names are now internally "
147
+ "managed] Run the job using the image name passed here. Only used when "
148
+ "running with --in-container set."
149
+ msgstr ""
150
+
151
+ #: artefacts/cli/app.py:220
152
+ msgid ""
153
+ "[Experimental] Override the default behaviour to always rebuild the "
154
+ "container image (as we assume incremental testing)."
155
+ msgstr ""
156
+
157
+ #: artefacts/cli/app.py:228
158
+ msgid ""
159
+ "Show any GUI if any is created by the test runs. By default, UI elements "
160
+ "are run but hidden---only test logs are returned. Please note GUI often "
161
+ "assume X11 (e.g. ROS), typically with Qt, so this may not work without a "
162
+ "appropriate environment."
163
+ msgstr ""
164
+
165
+ #: artefacts/cli/app.py:277
166
+ msgid "Checking container image"
167
+ msgstr ""
168
+
169
+ #: artefacts/cli/app.py:285
170
+ msgid "Container image ready"
171
+ msgstr ""
172
+
173
+ #: artefacts/cli/app.py:286
174
+ msgid "Run in container"
175
+ msgstr ""
176
+
177
+ #: artefacts/cli/app.py:296
178
+ msgid "Starting tests"
179
+ msgstr ""
180
+
181
+ #: artefacts/cli/app.py:299
182
+ msgid "Error: Job name not defined"
183
+ msgstr ""
184
+
185
+ #: artefacts/cli/app.py:309
186
+ #, python-brace-format
187
+ msgid "Job type not supported: {jt}"
188
+ msgstr ""
189
+
190
+ #: artefacts/cli/app.py:321
191
+ #, python-brace-format
192
+ msgid "The selected framework '{framework}' is deprecated. Using '{alt}' instead."
193
+ msgstr ""
194
+
195
+ #: artefacts/cli/app.py:330
196
+ #, python-brace-format
197
+ msgid ""
198
+ "WARNING: framework: '{framework}' is not officially supported. Attempting"
199
+ " run."
200
+ msgstr ""
201
+
202
+ #: artefacts/cli/app.py:339
203
+ #, python-brace-format
204
+ msgid "AWS BATCH ARRAY DETECTED, batch_index={index}"
205
+ msgstr ""
206
+
207
+ #: artefacts/cli/app.py:368
208
+ msgid ""
209
+ "Unable to authenticate (Stage: Job initialisation), please check your "
210
+ "project name and API key"
211
+ msgstr ""
212
+
213
+ #: artefacts/cli/app.py:379
214
+ #, python-brace-format
215
+ msgid "Starting scenario {sid}/{num}: {name}"
216
+ msgstr ""
217
+
218
+ #: artefacts/cli/app.py:389
219
+ msgid ""
220
+ "Unable to authenticate (Stage: Job run), please check your project name "
221
+ "and API key"
222
+ msgstr ""
223
+
224
+ #: artefacts/cli/app.py:402
225
+ msgid "Test launch file not specified for ros2 project"
226
+ msgstr ""
227
+
228
+ #: artefacts/cli/app.py:408
229
+ msgid "launch_test file not specified error"
230
+ msgstr ""
231
+
232
+ #: artefacts/cli/app.py:410
233
+ msgid ""
234
+ "Please specify a `ros_testfile` in the artefacts.yaml scenario "
235
+ "configuration."
236
+ msgstr ""
237
+
238
+ #: artefacts/cli/app.py:416 artefacts/cli/app.py:459 artefacts/cli/app.py:477
239
+ msgid "Performing dry run"
240
+ msgstr ""
241
+
242
+ #: artefacts/cli/app.py:427
243
+ msgid "Artefacts failed to execute the tests"
244
+ msgstr ""
245
+
246
+ #: artefacts/cli/app.py:439
247
+ msgid ""
248
+ "Not able to execute tests. Make sure that ROS2 is sourced and that your "
249
+ "launch file syntax is correct."
250
+ msgstr ""
251
+
252
+ #: artefacts/cli/app.py:453
253
+ msgid "Test launch file not specified for ros1 project"
254
+ msgstr ""
255
+
256
+ #: artefacts/cli/app.py:471
257
+ msgid "run command not specified for scenario"
258
+ msgstr ""
259
+
260
+ #: artefacts/cli/app.py:491
261
+ msgid "Done"
262
+ msgstr ""
263
+
264
+ #: artefacts/cli/app.py:530 artefacts/cli/app_containers.py:231
265
+ #, python-brace-format
266
+ msgid "Project config file not found: {config}"
267
+ msgstr ""
268
+
269
+ #: artefacts/cli/app.py:542
270
+ #, python-brace-format
271
+ msgid "Can't find a job named '{jobname}' in config '{config}'"
272
+ msgstr ""
273
+
274
+ #: artefacts/cli/app.py:562
275
+ msgid "Packaging source..."
276
+ msgstr ""
277
+
278
+ #: artefacts/cli/app.py:608
279
+ #, python-brace-format
280
+ msgid ""
281
+ "Apologies, problem in interacting with the Artefacts backend: "
282
+ "{status_code} {reason}. Response text: {detail}."
283
+ msgstr ""
284
+
285
+ #: artefacts/cli/app.py:622
286
+ #, python-brace-format
287
+ msgid "Missing access! Please make sure your API key is added at {url}/settings"
288
+ msgstr ""
289
+
290
+ #: artefacts/cli/app.py:629
291
+ #, python-brace-format
292
+ msgid "Billing issue, please go to {url}/settings to correct: {error}"
293
+ msgstr ""
294
+
295
+ #: artefacts/cli/app.py:648
296
+ #, python-brace-format
297
+ msgid ""
298
+ "Error getting project info: {status_code} {reason}. Response text: "
299
+ "{detail}."
300
+ msgstr ""
301
+
302
+ #: artefacts/cli/app.py:664
303
+ msgid "Testing local source"
304
+ msgstr ""
305
+
306
+ #: artefacts/cli/app.py:713
307
+ #, python-brace-format
308
+ msgid "Uploading complete! The new job will show up shortly at {url}"
309
+ msgstr ""
310
+
311
+ #: artefacts/cli/app_containers.py:28
312
+ msgid ""
313
+ "[Deprecated since 0.8.0; please see --root] Path to the root of the "
314
+ "project."
315
+ msgstr ""
316
+
317
+ #: artefacts/cli/app_containers.py:34
318
+ msgid "Path to the root of the project."
319
+ msgstr ""
320
+
321
+ #: artefacts/cli/app_containers.py:40
322
+ msgid ""
323
+ "Path to a custom Dockerfile. Defaults to Dockerfile under `path` (see "
324
+ "option of the same name)."
325
+ msgstr ""
326
+
327
+ #: artefacts/cli/app_containers.py:47
328
+ msgid ""
329
+ "[Deprecated since 0.8.0; not used and will disappear after 0.8.0] Name "
330
+ "for the generated image"
331
+ msgstr ""
332
+
333
+ #: artefacts/cli/app_containers.py:55 artefacts/cli/app_containers.py:193
334
+ msgid ""
335
+ "Path to the Artefacts configuration file. It defaults to "
336
+ "`./artefacts.yaml`"
337
+ msgstr ""
338
+
339
+ #: artefacts/cli/app_containers.py:64
340
+ msgid "Optional list of job names to process. The default is to process all jobs."
341
+ msgstr ""
342
+
343
+ #: artefacts/cli/app_containers.py:82
344
+ #, python-brace-format
345
+ msgid ""
346
+ "Project config file not found: {config}. Please provide an Artefacts "
347
+ "configuration file to proceed (running `artefacts init` allows to "
348
+ "generate one)."
349
+ msgstr ""
350
+
351
+ #: artefacts/cli/app_containers.py:106
352
+ #, python-brace-format
353
+ msgid ""
354
+ "Dockerfile `{dockerfile}` not found. Please ensure the file exits. "
355
+ "Automatic Dockerfile generation may also work by dropping the "
356
+ "--dockerfile option."
357
+ msgstr ""
358
+
359
+ #: artefacts/cli/app_containers.py:123
360
+ #, python-brace-format
361
+ msgid ""
362
+ "No {dockerfile} found here. Let's generate one per scenario based on "
363
+ "artefacts.yaml. They will be available under the `{dest_root}` folder and"
364
+ " used from there."
365
+ msgstr ""
366
+
367
+ #: artefacts/cli/app_containers.py:143
368
+ #, python-brace-format
369
+ msgid "Using generated Dockerfile at: {dockerfile}"
370
+ msgstr ""
371
+
372
+ #: artefacts/cli/app_containers.py:161
373
+ msgid "No Dockerfile, nothing to do."
374
+ msgstr ""
375
+
376
+ #: artefacts/cli/app_containers.py:165
377
+ msgid "IMAGE_NAME"
378
+ msgstr ""
379
+
380
+ #: artefacts/cli/app_containers.py:175
381
+ #, python-brace-format
382
+ msgid "Container image {name} exists and ready to use."
383
+ msgstr ""
384
+
385
+ #: artefacts/cli/app_containers.py:201
386
+ msgid ""
387
+ "Show any GUI if any is created by the test runs. By default, UI elements "
388
+ "are run but hidden---only test logs are returned. Please note GUI often "
389
+ "assume an X11 environment, typically with Qt, so this may not work "
390
+ "without a appropriate environment."
391
+ msgstr ""
392
+
393
+ #: artefacts/cli/app_containers.py:249
394
+ #, python-brace-format
395
+ msgid "Container run complete: Container Id for inspection: {container_id}"
396
+ msgstr ""
397
+
398
+ #: artefacts/cli/app_containers.py:255
399
+ msgid "Package run failed:"
400
+ msgstr ""
401
+
402
+ #: artefacts/cli/config.py:31
403
+ #, python-brace-format
404
+ msgid "No API KEY set. Please run `artefacts config add {project_name}`"
405
+ msgstr ""
406
+
407
+ #: artefacts/cli/config.py:50 artefacts/cli/config.py:58
408
+ #, python-brace-format
409
+ msgid "Connecting to {api_url} using {auth_type}"
410
+ msgstr ""
411
+
412
+ #: artefacts/cli/ros1.py:55
413
+ msgid ""
414
+ "[warning in generate_rosbag_args] rosbag_record asks for 'subscriptions' "
415
+ "but they are not specified. Falling back to default: no rosbag will be "
416
+ "recorded"
417
+ msgstr ""
418
+
419
+ #: artefacts/cli/ros1.py:108
420
+ #, python-brace-format
421
+ msgid "[Exception in get_result_path()] {message}"
422
+ msgstr ""
423
+
424
+ #: artefacts/cli/ros1.py:112
425
+ #, python-brace-format
426
+ msgid ""
427
+ "Unable to parse the ros1 .launch specified ({testfile}) and the <test> "
428
+ "tag within to find the unittest test method's name."
429
+ msgstr ""
430
+
431
+ #: artefacts/cli/ros1.py:119
432
+ msgid ""
433
+ "Please ensure all ROS and unittest naming conventions are respected. "
434
+ "Exiting.."
435
+ msgstr ""
436
+
437
+ #: artefacts/cli/ros1.py:227
438
+ #, python-brace-format
439
+ msgid "New rosbag found: {file_name}"
440
+ msgstr ""
441
+
442
+ #: artefacts/cli/ros1.py:233
443
+ msgid "starting rosbag postprocess"
444
+ msgstr ""
445
+
446
+ #: artefacts/cli/ros2.py:73
447
+ msgid ""
448
+ "Problem with parameter name. Please ensure params are in the format "
449
+ "`node/param`"
450
+ msgstr ""
451
+
452
+ #: artefacts/cli/utils.py:81
453
+ #, python-brace-format
454
+ msgid "Project config file {file_name} not found."
455
+ msgstr ""
456
+
457
+ #: artefacts/cli/utils_ros.py:70
458
+ #, python-brace-format
459
+ msgid "[Exception in parse_tests_results] {message}"
460
+ msgstr ""
461
+
462
+ #: artefacts/cli/utils_ros.py:72
463
+ msgid "Test result xml could not be loaded, marking success as False"
464
+ msgstr ""
465
+
466
+ #: artefacts/cli/containers/docker_cm.py:82
467
+ #, python-brace-format
468
+ msgid ""
469
+ "Missing API key for the project. Does `{path}/config` exist and contain "
470
+ "your key? Alternatively ARTEFACTS_KEY can be set with the key."
471
+ msgstr ""
472
+
473
+ #: artefacts/cli/containers/docker_cm.py:160
474
+ #, python-brace-format
475
+ msgid "Image {image} not found by Docker. Perhaps need to build first?"
476
+ msgstr ""
477
+
478
+ #: artefacts/cli/containers/docker_cm.py:170
479
+ #, python-brace-format
480
+ msgid "Failed to run from {image}. All we know: {message}"
481
+ msgstr ""
482
+
483
+ #: artefacts/cli/containers/docker_utils.py:28
484
+ #, python-brace-format
485
+ msgid ""
486
+ "Invalid GPU device for Docker: {g} ({e}). Accepted device formats are "
487
+ "all, device=1 and \"device=1,2\" (with a list of devices, quotes must be "
488
+ "included"
489
+ msgstr ""
490
+
491
+ #: artefacts/cli/containers/docker_utils.py:38
492
+ #, python-brace-format
493
+ msgid ""
494
+ "Invalid GPU device for Docker: {g}. List of devices must be double-"
495
+ "quoted. Accepted device formats are all, device=1 and \"device=1,2\" "
496
+ "(with a list of devices, quotes must be included"
497
+ msgstr ""
498
+
499
+ #: artefacts/cli/containers/docker_utils.py:49
500
+ #, python-brace-format
501
+ msgid ""
502
+ "Invalid GPU device for Docker: {g}. Accepted device formats are all, "
503
+ "device=1 and \"device=1,2\" (with a list of devices, quotes must be "
504
+ "included"
505
+ msgstr ""
506
+
507
+ #: artefacts/cli/containers/utils.py:23
508
+ #, python-brace-format
509
+ msgid ""
510
+ "Failed to find supported container stack. Please install and start one of"
511
+ " {engines}, with default settings (custom sockets not supported at this "
512
+ "stage)"
513
+ msgstr ""
514
+
515
+ #: artefacts/cli/containers/utils.py:40
516
+ #, python-brace-format
517
+ msgid "Tried to detect an unsupported engine: {engine}. WIP? Ignore and continue."
518
+ msgstr ""
519
+
520
+ #: artefacts/cli/containers/utils.py:48
521
+ #, python-brace-format
522
+ msgid "Problem in detecting {engine} ({message}) Ignore and continue."
523
+ msgstr ""
524
+