qbraid-cli 0.9.5__tar.gz → 0.9.6__tar.gz

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.

Potentially problematic release.


This version of qbraid-cli might be problematic. Click here for more details.

Files changed (119) hide show
  1. {qbraid_cli-0.9.5/qbraid_cli.egg-info → qbraid_cli-0.9.6}/PKG-INFO +1 -1
  2. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/pyproject.toml +1 -1
  3. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/_version.py +2 -2
  4. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/configure/app.py +60 -2
  5. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6/qbraid_cli.egg-info}/PKG-INFO +1 -1
  6. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli.egg-info/SOURCES.txt +1 -0
  7. qbraid_cli-0.9.6/tests/configure/test_configure_commands.py +91 -0
  8. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.env.example +0 -0
  9. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  10. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  11. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  12. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/bump-version.yml +0 -0
  13. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/docs-pr.yml +0 -0
  14. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/docs.yml +0 -0
  15. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/format.yml +0 -0
  16. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/main.yml +0 -0
  17. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/pre-release.yml +0 -0
  18. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/publish.yml +0 -0
  19. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.github/workflows/tag-on-merge.yml +0 -0
  20. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.gitignore +0 -0
  21. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/.readthedocs.yml +0 -0
  22. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/CONTRIBUTING.md +0 -0
  23. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/LICENSE +0 -0
  24. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/MANIFEST.IN +0 -0
  25. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/Makefile +0 -0
  26. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/README.md +0 -0
  27. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/Makefile +0 -0
  28. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/_static/favicon.ico +0 -0
  29. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/_static/logo.png +0 -0
  30. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/_static/style/custom.css +0 -0
  31. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/_static/style/s4defs-roles.css +0 -0
  32. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/conf.py +0 -0
  33. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/index.rst +0 -0
  34. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/make.bat +0 -0
  35. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/docs/requirements.txt +0 -0
  36. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/__init__.py +0 -0
  37. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/account/__init__.py +0 -0
  38. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/account/app.py +0 -0
  39. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/admin/__init__.py +0 -0
  40. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/admin/app.py +0 -0
  41. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/admin/headers.py +0 -0
  42. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/admin/validation.py +0 -0
  43. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/chat/__init__.py +0 -0
  44. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/chat/app.py +0 -0
  45. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/configure/__init__.py +0 -0
  46. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/configure/actions.py +0 -0
  47. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/devices/__init__.py +0 -0
  48. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/devices/app.py +0 -0
  49. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/devices/validation.py +0 -0
  50. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/envs/__init__.py +0 -0
  51. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/envs/activate.py +0 -0
  52. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/envs/app.py +0 -0
  53. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/envs/create.py +0 -0
  54. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/envs/data_handling.py +0 -0
  55. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/exceptions.py +0 -0
  56. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/files/__init__.py +0 -0
  57. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/files/app.py +0 -0
  58. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/handlers.py +0 -0
  59. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/jobs/__init__.py +0 -0
  60. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/jobs/app.py +0 -0
  61. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/jobs/toggle_braket.py +0 -0
  62. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/jobs/validation.py +0 -0
  63. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/kernels/__init__.py +0 -0
  64. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/kernels/app.py +0 -0
  65. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/main.py +0 -0
  66. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/pip/__init__.py +0 -0
  67. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/pip/app.py +0 -0
  68. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/pip/hooks.py +0 -0
  69. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli/py.typed +0 -0
  70. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli.egg-info/dependency_links.txt +0 -0
  71. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli.egg-info/entry_points.txt +0 -0
  72. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli.egg-info/requires.txt +0 -0
  73. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/qbraid_cli.egg-info/top_level.txt +0 -0
  74. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/setup.cfg +0 -0
  75. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/__init__.py +0 -0
  76. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/account/__init__.py +0 -0
  77. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/account/test_account_credits.py +0 -0
  78. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/admin/test_headers.py +0 -0
  79. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/configure/__init__.py +0 -0
  80. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/configure/test_configure_prompt_for_config.py +0 -0
  81. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/configure/test_configure_set.py +0 -0
  82. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/configure/test_configure_validate_input.py +0 -0
  83. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/conftest.py +0 -0
  84. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/devices/__init__.py +0 -0
  85. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/devices/test_devices_list.py +0 -0
  86. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/devices/test_devices_validations.py +0 -0
  87. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/__init__.py +0 -0
  88. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_activate.py +0 -0
  89. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_activate_find_shell_rc.py +0 -0
  90. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_activate_print_command.py +0 -0
  91. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_activate_pyenv.py +0 -0
  92. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_create_from_yaml.py +0 -0
  93. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_list.py +0 -0
  94. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/envs/test_envs_remove.py +0 -0
  95. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/files/__init__.py +0 -0
  96. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/files/test_files_commands.py +0 -0
  97. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/__init__.py +0 -0
  98. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_disable.py +0 -0
  99. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_enable.py +0 -0
  100. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_list.py +0 -0
  101. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_state.py +0 -0
  102. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_toggle_braket_confirm.py +0 -0
  103. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_toggle_braket_disable.py +0 -0
  104. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_toggle_braket_enable.py +0 -0
  105. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_toggle_braket_get_data.py +0 -0
  106. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_validate_get_state.py +0 -0
  107. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_validate_handle_state.py +0 -0
  108. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/jobs/test_jobs_validate_library.py +0 -0
  109. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/kernels/__init__.py +0 -0
  110. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/kernels/test_kernels_list.py +0 -0
  111. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/resources/envs/correct.yaml +0 -0
  112. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/resources/envs/icon.png +0 -0
  113. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tests/resources/envs/incorrect.yaml +0 -0
  114. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/bump_version.py +0 -0
  115. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/create_dev_build.sh +0 -0
  116. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/install_wheel_extras.sh +0 -0
  117. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/split_md.py +0 -0
  118. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/split_rst.py +0 -0
  119. {qbraid_cli-0.9.5 → qbraid_cli-0.9.6}/tools/stamp_pre_release.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: qbraid-cli
