Coverage for .venv/lib/python3.13/site-packages/litellm/proxy/client/cli/commands/users.py: 0%
64 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 12:01 +0000
1from typing import Final
3import click
4import rich
6from ... import UsersManagementClient
7from ._cli_context import cli_context_values
10@click.group()
11def users():
12 """Manage users on your LiteLLM proxy server"""
15@users.command("list")
16@click.pass_context
17def list_users(ctx: click.Context):
18 """List all users"""
19 context: Final = cli_context_values(ctx)
20 client: Final = UsersManagementClient(base_url=context["base_url"], api_key=context["api_key"])
21 users = client.list_users()
22 if isinstance(users, dict) and "users" in users:
23 users = users["users"]
24 if not users:
25 click.echo("No users found.")
26 return
27 from rich.console import Console
28 from rich.table import Table
30 table: Final = Table(title="Users")
31 table.add_column("User ID", style="cyan")
32 table.add_column("Email", style="green")
33 table.add_column("Role", style="magenta")
34 table.add_column("Teams", style="yellow")
35 for user in users:
36 table.add_row(
37 str(user.get("user_id", "")),
38 str(user.get("user_email", "")),
39 str(user.get("user_role", "")),
40 ", ".join(user.get("teams", []) or []),
41 )
42 console: Final = Console()
43 console.print(table)
46@users.command("get")
47@click.option("--id", "user_id", help="ID of the user to retrieve")
48@click.pass_context
49def get_user(ctx: click.Context, user_id: str):
50 """Get information about a specific user"""
51 context: Final = cli_context_values(ctx)
52 client: Final = UsersManagementClient(base_url=context["base_url"], api_key=context["api_key"])
53 result: Final = client.get_user(user_id=user_id)
54 rich.print_json(data=result)
57@users.command("create")
58@click.option("--email", required=True, help="User email")
59@click.option("--role", default="internal_user", help="User role")
60@click.option("--alias", default=None, help="User alias")
61@click.option("--team", multiple=True, help="Team IDs (can specify multiple)")
62@click.option("--max-budget", type=float, default=None, help="Max budget for user")
63@click.pass_context
64def create_user(ctx: click.Context, email, role, alias, team, max_budget):
65 """Create a new user"""
66 context: Final = cli_context_values(ctx)
67 client: Final = UsersManagementClient(base_url=context["base_url"], api_key=context["api_key"])
68 user_data: Final = {
69 "user_email": email,
70 "user_role": role,
71 }
72 if alias:
73 user_data["user_alias"] = alias
74 if team:
75 user_data["teams"] = list(team)
76 if max_budget is not None:
77 user_data["max_budget"] = max_budget
78 result: Final = client.create_user(user_data)
79 rich.print_json(data=result)
82@users.command("delete")
83@click.argument("user_ids", nargs=-1)
84@click.pass_context
85def delete_user(ctx: click.Context, user_ids):
86 """Delete one or more users by user_id"""
87 context: Final = cli_context_values(ctx)
88 client: Final = UsersManagementClient(base_url=context["base_url"], api_key=context["api_key"])
89 result: Final = client.delete_user(list(user_ids))
90 rich.print_json(data=result)