"""
Type definitions and data models for Looker Admin MCP.
Provides TypedDicts for user, group, role, schedule, alert, and system admin responses.
"""
from typing import Dict, List, Optional, Any, TypedDict
# --- User Management Types ---
class UserType(TypedDict, total=False):
"""Looker user information."""
id: int
first_name: Optional[str]
last_name: Optional[str]
email: Optional[str]
is_disabled: Optional[bool]
personal_space_id: Optional[int]
home_space_id: Optional[int]
locale: Optional[str]
credentials_email: Optional[Dict[str, Any]]
credentials_api3: Optional[List[Dict[str, Any]]]
role_ids: Optional[List[int]]
group_ids: Optional[List[int]]
# --- Group Management Types ---
class GroupType(TypedDict, total=False):
"""Looker group information."""
id: int
name: Optional[str]
externally_managed: Optional[bool]
external_group_id: Optional[str]
include_by_default: Optional[bool]
user_count: Optional[int]
contains_current_user: Optional[bool]
# --- Role & Permission Types ---
class PermissionSetType(TypedDict, total=False):
"""Looker permission set."""
id: int
name: Optional[str]
permissions: Optional[List[str]]
built_in: Optional[bool]
all_access: Optional[bool]
class ModelSetType(TypedDict, total=False):
"""Looker model set."""
id: int
name: Optional[str]
models: Optional[List[str]]
built_in: Optional[bool]
all_access: Optional[bool]
class RoleType(TypedDict, total=False):
"""Looker role information."""
id: int
name: Optional[str]
permission_set_id: Optional[int]
model_set_id: Optional[int]
permission_set: Optional[PermissionSetType]
model_set: Optional[ModelSetType]
user_count: Optional[int]
# --- Scheduled Plans Types ---
class ScheduledPlanDestinationType(TypedDict, total=False):
"""Destination for scheduled plan delivery."""
id: int
type: Optional[str] # email, webhook, s3, sftp, etc.
format: Optional[str]
address: Optional[str]
apply_formatting: Optional[bool]
apply_vis: Optional[bool]
class ScheduledPlanType(TypedDict, total=False):
"""Looker scheduled plan."""
id: int
name: Optional[str]
user_id: Optional[int]
dashboard_id: Optional[int]
look_id: Optional[int]
title: Optional[str]
crontab: Optional[str]
timezone: Optional[str]
enabled: Optional[bool]
run_as_recipient: Optional[bool]
include_links: Optional[bool]
scheduled_plan_destinations: Optional[List[ScheduledPlanDestinationType]]
created_at: Optional[str]
updated_at: Optional[str]
next_run_at: Optional[str]
last_run_at: Optional[str]
# --- Alert Types ---
class AlertFieldType(TypedDict, total=False):
"""Field information for alerts."""
title: Optional[str]
name: Optional[str]
filter: Optional[List[Dict[str, Any]]]
class AlertDestinationType(TypedDict, total=False):
"""Alert destination configuration."""
destination_type: Optional[str] # email, action_hub
email_address: Optional[str]
action_hub_integration_id: Optional[str]
action_hub_form_params_json: Optional[str]
class AlertType(TypedDict, total=False):
"""Looker alert."""
id: int
comparison_type: Optional[str] # LESS_THAN, GREATER_THAN, EQUAL_TO, etc.
threshold: Optional[float]
field: Optional[AlertFieldType]
dashboard_element_id: Optional[int]
is_disabled: Optional[bool]
is_public: Optional[bool]
cron: Optional[str]
custom_title: Optional[str]
description: Optional[str]
destinations: Optional[List[AlertDestinationType]]
owner_id: Optional[int]
followed: Optional[bool]
followable: Optional[bool]
# --- Content Access Types ---
class FolderType(TypedDict, total=False):
"""Looker folder information."""
id: str
name: Optional[str]
parent_id: Optional[str]
content_metadata_id: Optional[int]
created_at: Optional[str]
creator_id: Optional[int]
child_count: Optional[int]
is_shared_root: Optional[bool]
is_users_root: Optional[bool]
is_embed_shared_root: Optional[bool]
is_embed_users_root: Optional[bool]
class ContentMetadataAccessType(TypedDict, total=False):
"""Content access permission."""
id: int
content_metadata_id: Optional[int]
permission_type: Optional[str] # view, edit
group_id: Optional[int]
user_id: Optional[int]
# --- System Admin Types ---
class UserSessionType(TypedDict, total=False):
"""Looker user session."""
id: int
ip_address: Optional[str]
browser: Optional[str]
operating_system: Optional[str]
city: Optional[str]
state: Optional[str]
country: Optional[str]
credentials_type: Optional[str]
extended_at: Optional[str]
extended_count: Optional[int]
sudo_user_id: Optional[int]
created_at: Optional[str]
expires_at: Optional[str]
class UserAttributeType(TypedDict, total=False):
"""Looker user attribute."""
id: int
name: Optional[str]
label: Optional[str]
type: Optional[str] # string, number, datetime, etc.
default_value: Optional[str]
is_system: Optional[bool]
is_permanent: Optional[bool]
value_is_hidden: Optional[bool]
user_can_view: Optional[bool]
user_can_edit: Optional[bool]
hidden_value_domain_whitelist: Optional[str]
class UserAttributeValueType(TypedDict, total=False):
"""User attribute value for a specific user."""
user_attribute_id: int
user_id: Optional[int]
value: Optional[str]
source: Optional[str] # user, group, default
rank: Optional[int]
# --- API Version Types ---
class ApiVersionType(TypedDict, total=False):
"""Looker API version information."""
looker_release_version: Optional[str]
current_version: Optional[Dict[str, str]]
supported_versions: Optional[List[Dict[str, str]]]