Skip to content

Commit 4dab98b

Browse files
api-clients-generation-pipeline[bot]nkzouci.datadog-api-spec
authored
Powerpack pagination and test fixes (#1716)
* fix error during glom * Regenerate client from commit 6653b14d of spec repo --------- Co-authored-by: Kevin Zou <[email protected]> Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent 8463fa3 commit 4dab98b

30 files changed

+300
-131
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": "2023-10-10 13:47:33.127844",
8-
"spec_repo_commit": "afb48804"
7+
"regenerated": "2023-10-12 13:31:17.639000",
8+
"spec_repo_commit": "6653b14d"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2023-10-10 13:47:33.153228",
13-
"spec_repo_commit": "afb48804"
12+
"regenerated": "2023-10-12 13:31:17.656414",
13+
"spec_repo_commit": "6653b14d"
1414
}
1515
}
1616
}

.generator/schemas/v2/openapi.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23874,6 +23874,18 @@ paths:
2387423874
get:
2387523875
description: Get a list of all powerpacks.
2387623876
operationId: ListPowerpacks
23877+
parameters:
23878+
- description: Maximum number of powerpacks in the response.
23879+
example: 25
23880+
in: query
23881+
name: page[limit]
23882+
required: false
23883+
schema:
23884+
default: 25
23885+
format: int64
23886+
maximum: 1000
23887+
type: integer
23888+
- $ref: '#/components/parameters/PageOffset'
2387723889
responses:
2387823890
'200':
2387923891
content:
@@ -23891,6 +23903,10 @@ paths:
2389123903
summary: Get all powerpacks
2389223904
tags:
2389323905
- Powerpack
23906+
x-pagination:
23907+
limitParam: page[limit]
23908+
pageOffsetParam: page[offset]
23909+
resultsPath: data
2389423910
post:
2389523911
description: Create a powerpack.
2389623912
operationId: CreatePowerpack

examples/v2/powerpack/CreatePowerpack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
y=0,
3737
),
3838
),
39-
name="Sample Powerpack",
39+
name="Example-Powerpack",
4040
tags=[
4141
"tag:sample",
4242
],

examples/v2/powerpack/ListPowerpacks.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
configuration = Configuration()
99
with ApiClient(configuration) as api_client:
1010
api_instance = PowerpackApi(api_client)
11-
response = api_instance.list_powerpacks()
11+
response = api_instance.list_powerpacks(
12+
page_limit=1000,
13+
)
1214

