Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/398.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix `infrahubctl info` command when run as an anonymous user
6 changes: 2 additions & 4 deletions infrahub_sdk/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,7 @@ async def get_version(self) -> str:

async def get_user(self) -> dict:
"""Return user information"""
user_info = await self.execute_graphql(query=QUERY_USER)
return user_info
return await self.execute_graphql(query=QUERY_USER)

async def get_user_permissions(self) -> dict:
"""Return user permissions"""
Expand Down Expand Up @@ -1565,8 +1564,7 @@ def get_version(self) -> str:

def get_user(self) -> dict:
"""Return user information"""
user_info = self.execute_graphql(query=QUERY_USER)
return user_info
return self.execute_graphql(query=QUERY_USER)

def get_user_permissions(self) -> dict:
"""Return user permissions"""
Expand Down
16 changes: 11 additions & 5 deletions infrahub_sdk/ctl/cli_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,20 +409,24 @@ def info( # noqa: PLR0915
_: str = CONFIG_PARAM,
) -> None:
"""Display the status of the Python SDK."""

info: dict[str, Any] = {
"error": None,
"status": ":x:",
"infrahub_version": "N/A",
"user_info": {},
"groups": {},
}
client = initialize_client_sync()
fetch_user_details = bool(client.config.username) or bool(client.config.api_token)

try:
client = initialize_client_sync()
info["infrahub_version"] = client.get_version()
info["user_info"] = client.get_user()

if fetch_user_details:
info["user_info"] = client.get_user()
info["groups"] = client.get_user_permissions()

info["status"] = ":white_heavy_check_mark:"
info["groups"] = client.get_user_permissions()
except Exception as e:
info["error"] = f"{e!s} ({e.__class__.__name__})"

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

# Infrahub information planel
# Infrahub information panel
infrahub_info = Table(show_header=False, box=None)
if info["user_info"]:
infrahub_info.add_row("User:", info["user_info"]["AccountProfile"]["display_label"])
Expand All @@ -487,6 +491,8 @@ def info( # noqa: PLR0915
infrahub_info.add_row("Groups:", "")
for group, roles in groups.items():
infrahub_info.add_row("", group, ", ".join(roles))
else:
infrahub_info.add_row("User:", "anonymous")

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

Expand Down
17 changes: 9 additions & 8 deletions tests/unit/ctl/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def test_version_command() -> None:


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


def test_info_detail_command_success(mock_query_infrahub_version, mock_query_infrahub_user) -> None:
result = runner.invoke(app, ["info", "--detail"], env={"INFRAHUB_API_TOKEN": "foo"})
assert result.exit_code == 0
for expected in ["Connection Status", "Version Information", "Client Info", "Infrahub Info", "Groups:"]:
assert expected in result.stdout, f"'{expected}' not found in detailed info command output"


def test_anonymous_info_detail_command_success(mock_query_infrahub_version) -> None:
result = runner.invoke(app, ["info", "--detail"])
assert result.exit_code == 0
for expected in [
"Connection Status",
"Version Information",
"Client Info",
"Infrahub Info",
"Groups:",
]:
for expected in ["Connection Status", "Version Information", "Client Info", "Infrahub Info", "anonymous"]:
assert expected in result.stdout, f"'{expected}' not found in detailed info command output"


Expand Down