3
- Version: 0.9.5
3
+ Version: 0.9.6
4
4
  Summary: Command Line Interface for interacting with all parts of the qBraid platform.
5
5
  Author-email: qBraid Development Team <contact@qbraid.com>
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qbraid-cli"
7
- version = "0.9.5"
7
+ version = "0.9.6"
8
8
  description = "Command Line Interface for interacting with all parts of the qBraid platform."
9
9
  readme = "README.md"
10
10
  authors = [{ name = "qBraid Development Team", email = "contact@qbraid.com" }]
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.1.dev1+g5dbdf17'
16
- __version_tuple__ = version_tuple = (0, 1, 'dev1', 'g5dbdf17')
15
+ __version__ = version = '0.1.dev1+g808eaf0'
16
+ __version_tuple__ = version_tuple = (0, 1, 'dev1', 'g808eaf0')
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2024, qBraid Development Team
1
+ # Copyright (c) 2025, qBraid Development Team
2
2
  # All rights reserved.
3
3
 
4
4
  """
@@ -7,7 +7,9 @@ Module defining commands in the 'qbraid configure' namespace.
7
7
  """
8
8
 
9
9
  import typer
10
+ from rich import box
10
11
  from rich.console import Console
12
+ from rich.table import Table
11
13
 
12
14
  from qbraid_cli.configure.actions import default_action
13
15
 
@@ -36,7 +38,7 @@ def configure(ctx: typer.Context):
36
38
  def configure_set(
37
39
  name: str = typer.Argument(..., help="Config name"),
38
40
  value: str = typer.Argument(..., help="Config value"),
39
- profile: str = typer.Option("default", help="Profile name"),
41
+ profile: str = typer.Option("default", "--profile", "-p", help="Profile name"),
40
42
  ):
41
43
  """Set configuration value in qbraidrc file."""
42
44
  # pylint: disable-next=import-outside-toplevel
