Skip to content

Commit 4e90849

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add pagination helper for team memberships (#1502)
Co-authored-by: ci.datadog-api-spec <[email protected]> Co-authored-by: api-clients-generation-pipeline[bot] <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com>
1 parent 4e3851f commit 4e90849

File tree

7 files changed

+204
-4
lines changed

7 files changed

+204
-4
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.6",
7-
"regenerated": "2024-01-26 15:59:28.351864",
8-
"spec_repo_commit": "28baf464"
7+
"regenerated": "2024-01-26 20:56:59.043844",
8+
"spec_repo_commit": "a1db94fd"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2024-01-26 15:59:28.366791",
13-
"spec_repo_commit": "28baf464"
12+
"regenerated": "2024-01-26 20:56:59.077077",
13+
"spec_repo_commit": "a1db94fd"
1414
}
1515
}
1616
}

.generator/schemas/v2/openapi.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31989,6 +31989,10 @@ paths:
3198931989
summary: Get team memberships
3199031990
tags:
3199131991
- Teams
31992+
x-pagination:
31993+
limitParam: page[size]
31994+
pageParam: page[number]
31995+
resultsPath: data
3199231996
post:
3199331997
description: Add a user to a team.
3199431998
operationId: CreateTeamMembership
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"2024-01-26T20:53:20.323Z"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
{
2+
"log": {
3+
"_recordingName": "Teams/Get team memberships returns \"Represents a user's association to a team\" response with pagination",
4+
"creator": {
5+
"comment": "persister:fs",
6+
"name": "Polly.JS",
7+
"version": "6.0.5"
8+
},
9+
"entries": [
10+
{
11+
"_id": "3c8d7929145ffc09b9363558091bd3a3",
12+
"_order": 0,
13+
"cache": {},
14+
"request": {
15+
"bodySize": 0,
16+
"cookies": [],
17+
"headers": [
18+
{
19+
"_fromType": "array",
20+
"name": "accept",
21+
"value": "application/json"
22+
}
23+
],
24+
"headersSize": 588,
25+
"httpVersion": "HTTP/1.1",
26+
"method": "GET",
27+
"queryString": [
28+
{
29+
"name": "page",
30+
"value": {
31+
"number": "0",
32+
"size": "2"
33+
}
34+
}
35+
],
36+
"url": "https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=0"
37+
},
38+
"response": {
39+
"bodySize": 2081,
40+
"content": {
41+
"mimeType": "application/json",
42+
"size": 2081,
43+
"text": "{\"data\":[{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-3736692\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"03b4bfc0-98b9-11ec-842d-da7ad0900002\"}}}},{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-4055096\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"170a64a1-d9c6-11ec-af01-da7ad0900002\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"03b4bfc0-98b9-11ec-842d-da7ad0900002\",\"attributes\":{\"name\":\"Datadog API Client Python\",\"handle\":\"example-create_a_user_returns_ok_response_1646068093@datadoghq.com\",\"email\":\"example-create_a_user_returns_ok_response_1646068093@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/27fb863ad335246b65fe4989f1686f35?s=48&d=retro\",\"disabled\":false,\"service_account\":false}},{\"type\":\"users\",\"id\":\"170a64a1-d9c6-11ec-af01-da7ad0900002\",\"attributes\":{\"name\":\"Datadog API Client Python\",\"handle\":\"example-create_a_user_returns_ok_response_1653220535@datadoghq.com\",\"email\":\"example-create_a_user_returns_ok_response_1653220535@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c5256983bba478dfd35e83bbb73621cc?s=48&d=retro\",\"disabled\":false,\"service_account\":false}}],\"meta\":{\"pagination\":{\"number\":0,\"first_number\":0,\"prev_number\":0,\"next_number\":1,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=0\",\"last\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\"}}\n"
44+
},
45+
"cookies": [],
46+
"headers": [
47+
{
48+
"name": "content-type",
49+
"value": "application/json"
50+
}
51+
],
52+
"headersSize": 654,
53+
"httpVersion": "HTTP/1.1",
54+
"redirectURL": "",
55+
"status": 200,
56+
"statusText": "OK"
57+
},
58+
"startedDateTime": "2024-01-26T20:53:20.334Z",
59+
"time": 152
60+
},
61+
{
62+
"_id": "a72c08baf10659c0e4ff4ce823d38238",
63+
"_order": 0,
64+
"cache": {},
65+
"request": {
66+
"bodySize": 0,
67+
"cookies": [],
68+
"headers": [
69+
{
70+
"_fromType": "array",
71+
"name": "accept",
72+
"value": "application/json"
73+
}
74+
],
75+
"headersSize": 588,
76+
"httpVersion": "HTTP/1.1",
77+
"method": "GET",
78+
"queryString": [
79+
{
80+
"name": "page",
81+
"value": {
82+
"number": "1",
83+
"size": "2"
84+
}
85+
}
86+
],
87+
"url": "https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=1"
88+
},
89+
"response": {
90+
"bodySize": 1379,
91+
"content": {
92+
"mimeType": "application/json",
93+
"size": 1379,
94+
"text": "{\"data\":[{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-1445416\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"[email protected]\",\"email\":\"[email protected]\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"disabled\":false,\"service_account\":false}}],\"meta\":{\"pagination\":{\"number\":1,\"first_number\":0,\"prev_number\":0,\"next_number\":2,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=1\",\"last\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=2&page[size]=2\",\"prev\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\",\"first\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\"}}\n"
95+
},
96+
"cookies": [],
97+
"headers": [
98+
{
99+
"name": "content-type",
100+
"value": "application/json"
101+
}
102+
],
103+
"headersSize": 654,
104+
"httpVersion": "HTTP/1.1",
105+
"redirectURL": "",
106+
"status": 200,
107+
"statusText": "OK"
108+
},
109+
"startedDateTime": "2024-01-26T20:53:20.515Z",
110+
"time": 114
111+
}
112+
],
113+
"pages": [],
114+
"version": "1.2"
115+
}
116+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Get team memberships returns "Represents a user's association to a team" response with pagination
3+
*/
4+
5+
import { client, v2 } from "@datadog/datadog-api-client";
6+
7+
const configuration = client.createConfiguration();
8+
const apiInstance = new v2.TeamsApi(configuration);
9+
10+
const params: v2.TeamsApiGetTeamMembershipsRequest = {
11+
teamId: "2e06bf2c-193b-41d4-b3c2-afccc080458f",
12+
pageSize: 2,
13+
};
14+
15+
(async () => {
16+
try {
17+
for await (const item of apiInstance.getTeamMembershipsWithPagination(
18+
params
19+
)) {
20+
console.log(item);
21+
}
22+
} catch (error) {
23+
console.error(error);
24+
}
25+
})();

features/v2/teams.feature

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,15 @@ Feature: Teams
182182
When the request is sent
183183
Then the response status is 200 Represents a user's association to a team
184184

185+
@replay-only @skip-validation @team:DataDog/core-app @with-pagination
186+
Scenario: Get team memberships returns "Represents a user's association to a team" response with pagination
187+
Given new "GetTeamMemberships" request
188+
And request contains "team_id" parameter with value "2e06bf2c-193b-41d4-b3c2-afccc080458f"
189+
And request contains "page[size]" parameter with value 2
190+
When the request with pagination is sent
191+
Then the response status is 200 OK
192+
And the response has 3 items
193+
185194
@generated @skip @team:DataDog/core-app
186195
Scenario: Get user memberships returns "API error response." response
187196
Given new "GetUserMemberships" request

packages/datadog-api-client-v2/apis/TeamsApi.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import { TeamResponse } from "../models/TeamResponse";
3232
import { TeamsField } from "../models/TeamsField";
3333
import { TeamsResponse } from "../models/TeamsResponse";
3434
import { TeamUpdateRequest } from "../models/TeamUpdateRequest";
35+
import { UserTeam } from "../models/UserTeam";
3536
import { UserTeamRequest } from "../models/UserTeamRequest";
3637
import { UserTeamResponse } from "../models/UserTeamResponse";
3738
import { UserTeamsResponse } from "../models/UserTeamsResponse";
@@ -2335,6 +2336,50 @@ export class TeamsApi {
23352336
});
23362337
}
23372338

