Skip to content

Commit fc3b89e

Browse files
Arize AI Devsfjcasti1
authored andcommitted
Project import generated by Copybara.
GitOrigin-RevId: a925afb4de59ce596a1c4dc96e6f3c75ddfff43e
1 parent 2a9c788 commit fc3b89e

57 files changed

Lines changed: 2553 additions & 184 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Changelog
22

3+
## [8.24.0](https://github.com/Arize-ai/arize/compare/arize-python-sdk/v8.23.0...arize-python-sdk/v8.24.0) (2026-05-12)
4+
5+
6+
### 🎁 New Features
7+
8+
* **users:** Add users management support ([#70277](https://github.com/Arize-ai/arize/issues/70277)) ([3de9171](https://github.com/Arize-ai/arize/commit/3de9171a0cb0d616d97c21f4eb0de24182226ff7))
9+
10+
11+
### ❔ Miscellaneous Chores
12+
13+
* **deps-dev:** bump pytest from 8.4.2 to 9.0.3 in /sdk/python/arize/v8 ([#71509](https://github.com/Arize-ai/arize/issues/71509)) ([a82c1d5](https://github.com/Arize-ai/arize/commit/a82c1d5510850f53ff3d0111538688d5438b9c81))
14+
315
## [8.23.0](https://github.com/Arize-ai/arize/compare/arize-python-sdk/v8.22.4...arize-python-sdk/v8.23.0) (2026-05-11)
416

517

README.md

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,25 @@
8686
- [Get an AI Integration](#get-an-ai-integration)
8787
- [Update an AI Integration](#update-an-ai-integration)
8888
- [Delete an AI Integration](#delete-an-ai-integration)
89+
- [Operations on Organizations](#operations-on-organizations)
90+
- [List Organizations](#list-organizations)
91+
- [Get an Organization](#get-an-organization)
92+
- [Create an Organization](#create-an-organization)
93+
- [Update an Organization](#update-an-organization)
94+
- [Delete an Organization](#delete-an-organization)
95+
- [Add a User to an Organization](#add-a-user-to-an-organization)
96+
- [Remove a User from an Organization](#remove-a-user-from-an-organization)
97+
- [Operations on Spaces](#operations-on-spaces)
98+
- [Add a User to a Space](#add-a-user-to-a-space)
99+
- [Remove a User from a Space](#remove-a-user-from-a-space)
100+
- [Operations on Users](#operations-on-users)
101+
- [List Users](#list-users)
102+
- [Get a User](#get-a-user)
103+
- [Create a User](#create-a-user)
104+
- [Update a User](#update-a-user)
105+
- [Delete a User](#delete-a-user)
106+
- [Resend a User Invitation](#resend-a-user-invitation)
107+
- [Reset a User's Password](#reset-a-users-password)
89108
- [SDK Configuration](#sdk-configuration)
90109
- [Logging](#logging)
91110
- [In Code](#in-code)
@@ -1092,6 +1111,154 @@ client.organizations.delete(
10921111
)
10931112
```
10941113

1114+
### Add a User to an Organization
1115+
1116+
Add a user to an organization (or update their role if already a member). The user must already exist in the account.
1117+
1118+
```python
1119+
from arize.organizations.types import CustomOrgRole, PredefinedOrgRole
1120+
1121+
# Predefined role (admin, member, read-only, or annotator)
1122+
membership = client.organizations.add_user(
1123+
organization="<organization-id-or-name>",
1124+
user_id="<user-id>",
1125+
role=PredefinedOrgRole(name="member"),
1126+
)
1127+
1128+
# Custom RBAC role
1129+
membership = client.organizations.add_user(
1130+
organization="<organization-id-or-name>",
1131+
user_id="<user-id>",
1132+
role=CustomOrgRole(id="<role-id>"),
1133+
)
1134+
```
1135+
1136+
### Remove a User from an Organization
1137+
1138+
Removes the user from the organization and all its child spaces.
1139+
1140+
```python
1141+
client.organizations.remove_user(
1142+
organization="<organization-id-or-name>",
1143+
user_id="<user-id>",
1144+
)
1145+
```
1146+
1147+
## Operations on Spaces
1148+
1149+
Use `client.spaces` to manage space memberships.
1150+
1151+
### Add a User to a Space
1152+
1153+
Add a user to a space (or update their role if already a member). The user must already be a member of the space's parent organization.
1154+
1155+
```python
1156+
from arize.spaces.types import CustomSpaceRole, PredefinedSpaceRole
1157+
1158+
# Predefined role (admin, member, read-only, or annotator)
1159+
membership = client.spaces.add_user(
1160+
space="<space-id-or-name>",
1161+
user_id="<user-id>",
1162+
role=PredefinedSpaceRole(name="member"),
1163+
)
1164+
1165+
# Custom RBAC role
1166+
membership = client.spaces.add_user(
1167+
space="<space-id-or-name>",
1168+
user_id="<user-id>",
1169+
role=CustomSpaceRole(id="<role-id>"),
1170+
)
1171+
```
1172+
1173+
### Remove a User from a Space
1174+
1175+
```python
1176+
client.spaces.remove_user(
1177+
space="<space-id-or-name>",
1178+
user_id="<user-id>",
1179+
)
1180+
```
1181+
1182+
## Operations on Users
1183+
1184+
Use `client.users` to manage users in the Arize platform.
1185+
1186+
> **Note:** Unlike organizations, users are identified by opaque ID only — not by
1187+
> name. User display names are not unique within an account, so all methods require
1188+
> the user's ID.
1189+
1190+
### List Users
1191+
1192+
```python
1193+
resp = client.users.list(
1194+
email=..., # Optional, case-insensitive partial match on email
1195+
status=..., # Optional, list of statuses: "active", "invited", "expired"
1196+
limit=..., # Optional, defaults to 50 (max 100)
1197+
cursor=..., # Optional, pagination cursor from a previous response
1198+
)
1199+
user_list = resp.users
1200+
```
1201+
1202+
### Get a User
1203+
1204+
```python
1205+
user = client.users.get(
1206+
user_id="<user-id>",
1207+
)
1208+
```
1209+
1210+
### Create a User
1211+
1212+
```python
1213+
from arize.users.types import BuiltinUserRoleAssignment
1214+
1215+
user = client.users.create(
1216+
name="Jane Smith",
1217+
email="jane.smith@example.com",
1218+
role=BuiltinUserRoleAssignment(type="builtin", name="member"), # "admin", "member", or "annotator"
1219+
invite_mode="email_link", # "none", "email_link", or "temporary_password"
1220+
)
1221+
```
1222+
1223+
### Update a User
1224+
1225+
```python
1226+
user = client.users.update(
1227+
user_id="<user-id>",
1228+
name=..., # Optional updated display name
1229+
is_developer=..., # Optional, grant or revoke developer permissions
1230+
)
1231+
```
1232+
1233+
### Delete a User
1234+
1235+
> **Warning:** This operation soft-deletes the user and cascades to
1236+
> organization memberships, space memberships, API keys, and role bindings.
1237+
1238+
```python
1239+
client.users.delete(
1240+
user_id="<user-id>",
1241+
)
1242+
```
1243+
1244+
### Resend a User Invitation
1245+
1246+
```python
1247+
client.users.resend_invitation(
1248+
user_id="<user-id>", # Must be in "invited" status
1249+
)
1250+
```
1251+
1252+
### Reset a User's Password
1253+
1254+
Triggers a password-reset email. The user must authenticate via password (not SSO/SAML) and must have already verified their account.
1255+
1256+
```python
1257+
client.users.reset_password(
1258+
user_id="<user-id>",
1259+
)
1260+
```
1261+
10951262
## Operations on Annotation Configs
10961263

10971264
Use `client.annotation_configs` to manage annotation configurations that define scoring schemas for human feedback.

docs/source/_static/switcher.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
"url": "https://arize-client-python.readthedocs.io/en/latest/",
55
"preferred": true
66
},
7+
{
8+
"version": "v8.24.0",
9+
"url": "https://arize-client-python.readthedocs.io/en/v8.24.0/"
10+
},
711
{
812
"version": "v8.23.0",
913
"url": "https://arize-client-python.readthedocs.io/en/v8.23.0/"
@@ -40,10 +44,6 @@
4044
"version": "v8.15.0",
4145
"url": "https://arize-client-python.readthedocs.io/en/v8.15.0/"
4246
},
43-
{
44-
"version": "v8.14.0",
45-
"url": "https://arize-client-python.readthedocs.io/en/v8.14.0/"
46-
},
4747
{
4848
"version": "v7.52.0",
4949
"url": "https://arize-client-python.readthedocs.io/en/v7.52.0/"

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ dev = [
5656
"mypy==1.19.1",
5757
"pandas-stubs>=2.2.0",
5858
"pytest-cov==6.0.0",
59-
"pytest==8.4.2",
59+
"pytest==9.0.3",
6060
"ruff==0.14.9",
6161
"taskipy>=1.14.1, <2",
6262
"types-python-dateutil>=2.9.0",
@@ -173,11 +173,14 @@ ignore = [
173173
"D102", # Missing docstring in public method (test names document behavior)
174174
"D103", # Missing docstring in public function (fixtures are named by convention)
175175
"D104", # Missing docstring in public package
176+
"D205", # 1 blank line required between summary line and description
176177
"DTZ001", # Allow naive datetime usage in tests
178+
"E501", # Line too long
177179
"S101", # Allow assert statements in tests
178180
"S108", # Allow insecure usage of temporary file or directory
179181
"TRY301", # Allow generic exception catching in tests
180182
"B017", # Allow blind asserting exception: `Exception`
183+
"W505", # Line break before binary operator
181184
]
182185

183186
[tool.ruff.lint.isort]

src/.openapi-generator/FILES

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ arize/_generated/api_client/docs/AwsProviderMetadata.md
7575
arize/_generated/api_client/docs/AwsProviderMetadataKind.md
7676
arize/_generated/api_client/docs/BaseEvaluationTaskRequest.md
7777
arize/_generated/api_client/docs/BaseEvaluationTaskRequestEvaluatorsInner.md
78-
arize/_generated/api_client/docs/BuiltinRoleAssignment.md
79-
arize/_generated/api_client/docs/BuiltinUserRoleAssignment.md
8078
arize/_generated/api_client/docs/CategoricalAnnotationConfig.md
8179
arize/_generated/api_client/docs/CategoricalAnnotationConfigCreate.md
8280
arize/_generated/api_client/docs/CategoricalAnnotationValue.md
@@ -144,10 +142,10 @@ arize/_generated/api_client/docs/ManagedCodeEvaluator.md
144142
arize/_generated/api_client/docs/MessageRole.md
145143
arize/_generated/api_client/docs/OptimizationDirection.md
146144
arize/_generated/api_client/docs/Organization.md
147-
arize/_generated/api_client/docs/OrganizationBuiltinRoleAssignment.md
148145
arize/_generated/api_client/docs/OrganizationCustomRoleAssignment.md
149146
arize/_generated/api_client/docs/OrganizationMembership.md
150147
arize/_generated/api_client/docs/OrganizationMembershipInput.md
148+
arize/_generated/api_client/docs/OrganizationPredefinedRoleAssignment.md
151149
arize/_generated/api_client/docs/OrganizationRole.md
152150
arize/_generated/api_client/docs/OrganizationRoleAssignment.md
153151
arize/_generated/api_client/docs/OrganizationRoleAssignmentType.md
@@ -157,6 +155,8 @@ arize/_generated/api_client/docs/OrganizationsList200Response.md
157155
arize/_generated/api_client/docs/OrganizationsUpdateRequest.md
158156
arize/_generated/api_client/docs/PaginationMetadata.md
159157
arize/_generated/api_client/docs/Permission.md
158+
arize/_generated/api_client/docs/PredefinedRoleAssignment.md
159+
arize/_generated/api_client/docs/PredefinedUserRoleAssignment.md
160160
arize/_generated/api_client/docs/Problem.md
161161
arize/_generated/api_client/docs/Project.md
162162
arize/_generated/api_client/docs/ProjectsApi.md
@@ -298,8 +298,6 @@ arize/_generated/api_client/models/aws_provider_metadata.py
298298
arize/_generated/api_client/models/aws_provider_metadata_kind.py
299299
arize/_generated/api_client/models/base_evaluation_task_request.py
300300
arize/_generated/api_client/models/base_evaluation_task_request_evaluators_inner.py
301-
arize/_generated/api_client/models/builtin_role_assignment.py
302-
arize/_generated/api_client/models/builtin_user_role_assignment.py
303301
arize/_generated/api_client/models/categorical_annotation_config.py
304302
arize/_generated/api_client/models/categorical_annotation_config_create.py
305303
arize/_generated/api_client/models/categorical_annotation_value.py
@@ -364,10 +362,10 @@ arize/_generated/api_client/models/managed_code_evaluator.py
364362
arize/_generated/api_client/models/message_role.py
365363
arize/_generated/api_client/models/optimization_direction.py
366364
arize/_generated/api_client/models/organization.py
367-
arize/_generated/api_client/models/organization_builtin_role_assignment.py
368365
arize/_generated/api_client/models/organization_custom_role_assignment.py
369366
arize/_generated/api_client/models/organization_membership.py
370367
arize/_generated/api_client/models/organization_membership_input.py
368+
arize/_generated/api_client/models/organization_predefined_role_assignment.py
371369
arize/_generated/api_client/models/organization_role.py
372370
arize/_generated/api_client/models/organization_role_assignment.py
373371
arize/_generated/api_client/models/organization_role_assignment_type.py
@@ -376,6 +374,8 @@ arize/_generated/api_client/models/organizations_list200_response.py
376374
arize/_generated/api_client/models/organizations_update_request.py
377375
arize/_generated/api_client/models/pagination_metadata.py
378376
arize/_generated/api_client/models/permission.py
377+
arize/_generated/api_client/models/predefined_role_assignment.py
378+
arize/_generated/api_client/models/predefined_user_role_assignment.py
379379
arize/_generated/api_client/models/problem.py
380380
arize/_generated/api_client/models/project.py
381381
arize/_generated/api_client/models/projects_create_request.py
@@ -551,12 +551,15 @@ arize/_generated/api_client/test/test_managed_code_evaluator.py
551551
arize/_generated/api_client/test/test_message_role.py
552552
arize/_generated/api_client/test/test_optimization_direction.py
553553
arize/_generated/api_client/test/test_organization.py
554+
arize/_generated/api_client/test/test_organization_predefined_role_assignment.py
554555
arize/_generated/api_client/test/test_organizations_api.py
555556
arize/_generated/api_client/test/test_organizations_create_request.py
556557
arize/_generated/api_client/test/test_organizations_list200_response.py
557558
arize/_generated/api_client/test/test_organizations_update_request.py
558559
arize/_generated/api_client/test/test_pagination_metadata.py
559560
arize/_generated/api_client/test/test_permission.py
561+
arize/_generated/api_client/test/test_predefined_role_assignment.py
562+
arize/_generated/api_client/test/test_predefined_user_role_assignment.py
560563
arize/_generated/api_client/test/test_problem.py
561564
arize/_generated/api_client/test/test_project.py
562565
arize/_generated/api_client/test/test_projects_create_request.py

src/arize/_generated/api_client/__init__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@
9494
"AwsProviderMetadataKind",
9595
"BaseEvaluationTaskRequest",
9696
"BaseEvaluationTaskRequestEvaluatorsInner",
97-
"BuiltinRoleAssignment",
98-
"BuiltinUserRoleAssignment",
9997
"CategoricalAnnotationConfig",
10098
"CategoricalAnnotationConfigCreate",
10199
"CategoricalAnnotationValue",
@@ -160,10 +158,10 @@
160158
"MessageRole",
161159
"OptimizationDirection",
162160
"Organization",
163-
"OrganizationBuiltinRoleAssignment",
164161
"OrganizationCustomRoleAssignment",
165162
"OrganizationMembership",
166163
"OrganizationMembershipInput",
164+
"OrganizationPredefinedRoleAssignment",
167165
"OrganizationRole",
168166
"OrganizationRoleAssignment",
169167
"OrganizationRoleAssignmentType",
@@ -172,6 +170,8 @@
172170
"OrganizationsUpdateRequest",
173171
"PaginationMetadata",
174172
"Permission",
173+
"PredefinedRoleAssignment",
174+
"PredefinedUserRoleAssignment",
175175
"Problem",
176176
"Project",
177177
"ProjectsCreateRequest",
@@ -335,8 +335,6 @@
335335
from arize._generated.api_client.models.aws_provider_metadata_kind import AwsProviderMetadataKind as AwsProviderMetadataKind
336336
from arize._generated.api_client.models.base_evaluation_task_request import BaseEvaluationTaskRequest as BaseEvaluationTaskRequest
337337
from arize._generated.api_client.models.base_evaluation_task_request_evaluators_inner import BaseEvaluationTaskRequestEvaluatorsInner as BaseEvaluationTaskRequestEvaluatorsInner
338-
from arize._generated.api_client.models.builtin_role_assignment import BuiltinRoleAssignment as BuiltinRoleAssignment
339-
from arize._generated.api_client.models.builtin_user_role_assignment import BuiltinUserRoleAssignment as BuiltinUserRoleAssignment
340338
from arize._generated.api_client.models.categorical_annotation_config import CategoricalAnnotationConfig as CategoricalAnnotationConfig
341339
from arize._generated.api_client.models.categorical_annotation_config_create import CategoricalAnnotationConfigCreate as CategoricalAnnotationConfigCreate
342340
from arize._generated.api_client.models.categorical_annotation_value import CategoricalAnnotationValue as CategoricalAnnotationValue
@@ -401,10 +399,10 @@
401399
from arize._generated.api_client.models.message_role import MessageRole as MessageRole
402400
from arize._generated.api_client.models.optimization_direction import OptimizationDirection as OptimizationDirection
403401
from arize._generated.api_client.models.organization import Organization as Organization
404-
from arize._generated.api_client.models.organization_builtin_role_assignment import OrganizationBuiltinRoleAssignment as OrganizationBuiltinRoleAssignment
405402
from arize._generated.api_client.models.organization_custom_role_assignment import OrganizationCustomRoleAssignment as OrganizationCustomRoleAssignment
406403
from arize._generated.api_client.models.organization_membership import OrganizationMembership as OrganizationMembership
407404
from arize._generated.api_client.models.organization_membership_input import OrganizationMembershipInput as OrganizationMembershipInput
405+
from arize._generated.api_client.models.organization_predefined_role_assignment import OrganizationPredefinedRoleAssignment as OrganizationPredefinedRoleAssignment
408406
from arize._generated.api_client.models.organization_role import OrganizationRole as OrganizationRole
409407
from arize._generated.api_client.models.organization_role_assignment import OrganizationRoleAssignment as OrganizationRoleAssignment
410408
from arize._generated.api_client.models.organization_role_assignment_type import OrganizationRoleAssignmentType as OrganizationRoleAssignmentType
@@ -413,6 +411,8 @@
413411
from arize._generated.api_client.models.organizations_update_request import OrganizationsUpdateRequest as OrganizationsUpdateRequest
414412
from arize._generated.api_client.models.pagination_metadata import PaginationMetadata as PaginationMetadata
415413
from arize._generated.api_client.models.permission import Permission as Permission
414+
from arize._generated.api_client.models.predefined_role_assignment import PredefinedRoleAssignment as PredefinedRoleAssignment
415+
from arize._generated.api_client.models.predefined_user_role_assignment import PredefinedUserRoleAssignment as PredefinedUserRoleAssignment
416416
from arize._generated.api_client.models.problem import Problem as Problem
417417
from arize._generated.api_client.models.project import Project as Project
418418
from arize._generated.api_client.models.projects_create_request import ProjectsCreateRequest as ProjectsCreateRequest

0 commit comments

Comments
 (0)