azext_iot/operations/generic.py (32 lines of code) (raw):
# coding=utf-8
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
from typing import Optional
from azure.cli.core.azclierror import InvalidArgumentValueError
from azext_iot.assets.user_messages import error_param_top_out_of_bounds
def _execute_query(query_args, query_method, top: Optional[int] = None):
payload = []
headers = {"Cache-Control": "no-cache, must-revalidate"}
if top:
headers["x-ms-max-item-count"] = str(top)
result = query_method(*query_args, custom_headers=headers, raw=True)
token = result.response.headers.get("x-ms-continuation")
payload.extend(result.response.json())
while token:
# In case requested count is > service max page size
if top:
pl = len(payload)
if pl < top:
page = top - pl
headers["x-ms-max-item-count"] = str(page)
else:
break
headers["x-ms-continuation"] = token
result = query_method(*query_args, custom_headers=headers, raw=True)
token = result.response.headers.get("x-ms-continuation")
payload.extend(result.response.json())
return payload[:top] if top else payload
def _process_top(top: int, upper_limit: Optional[int] = None):
# Consider top == 0
if not top and top != 0:
return None
if top == -1 and not upper_limit:
return None
if top <= 0 or (upper_limit and top > upper_limit):
raise InvalidArgumentValueError(error_param_top_out_of_bounds(upper_limit))
return int(top)