2339+
/**
2340+
* Provide a paginated version of getTeamMemberships returning a generator with all the items.
2341+
*/
2342+
public async *getTeamMembershipsWithPagination(
2343+
param: TeamsApiGetTeamMembershipsRequest,
2344+
options?: Configuration
2345+
): AsyncGenerator<UserTeam> {
2346+
let pageSize = 10;
2347+
if (param.pageSize !== undefined) {
2348+
pageSize = param.pageSize;
2349+
}
2350+
param.pageSize = pageSize;
2351+
param.pageNumber = 0;
2352+
while (true) {
2353+
const requestContext = await this.requestFactory.getTeamMemberships(
2354+
param.teamId,
2355+
param.pageSize,
2356+
param.pageNumber,
2357+
param.sort,
2358+
param.filterKeyword,
2359+
options
2360+
);
2361+
const responseContext = await this.configuration.httpApi.send(
2362+
requestContext
2363+
);
2364+
2365+
const response = await this.responseProcessor.getTeamMemberships(
2366+
responseContext
2367+
);
2368+
const responseData = response.data;
2369+
if (responseData === undefined) {
2370+
break;
2371+
}
2372+
const results = responseData;
2373+
for (const item of results) {
2374+
yield item;
2375+
}
2376+
if (results.length < pageSize) {
2377+
break;
2378+
}
2379+
param.pageNumber = param.pageNumber + 1;
2380+
}
2381+
}
2382+
23382383
/**
23392384
* Get all permission settings for a given team.
23402385
* @param param The request object

0 commit comments

Comments
 (0)