@@ -53,6 +55,62 @@ def configure_set(
53
55
  typer.echo("Configuration updated successfully.")
54
56
 
55
57
 
58
+ @configure_app.command(name="get")
59
+ def configure_get(
60
+ name: str = typer.Argument(..., help="Config name"),
61
+ profile: str = typer.Option("default", "--profile", "-p", help="Profile name"),
62
+ ):
63
+ """Get configuration value from qbraidrc file."""
64
+ # pylint: disable-next=import-outside-toplevel
65
+ from qbraid_core.config import load_config
66
+
67
+ config = load_config()
68
+
69
+ if profile not in config:
70
+ typer.echo(f"Profile '{profile}' not found in configuration.")
71
+ raise typer.Exit(1)
72
+
73
+ if name not in config[profile]:
74
+ typer.echo(f"Configuration '{name}' not found in profile '{profile}'.")
75
+ raise typer.Exit(1)
76
+
77
+ typer.echo(config[profile][name])
78
+
79
+
80
+ @configure_app.command(name="list")
81
+ def configure_list():
82
+ """List all configuration values in the default profile."""
83
+ # pylint: disable-next=import-outside-toplevel
84
+ from qbraid_core.config import load_config
85
+
86
+ config = load_config()
87
+ console = Console()
88
+ profile = "default"
89
+
90
+ if profile not in config:
91
+ typer.echo("Default profile not found in configuration.")
92
+ raise typer.Exit(1)
93
+
94
+ if not config[profile]:
95
+ typer.echo("No configuration values found in default profile.")
96
+ return
97
+
98
+ table = Table(show_edge=False, box=box.MINIMAL)
99
+ table.add_column("Name", style="cyan")
100
+ table.add_column("Value", style="green")
101
+
102
+ sensitive_keys = {"api-key", "refresh-token"}
103
+
104
+ for name, value in config[profile].items():
105
+ if name in sensitive_keys and value:
106
+ masked_value = f"*****{str(value)[-3:]}"
107
+ else:
108
+ masked_value = str(value)
109
+ table.add_row(name, masked_value)
110
+
111
+ console.print(table)
112
+
113
+
56
114
  @configure_app.command(name="magic")
57
115
  def configure_magic():
58
116
  """Enable qBraid IPython magic commands."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: qbraid-cli
3
- Version: 0.9.5
3
+ Version: 0.9.6
4
4
  Summary: Command Line Interface for interacting with all parts of the qBraid platform.
5
5
  Author-email: qBraid Development Team <contact@qbraid.com>
6
6
  License: Proprietary
@@ -75,6 +75,7 @@ tests/account/__init__.py
75
75
  tests/account/test_account_credits.py
76
76
  tests/admin/test_headers.py
77
77
  tests/configure/__init__.py
78
+ tests/configure/test_configure_commands.py
78
79
  tests/configure/test_configure_prompt_for_config.py
79
80
  tests/configure/test_configure_set.py
80
81
  tests/configure/test_configure_validate_input.py
@@ -0,0 +1,91 @@
1
+ # Copyright (c) 2025, qBraid Development Team
2
+ # All rights reserved.
3
+
4
+ """
5
+ Unit tests for the configure list and get commands.
6
+ """
7
+
8
+ from unittest.mock import MagicMock, patch
9
+
10
+ import pytest
11
+ import typer
12
+
13
+ from qbraid_cli.configure.app import configure_get, configure_list
14
+
15
+
16
+ def test_configure_list_empty_profile(capsys):
17
+ """Test configure_list with an empty default profile."""
18
+ mock_load_config = MagicMock(return_value={"default": {}})
19
+
20
+ with patch("qbraid_core.config.load_config", mock_load_config):
21
+ configure_list()
22
+ captured = capsys.readouterr()
23
+ assert "No configuration values found in default profile." in captured.out
24
+
25
+
26
+ def test_configure_list_missing_profile(capsys):
27
+ """Test configure_list with a missing default profile."""
28
+ mock_load_config = MagicMock(return_value={})
29
+
30
+ with patch("qbraid_core.config.load_config", mock_load_config):
31
+ with pytest.raises(typer.Exit):
32
+ configure_list()
33
+ captured = capsys.readouterr()
34
+ assert "Default profile not found in configuration." in captured.out
35
+
36
+
37
+ def test_configure_list_with_values(capsys):
38
+ """Test configure_list with various configuration values."""
39
+ mock_config = {
40
+ "default": {
41
+ "api-key": "abcdef123456",
42
+ "refresh-token": "xyz987654321",
43
+ "url": "https://example.com",
44
+ }
45
+ }
46
+ mock_load_config = MagicMock(return_value=mock_config)
47
+
48
+ with patch("qbraid_core.config.load_config", mock_load_config):
49
+ configure_list()
50
+ captured = capsys.readouterr()
51
+
52
+ # Check that sensitive values are masked
53
+ assert "*****456" in captured.out # last 3 chars of api-key
54
+ assert "*****321" in captured.out # last 3 chars of refresh-token
55
+ # Check that non-sensitive values are shown in full
56
+ assert "https://example.com" in captured.out
57
+
58
+
59
+ def test_configure_get_success(capsys):
60
+ """Test configure_get with an existing configuration value."""
61
+ mock_config = {"default": {"test-key": "test-value"}}
62
+ mock_load_config = MagicMock(return_value=mock_config)
63
+
64
+ with patch("qbraid_core.config.load_config", mock_load_config):
65
+ configure_get("test-key", "default")
66
+ captured = capsys.readouterr()
67
+ assert "test-value" in captured.out
68
+
69
+
70
+ def test_configure_get_missing_profile(capsys):
71
+ """Test configure_get with a missing profile."""
72
+ mock_config = {}
73
+ mock_load_config = MagicMock(return_value=mock_config)
74
+
75
+ with patch("qbraid_core.config.load_config", mock_load_config):
76
+ with pytest.raises(typer.Exit):
77
+ configure_get("test-key", "missing-profile")
78
+ captured = capsys.readouterr()
79
+ assert "Profile 'missing-profile' not found in configuration." in captured.out
80
+
81
+
82
+ def test_configure_get_missing_key(capsys):
83
+ """Test configure_get with a missing configuration key."""
84
+ mock_config = {"default": {}}
85
+ mock_load_config = MagicMock(return_value=mock_config)
86
+
87
+ with patch("qbraid_core.config.load_config", mock_load_config):
88
+ with pytest.raises(typer.Exit):
89
+ configure_get("missing-key", "default")
90
+ captured = capsys.readouterr()
91
+ assert "Configuration 'missing-key' not found in profile 'default'." in captured.out
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes