Skip to content

Commit 266fecc

Browse files
authored
Do not fail info command when user not set (#524)
1 parent 320f919 commit 266fecc

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

changelog/398.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix `infrahubctl info` command when run as an anonymous user

infrahub_sdk/client.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,7 @@ async def get_version(self) -> str:
310310

311311
async def get_user(self) -> dict:
312312
"""Return user information"""
313-
user_info = await self.execute_graphql(query=QUERY_USER)
314-
return user_info
313+
return await self.execute_graphql(query=QUERY_USER)
315314

316315
async def get_user_permissions(self) -> dict:
317316
"""Return user permissions"""
@@ -1565,8 +1564,7 @@ def get_version(self) -> str:
15651564

15661565
def get_user(self) -> dict:
15671566
"""Return user information"""
1568-
user_info = self.execute_graphql(query=QUERY_USER)
1569-
return user_info
1567+
return self.execute_graphql(query=QUERY_USER)
15701568

15711569
def get_user_permissions(self) -> dict:
15721570
"""Return user permissions"""

infrahub_sdk/ctl/cli_commands.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -409,20 +409,24 @@ def info( # noqa: PLR0915
409409
_: str = CONFIG_PARAM,
410410
) -> None:
411411
"""Display the status of the Python SDK."""
412-
413412
info: dict[str, Any] = {
414413
"error": None,
415414
"status": ":x:",
416415
"infrahub_version": "N/A",
417416
"user_info": {},
418417
"groups": {},
419418
}
419+
client = initialize_client_sync()
420+
fetch_user_details = bool(client.config.username) or bool(client.config.api_token)
421+
420422
try:
421-
client = initialize_client_sync()
422423
info["infrahub_version"] = client.get_version()
423-
info["user_info"] = client.get_user()
424+
425+
if fetch_user_details:
426+
info["user_info"] = client.get_user()
427+
info["groups"] = client.get_user_permissions()
428+
424429
info["status"] = ":white_heavy_check_mark:"
425-
info["groups"] = client.get_user_permissions()
426430
except Exception as e:
427431
info["error"] = f"{e!s} ({e.__class__.__name__})"
428432

@@ -469,7 +473,7 @@ def info( # noqa: PLR0915
469473
pretty_model = Pretty(client.config.model_dump(), expand_all=True)
470474
layout["client_info"].update(Panel(pretty_model, title="Client Info"))
471475

472-
# Infrahub information planel
476+
# Infrahub information panel
473477
infrahub_info = Table(show_header=False, box=None)
474478
if info["user_info"]:
475479
infrahub_info.add_row("User:", info["user_info"]["AccountProfile"]["display_label"])
@@ -487,6 +491,8 @@ def info( # noqa: PLR0915
487491
infrahub_info.add_row("Groups:", "")
488492
for group, roles in groups.items():
489493
infrahub_info.add_row("", group, ", ".join(roles))
494+
else:
495+
infrahub_info.add_row("User:", "anonymous")
490496

491497
layout["infrahub_info"].update(Panel(infrahub_info, title="Infrahub Info"))
492498

tests/unit/ctl/test_cli.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_version_command() -> None:
3333

3434

3535
def test_info_command_success(mock_query_infrahub_version, mock_query_infrahub_user) -> None:
36-
result = runner.invoke(app, ["info"])
36+
result = runner.invoke(app, ["info"], env={"INFRAHUB_API_TOKEN": "foo"})
3737
assert result.exit_code == 0
3838
for expected in ["Connection Status", "Python Version", "SDK Version", "Infrahub Version"]:
3939
assert expected in result.stdout, f"'{expected}' not found in info command output"
@@ -46,15 +46,16 @@ def test_info_command_failure() -> None:
4646

4747

4848
def test_info_detail_command_success(mock_query_infrahub_version, mock_query_infrahub_user) -> None:
49+
result = runner.invoke(app, ["info", "--detail"], env={"INFRAHUB_API_TOKEN": "foo"})
50+
assert result.exit_code == 0
51+
for expected in ["Connection Status", "Version Information", "Client Info", "Infrahub Info", "Groups:"]:
52+
assert expected in result.stdout, f"'{expected}' not found in detailed info command output"
53+
54+
55+
def test_anonymous_info_detail_command_success(mock_query_infrahub_version) -> None:
4956
result = runner.invoke(app, ["info", "--detail"])
5057
assert result.exit_code == 0
51-
for expected in [
52-
"Connection Status",
53-
"Version Information",
54-
"Client Info",
55-
"Infrahub Info",
56-
"Groups:",
57-
]:
58+
for expected in ["Connection Status", "Version Information", "Client Info", "Infrahub Info", "anonymous"]:
5859
assert expected in result.stdout, f"'{expected}' not found in detailed info command output"
5960

6061

0 commit comments

Comments
 (0)