1315
print(response)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Get all powerpacks returns "OK" response with pagination
3+
"""
4+
5+
from datadog_api_client import ApiClient, Configuration
6+
from datadog_api_client.v2.api.powerpack_api import PowerpackApi
7+
8+
configuration = Configuration()
9+
with ApiClient(configuration) as api_client:
10+
api_instance = PowerpackApi(api_client)
11+
items = api_instance.list_powerpacks_with_pagination(
12+
page_limit=2,
13+
)
14+
for item in items:
15+
print(item)

examples/v2/powerpack/UpdatePowerpack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
y=0,
4141
),
4242
),
43-
name="Sample Powerpack",
43+
name="Example-Powerpack",
4444
tags=[
4545
"tag:sample",
4646
],

src/datadog_api_client/v2/api/powerpack_api.py

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,19 @@
33
# Copyright 2019-Present Datadog, Inc.
44
from __future__ import annotations
55

6-
from typing import Any, Dict
6+
import collections
7+
from typing import Any, Dict, Union
78

89
from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint
910
from datadog_api_client.configuration import Configuration
11+
from datadog_api_client.model_utils import (
12+
set_attribute_from_path,
13+
get_attribute_from_path,
14+
UnsetType,
15+
unset,
16+
)
1017
from datadog_api_client.v2.model.list_powerpacks_response import ListPowerpacksResponse
18+
from datadog_api_client.v2.model.powerpack_data import PowerpackData
1119
from datadog_api_client.v2.model.powerpack_response import PowerpackResponse
1220
from datadog_api_client.v2.model.powerpack import Powerpack
1321

@@ -105,7 +113,21 @@ def __init__(self, api_client=None):
105113
"http_method": "GET",
106114
"version": "v2",
107115
},
108-
params_map={},
116+
params_map={
117+
"page_limit": {
118+
"validation": {
119+
"inclusive_maximum": 1000,
120+
},
121+
"openapi_types": (int,),
122+
"attribute": "page[limit]",
123+
"location": "query",
124+
},
125+
"page_offset": {
126+
"openapi_types": (int,),
127+
"attribute": "page[offset]",
128+
"location": "query",
129+
},
130+
},
109131
headers_map={
110132
"accept": ["application/json"],
111133
},
@@ -191,16 +213,66 @@ def get_powerpack(
191213

192214
def list_powerpacks(
193215
self,
216+
*,
217+
page_limit: Union[int, UnsetType] = unset,
218+
page_offset: Union[int, UnsetType] = unset,
194219
) -> ListPowerpacksResponse:
195220
"""Get all powerpacks.
196221
197222
Get a list of all powerpacks.
198223
224+
:param page_limit: Maximum number of powerpacks in the response.
225+
:type page_limit: int, optional
226+
:param page_offset: Specific offset to use as the beginning of the returned page.
227+
:type page_offset: int, optional
199228
:rtype: ListPowerpacksResponse
200229
"""
201230
kwargs: Dict[str, Any] = {}
231+
if page_limit is not unset:
232+
kwargs["page_limit"] = page_limit
233+
234+
if page_offset is not unset:
235+
kwargs["page_offset"] = page_offset
236+
202237
return self._list_powerpacks_endpoint.call_with_http_info(**kwargs)
203238

239+
def list_powerpacks_with_pagination(
240+
self,
241+
*,
242+
page_limit: Union[int, UnsetType] = unset,
243+
page_offset: Union[int, UnsetType] = unset,
244+
) -> collections.abc.Iterable[PowerpackData]:
245+
"""Get all powerpacks.
246+
247+
Provide a paginated version of :meth:`list_powerpacks`, returning all items.
248+
249+
:param page_limit: Maximum number of powerpacks in the response.
250+
:type page_limit: int, optional
251+
:param page_offset: Specific offset to use as the beginning of the returned page.
252+
:type page_offset: int, optional
253+
254+
:return: A generator of paginated results.
255+
:rtype: collections.abc.Iterable[PowerpackData]
256+
"""
257+
kwargs: Dict[str, Any] = {}
258+
if page_limit is not unset:
259+
kwargs["page_limit"] = page_limit
260+
261+
if page_offset is not unset:
262+
kwargs["page_offset"] = page_offset
263+
264+
local_page_size = get_attribute_from_path(kwargs, "page_limit", 25)
265+
endpoint = self._list_powerpacks_endpoint
266+
set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map)
267+
pagination = {
268+
"limit_value": local_page_size,
269+
"results_path": "data",
270+
"page_offset_param": "page_offset",
271+
"endpoint": endpoint,
272+
"kwargs": kwargs,
273+
}
274+
return endpoint.call_with_http_info_paginated(pagination)
275+
204276
def update_powerpack(
205277
self,
206278
powerpack_id: str,

tests/conftest.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,12 +668,17 @@ def expect_response_has_field(context, response_path, field):
668668

669669
@then(parsers.parse('the response "{response_path}" has item with field "{key_path}" with value {value}'))
670670
def expect_array_contains_object(context, response_path, key_path, value):
671+
from glom.core import PathAccessError
672+
671673
response_value = glom(context["api_request"]["response"][0], response_path)
672674
test_value = json.loads(Template(value).render(**context))
673675
for response_item in response_value:
674-
response_item_value = glom(response_item, key_path)
675-
if response_item_value == test_value:
676-
return
676+
try:
677+
response_item_value = glom(response_item, key_path)
678+
if response_item_value == test_value:
679+
return
680+
except PathAccessError:
681+
pass
677682
raise AssertionError(f'could not find key value pair in object array: "{key_path}": "{test_value}"')
678683

679684

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2023-09-26T21:29:30.230Z
1+
2023-10-11T18:44:47.026Z

tests/v1/cassettes/test_scenarios/test_create_a_new_dashboard_with_powerpack_widget.yaml

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
interactions:
22
- request:
33
body: '{"data":{"attributes":{"description":"Sample powerpack","group_widget":{"definition":{"layout_type":"ordered","show_title":true,"title":"Sample
4-
Powerpack","type":"group","widgets":[{"definition":{"content":"test","type":"note"}}]},"layout":{"height":3,"width":12,"x":0,"y":0}},"name":"Sample
5-
Powerpack","tags":["tag:sample"],"template_variables":[{"defaults":["*"],"name":"sample"}]},"type":"powerpack"}}'
4+
Powerpack","type":"group","widgets":[{"definition":{"content":"test","type":"note"}}]},"layout":{"height":3,"width":12,"x":0,"y":0}},"name":"Test-Create_a_new_dashboard_with_powerpack_widget-1697049887","tags":["tag:sample"],"template_variables":[{"defaults":["*"],"name":"sample"}]},"type":"powerpack"}}'
65
headers:
76
accept:
87
- application/json
@@ -12,9 +11,9 @@ interactions:
1211
uri: https://api.datadoghq.com/api/v2/powerpacks
1312
response:
1413
body:
15-
string: '{"data":{"type":"powerpack","id":"c71559ce-5cb3-11ee-9164-da7ad0900002","attributes":{"name":"Sample
16-
Powerpack","description":"Sample powerpack","group_widget":{"definition":{"layout_type":"ordered","show_title":true,"title":"Sample
17-
Powerpack","type":"group","widgets":[{"definition":{"content":"test","type":"note"},"id":8492163139927418}]},"layout":{"height":3,"width":12,"x":0,"y":0}},"template_variables":[{"defaults":["*"],"name":"sample"}],"tags":["tag:sample"]},"relationships":{"author":{"data":{"type":"users","id":"3ad549bf-eba0-11e9-a77a-0705486660d0"}}}},"included":[{"type":"users","id":"3ad549bf-eba0-11e9-a77a-0705486660d0","attributes":{"name":null,"email":"[email protected]"}}]}
14+
string: '{"data":{"type":"powerpack","id":"40778356-6866-11ee-812e-da7ad0900002","attributes":{"name":"Test-Create_a_new_dashboard_with_powerpack_widget-1697049887","description":"Sample
15+
powerpack","group_widget":{"definition":{"layout_type":"ordered","show_title":true,"title":"Sample
16+
Powerpack","type":"group","widgets":[{"definition":{"content":"test","type":"note"},"id":6750168893668334}]},"layout":{"height":3,"width":12,"x":0,"y":0}},"template_variables":[{"defaults":["*"],"name":"sample"}],"tags":["tag:sample"]},"relationships":{"author":{"data":{"type":"users","id":"3ad549bf-eba0-11e9-a77a-0705486660d0"}}}},"included":[{"type":"users","id":"3ad549bf-eba0-11e9-a77a-0705486660d0","attributes":{"name":null,"email":"[email protected]"}}]}
1817
1918
'
2019
headers:
@@ -24,8 +23,8 @@ interactions:
2423
code: 200
2524
message: OK
2625
- request:
27-
body: '{"description":"description","is_read_only":false,"layout_type":"ordered","title":"Test-Create_a_new_dashboard_with_powerpack_widget-1695763770
28-
with powerpack widget","widgets":[{"definition":{"powerpack_id":"c71559ce-5cb3-11ee-9164-da7ad0900002","template_variables":{"controlled_by_powerpack":[{"name":"foo","prefix":"bar","values":["baz","qux","quuz"]}],"controlled_externally":[]},"type":"powerpack"},"layout":{"height":2,"is_column_break":false,"width":2,"x":1,"y":1}}]}'
26+
body: '{"description":"description","is_read_only":false,"layout_type":"ordered","title":"Test-Create_a_new_dashboard_with_powerpack_widget-1697049887
27+
with powerpack widget","widgets":[{"definition":{"powerpack_id":"40778356-6866-11ee-812e-da7ad0900002","template_variables":{"controlled_by_powerpack":[{"name":"foo","prefix":"bar","values":["baz","qux","quuz"]}],"controlled_externally":[]},"type":"powerpack"},"layout":{"height":2,"is_column_break":false,"width":2,"x":1,"y":1}}]}'
2928
headers:
3029
accept:
3130
- application/json
@@ -35,8 +34,8 @@ interactions:
3534
uri: https://api.datadoghq.com/api/v1/dashboard
3635
response:
3736
body:
38-
string: '{"id":"qk3-bn8-9pa","title":"Test-Create_a_new_dashboard_with_powerpack_widget-1695763770
39-
with powerpack widget","description":"description","author_handle":"[email protected]","author_name":null,"layout_type":"ordered","url":"/dashboard/qk3-bn8-9pa/test-createanewdashboardwithpowerpackwidget-1695763770-with-powerpack-widget","is_read_only":false,"template_variables":null,"widgets":[{"definition":{"powerpack_id":"c71559ce-5cb3-11ee-9164-da7ad0900002","template_variables":{"controlled_by_powerpack":[{"name":"foo","prefix":"bar","values":["baz","qux","quuz"]}],"controlled_externally":[]},"type":"powerpack"},"layout":{"height":2,"is_column_break":false,"width":2,"x":1,"y":1},"id":5618921727592736}],"notify_list":null,"created_at":"2023-09-26T21:29:30.677263+00:00","modified_at":"2023-09-26T21:29:30.677263+00:00","restricted_roles":[]}
37+
string: '{"id":"wap-jgr-c99","title":"Test-Create_a_new_dashboard_with_powerpack_widget-1697049887
38+
with powerpack widget","description":"description","author_handle":"[email protected]","author_name":null,"layout_type":"ordered","url":"/dashboard/wap-jgr-c99/test-createanewdashboardwithpowerpackwidget-1697049887-with-powerpack-widget","is_read_only":false,"template_variables":null,"widgets":[{"definition":{"powerpack_id":"40778356-6866-11ee-812e-da7ad0900002","template_variables":{"controlled_by_powerpack":[{"name":"foo","prefix":"bar","values":["baz","qux","quuz"]}],"controlled_externally":[]},"type":"powerpack"},"layout":{"height":2,"is_column_break":false,"width":2,"x":1,"y":1},"id":2124665012947075}],"notify_list":null,"created_at":"2023-10-11T18:44:47.485150+00:00","modified_at":"2023-10-11T18:44:47.485150+00:00","restricted_roles":[]}
4039
4140
'
4241
headers:
@@ -51,10 +50,10 @@ interactions:
5150
accept:
5251
- application/json
5352
method: DELETE
54-
uri: https://api.datadoghq.com/api/v1/dashboard/qk3-bn8-9pa
53+
uri: https://api.datadoghq.com/api/v1/dashboard/wap-jgr-c99
5554
response:
5655
body:
57-
string: '{"deleted_dashboard_id":"qk3-bn8-9pa"}
56+
string: '{"deleted_dashboard_id":"wap-jgr-c99"}
5857
5958
'
6059
headers:
@@ -69,7 +68,7 @@ interactions:
6968
accept:
7069
- '*/*'
7170
method: DELETE
72-
uri: https://api.datadoghq.com/api/v2/powerpacks/c71559ce-5cb3-11ee-9164-da7ad0900002
71+
uri: https://api.datadoghq.com/api/v2/powerpacks/40778356-6866-11ee-812e-da7ad0900002
7372
response:
7473
body:
7574
string: ''

0 commit comments

Comments
 (0)