User
The User module contains methods related to users in the system such as managing access keys, managing users.
Initialization & Imports
from waii_sdk_py import WAII
from waii_sdk_py.chat import *
from waii_sdk_py.query import *
from waii_sdk_py.database import *
from waii_sdk_py.semantic_context import *
from waii_sdk_py.chart import *
from waii_sdk_py.history import *
WAII.initialize(url="https://your-waii-instance/api/", api_key="your-api-key")
Here are some of its methods:
Overview
In the WAII system, there's a hierarchical relationship between organizations, tenants, and users. At the top level, we have organizations (orgs), which represent the highest level of grouping. Each organization can contain multiple tenants, which are subgroups within the organization. Tenants, in turn, can have multiple users associated with them.
Users are individual accounts within the system, each belonging to a specific tenant and, by extension, to an organization. This structure allows for flexible management of access and resources across different levels of the hierarchy. For example, a user's permissions and access rights may be determined by their associated tenant and organization.
Important note: You don't need to activate any connection (WAII.Database.activate...) to use this module, because it is not related to any specific connection.
Create Access Key
WAII.User.create_access_key(params: CreateAccessKeyRequest) -> GetAccessKeyResponse
This method creates a new access key for a user.
CreateAccessKeyRequest
CreateAccessKeyRequest has the following properties:
name: It is a string type denoting the name of the access key.
Response Fields
GetAccessKeyResponse has the following properties:
access_keys:Optional[List[AccessKey]]
AccessKey is defined as:
access_key: It is the access key string.user_id: User ID of the user to whom the access key belongs.name: Name of the access key which was given at the time of key creation.created_at: Timestamp when the key was created.
For Example
params = CreateAccessKeyRequest(name="test-key")
response = Waii.user.create_access_key(params)
>>> print(response.access_keys) # List of created access keys
List Access Keys
WAII.User.list_access_keys(params: GetAccessKeyRequest) -> GetAccessKeyResponse
This method list access keys of the user.
GetAccessKeyRequest is empty object with no fields
Response is GetAccessKeyResponse which is described above
For Example
params = GetAccessKeyRequest()
resp = WAII.User.list_access_keys(params)
>>> print(response.access_keys) # List of access keys
Delete Access key
WAII.User.delete_access_key(params: DelAccessKeyRequest) -> DelAccessKeyResponse
This method deletes the access key of the user.
DelAccessKeyRequest has following properties:
names: It is list of string denoting the name of the access keys which user wants to delete.
Response is DelAccessKeyResponse which is empty object
For Example
params = DelAccessKeyRequest(names=["test2"])
resp = WAII.User.delete_access_key(params)
Get User Info
WAII.User.get_user_info(params: GetUserInfoRequest) -> GetUserInfoResponse
This method retrieves information about a user.
GetUserInfoRequest has the following properties:
user_id: The ID of the user whose information is to be retrieved.
Response fields:
GetUserInfoResponseidnameemailrolespermissions
For Example:
params = GetUserInfoRequest(user_id="user_1")
response = WAII.User.get_user_info(params)
>>> print(response.user_info) # Details of the requested user
Update Config
WAII.User.update_config(params: UpdateConfigRequest) -> UpdateConfigResponse
This method updates configuration settings for a user.
UpdateConfigRequest has the following properties:
updated: Dictionary containing key and values that needs to be updateddeleted: List of string denoting the keys of config that needs to be deleted
Response fields:
UpdateConfigResponseconfigs: Dictionary denoting the current config
For Example:
params = UpdateConfigRequest(updated={"key1": "value1", "key2": "value2"})
response = WAII.User.update_config(params)
>>> print(response)
Create User
WAII.User.create_user(params: CreateUserRequest) -> CommonResponse
This method creates a new user.
CreateUserRequest has the following properties:
-user: User object
-id: (string) unique id of the user
name: (string) Display name of the user to be created.tenant_id:(string) Tenant id of the user.org_id:(string) Org id of the user.variables:(Dict (str, Any)) variable of the userroles: (List[str]) roles for the user
Response fields:
CommonResponse: Empty object
For Example:
CreateUserRequest(user=User(id="jack@myco.com",name="Jack",tenant_id="my_tenant_id",org_id="my_org_id", roles=[WaiiRoles.WAII_TRIAL_USER]))
response = WAII.User.create_user(params)
print(response) # Confirmation of user creation
Note:
- Tenant and Org must be created before creating a user.
User role management
In order to create user with specific roles, you can fill the roles field.
Documentation for roles can be found waii-user-roles
Delete User
WAII.User.delete_user(params: DeleteUserRequest) -> CommonResponse
This method deletes an existing user.
DeleteUserRequest has the following properties:
id: The user_id of the user to be deleted.
Response fields:
CommonResponseEmpty object
For Example:
params = DeleteUserRequest(id="user_1")
response = WAII.User.delete_user(params)
>>> print(response)
Update User
WAII.User.update_user(params: UpdateUserRequest) -> CommonResponse
This method updates information about an existing user.
UpdateUserRequest has the following properties:
user: User object as described in create user section
Response fields:
CommonResponse: Empty object
For Example:
params = UpdateUserRequest(user=User( id="user1",name="Pravin",tenant_id="my_tenant_id",org_id="my_org_id"))
response = WAII.User.update_user(params)
>>> print(response)
List Users
WAII.User.list_users(params: ListUsersRequest) -> ListUsersResponse
This method retrieves a list of users.
ListUsersRequest:
-lookup_org_id: org_id for which the users are to be retrieved.
Response fields:
ListUsersResponseusers: A list of user object.
For Example:
params = ListUsersRequest(lookup_org_id="my_org_id")
response = WAII.User.list_users(params)
>>> print(response.users) # List of all users
Create Tenant
WAII.User.create_tenant(params: CreateTenantRequest) -> CommonResponse
This method creates a new tenant.
CreateTenantRequest has the following properties:
tenant: Tenant objectid: (string) unique id of the tenantname: (string) Display name of the tenant to be created.variables: (Dict (str, Any)) variables of the tenantorg_id: (string) Org ID of the tenant
Response fields:
CommonResponse: Empty object
For Example:
params = CreateTenantRequest(tenant=Tenant(id="tenant1", name="Example Tenant", variables={"key1": "value1"}, org_id="org123"))
response = WAII.User.create_tenant(params)
print(response)
Note:
- Org must be created before creating a tenant.
Update Tenant
WAII.User.update_tenant(params: UpdateTenantRequest) -> CommonResponse
This method updates information about an existing tenant.
UpdateTenantRequest has the following properties:
tenant: Tenant object as described in the create tenant section
Response fields:
CommonResponse: Empty object
For Example:
params = UpdateTenantRequest(tenant=Tenant(id="tenant1", name="Updated Tenant", variables={"key2": "value2"}, org_id="org123"))
response = WAII.User.update_tenant(params)
print(response)
Delete Tenant
WAII.User.delete_tenant(params: DeleteTenantRequest) -> CommonResponse
This method deletes an existing tenant.
DeleteTenantRequest has the following properties:
id: The tenant_id to be deleted.
Response fields:
CommonResponse: Empty object
For Example:
params = DeleteTenantRequest(id="tenant1")
response = WAII.Tenant.delete_tenant(params)
print(response)
List Tenants
WAII.User.list_tenants(params: ListTenantsRequest) -> ListTenantsResponse
This method retrieves a list of tenants.
ListTenantsRequest has the following properties:
lookup_org_id: (optional) org_id for which the tenants are to be retrieved.
Response fields:
ListTenantsResponse:tenants: A list of Tenant objects.
For Example:
params = ListTenantsRequest(lookup_org_id="org123")
response = WAII.User.list_tenants(params)
print(response.tenants) # List of all tenants
Create Org
WAII.User.create_org(params: CreateOrganizationRequest) -> CommonResponse
This method creates a new org.
CreateOrganizationRequest has the following properties:
organization: Organization objectid: (string) unique id of the organizationname: (string) Display name of the organization to be created.variables: (Dict (str, Any)) variables of the organization
Response fields:
CommonResponse: Empty object
For Example:
params = CreateOrganizationRequest(organization=Organization(id="o1", name="My Org"))
response = WAII.User.create_org(params)
print(response)
Update Org
WAII.User.update_org(params: UpdateOrganizationRequest) -> CommonResponse
This method updates information about an existing org.
UpdateOrganizationRequest has the following properties:
organization: Organization object as described in the create org section
Response fields:
CommonResponse: Empty object
For Example:
params = UpdateOrganizationRequest(organization=Organization(id="o1", name="My Org2"))
response = WAII.User.update_org(params)
print(response)
Delete Org
WAII.User.delete_org(params: DeleteOrganizationRequest) -> CommonResponse
This method deletes an existing org.
DeleteOrganizationRequest has the following properties:
id: The org_id to be deleted.
Response fields:
CommonResponse: Empty object
For Example:
params = DeleteOrganizationRequest(id="org1")
response = WAII.User.delete_org(params)
print(response)
List Orgs
WAII.User.list_orgs(params: ListOrganizationsRequest) -> ListOrganizationsResponse
This method retrieves a list of organizations.
ListOrganizationsRequest is an empty object.
Response fields:
ListOrganizationsResponse:organizations: A list of organization objects.
For Example:
params = ListOrganizationsRequest()
response = WAII.User.list_orgs(params)
print(response.organizations) # List of all organizations
Impersonation
Using Python SDK, you can impersonate as a user to perform actions on behalf of that user. This is useful when you want to perform actions that require the user's permissions and access rights.
To impersonate an user, you need to be part of waii-org-admin-user role. If you are using SaaS, you need to reach out to Waii team to get this role assigned to you.
Here is an example of how you can impersonate as a user (you can only use the multi-tenant sdk for this):
client1_sdk = Waii()
client1_sdk.initialize(url='...', api_key="<your-api-key>")
with client1_sdk.impersonate_user(user_id="user_id_1"):
# do other operations such as run query, modify semantic context, etc.
client1_sdk.semantic_context.modify_semantic_context(ModifySemanticContextRequest(
updated=[
# the statement object which mentioned above
]
))
client1_sdk.query.run_query(RunQueryRequest(
query="...",
variables={...}
))
# it will automatically revert back to the original user after the block
Even if you are the waii-org-admin-user, you can only impersonate as a user that belongs to the same org as you. And you cannot impersonate as a user that has more permissions than you.
(Not recommended) If you don't want to use the with block, you can also use the set_impersonate_user / clear_impersonation methods:
client1_sdk.set_impersonate_user(user_id="user_id_2")
# do other operations such as run query, modify semantic context, etc.
client1_sdk.clear_impersonation()