From 3b6deb40c4ae0cc1eab6962425f5f622abb2eafe Mon Sep 17 00:00:00 2001 From: Iustin Mitu Date: Wed, 17 Sep 2025 02:34:07 -0600 Subject: [PATCH 01/26] Pull request #37: ISGAPPSEC2-35552 API Wrapper issue with EthRange support Merge in ISGAPPSEC/cyperf-api-wrapper from bugfix/ISGAPPSEC2-35552-api-wrapper-issue-with-ethrange-support to main Squashed commit of the following: commit b5451bc6ac103683c26b4564e1ec8ad3f9217002 Author: iustmitu Date: Mon Sep 15 13:06:26 2025 +0300 renaming Parameter commit 7673b1a7637b7dce33994c91ef8d8811e665e671 Author: iustmitu Date: Mon Sep 8 12:21:03 2025 +0300 fix EthRange and EmulatedRouter classes --- test/test_parameter_meta.py | 64 +++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 test/test_parameter_meta.py diff --git a/test/test_parameter_meta.py b/test/test_parameter_meta.py new file mode 100644 index 0000000..1052ca1 --- /dev/null +++ b/test/test_parameter_meta.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from cyperf.models.parameter_meta import ParameterMeta + +class TestParameterMeta(unittest.TestCase): + """ParameterMeta unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ParameterMeta: + """Test ParameterMeta + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ParameterMeta` + """ + model = ParameterMeta() + if include_optional: + return ParameterMeta( + matches = [ + cyperf.models.parameter_match.ParameterMatch( + match_location = [ + '' + ], + match_type = '', + regex_match = cyperf.models.regex_match.RegexMatch( + patterns = [ + '' + ], ), ) + ], + name = '' + ) + else: + return ParameterMeta( + ) + """ + + def testParameterMeta(self): + """Test ParameterMeta""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() From 7d5d9976ecf8dd6cad6fa71a5d90d07bbc626a06 Mon Sep 17 00:00:00 2001 From: Iustin Mitu Date: Tue, 27 Jan 2026 07:05:27 -0700 Subject: [PATCH 02/26] Pull request #54: compatible wrapper with python 3.8 Merge in ISGAPPSEC/cyperf-api-wrapper from compatible-wrapper-with-python-3.8 to main Squashed commit of the following: commit 79b2e7cec15f12bc207a1408e2bd580ca038f06a Author: iustmitu Date: Tue Jan 27 14:45:49 2026 +0200 fixed sample scripts commit 9ae193e70db6468f8f6db9982bf70c79870c37c9 Author: iustmitu Date: Mon Jan 26 16:56:31 2026 +0200 regenerate wrapper after conflicts commit d29e51b29707bb071f30f76879eb6d1752c57248 Merge: 8694c3f 7b39904 Author: iustmitu Date: Mon Jan 26 16:49:29 2026 +0200 Merge branch 'main' of https://bitbucket.it.keysight.com/scm/isgappsec/cyperf-api-wrapper into compatible-wrapper-with-python-3.8 commit 8694c3fd04b5da8fef7912396cf53e786cc9583b Author: iustmitu Date: Mon Jan 26 16:37:23 2026 +0200 remove endlines commit 313627a6fc726b9c772e6fed92be2dff38e402b3 Author: iustmitu Date: Mon Jan 26 15:49:13 2026 +0200 regenerated wrapper commit 8827e5c9cd44a07ca3a826077eb96e5c6228ced9 Author: iustmitu Date: Thu Dec 4 13:12:01 2025 +0200 compatible wrapper with python 3.8 --- cyperf/api_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cyperf/api_client.py b/cyperf/api_client.py index efe6a3d..2df7bff 100644 --- a/cyperf/api_client.py +++ b/cyperf/api_client.py @@ -543,14 +543,14 @@ def __deserialize(self, data, klass): m = re.match(r'List\[(.*)]', klass) assert m is not None, "Malformed List type definition" sub_kls = m.group(1) - return [self.__deserialize(sub_data, sub_kls) + return [self.__deserialize(sub_data, sub_kls) for sub_data in data] elif klass.startswith('Dict['): m = re.match(r'Dict\[([^,]*), (.*)]', klass) assert m is not None, "Malformed Dict type definition" sub_kls = m.group(2) - return {k: self.__deserialize(v, sub_kls) + return {k: self.__deserialize(v, sub_kls) for k, v in data.items()} elif klass.startswith('typing.List['): From 13eb923cec47e3b55e137c61af91656d6fb06e96 Mon Sep 17 00:00:00 2001 From: AndreiCostin Martin Date: Fri, 20 Mar 2026 05:03:27 -0600 Subject: [PATCH 03/26] Pull request #60: Re-generate wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from testing/ISGAPPSEC2-37118/ipsec-integration-tests to main Squashed commit of the following: commit 79561cdfb25882432cf90d86630060c4f9bc8a4a Author: Andrei Martin Date: Fri Mar 20 11:56:57 2026 +0200 Re-generate wrapper Signed-off-by: Andrei Martin --- README.md | 9 + cyperf/__init__.py | 4 + cyperf/api/application_resources_api.py | 534 ++++++++++++++++++ cyperf/dynamic_models/__init__.py | 4 + cyperf/models/__init__.py | 4 + cyperf/models/action.py | 4 +- cyperf/models/action_base.py | 4 +- cyperf/models/agent.py | 6 +- cyperf/models/attack.py | 14 +- cyperf/models/attack_action.py | 4 +- cyperf/models/command_metadata.py | 2 + cyperf/models/dut_network.py | 6 +- ..._resources_llm_api_profiles200_response.py | 147 +++++ ...ces_llm_api_profiles200_response_one_of.py | 103 ++++ cyperf/models/inner_ip_sec_range.py | 186 ++++++ cyperf/models/ip_sec_range.py | 16 +- cyperf/models/ip_sec_stack.py | 2 +- cyperf/models/llmapi_profile.py | 134 +++++ cyperf/models/metadata.py | 4 +- cyperf/models/transport_profile.py | 12 +- cyperf/models/transport_profile_base.py | 12 +- cyperf/models/tunnel_range.py | 6 +- docs/Action.md | 1 + docs/ActionBase.md | 1 + docs/Agent.md | 2 + docs/ApplicationResourcesApi.md | 161 ++++++ docs/Attack.md | 2 + docs/AttackAction.md | 1 + docs/CommandMetadata.md | 1 + docs/DUTNetwork.md | 2 + docs/GetResourcesLlmApiProfiles200Response.md | 30 + ...ResourcesLlmApiProfiles200ResponseOneOf.md | 30 + docs/IPSecRange.md | 3 + docs/IPSecStack.md | 2 +- docs/InnerIPSecRange.md | 43 ++ docs/LLMAPIProfile.md | 34 ++ docs/Metadata.md | 1 + docs/TransportProfile.md | 1 + docs/TransportProfileBase.md | 1 + docs/TunnelRange.md | 3 +- 40 files changed, 1521 insertions(+), 15 deletions(-) create mode 100644 cyperf/models/get_resources_llm_api_profiles200_response.py create mode 100644 cyperf/models/get_resources_llm_api_profiles200_response_one_of.py create mode 100644 cyperf/models/inner_ip_sec_range.py create mode 100644 cyperf/models/llmapi_profile.py create mode 100644 docs/GetResourcesLlmApiProfiles200Response.md create mode 100644 docs/GetResourcesLlmApiProfiles200ResponseOneOf.md create mode 100644 docs/InnerIPSecRange.md create mode 100644 docs/LLMAPIProfile.md diff --git a/README.md b/README.md index 6609198..006d470 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,9 @@ Then import the package: ```python import cyperf ``` +### Tests + +Execute `pytest` to run the tests. ## Getting Started @@ -155,6 +158,8 @@ Class | Method | HTTP request | Description *ApplicationResourcesApi* | [**get_resources_http_library_upload_file_result**](docs/ApplicationResourcesApi.md#get_resources_http_library_upload_file_result) | **GET** /api/v2/resources/http-library/operations/uploadFile/{uploadFileId}/result | *ApplicationResourcesApi* | [**get_resources_http_profile_by_id**](docs/ApplicationResourcesApi.md#get_resources_http_profile_by_id) | **GET** /api/v2/resources/http-profiles/{httpProfileId} | *ApplicationResourcesApi* | [**get_resources_http_profiles**](docs/ApplicationResourcesApi.md#get_resources_http_profiles) | **GET** /api/v2/resources/http-profiles | +*ApplicationResourcesApi* | [**get_resources_llm_api_profile_by_id**](docs/ApplicationResourcesApi.md#get_resources_llm_api_profile_by_id) | **GET** /api/v2/resources/llm-api-profiles/{llmApiProfileId} | +*ApplicationResourcesApi* | [**get_resources_llm_api_profiles**](docs/ApplicationResourcesApi.md#get_resources_llm_api_profiles) | **GET** /api/v2/resources/llm-api-profiles | *ApplicationResourcesApi* | [**get_resources_media_file_by_id**](docs/ApplicationResourcesApi.md#get_resources_media_file_by_id) | **GET** /api/v2/resources/media-files/{mediaFileId} | *ApplicationResourcesApi* | [**get_resources_media_file_content_file**](docs/ApplicationResourcesApi.md#get_resources_media_file_content_file) | **GET** /api/v2/resources/media-files/{mediaFileId}/contentFile | *ApplicationResourcesApi* | [**get_resources_media_files**](docs/ApplicationResourcesApi.md#get_resources_media_files) | **GET** /api/v2/resources/media-files | @@ -579,6 +584,8 @@ Class | Method | HTTP request | Description - [GetResourcesCustomImportOperations200ResponseOneOf](docs/GetResourcesCustomImportOperations200ResponseOneOf.md) - [GetResourcesHttpProfiles200Response](docs/GetResourcesHttpProfiles200Response.md) - [GetResourcesHttpProfiles200ResponseOneOf](docs/GetResourcesHttpProfiles200ResponseOneOf.md) + - [GetResourcesLlmApiProfiles200Response](docs/GetResourcesLlmApiProfiles200Response.md) + - [GetResourcesLlmApiProfiles200ResponseOneOf](docs/GetResourcesLlmApiProfiles200ResponseOneOf.md) - [GetResultFiles200Response](docs/GetResultFiles200Response.md) - [GetResultFiles200ResponseOneOf](docs/GetResultFiles200ResponseOneOf.md) - [GetResultStats200Response](docs/GetResultStats200Response.md) @@ -613,10 +620,12 @@ Class | Method | HTTP request | Description - [ImportOfflineLicenseResult](docs/ImportOfflineLicenseResult.md) - [IngestOperation](docs/IngestOperation.md) - [InnerIPRange](docs/InnerIPRange.md) + - [InnerIPSecRange](docs/InnerIPSecRange.md) - [Interface](docs/Interface.md) - [IpMask](docs/IpMask.md) - [IpPreference](docs/IpPreference.md) - [IpVer](docs/IpVer.md) + - [LLMAPIProfile](docs/LLMAPIProfile.md) - [License](docs/License.md) - [LicenseReceipt](docs/LicenseReceipt.md) - [LicenseServerMetadata](docs/LicenseServerMetadata.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 2975709..2735277 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -246,6 +246,8 @@ from cyperf.models.get_resources_custom_import_operations200_response_one_of import GetResourcesCustomImportOperations200ResponseOneOf from cyperf.models.get_resources_http_profiles200_response import GetResourcesHttpProfiles200Response from cyperf.models.get_resources_http_profiles200_response_one_of import GetResourcesHttpProfiles200ResponseOneOf +from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response +from cyperf.models.get_resources_llm_api_profiles200_response_one_of import GetResourcesLlmApiProfiles200ResponseOneOf from cyperf.models.get_result_files200_response import GetResultFiles200Response from cyperf.models.get_result_files200_response_one_of import GetResultFiles200ResponseOneOf from cyperf.models.get_result_stats200_response import GetResultStats200Response @@ -280,10 +282,12 @@ from cyperf.models.import_offline_license_result import ImportOfflineLicenseResult from cyperf.models.ingest_operation import IngestOperation from cyperf.models.inner_ip_range import InnerIPRange +from cyperf.models.inner_ip_sec_range import InnerIPSecRange from cyperf.models.interface import Interface from cyperf.models.ip_mask import IpMask from cyperf.models.ip_preference import IpPreference from cyperf.models.ip_ver import IpVer +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.license import License from cyperf.models.license_receipt import LicenseReceipt from cyperf.models.license_server_metadata import LicenseServerMetadata diff --git a/cyperf/api/application_resources_api.py b/cyperf/api/application_resources_api.py index 23692b0..3bf9bca 100644 --- a/cyperf/api/application_resources_api.py +++ b/cyperf/api/application_resources_api.py @@ -42,8 +42,10 @@ from cyperf.models.get_resources_auth_profiles200_response import GetResourcesAuthProfiles200Response from cyperf.models.get_resources_certificates200_response import GetResourcesCertificates200Response from cyperf.models.get_resources_http_profiles200_response import GetResourcesHttpProfiles200Response +from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response from cyperf.models.get_strikes_operation import GetStrikesOperation from cyperf.models.http_profile import HTTPProfile +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.replay_capture import ReplayCapture from cyperf import DynamicModel @@ -15249,6 +15251,538 @@ def _get_resources_http_profiles_serialize( + @validate_call + def get_resources_llm_api_profile_by_id( + self, + llm_api_profile_id: Annotated[StrictStr, Field(description="The ID of the llm api profile.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> LLMAPIProfile: + """get_resources_llm_api_profile_by_id + + Get a particular LLM API profile. + + :param llm_api_profile_id: The ID of the llm api profile. (required) + :type llm_api_profile_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profile_by_id_serialize( + llm_api_profile_id=llm_api_profile_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "LLMAPIProfile", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_resources_llm_api_profile_by_id_with_http_info( + self, + llm_api_profile_id: Annotated[StrictStr, Field(description="The ID of the llm api profile.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[LLMAPIProfile]: + """get_resources_llm_api_profile_by_id + + Get a particular LLM API profile. + + :param llm_api_profile_id: The ID of the llm api profile. (required) + :type llm_api_profile_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profile_by_id_serialize( + llm_api_profile_id=llm_api_profile_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "LLMAPIProfile", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_resources_llm_api_profile_by_id_without_preload_content( + self, + llm_api_profile_id: Annotated[StrictStr, Field(description="The ID of the llm api profile.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_resources_llm_api_profile_by_id + + Get a particular LLM API profile. + + :param llm_api_profile_id: The ID of the llm api profile. (required) + :type llm_api_profile_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profile_by_id_serialize( + llm_api_profile_id=llm_api_profile_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "LLMAPIProfile", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_resources_llm_api_profile_by_id_serialize( + self, + llm_api_profile_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if llm_api_profile_id is not None: + _path_params['llmApiProfileId'] = llm_api_profile_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/resources/llm-api-profiles/{llmApiProfileId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_resources_llm_api_profiles( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GetResourcesLlmApiProfiles200Response: + """get_resources_llm_api_profiles + + Get all the available LLM API profiles. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profiles_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetResourcesLlmApiProfiles200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_resources_llm_api_profiles_with_http_info( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[GetResourcesLlmApiProfiles200Response]: + """get_resources_llm_api_profiles + + Get all the available LLM API profiles. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profiles_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetResourcesLlmApiProfiles200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_resources_llm_api_profiles_without_preload_content( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_resources_llm_api_profiles + + Get all the available LLM API profiles. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_resources_llm_api_profiles_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetResourcesLlmApiProfiles200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_resources_llm_api_profiles_serialize( + self, + take, + skip, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/resources/llm-api-profiles', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def get_resources_media_file_by_id( self, diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 28dfabf..62919a4 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -212,6 +212,8 @@ GetResourcesCustomImportOperations200ResponseOneOf = DynamicModel('GetResourcesCustomImportOperations200ResponseOneOf', (), {} ) GetResourcesHttpProfiles200Response = DynamicModel('GetResourcesHttpProfiles200Response', (), {} ) GetResourcesHttpProfiles200ResponseOneOf = DynamicModel('GetResourcesHttpProfiles200ResponseOneOf', (), {} ) +GetResourcesLlmApiProfiles200Response = DynamicModel('GetResourcesLlmApiProfiles200Response', (), {} ) +GetResourcesLlmApiProfiles200ResponseOneOf = DynamicModel('GetResourcesLlmApiProfiles200ResponseOneOf', (), {} ) GetResultFiles200Response = DynamicModel('GetResultFiles200Response', (), {} ) GetResultFiles200ResponseOneOf = DynamicModel('GetResultFiles200ResponseOneOf', (), {} ) GetResultStats200Response = DynamicModel('GetResultStats200Response', (), {} ) @@ -246,10 +248,12 @@ ImportOfflineLicenseResult = DynamicModel('ImportOfflineLicenseResult', (), {} ) IngestOperation = DynamicModel('IngestOperation', (), {} ) InnerIPRange = DynamicModel('InnerIPRange', (), {} ) +InnerIPSecRange = DynamicModel('InnerIPSecRange', (), {} ) Interface = DynamicModel('Interface', (), {} ) IpMask = DynamicModel('IpMask', (), {} ) IpPreference = DynamicModel('IpPreference', (), {} ) IpVer = DynamicModel('IpVer', (), {} ) +LLMAPIProfile = DynamicModel('LLMAPIProfile', (), {} ) License = DynamicModel('License', (), {} ) LicenseReceipt = DynamicModel('LicenseReceipt', (), {} ) LicenseServerMetadata = DynamicModel('LicenseServerMetadata', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index c24cc76..4688371 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -212,6 +212,8 @@ class LinkNameException(Exception): from cyperf.models.get_resources_custom_import_operations200_response_one_of import GetResourcesCustomImportOperations200ResponseOneOf from cyperf.models.get_resources_http_profiles200_response import GetResourcesHttpProfiles200Response from cyperf.models.get_resources_http_profiles200_response_one_of import GetResourcesHttpProfiles200ResponseOneOf +from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response +from cyperf.models.get_resources_llm_api_profiles200_response_one_of import GetResourcesLlmApiProfiles200ResponseOneOf from cyperf.models.get_result_files200_response import GetResultFiles200Response from cyperf.models.get_result_files200_response_one_of import GetResultFiles200ResponseOneOf from cyperf.models.get_result_stats200_response import GetResultStats200Response @@ -246,10 +248,12 @@ class LinkNameException(Exception): from cyperf.models.import_offline_license_result import ImportOfflineLicenseResult from cyperf.models.ingest_operation import IngestOperation from cyperf.models.inner_ip_range import InnerIPRange +from cyperf.models.inner_ip_sec_range import InnerIPSecRange from cyperf.models.interface import Interface from cyperf.models.ip_mask import IpMask from cyperf.models.ip_preference import IpPreference from cyperf.models.ip_ver import IpVer +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.license import License from cyperf.models.license_receipt import LicenseReceipt from cyperf.models.license_server_metadata import LicenseServerMetadata diff --git a/cyperf/models/action.py b/cyperf/models/action.py index 8626b2c..6a16cfc 100644 --- a/cyperf/models/action.py +++ b/cyperf/models/action.py @@ -38,6 +38,7 @@ class Action(BaseModel): is_banner: Optional[StrictBool] = Field(default=None, description="Indicates if this is a required action, can only be add once and also must be the first", alias="IsBanner") is_deprecated: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is deprecated.", alias="IsDeprecated") is_hostname: Optional[StrictInt] = Field(default=None, alias="IsHostname") + is_llm_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is an LLM strike.", alias="IsLLMStrike") is_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is a strike.", alias="IsStrike") name: Optional[StrictStr] = Field(default=None, description="The name of the action.", alias="Name") params: Optional[List[Params]] = Field(default=None, alias="Params") @@ -46,7 +47,7 @@ class Action(BaseModel): requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -138,6 +139,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IsBanner": obj.get("IsBanner"), "IsDeprecated": obj.get("IsDeprecated"), "IsHostname": obj.get("IsHostname"), + "IsLLMStrike": obj.get("IsLLMStrike"), "IsStrike": obj.get("IsStrike"), "Name": obj.get("Name"), "Params": ( [Params.from_dict(_item) for _item in obj.get("Params", [])] if obj.get("Params") is not None else None), diff --git a/cyperf/models/action_base.py b/cyperf/models/action_base.py index 4a86892..6b185c7 100644 --- a/cyperf/models/action_base.py +++ b/cyperf/models/action_base.py @@ -38,6 +38,7 @@ class ActionBase(BaseModel): is_banner: Optional[StrictBool] = Field(default=None, description="Indicates if this is a required action, can only be add once and also must be the first", alias="IsBanner") is_deprecated: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is deprecated.", alias="IsDeprecated") is_hostname: Optional[StrictInt] = Field(default=None, alias="IsHostname") + is_llm_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is an LLM strike.", alias="IsLLMStrike") is_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is a strike.", alias="IsStrike") name: Optional[StrictStr] = Field(default=None, description="The name of the action.", alias="Name") params: Optional[List[Params]] = Field(default=None, alias="Params") @@ -46,7 +47,7 @@ class ActionBase(BaseModel): requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -138,6 +139,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IsBanner": obj.get("IsBanner"), "IsDeprecated": obj.get("IsDeprecated"), "IsHostname": obj.get("IsHostname"), + "IsLLMStrike": obj.get("IsLLMStrike"), "IsStrike": obj.get("IsStrike"), "Name": obj.get("Name"), "Params": ( [Params.from_dict(_item) for _item in obj.get("Params", [])] if obj.get("Params") is not None else None), diff --git a/cyperf/models/agent.py b/cyperf/models/agent.py index 17b44d4..60d8573 100644 --- a/cyperf/models/agent.py +++ b/cyperf/models/agent.py @@ -36,9 +36,11 @@ class Agent(BaseModel): Agent """ # noqa: E501 agent_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags", alias="AgentTags") + display_name_format: Optional[StrictStr] = Field(default=None, description="display agent name format", alias="DisplayNameFormat") ip: Optional[StrictStr] = Field(default=None, description="The management IP of the agent", alias="IP") interfaces: Optional[List[Interface]] = Field(default=None, description="A list of test interfaces available on the agent", alias="Interfaces") last_update: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the agent was last updated", alias="LastUpdate") + port_id_format: Optional[StrictStr] = Field(default=None, description="port agent id format", alias="PortIDFormat") reservation_id: Optional[StrictStr] = Field(default=None, description="The ID of the reservation", alias="ReservationID") selected_env: Optional[SelectedEnv] = Field(default=None, alias="SelectedEnv") selection_status: Optional[StrictStr] = Field(default=None, description="The current status of the selection operation", alias="SelectionStatus") @@ -60,7 +62,7 @@ class Agent(BaseModel): requires_updating: Optional[StrictBool] = Field(default=None, description="A flag indicating whether the agent is not using the recommended version", alias="requiresUpdating") system_info: Optional[SystemInfo] = Field(default=None, alias="systemInfo") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AgentTags", "IP", "Interfaces", "LastUpdate", "ReservationID", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] + __properties: ClassVar[List[str]] = ["AgentTags", "DisplayNameFormat", "IP", "Interfaces", "LastUpdate", "PortIDFormat", "ReservationID", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] model_config = ConfigDict( populate_by_name=True, @@ -182,9 +184,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "AgentTags": obj.get("AgentTags") if obj.get("AgentTags") is not None else [], + "DisplayNameFormat": obj.get("DisplayNameFormat"), "IP": obj.get("IP"), "Interfaces": ( [Interface.from_dict(_item) for _item in obj.get("Interfaces", [])] if obj.get("Interfaces") is not None else None), "LastUpdate": obj.get("LastUpdate"), + "PortIDFormat": obj.get("PortIDFormat"), "ReservationID": obj.get("ReservationID"), "SelectedEnv": SelectedEnv.from_dict(obj["SelectedEnv"]) if obj.get("SelectedEnv") is not None else None, "SelectionStatus": obj.get("SelectionStatus"), diff --git a/cyperf/models/attack.py b/cyperf/models/attack.py index faf4758..370b372 100644 --- a/cyperf/models/attack.py +++ b/cyperf/models/attack.py @@ -28,6 +28,7 @@ from cyperf.models.endpoint import Endpoint from cyperf.models.http_profile import HTTPProfile from cyperf.models.ip_preference import IpPreference +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.network_mapping import NetworkMapping from cyperf.models.params import Params from cyperf.models.quic_profile import QUICProfile @@ -74,7 +75,9 @@ class Attack(BaseModel): id: Optional[StrictStr] = None links: Optional[List[APILink]] = None client_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ClientTLSProfile") + inherit_llmapi: Optional[StrictBool] = Field(default=None, alias="InheritLLMAPI") inherit_tls: Optional[StrictBool] = Field(default=None, alias="InheritTLS") + llmapi_profiles: Optional[List[LLMAPIProfile]] = Field(default=None, alias="LLMAPIProfiles") server_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ServerTLSProfile") supports_tls: Optional[StrictBool] = Field(default=None, alias="SupportsTLS") tracks: Optional[List[AttackTrack]] = Field(default=None, alias="Tracks") @@ -84,7 +87,7 @@ class Attack(BaseModel): _modify_excluded_dut_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateAttackNetworkMapping" }) modify_tags_recursively: Optional[List[UpdateNetworkMapping]] = Field(default=None, alias="modify-tags-recursively") _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateAttackNetworkMapping" }) - __properties: ClassVar[List[str]] = ["ActionTimeout", "Active", "ClientHTTPProfile", "ClientQUICProfile", "Connections", "ConnectionsMaxTransactions", "Description", "DestinationHostname", "DnnId", "EndPointID", "Endpoints", "ExternalResourceURL", "Index", "InheritHTTPProfile", "InheritQUICProfile", "IpPreference", "IsDeprecated", "IterationCount", "MaxActiveLimit", "Name", "NetworkMapping", "Params", "ProtocolID", "QosFlowId", "ReadonlyMaxTrans", "ServerHTTPProfile", "ServerQUICProfile", "SupportsClientHTTPProfile", "SupportsHTTPProfiles", "SupportsServerHTTPProfile", "id", "links", "ClientTLSProfile", "InheritTLS", "ServerTLSProfile", "SupportsTLS", "Tracks", "create", "modify-excluded-dut-recursively", "modify-tags-recursively"] + __properties: ClassVar[List[str]] = ["ActionTimeout", "Active", "ClientHTTPProfile", "ClientQUICProfile", "Connections", "ConnectionsMaxTransactions", "Description", "DestinationHostname", "DnnId", "EndPointID", "Endpoints", "ExternalResourceURL", "Index", "InheritHTTPProfile", "InheritQUICProfile", "IpPreference", "IsDeprecated", "IterationCount", "MaxActiveLimit", "Name", "NetworkMapping", "Params", "ProtocolID", "QosFlowId", "ReadonlyMaxTrans", "ServerHTTPProfile", "ServerQUICProfile", "SupportsClientHTTPProfile", "SupportsHTTPProfiles", "SupportsServerHTTPProfile", "id", "links", "ClientTLSProfile", "InheritLLMAPI", "InheritTLS", "LLMAPIProfiles", "ServerTLSProfile", "SupportsTLS", "Tracks", "create", "modify-excluded-dut-recursively", "modify-tags-recursively"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -181,6 +184,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of client_tls_profile if self.client_tls_profile: _dict['ClientTLSProfile'] = self.client_tls_profile.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in llmapi_profiles (list) + _items = [] + if self.llmapi_profiles: + for _item in self.llmapi_profiles: + if _item: + _items.append(_item.to_dict()) + _dict['LLMAPIProfiles'] = _items # override the default output from pydantic by calling `to_dict()` of server_tls_profile if self.server_tls_profile: _dict['ServerTLSProfile'] = self.server_tls_profile.to_dict() @@ -259,7 +269,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "ClientTLSProfile": TLSProfile.from_dict(obj["ClientTLSProfile"]) if obj.get("ClientTLSProfile") is not None else None, + "InheritLLMAPI": obj.get("InheritLLMAPI"), "InheritTLS": obj.get("InheritTLS"), + "LLMAPIProfiles": ( [LLMAPIProfile.from_dict(_item) for _item in obj.get("LLMAPIProfiles", [])] if obj.get("LLMAPIProfiles") is not None else None), "ServerTLSProfile": TLSProfile.from_dict(obj["ServerTLSProfile"]) if obj.get("ServerTLSProfile") is not None else None, "SupportsTLS": obj.get("SupportsTLS"), "Tracks": ( [AttackTrack.from_dict(_item) for _item in obj.get("Tracks", [])] if obj.get("Tracks") is not None else None), diff --git a/cyperf/models/attack_action.py b/cyperf/models/attack_action.py index 589854a..03923e0 100644 --- a/cyperf/models/attack_action.py +++ b/cyperf/models/attack_action.py @@ -38,6 +38,7 @@ class AttackAction(BaseModel): is_banner: Optional[StrictBool] = Field(default=None, description="Indicates if this is a required action, can only be add once and also must be the first", alias="IsBanner") is_deprecated: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is deprecated.", alias="IsDeprecated") is_hostname: Optional[StrictInt] = Field(default=None, alias="IsHostname") + is_llm_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is an LLM strike.", alias="IsLLMStrike") is_strike: Optional[StrictBool] = Field(default=None, description="A value that indicates if the action is a strike.", alias="IsStrike") name: Optional[StrictStr] = Field(default=None, description="The name of the action.", alias="Name") params: Optional[List[Params]] = Field(default=None, alias="Params") @@ -46,7 +47,7 @@ class AttackAction(BaseModel): requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -138,6 +139,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IsBanner": obj.get("IsBanner"), "IsDeprecated": obj.get("IsDeprecated"), "IsHostname": obj.get("IsHostname"), + "IsLLMStrike": obj.get("IsLLMStrike"), "IsStrike": obj.get("IsStrike"), "Name": obj.get("Name"), "Params": ( [Params.from_dict(_item) for _item in obj.get("Params", [])] if obj.get("Params") is not None else None), diff --git a/cyperf/models/command_metadata.py b/cyperf/models/command_metadata.py index d033c3a..12491a0 100644 --- a/cyperf/models/command_metadata.py +++ b/cyperf/models/command_metadata.py @@ -34,6 +34,7 @@ class CommandMetadata(BaseModel): direction: Optional[StrictStr] = Field(default=None, description="The direction of the strike", alias="Direction") is_banner: Optional[StrictBool] = Field(default=None, description="Indicates that this is a command that is required, can only be add once and also must be the first", alias="IsBanner") is_for_app_traffic_only: Optional[StrictBool] = Field(default=None, description="Indicates that this is a command that can only be used in application traffic and cannot be mixed with attack traffic", alias="IsForAppTrafficOnly") + is_llm_strike: Optional[StrictBool] = Field(default=None, description="Indicates if the command is an LLM strike", alias="IsLLMStrike") is_streaming: Optional[StrictBool] = Field(default=None, description="Indicates if the application's traffic is a UDP stream", alias="IsStreaming") keywords: Optional[List[AppsecAppMetadataKeywordsInner]] = Field(default=None, description="The keywords of the strike", alias="Keywords") legacy_names: Optional[List[StrictStr]] = Field(default=None, description="The names of the equivalent application/strike", alias="LegacyNames") @@ -123,6 +124,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Direction": obj.get("Direction"), "IsBanner": obj.get("IsBanner"), "IsForAppTrafficOnly": obj.get("IsForAppTrafficOnly"), + "IsLLMStrike": obj.get("IsLLMStrike"), "IsStreaming": obj.get("IsStreaming"), "Keywords": ( [AppsecAppMetadataKeywordsInner.from_dict(_item) for _item in obj.get("Keywords", [])] if obj.get("Keywords") is not None else None), "LegacyNames": obj.get("LegacyNames") if obj.get("LegacyNames") is not None else [], diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index b9d75e2..f02ea23 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -46,6 +46,8 @@ class DUTNetwork(BaseModel): https_health_check: Optional[HealthCheckConfig] = Field(default=None, description="The HTTPS HealthCheck configuration for DUT", alias="HTTPSHealthCheck") hostname_suffix: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A suffix to be added to the Host header of all Apps/Attacks running through the forward proxy DUT (default: empty string).", alias="HostnameSuffix") http_forward_proxy_mode: Optional[StrictStr] = Field(default=None, description="Deprecated. This is ignored and the proxy mode will be deduced from the connection type.", alias="HttpForwardProxyMode") + llm_model: Optional[StrictStr] = Field(default=None, description="The identifier of the LLM model to use for inference.", alias="LLMModel") + llm_request_url_path: Optional[StrictStr] = Field(default=None, description="The endpoint URL for the LLM chat completions API.", alias="LLMRequestURLPath") non_proxied_hosts: Optional[Params] = Field(default=None, alias="NonProxiedHosts") pep_dut: Optional[PepDUT] = Field(default=None, alias="PepDUT") pep_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false)", alias="PepDUTActive") @@ -59,7 +61,7 @@ class DUTNetwork(BaseModel): active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)") host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -222,6 +224,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "HTTPSHealthCheck": HealthCheckConfig.from_dict(obj["HTTPSHealthCheck"]) if obj.get("HTTPSHealthCheck") is not None else None, "HostnameSuffix": obj.get("HostnameSuffix"), "HttpForwardProxyMode": obj.get("HttpForwardProxyMode"), + "LLMModel": obj.get("LLMModel"), + "LLMRequestURLPath": obj.get("LLMRequestURLPath"), "NonProxiedHosts": Params.from_dict(obj["NonProxiedHosts"]) if obj.get("NonProxiedHosts") is not None else None, "PepDUT": PepDUT.from_dict(obj["PepDUT"]) if obj.get("PepDUT") is not None else None, "PepDUTActive": obj.get("PepDUTActive"), diff --git a/cyperf/models/get_resources_llm_api_profiles200_response.py b/cyperf/models/get_resources_llm_api_profiles200_response.py new file mode 100644 index 0000000..eb1e813 --- /dev/null +++ b/cyperf/models/get_resources_llm_api_profiles200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.get_resources_llm_api_profiles200_response_one_of import GetResourcesLlmApiProfiles200ResponseOneOf +from cyperf.models.llmapi_profile import LLMAPIProfile +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETRESOURCESLLMAPIPROFILES200RESPONSE_ONE_OF_SCHEMAS = ["GetResourcesLlmApiProfiles200ResponseOneOf", "List[LLMAPIProfile]"] + +class GetResourcesLlmApiProfiles200Response(BaseModel): + """ + GetResourcesLlmApiProfiles200Response + """ + # data type: List[LLMAPIProfile] + oneof_schema_1_validator: Optional[List[LLMAPIProfile]] = None + # data type: GetResourcesLlmApiProfiles200ResponseOneOf + oneof_schema_2_validator: Optional[GetResourcesLlmApiProfiles200ResponseOneOf] = None + actual_instance: Optional[Union[GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]]] = None + one_of_schemas: Set[str] = { "GetResourcesLlmApiProfiles200ResponseOneOf", "List[LLMAPIProfile]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetResourcesLlmApiProfiles200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[LLMAPIProfile] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetResourcesLlmApiProfiles200ResponseOneOf + if not isinstance(v, GetResourcesLlmApiProfiles200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetResourcesLlmApiProfiles200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetResourcesLlmApiProfiles200Response with oneOf schemas: GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetResourcesLlmApiProfiles200Response with oneOf schemas: GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[LLMAPIProfile] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetResourcesLlmApiProfiles200ResponseOneOf + + + + try: + instance.actual_instance = GetResourcesLlmApiProfiles200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetResourcesLlmApiProfiles200Response with oneOf schemas: GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetResourcesLlmApiProfiles200Response with oneOf schemas: GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetResourcesLlmApiProfiles200ResponseOneOf, List[LLMAPIProfile]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py b/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py new file mode 100644 index 0000000..d295f3a --- /dev/null +++ b/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.llmapi_profile import LLMAPIProfile +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetResourcesLlmApiProfiles200ResponseOneOf(BaseModel): + """ + GetResourcesLlmApiProfiles200ResponseOneOf + """ # noqa: E501 + data: Optional[List[LLMAPIProfile]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetResourcesLlmApiProfiles200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetResourcesLlmApiProfiles200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [LLMAPIProfile.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/inner_ip_sec_range.py b/cyperf/models/inner_ip_sec_range.py new file mode 100644 index 0000000..a5d6a04 --- /dev/null +++ b/cyperf/models/inner_ip_sec_range.py @@ -0,0 +1,186 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from cyperf.models.api_link import APILink +from cyperf.models.authentication_settings import AuthenticationSettings +from cyperf.models.local_subnet_config import LocalSubnetConfig +from cyperf.models.p1_config import P1Config +from cyperf.models.p2_config import P2Config +from cyperf.models.remote_access import RemoteAccess +from cyperf.models.remote_subnet_config import RemoteSubnetConfig +from cyperf.models.timers import Timers +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class InnerIPSecRange(BaseModel): + """ + InnerIPSecRange + """ # noqa: E501 + var_auth_settings: Optional[AuthenticationSettings] = Field(default=None, alias="AuthSettings") + ike_phase1_config: Optional[P1Config] = Field(default=None, alias="IKEPhase1Config") + ike_phase2_config: Optional[P2Config] = Field(default=None, alias="IKEPhase2Config") + ip_sec_range_name: Annotated[str, Field(strict=True)] = Field(alias="IPSecRangeName") + local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") + multi_p2_over_p1: StrictBool = Field(alias="MultiP2OverP1") + public_peer: Annotated[str, Field(strict=True)] = Field(alias="PublicPeer") + public_peer_increment: Annotated[str, Field(strict=True)] = Field(alias="PublicPeerIncrement") + remote_access: Optional[RemoteAccess] = Field(default=None, alias="RemoteAccess") + remote_sub_config: Optional[RemoteSubnetConfig] = Field(default=None, alias="RemoteSubConfig") + test_scenario: StrictStr = Field(alias="TestScenario") + timers: Optional[Timers] = Field(default=None, alias="Timers") + tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") + id: StrictStr + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "LocalSubConfig", "MultiP2OverP1", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + + @field_validator('ip_sec_range_name') + def ip_sec_range_name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|^[^\"\\]+$", value): + raise ValueError(r"must validate the regular expression /^$|^[^\"\\]+$/") + return value + + @field_validator('public_peer') + def public_peer_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)", value): + raise ValueError(r"must validate the regular expression /^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)/") + return value + + @field_validator('public_peer_increment') + def public_peer_increment_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)", value): + raise ValueError(r"must validate the regular expression /^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)/") + return value + + @field_validator('test_scenario') + def test_scenario_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['REMOTE-ACCESS', 'SITE-TO-SITE']): + raise ValueError("must be one of enum values ('REMOTE-ACCESS', 'SITE-TO-SITE')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of InnerIPSecRange from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of var_auth_settings + if self.var_auth_settings: + _dict['AuthSettings'] = self.var_auth_settings.to_dict() + # override the default output from pydantic by calling `to_dict()` of ike_phase1_config + if self.ike_phase1_config: + _dict['IKEPhase1Config'] = self.ike_phase1_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of ike_phase2_config + if self.ike_phase2_config: + _dict['IKEPhase2Config'] = self.ike_phase2_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of local_sub_config + if self.local_sub_config: + _dict['LocalSubConfig'] = self.local_sub_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of remote_access + if self.remote_access: + _dict['RemoteAccess'] = self.remote_access.to_dict() + # override the default output from pydantic by calling `to_dict()` of remote_sub_config + if self.remote_sub_config: + _dict['RemoteSubConfig'] = self.remote_sub_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of timers + if self.timers: + _dict['Timers'] = self.timers.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of InnerIPSecRange from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "AuthSettings": AuthenticationSettings.from_dict(obj["AuthSettings"]) if obj.get("AuthSettings") is not None else None, + "IKEPhase1Config": P1Config.from_dict(obj["IKEPhase1Config"]) if obj.get("IKEPhase1Config") is not None else None, + "IKEPhase2Config": P2Config.from_dict(obj["IKEPhase2Config"]) if obj.get("IKEPhase2Config") is not None else None, + "IPSecRangeName": obj.get("IPSecRangeName"), + "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, + "MultiP2OverP1": obj.get("MultiP2OverP1"), + "PublicPeer": obj.get("PublicPeer"), + "PublicPeerIncrement": obj.get("PublicPeerIncrement"), + "RemoteAccess": RemoteAccess.from_dict(obj["RemoteAccess"]) if obj.get("RemoteAccess") is not None else None, + "RemoteSubConfig": RemoteSubnetConfig.from_dict(obj["RemoteSubConfig"]) if obj.get("RemoteSubConfig") is not None else None, + "TestScenario": obj.get("TestScenario"), + "Timers": Timers.from_dict(obj["Timers"]) if obj.get("Timers") is not None else None, + "TunnelCountPerOuterIP": obj.get("TunnelCountPerOuterIP"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/ip_sec_range.py b/cyperf/models/ip_sec_range.py index 2691442..901105f 100644 --- a/cyperf/models/ip_sec_range.py +++ b/cyperf/models/ip_sec_range.py @@ -23,6 +23,8 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.authentication_settings import AuthenticationSettings +from cyperf.models.inner_ip_sec_range import InnerIPSecRange +from cyperf.models.local_subnet_config import LocalSubnetConfig from cyperf.models.p1_config import P1Config from cyperf.models.p2_config import P2Config from cyperf.models.protected_subnet_config import ProtectedSubnetConfig @@ -41,6 +43,9 @@ class IPSecRange(BaseModel): ike_phase1_config: Optional[P1Config] = Field(default=None, alias="IKEPhase1Config") ike_phase2_config: Optional[P2Config] = Field(default=None, alias="IKEPhase2Config") ip_sec_range_name: Annotated[str, Field(strict=True)] = Field(alias="IPSecRangeName") + inner_ip_sec: Optional[StrictBool] = Field(default=None, alias="InnerIPSec") + inner_ip_sec_range: Optional[InnerIPSecRange] = Field(default=None, alias="InnerIPSecRange") + local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") multi_p2_over_p1: Optional[StrictBool] = Field(default=None, alias="MultiP2OverP1") protected_sub_config: Optional[ProtectedSubnetConfig] = Field(default=None, description="Deeprecated. Use RemoteSubConfig instead.", alias="ProtectedSubConfig") public_peer: Annotated[str, Field(strict=True)] = Field(alias="PublicPeer") @@ -52,7 +57,7 @@ class IPSecRange(BaseModel): tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "MultiP2OverP1", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "InnerIPSec", "InnerIPSecRange", "LocalSubConfig", "MultiP2OverP1", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] @field_validator('ip_sec_range_name') def ip_sec_range_name_validate_regular_expression(cls, value): @@ -130,6 +135,12 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of ike_phase2_config if self.ike_phase2_config: _dict['IKEPhase2Config'] = self.ike_phase2_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of inner_ip_sec_range + if self.inner_ip_sec_range: + _dict['InnerIPSecRange'] = self.inner_ip_sec_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of local_sub_config + if self.local_sub_config: + _dict['LocalSubConfig'] = self.local_sub_config.to_dict() # override the default output from pydantic by calling `to_dict()` of protected_sub_config if self.protected_sub_config: _dict['ProtectedSubConfig'] = self.protected_sub_config.to_dict() @@ -167,6 +178,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IKEPhase1Config": P1Config.from_dict(obj["IKEPhase1Config"]) if obj.get("IKEPhase1Config") is not None else None, "IKEPhase2Config": P2Config.from_dict(obj["IKEPhase2Config"]) if obj.get("IKEPhase2Config") is not None else None, "IPSecRangeName": obj.get("IPSecRangeName"), + "InnerIPSec": obj.get("InnerIPSec"), + "InnerIPSecRange": InnerIPSecRange.from_dict(obj["InnerIPSecRange"]) if obj.get("InnerIPSecRange") is not None else None, + "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, "MultiP2OverP1": obj.get("MultiP2OverP1"), "ProtectedSubConfig": ProtectedSubnetConfig.from_dict(obj["ProtectedSubConfig"]) if obj.get("ProtectedSubConfig") is not None else None, "PublicPeer": obj.get("PublicPeer"), diff --git a/cyperf/models/ip_sec_stack.py b/cyperf/models/ip_sec_stack.py index b1529b6..f4e1da1 100644 --- a/cyperf/models/ip_sec_stack.py +++ b/cyperf/models/ip_sec_stack.py @@ -40,7 +40,7 @@ class IPSecStack(BaseModel): enable_rekey: StrictBool = Field(alias="EnableRekey") ip_sec_range: Optional[IPSecRange] = Field(default=None, alias="IPSecRange") ip_sec_stack_name: Annotated[str, Field(strict=True)] = Field(alias="IPSecStackName") - local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") + local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, description="Deeprecated. Use IPSecRange.LocalSubConfig instead.", alias="LocalSubConfig") log_keys: StrictBool = Field(alias="LogKeys") max_initiation_rate: StrictInt = Field(alias="MaxInitiationRate") max_pending: StrictInt = Field(alias="MaxPending") diff --git a/cyperf/models/llmapi_profile.py b/cyperf/models/llmapi_profile.py new file mode 100644 index 0000000..163ce6e --- /dev/null +++ b/cyperf/models/llmapi_profile.py @@ -0,0 +1,134 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.connection import Connection +from cyperf.models.params import Params +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class LLMAPIProfile(BaseModel): + """ + LLMAPIProfile + """ # noqa: E501 + connections: Optional[List[Connection]] = Field(default=None, alias="Connections") + id: StrictStr + is_enabled: StrictBool = Field(alias="isEnabled") + links: Optional[List[APILink]] = None + model_name: StrictStr = Field(alias="modelName") + params: Optional[List[Params]] = None + __properties: ClassVar[List[str]] = ["Connections", "id", "isEnabled", "links", "modelName", "params"] + + @field_validator('model_name') + def model_name_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['OpenAI', 'Gemini', 'Grok']): + raise ValueError("must be one of enum values ('OpenAI', 'Gemini', 'Grok')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of LLMAPIProfile from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in connections (list) + _items = [] + if self.connections: + for _item in self.connections: + if _item: + _items.append(_item.to_dict()) + _dict['Connections'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in params (list) + _items = [] + if self.params: + for _item in self.params: + if _item: + _items.append(_item.to_dict()) + _dict['params'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of LLMAPIProfile from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Connections": ( [Connection.from_dict(_item) for _item in obj.get("Connections", [])] if obj.get("Connections") is not None else None), + "id": obj.get("id"), + "isEnabled": obj.get("isEnabled"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), + "modelName": obj.get("modelName"), + "params": ( [Params.from_dict(_item) for _item in obj.get("params", [])] if obj.get("params") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index 7eb494d..a5f6755 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -33,6 +33,7 @@ class Metadata(BaseModel): """ # noqa: E501 direction: Optional[StrictStr] = Field(default=None, description="The direction of the strike", alias="Direction") is_banner: Optional[StrictBool] = Field(default=None, description="Indicates that this is a command that is required, can only be add once and also must be the first", alias="IsBanner") + is_llm_strike: Optional[StrictBool] = Field(default=None, description="Indicates if the command is an LLM strike", alias="IsLLMStrike") is_streaming: Optional[StrictBool] = Field(default=None, description="Indicates if the application's traffic is a UDP stream", alias="IsStreaming") keywords: Optional[List[AppsecAppMetadataKeywordsInner]] = Field(default=None, description="The keywords of the strike", alias="Keywords") legacy_names: Optional[List[StrictStr]] = Field(default=None, description="The names of the equivalent application/strike", alias="LegacyNames") @@ -47,7 +48,7 @@ class Metadata(BaseModel): static: Optional[StrictBool] = Field(default=None, description="If true, the application/strike is managed directly by the controller", alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, description="The apps that this strike can be used with", alias="SupportedApps") year: Optional[StrictStr] = Field(default=None, description="The year of the strike", alias="Year") - __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "Year"] + __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "Year"] model_config = ConfigDict( populate_by_name=True, @@ -121,6 +122,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Direction": obj.get("Direction"), "IsBanner": obj.get("IsBanner"), + "IsLLMStrike": obj.get("IsLLMStrike"), "IsStreaming": obj.get("IsStreaming"), "Keywords": ( [AppsecAppMetadataKeywordsInner.from_dict(_item) for _item in obj.get("Keywords", [])] if obj.get("Keywords") is not None else None), "LegacyNames": obj.get("LegacyNames") if obj.get("LegacyNames") is not None else [], diff --git a/cyperf/models/transport_profile.py b/cyperf/models/transport_profile.py index e967b52..dc7a1c6 100644 --- a/cyperf/models/transport_profile.py +++ b/cyperf/models/transport_profile.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink from cyperf.models.http_profile import HTTPProfile +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.quic_profile import QUICProfile from cyperf.models.rtp_profile import RTPProfile from cyperf.models.tcp_profile import TcpProfile @@ -40,6 +41,7 @@ class TransportProfile(BaseModel): client_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ClientTLSProfile") client_tcp_profile: Optional[TcpProfile] = Field(default=None, alias="ClientTcpProfile") ip_tos: Optional[StrictInt] = Field(default=None, alias="IpTos") + llmapi_profiles: Optional[List[LLMAPIProfile]] = Field(default=None, alias="LLMAPIProfiles") rtp_profile: Optional[RTPProfile] = Field(default=None, alias="RTPProfile") server_http_profile: Optional[HTTPProfile] = Field(default=None, description="The server HTTP profile used in the Scenario.", alias="ServerHTTPProfile") server_quic_profile: Optional[QUICProfile] = Field(default=None, alias="ServerQUICProfile") @@ -49,7 +51,7 @@ class TransportProfile(BaseModel): vlan_prio: Optional[StrictInt] = Field(default=None, alias="VlanPrio") links: Optional[List[APILink]] = None l4_profile_name: StrictStr = Field(alias="L4ProfileName") - __properties: ClassVar[List[str]] = ["ClientHTTPProfile", "ClientQUICProfile", "ClientTLSProfile", "ClientTcpProfile", "IpTos", "RTPProfile", "ServerHTTPProfile", "ServerQUICProfile", "ServerTLSProfile", "ServerTcpProfile", "UdpProfile", "VlanPrio", "links", "L4ProfileName"] + __properties: ClassVar[List[str]] = ["ClientHTTPProfile", "ClientQUICProfile", "ClientTLSProfile", "ClientTcpProfile", "IpTos", "LLMAPIProfiles", "RTPProfile", "ServerHTTPProfile", "ServerQUICProfile", "ServerTLSProfile", "ServerTcpProfile", "UdpProfile", "VlanPrio", "links", "L4ProfileName"] model_config = ConfigDict( populate_by_name=True, @@ -102,6 +104,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of client_tcp_profile if self.client_tcp_profile: _dict['ClientTcpProfile'] = self.client_tcp_profile.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in llmapi_profiles (list) + _items = [] + if self.llmapi_profiles: + for _item in self.llmapi_profiles: + if _item: + _items.append(_item.to_dict()) + _dict['LLMAPIProfiles'] = _items # override the default output from pydantic by calling `to_dict()` of rtp_profile if self.rtp_profile: _dict['RTPProfile'] = self.rtp_profile.to_dict() @@ -146,6 +155,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ClientTLSProfile": TLSProfile.from_dict(obj["ClientTLSProfile"]) if obj.get("ClientTLSProfile") is not None else None, "ClientTcpProfile": TcpProfile.from_dict(obj["ClientTcpProfile"]) if obj.get("ClientTcpProfile") is not None else None, "IpTos": obj.get("IpTos"), + "LLMAPIProfiles": ( [LLMAPIProfile.from_dict(_item) for _item in obj.get("LLMAPIProfiles", [])] if obj.get("LLMAPIProfiles") is not None else None), "RTPProfile": RTPProfile.from_dict(obj["RTPProfile"]) if obj.get("RTPProfile") is not None else None, "ServerHTTPProfile": HTTPProfile.from_dict(obj["ServerHTTPProfile"]) if obj.get("ServerHTTPProfile") is not None else None, "ServerQUICProfile": QUICProfile.from_dict(obj["ServerQUICProfile"]) if obj.get("ServerQUICProfile") is not None else None, diff --git a/cyperf/models/transport_profile_base.py b/cyperf/models/transport_profile_base.py index ab38b44..d060bad 100644 --- a/cyperf/models/transport_profile_base.py +++ b/cyperf/models/transport_profile_base.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink from cyperf.models.http_profile import HTTPProfile +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.quic_profile import QUICProfile from cyperf.models.rtp_profile import RTPProfile from cyperf.models.tcp_profile import TcpProfile @@ -40,6 +41,7 @@ class TransportProfileBase(BaseModel): client_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ClientTLSProfile") client_tcp_profile: Optional[TcpProfile] = Field(default=None, alias="ClientTcpProfile") ip_tos: Optional[StrictInt] = Field(default=None, alias="IpTos") + llmapi_profiles: Optional[List[LLMAPIProfile]] = Field(default=None, alias="LLMAPIProfiles") rtp_profile: Optional[RTPProfile] = Field(default=None, alias="RTPProfile") server_http_profile: Optional[HTTPProfile] = Field(default=None, description="The server HTTP profile used in the Scenario.", alias="ServerHTTPProfile") server_quic_profile: Optional[QUICProfile] = Field(default=None, alias="ServerQUICProfile") @@ -48,7 +50,7 @@ class TransportProfileBase(BaseModel): udp_profile: Optional[UdpProfile] = Field(default=None, alias="UdpProfile") vlan_prio: Optional[StrictInt] = Field(default=None, alias="VlanPrio") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["ClientHTTPProfile", "ClientQUICProfile", "ClientTLSProfile", "ClientTcpProfile", "IpTos", "RTPProfile", "ServerHTTPProfile", "ServerQUICProfile", "ServerTLSProfile", "ServerTcpProfile", "UdpProfile", "VlanPrio", "links"] + __properties: ClassVar[List[str]] = ["ClientHTTPProfile", "ClientQUICProfile", "ClientTLSProfile", "ClientTcpProfile", "IpTos", "LLMAPIProfiles", "RTPProfile", "ServerHTTPProfile", "ServerQUICProfile", "ServerTLSProfile", "ServerTcpProfile", "UdpProfile", "VlanPrio", "links"] model_config = ConfigDict( populate_by_name=True, @@ -101,6 +103,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of client_tcp_profile if self.client_tcp_profile: _dict['ClientTcpProfile'] = self.client_tcp_profile.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in llmapi_profiles (list) + _items = [] + if self.llmapi_profiles: + for _item in self.llmapi_profiles: + if _item: + _items.append(_item.to_dict()) + _dict['LLMAPIProfiles'] = _items # override the default output from pydantic by calling `to_dict()` of rtp_profile if self.rtp_profile: _dict['RTPProfile'] = self.rtp_profile.to_dict() @@ -145,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ClientTLSProfile": TLSProfile.from_dict(obj["ClientTLSProfile"]) if obj.get("ClientTLSProfile") is not None else None, "ClientTcpProfile": TcpProfile.from_dict(obj["ClientTcpProfile"]) if obj.get("ClientTcpProfile") is not None else None, "IpTos": obj.get("IpTos"), + "LLMAPIProfiles": ( [LLMAPIProfile.from_dict(_item) for _item in obj.get("LLMAPIProfiles", [])] if obj.get("LLMAPIProfiles") is not None else None), "RTPProfile": RTPProfile.from_dict(obj["RTPProfile"]) if obj.get("RTPProfile") is not None else None, "ServerHTTPProfile": HTTPProfile.from_dict(obj["ServerHTTPProfile"]) if obj.get("ServerHTTPProfile") is not None else None, "ServerQUICProfile": QUICProfile.from_dict(obj["ServerQUICProfile"]) if obj.get("ServerQUICProfile") is not None else None, diff --git a/cyperf/models/tunnel_range.py b/cyperf/models/tunnel_range.py index f6374aa..91b6787 100644 --- a/cyperf/models/tunnel_range.py +++ b/cyperf/models/tunnel_range.py @@ -35,17 +35,18 @@ class TunnelRange(BaseModel): The Tunnel Range assigned to the current test configuration """ # noqa: E501 cisco_any_connect_settings: Optional[CiscoAnyConnectSettings] = Field(default=None, alias="CiscoAnyConnectSettings") - dcp_request_timeout: Optional[StrictInt] = Field(default=None, alias="DCPRequestTimeout") + dcp_request_timeout: StrictInt = Field(alias="DCPRequestTimeout") dns_resolver: Optional[DNSResolver] = Field(default=None, alias="DNSResolver") f5_settings: Optional[F5Settings] = Field(default=None, alias="F5Settings") fortinet_settings: Optional[FortinetSettings] = Field(default=None, alias="FortinetSettings") pangp_settings: Optional[PANGPSettings] = Field(default=None, alias="PANGPSettings") tcp_dst_port: StrictInt = Field(alias="TcpDstPort") tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") + tunnel_establishment_reattempts: Optional[StrictInt] = Field(default=None, alias="TunnelEstablishmentReattempts") tunnel_establishment_timeout: Optional[StrictInt] = Field(default=None, alias="TunnelEstablishmentTimeout") vendor_type: StrictStr = Field(alias="VendorType") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["CiscoAnyConnectSettings", "DCPRequestTimeout", "DNSResolver", "F5Settings", "FortinetSettings", "PANGPSettings", "TcpDstPort", "TunnelCountPerOuterIP", "TunnelEstablishmentTimeout", "VendorType", "links"] + __properties: ClassVar[List[str]] = ["CiscoAnyConnectSettings", "DCPRequestTimeout", "DNSResolver", "F5Settings", "FortinetSettings", "PANGPSettings", "TcpDstPort", "TunnelCountPerOuterIP", "TunnelEstablishmentReattempts", "TunnelEstablishmentTimeout", "VendorType", "links"] @field_validator('vendor_type') def vendor_type_validate_enum(cls, value): @@ -137,6 +138,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "PANGPSettings": PANGPSettings.from_dict(obj["PANGPSettings"]) if obj.get("PANGPSettings") is not None else None, "TcpDstPort": obj.get("TcpDstPort"), "TunnelCountPerOuterIP": obj.get("TunnelCountPerOuterIP"), + "TunnelEstablishmentReattempts": obj.get("TunnelEstablishmentReattempts"), "TunnelEstablishmentTimeout": obj.get("TunnelEstablishmentTimeout"), "VendorType": obj.get("VendorType"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/docs/Action.md b/docs/Action.md index 029277d..0e584a6 100644 --- a/docs/Action.md +++ b/docs/Action.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **is_banner** | **bool** | Indicates if this is a required action, can only be add once and also must be the first | [optional] **is_deprecated** | **bool** | A value that indicates if the action is deprecated. | [optional] **is_hostname** | **int** | | [optional] +**is_llm_strike** | **bool** | A value that indicates if the action is an LLM strike. | [optional] **is_strike** | **bool** | A value that indicates if the action is a strike. | [optional] **name** | **str** | The name of the action. | [optional] **params** | [**List[Params]**](Params.md) | | [optional] diff --git a/docs/ActionBase.md b/docs/ActionBase.md index 75140aa..be8a2e2 100644 --- a/docs/ActionBase.md +++ b/docs/ActionBase.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **is_banner** | **bool** | Indicates if this is a required action, can only be add once and also must be the first | [optional] **is_deprecated** | **bool** | A value that indicates if the action is deprecated. | [optional] **is_hostname** | **int** | | [optional] +**is_llm_strike** | **bool** | A value that indicates if the action is an LLM strike. | [optional] **is_strike** | **bool** | A value that indicates if the action is a strike. | [optional] **name** | **str** | The name of the action. | [optional] **params** | [**List[Params]**](Params.md) | | [optional] diff --git a/docs/Agent.md b/docs/Agent.md index 649c8a1..97c003b 100644 --- a/docs/Agent.md +++ b/docs/Agent.md @@ -6,9 +6,11 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **agent_tags** | **List[str]** | A list of tags | [optional] +**display_name_format** | **str** | display agent name format | [optional] **ip** | **str** | The management IP of the agent | [optional] [readonly] **interfaces** | [**List[Interface]**](Interface.md) | A list of test interfaces available on the agent | [optional] **last_update** | **int** | A Unix timestamp that indicates when the agent was last updated | [optional] [readonly] +**port_id_format** | **str** | port agent id format | [optional] **reservation_id** | **str** | The ID of the reservation | [optional] [readonly] **selected_env** | [**SelectedEnv**](SelectedEnv.md) | | [optional] **selection_status** | **str** | The current status of the selection operation | [optional] diff --git a/docs/ApplicationResourcesApi.md b/docs/ApplicationResourcesApi.md index 1baa391..ba91e49 100644 --- a/docs/ApplicationResourcesApi.md +++ b/docs/ApplicationResourcesApi.md @@ -61,6 +61,8 @@ Method | HTTP request | Description [**get_resources_http_library_upload_file_result**](ApplicationResourcesApi.md#get_resources_http_library_upload_file_result) | **GET** /api/v2/resources/http-library/operations/uploadFile/{uploadFileId}/result | [**get_resources_http_profile_by_id**](ApplicationResourcesApi.md#get_resources_http_profile_by_id) | **GET** /api/v2/resources/http-profiles/{httpProfileId} | [**get_resources_http_profiles**](ApplicationResourcesApi.md#get_resources_http_profiles) | **GET** /api/v2/resources/http-profiles | +[**get_resources_llm_api_profile_by_id**](ApplicationResourcesApi.md#get_resources_llm_api_profile_by_id) | **GET** /api/v2/resources/llm-api-profiles/{llmApiProfileId} | +[**get_resources_llm_api_profiles**](ApplicationResourcesApi.md#get_resources_llm_api_profiles) | **GET** /api/v2/resources/llm-api-profiles | [**get_resources_media_file_by_id**](ApplicationResourcesApi.md#get_resources_media_file_by_id) | **GET** /api/v2/resources/media-files/{mediaFileId} | [**get_resources_media_file_content_file**](ApplicationResourcesApi.md#get_resources_media_file_content_file) | **GET** /api/v2/resources/media-files/{mediaFileId}/contentFile | [**get_resources_media_files**](ApplicationResourcesApi.md#get_resources_media_files) | **GET** /api/v2/resources/media-files | @@ -4611,6 +4613,165 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_resources_llm_api_profile_by_id** +> LLMAPIProfile get_resources_llm_api_profile_by_id(llm_api_profile_id) + + + +Get a particular LLM API profile. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.llmapi_profile import LLMAPIProfile +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.ApplicationResourcesApi(api_client) + llm_api_profile_id = 'llm_api_profile_id_example' # str | The ID of the llm api profile. + + try: + api_response = api_instance.get_resources_llm_api_profile_by_id(llm_api_profile_id) + print("The response of ApplicationResourcesApi->get_resources_llm_api_profile_by_id:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ApplicationResourcesApi->get_resources_llm_api_profile_by_id: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **llm_api_profile_id** | **str**| The ID of the llm api profile. | + +### Return type + +[**LLMAPIProfile**](LLMAPIProfile.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The requested LLM API profile | - | +**404** | An LLM API profile with the specified ID was not found. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_resources_llm_api_profiles** +> GetResourcesLlmApiProfiles200Response get_resources_llm_api_profiles(take=take, skip=skip) + + + +Get all the available LLM API profiles. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.ApplicationResourcesApi(api_client) + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_resources_llm_api_profiles(take=take, skip=skip) + print("The response of ApplicationResourcesApi->get_resources_llm_api_profiles:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ApplicationResourcesApi->get_resources_llm_api_profiles: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**GetResourcesLlmApiProfiles200Response**](GetResourcesLlmApiProfiles200Response.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The list of LLM API profiles | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_resources_media_file_by_id** > GenericFile get_resources_media_file_by_id(media_file_id) diff --git a/docs/Attack.md b/docs/Attack.md index 25e0e0d..5c27d6a 100644 --- a/docs/Attack.md +++ b/docs/Attack.md @@ -38,7 +38,9 @@ Name | Type | Description | Notes **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] **client_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] +**inherit_llmapi** | **bool** | | [optional] **inherit_tls** | **bool** | | [optional] +**llmapi_profiles** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] **server_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] **supports_tls** | **bool** | | [optional] **tracks** | [**List[AttackTrack]**](AttackTrack.md) | | [optional] diff --git a/docs/AttackAction.md b/docs/AttackAction.md index 488b13b..cf9e1dd 100644 --- a/docs/AttackAction.md +++ b/docs/AttackAction.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **is_banner** | **bool** | Indicates if this is a required action, can only be add once and also must be the first | [optional] **is_deprecated** | **bool** | A value that indicates if the action is deprecated. | [optional] **is_hostname** | **int** | | [optional] +**is_llm_strike** | **bool** | A value that indicates if the action is an LLM strike. | [optional] **is_strike** | **bool** | A value that indicates if the action is a strike. | [optional] **name** | **str** | The name of the action. | [optional] **params** | [**List[Params]**](Params.md) | | [optional] diff --git a/docs/CommandMetadata.md b/docs/CommandMetadata.md index 0b09e72..2fb76d9 100644 --- a/docs/CommandMetadata.md +++ b/docs/CommandMetadata.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **direction** | **str** | The direction of the strike | [optional] **is_banner** | **bool** | Indicates that this is a command that is required, can only be add once and also must be the first | [optional] **is_for_app_traffic_only** | **bool** | Indicates that this is a command that can only be used in application traffic and cannot be mixed with attack traffic | [optional] +**is_llm_strike** | **bool** | Indicates if the command is an LLM strike | [optional] **is_streaming** | **bool** | Indicates if the application's traffic is a UDP stream | [optional] **keywords** | [**List[AppsecAppMetadataKeywordsInner]**](AppsecAppMetadataKeywordsInner.md) | The keywords of the strike | [optional] **legacy_names** | **List[str]** | The names of the equivalent application/strike | [optional] diff --git a/docs/DUTNetwork.md b/docs/DUTNetwork.md index ff2f764..d44a65c 100644 --- a/docs/DUTNetwork.md +++ b/docs/DUTNetwork.md @@ -18,6 +18,8 @@ Name | Type | Description | Notes **https_health_check** | [**HealthCheckConfig**](HealthCheckConfig.md) | The HTTPS HealthCheck configuration for DUT | [optional] **hostname_suffix** | **str** | A suffix to be added to the Host header of all Apps/Attacks running through the forward proxy DUT (default: empty string). | [optional] **http_forward_proxy_mode** | **str** | Deprecated. This is ignored and the proxy mode will be deduced from the connection type. | [optional] +**llm_model** | **str** | The identifier of the LLM model to use for inference. | [optional] +**llm_request_url_path** | **str** | The endpoint URL for the LLM chat completions API. | [optional] **non_proxied_hosts** | [**Params**](Params.md) | | [optional] **pep_dut** | [**PepDUT**](PepDUT.md) | | [optional] **pep_dut_active** | **bool** | A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false) | [optional] diff --git a/docs/GetResourcesLlmApiProfiles200Response.md b/docs/GetResourcesLlmApiProfiles200Response.md new file mode 100644 index 0000000..cb21e3f --- /dev/null +++ b/docs/GetResourcesLlmApiProfiles200Response.md @@ -0,0 +1,30 @@ +# GetResourcesLlmApiProfiles200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetResourcesLlmApiProfiles200Response from a JSON string +get_resources_llm_api_profiles200_response_instance = GetResourcesLlmApiProfiles200Response.from_json(json) +# print the JSON string representation of the object +print(GetResourcesLlmApiProfiles200Response.to_json()) + +# convert the object into a dict +get_resources_llm_api_profiles200_response_dict = get_resources_llm_api_profiles200_response_instance.to_dict() +# create an instance of GetResourcesLlmApiProfiles200Response from a dict +get_resources_llm_api_profiles200_response_from_dict = GetResourcesLlmApiProfiles200Response.from_dict(get_resources_llm_api_profiles200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetResourcesLlmApiProfiles200ResponseOneOf.md b/docs/GetResourcesLlmApiProfiles200ResponseOneOf.md new file mode 100644 index 0000000..fb2897f --- /dev/null +++ b/docs/GetResourcesLlmApiProfiles200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetResourcesLlmApiProfiles200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_resources_llm_api_profiles200_response_one_of import GetResourcesLlmApiProfiles200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetResourcesLlmApiProfiles200ResponseOneOf from a JSON string +get_resources_llm_api_profiles200_response_one_of_instance = GetResourcesLlmApiProfiles200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetResourcesLlmApiProfiles200ResponseOneOf.to_json()) + +# convert the object into a dict +get_resources_llm_api_profiles200_response_one_of_dict = get_resources_llm_api_profiles200_response_one_of_instance.to_dict() +# create an instance of GetResourcesLlmApiProfiles200ResponseOneOf from a dict +get_resources_llm_api_profiles200_response_one_of_from_dict = GetResourcesLlmApiProfiles200ResponseOneOf.from_dict(get_resources_llm_api_profiles200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IPSecRange.md b/docs/IPSecRange.md index 040c969..49ff066 100644 --- a/docs/IPSecRange.md +++ b/docs/IPSecRange.md @@ -9,6 +9,9 @@ Name | Type | Description | Notes **ike_phase1_config** | [**P1Config**](P1Config.md) | | [optional] **ike_phase2_config** | [**P2Config**](P2Config.md) | | [optional] **ip_sec_range_name** | **str** | | +**inner_ip_sec** | **bool** | | [optional] +**inner_ip_sec_range** | [**InnerIPSecRange**](InnerIPSecRange.md) | | [optional] +**local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] **multi_p2_over_p1** | **bool** | | [optional] **protected_sub_config** | [**ProtectedSubnetConfig**](ProtectedSubnetConfig.md) | Deeprecated. Use RemoteSubConfig instead. | [optional] **public_peer** | **str** | | diff --git a/docs/IPSecStack.md b/docs/IPSecStack.md index 31afcf2..dbe15d8 100644 --- a/docs/IPSecStack.md +++ b/docs/IPSecStack.md @@ -10,7 +10,7 @@ Name | Type | Description | Notes **enable_rekey** | **bool** | | **ip_sec_range** | [**IPSecRange**](IPSecRange.md) | | [optional] **ip_sec_stack_name** | **str** | | -**local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] +**local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | Deeprecated. Use IPSecRange.LocalSubConfig instead. | [optional] **log_keys** | **bool** | | **max_initiation_rate** | **int** | | **max_pending** | **int** | | diff --git a/docs/InnerIPSecRange.md b/docs/InnerIPSecRange.md new file mode 100644 index 0000000..5cfc1e9 --- /dev/null +++ b/docs/InnerIPSecRange.md @@ -0,0 +1,43 @@ +# InnerIPSecRange + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**var_auth_settings** | [**AuthenticationSettings**](AuthenticationSettings.md) | | [optional] +**ike_phase1_config** | [**P1Config**](P1Config.md) | | [optional] +**ike_phase2_config** | [**P2Config**](P2Config.md) | | [optional] +**ip_sec_range_name** | **str** | | +**local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] +**multi_p2_over_p1** | **bool** | | +**public_peer** | **str** | | +**public_peer_increment** | **str** | | +**remote_access** | [**RemoteAccess**](RemoteAccess.md) | | [optional] +**remote_sub_config** | [**RemoteSubnetConfig**](RemoteSubnetConfig.md) | | [optional] +**test_scenario** | **str** | | +**timers** | [**Timers**](Timers.md) | | [optional] +**tunnel_count_per_outer_ip** | **int** | | +**id** | **str** | | +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.inner_ip_sec_range import InnerIPSecRange + +# TODO update the JSON string below +json = "{}" +# create an instance of InnerIPSecRange from a JSON string +inner_ip_sec_range_instance = InnerIPSecRange.from_json(json) +# print the JSON string representation of the object +print(InnerIPSecRange.to_json()) + +# convert the object into a dict +inner_ip_sec_range_dict = inner_ip_sec_range_instance.to_dict() +# create an instance of InnerIPSecRange from a dict +inner_ip_sec_range_from_dict = InnerIPSecRange.from_dict(inner_ip_sec_range_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LLMAPIProfile.md b/docs/LLMAPIProfile.md new file mode 100644 index 0000000..f4072b4 --- /dev/null +++ b/docs/LLMAPIProfile.md @@ -0,0 +1,34 @@ +# LLMAPIProfile + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**connections** | [**List[Connection]**](Connection.md) | | [optional] +**id** | **str** | | +**is_enabled** | **bool** | | +**links** | [**List[APILink]**](APILink.md) | | [optional] +**model_name** | **str** | | +**params** | [**List[Params]**](Params.md) | | [optional] + +## Example + +```python +from cyperf.models.llmapi_profile import LLMAPIProfile + +# TODO update the JSON string below +json = "{}" +# create an instance of LLMAPIProfile from a JSON string +llmapi_profile_instance = LLMAPIProfile.from_json(json) +# print the JSON string representation of the object +print(LLMAPIProfile.to_json()) + +# convert the object into a dict +llmapi_profile_dict = llmapi_profile_instance.to_dict() +# create an instance of LLMAPIProfile from a dict +llmapi_profile_from_dict = LLMAPIProfile.from_dict(llmapi_profile_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Metadata.md b/docs/Metadata.md index d7fca70..dc1628f 100644 --- a/docs/Metadata.md +++ b/docs/Metadata.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **direction** | **str** | The direction of the strike | [optional] **is_banner** | **bool** | Indicates that this is a command that is required, can only be add once and also must be the first | [optional] +**is_llm_strike** | **bool** | Indicates if the command is an LLM strike | [optional] **is_streaming** | **bool** | Indicates if the application's traffic is a UDP stream | [optional] **keywords** | [**List[AppsecAppMetadataKeywordsInner]**](AppsecAppMetadataKeywordsInner.md) | The keywords of the strike | [optional] **legacy_names** | **List[str]** | The names of the equivalent application/strike | [optional] diff --git a/docs/TransportProfile.md b/docs/TransportProfile.md index c774900..7d684cd 100644 --- a/docs/TransportProfile.md +++ b/docs/TransportProfile.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **client_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] **client_tcp_profile** | [**TcpProfile**](TcpProfile.md) | | [optional] **ip_tos** | **int** | | [optional] +**llmapi_profiles** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] **rtp_profile** | [**RTPProfile**](RTPProfile.md) | | [optional] **server_http_profile** | [**HTTPProfile**](HTTPProfile.md) | The server HTTP profile used in the Scenario. | [optional] **server_quic_profile** | [**QUICProfile**](QUICProfile.md) | | [optional] diff --git a/docs/TransportProfileBase.md b/docs/TransportProfileBase.md index 7f9a509..59791bc 100644 --- a/docs/TransportProfileBase.md +++ b/docs/TransportProfileBase.md @@ -10,6 +10,7 @@ Name | Type | Description | Notes **client_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] **client_tcp_profile** | [**TcpProfile**](TcpProfile.md) | | [optional] **ip_tos** | **int** | | [optional] +**llmapi_profiles** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] **rtp_profile** | [**RTPProfile**](RTPProfile.md) | | [optional] **server_http_profile** | [**HTTPProfile**](HTTPProfile.md) | The server HTTP profile used in the Scenario. | [optional] **server_quic_profile** | [**QUICProfile**](QUICProfile.md) | | [optional] diff --git a/docs/TunnelRange.md b/docs/TunnelRange.md index d1ce0b0..3d63715 100644 --- a/docs/TunnelRange.md +++ b/docs/TunnelRange.md @@ -7,13 +7,14 @@ The Tunnel Range assigned to the current test configuration Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **cisco_any_connect_settings** | [**CiscoAnyConnectSettings**](CiscoAnyConnectSettings.md) | | [optional] -**dcp_request_timeout** | **int** | | [optional] +**dcp_request_timeout** | **int** | | **dns_resolver** | [**DNSResolver**](DNSResolver.md) | | [optional] **f5_settings** | [**F5Settings**](F5Settings.md) | | [optional] **fortinet_settings** | [**FortinetSettings**](FortinetSettings.md) | | [optional] **pangp_settings** | [**PANGPSettings**](PANGPSettings.md) | | [optional] **tcp_dst_port** | **int** | | **tunnel_count_per_outer_ip** | **int** | | +**tunnel_establishment_reattempts** | **int** | | [optional] **tunnel_establishment_timeout** | **int** | | [optional] **vendor_type** | **str** | | **links** | [**List[APILink]**](APILink.md) | | [optional] From 442f2adc13947f55dbc3f710c4aa6ec44af7a70c Mon Sep 17 00:00:00 2001 From: Iustin Mitu Date: Wed, 25 Mar 2026 03:04:07 -0600 Subject: [PATCH 04/26] Pull request #62: ISGAPPSEC2-37143 (CW) can't filter notifications in dismiss notifications operation Merge in ISGAPPSEC/cyperf-api-wrapper from bugfix/ISGAPPSEC2-37143-(CW)-can-t-filter-notifications-in-dismiss-notifications-operation to main Squashed commit of the following: commit f342b66782ff47a8252cfac6a22040b8b2efc242 Author: iustmitu Date: Tue Mar 24 16:21:57 2026 +0200 regenerated wrapper with dismiss operation parameter --- README.md | 4 +- cyperf/__init__.py | 1 + cyperf/api/notifications_api.py | 35 ++++++++++- cyperf/dynamic_models/__init__.py | 1 + cyperf/models/__init__.py | 1 + cyperf/models/dismiss_operation.py | 93 ++++++++++++++++++++++++++++++ docs/DismissOperation.md | 29 ++++++++++ docs/NotificationsApi.md | 15 +++-- 8 files changed, 168 insertions(+), 11 deletions(-) create mode 100644 cyperf/models/dismiss_operation.py create mode 100644 docs/DismissOperation.md diff --git a/README.md b/README.md index 006d470..6262fb3 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,6 @@ Then import the package: ```python import cyperf ``` -### Tests - -Execute `pytest` to run the tests. ## Getting Started @@ -497,6 +494,7 @@ Class | Method | HTTP request | Description - [DiagnosticComponentContext](docs/DiagnosticComponentContext.md) - [DiagnosticOptions](docs/DiagnosticOptions.md) - [DiskUsage](docs/DiskUsage.md) + - [DismissOperation](docs/DismissOperation.md) - [ESPOverUDPSettings](docs/ESPOverUDPSettings.md) - [EditActionInput](docs/EditActionInput.md) - [EditAppOperation](docs/EditAppOperation.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 2735277..8548087 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -159,6 +159,7 @@ from cyperf.models.diagnostic_component_context import DiagnosticComponentContext from cyperf.models.diagnostic_options import DiagnosticOptions from cyperf.models.disk_usage import DiskUsage +from cyperf.models.dismiss_operation import DismissOperation from cyperf.models.esp_over_udp_settings import ESPOverUDPSettings from cyperf.models.edit_action_input import EditActionInput from cyperf.models.edit_app_operation import EditAppOperation diff --git a/cyperf/api/notifications_api.py b/cyperf/api/notifications_api.py index aa99ac0..51c4093 100644 --- a/cyperf/api/notifications_api.py +++ b/cyperf/api/notifications_api.py @@ -21,6 +21,7 @@ from typing import Optional from typing_extensions import Annotated from cyperf.models.async_context import AsyncContext +from cyperf.models.dismiss_operation import DismissOperation from cyperf.models.get_notifications200_response import GetNotifications200Response from cyperf.models.notification import Notification from cyperf.models.notification_counts import NotificationCounts @@ -1779,6 +1780,7 @@ def _start_notifications_cleanup_serialize( @validate_call def start_notifications_dismiss( self, + dismiss_operation: Optional[DismissOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1794,8 +1796,10 @@ def start_notifications_dismiss( ) -> AsyncContext: """start_notifications_dismiss - Dismiss all notifications that match the specified filter. + Dismiss notifications. + :param dismiss_operation: + :type dismiss_operation: DismissOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1819,6 +1823,7 @@ def start_notifications_dismiss( """ # noqa: E501 _param = self._start_notifications_dismiss_serialize( + dismiss_operation=dismiss_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1838,6 +1843,7 @@ def start_notifications_dismiss( @validate_call def start_notifications_dismiss_with_http_info( self, + dismiss_operation: Optional[DismissOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1853,8 +1859,10 @@ def start_notifications_dismiss_with_http_info( ) -> ApiResponse[AsyncContext]: """start_notifications_dismiss - Dismiss all notifications that match the specified filter. + Dismiss notifications. + :param dismiss_operation: + :type dismiss_operation: DismissOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1878,6 +1886,7 @@ def start_notifications_dismiss_with_http_info( """ # noqa: E501 _param = self._start_notifications_dismiss_serialize( + dismiss_operation=dismiss_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1897,6 +1906,7 @@ def start_notifications_dismiss_with_http_info( @validate_call def start_notifications_dismiss_without_preload_content( self, + dismiss_operation: Optional[DismissOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1912,8 +1922,10 @@ def start_notifications_dismiss_without_preload_content( ) -> RESTResponseType: """start_notifications_dismiss - Dismiss all notifications that match the specified filter. + Dismiss notifications. + :param dismiss_operation: + :type dismiss_operation: DismissOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1937,6 +1949,7 @@ def start_notifications_dismiss_without_preload_content( """ # noqa: E501 _param = self._start_notifications_dismiss_serialize( + dismiss_operation=dismiss_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1955,6 +1968,7 @@ def start_notifications_dismiss_without_preload_content( def _start_notifications_dismiss_serialize( self, + dismiss_operation, _request_auth, _content_type, _headers, @@ -1978,6 +1992,8 @@ def _start_notifications_dismiss_serialize( # process the header parameters # process the form parameters # process the body parameter + if dismiss_operation is not None: + _body_params = dismiss_operation # set the HTTP header `Accept` @@ -1988,6 +2004,19 @@ def _start_notifications_dismiss_serialize( ] ) + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting _auth_settings: List[str] = [ diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 62919a4..06570c0 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -125,6 +125,7 @@ DiagnosticComponentContext = DynamicModel('DiagnosticComponentContext', (), {} ) DiagnosticOptions = DynamicModel('DiagnosticOptions', (), {} ) DiskUsage = DynamicModel('DiskUsage', (), {} ) +DismissOperation = DynamicModel('DismissOperation', (), {} ) ESPOverUDPSettings = DynamicModel('ESPOverUDPSettings', (), {} ) EditActionInput = DynamicModel('EditActionInput', (), {} ) EditAppOperation = DynamicModel('EditAppOperation', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 4688371..fc3b890 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -125,6 +125,7 @@ class LinkNameException(Exception): from cyperf.models.diagnostic_component_context import DiagnosticComponentContext from cyperf.models.diagnostic_options import DiagnosticOptions from cyperf.models.disk_usage import DiskUsage +from cyperf.models.dismiss_operation import DismissOperation from cyperf.models.esp_over_udp_settings import ESPOverUDPSettings from cyperf.models.edit_action_input import EditActionInput from cyperf.models.edit_app_operation import EditAppOperation diff --git a/cyperf/models/dismiss_operation.py b/cyperf/models/dismiss_operation.py new file mode 100644 index 0000000..ccfeb99 --- /dev/null +++ b/cyperf/models/dismiss_operation.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class DismissOperation(BaseModel): + """ + DismissOperation + """ # noqa: E501 + filters: Optional[Dict[str, List[StrictStr]]] = None + __properties: ClassVar[List[str]] = ["filters"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of DismissOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of DismissOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "filters": obj.get("filters") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/docs/DismissOperation.md b/docs/DismissOperation.md new file mode 100644 index 0000000..db0085c --- /dev/null +++ b/docs/DismissOperation.md @@ -0,0 +1,29 @@ +# DismissOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**filters** | **Dict[str, List[str]]** | | [optional] + +## Example + +```python +from cyperf.models.dismiss_operation import DismissOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of DismissOperation from a JSON string +dismiss_operation_instance = DismissOperation.from_json(json) +# print the JSON string representation of the object +print(DismissOperation.to_json()) + +# convert the object into a dict +dismiss_operation_dict = dismiss_operation_instance.to_dict() +# create an instance of DismissOperation from a dict +dismiss_operation_from_dict = DismissOperation.from_dict(dismiss_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/NotificationsApi.md b/docs/NotificationsApi.md index ef41a55..06e60e6 100644 --- a/docs/NotificationsApi.md +++ b/docs/NotificationsApi.md @@ -450,11 +450,11 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_notifications_dismiss** -> AsyncContext start_notifications_dismiss() +> AsyncContext start_notifications_dismiss(dismiss_operation=dismiss_operation) -Dismiss all notifications that match the specified filter. +Dismiss notifications. ### Example @@ -464,6 +464,7 @@ Dismiss all notifications that match the specified filter. ```python import cyperf from cyperf.models.async_context import AsyncContext +from cyperf.models.dismiss_operation import DismissOperation from cyperf.rest import ApiException from pprint import pprint @@ -486,9 +487,10 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.NotificationsApi(api_client) + dismiss_operation = cyperf.DismissOperation() # DismissOperation | (optional) try: - api_response = api_instance.start_notifications_dismiss() + api_response = api_instance.start_notifications_dismiss(dismiss_operation=dismiss_operation) print("The response of NotificationsApi->start_notifications_dismiss:\n") pprint(api_response) except Exception as e: @@ -499,7 +501,10 @@ with cyperf.ApiClient(configuration) as api_client: ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **dismiss_operation** | [**DismissOperation**](DismissOperation.md)| | [optional] ### Return type @@ -511,7 +516,7 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/json ### HTTP response details From 75c70745ff7c074da83e4aea8ec91178bfa81cc1 Mon Sep 17 00:00:00 2001 From: AndreiCostin Martin Date: Tue, 7 Apr 2026 05:30:38 -0600 Subject: [PATCH 05/26] Pull request #68: Update wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from update/ipsec-o-ipsec to main Squashed commit of the following: commit ef76582be7fb1a2651d992856afefe8ba1edd866 Author: Andrei Martin Date: Tue Apr 7 14:26:12 2026 +0300 Add add-applications operation Signed-off-by: Andrei Martin commit 42811074fa7b1980e1ceec0228b532a988f56c2f Author: Andrei Martin Date: Tue Apr 7 13:56:42 2026 +0300 Update wrapper Signed-off-by: Andrei Martin --- README.md | 2 + cyperf/__init__.py | 2 + cyperf/dynamic_models/__init__.py | 2 + cyperf/models/__init__.py | 2 + cyperf/models/application.py | 18 +++- cyperf/models/emulated_router_range.py | 10 ++- cyperf/models/identification_config.py | 115 +++++++++++++++++++++++++ cyperf/models/inner_ip_sec_range.py | 8 +- cyperf/models/ip_range.py | 14 ++- cyperf/models/ip_sec_range.py | 8 +- cyperf/models/mac_dtls_stack.py | 12 ++- cyperf/models/metadata.py | 4 +- cyperf/models/vlan_range.py | 8 +- cyperf/models/vlan_type.py | 39 +++++++++ docs/Application.md | 5 +- docs/EmulatedRouterRange.md | 2 + docs/IPRange.md | 6 +- docs/IPSecRange.md | 1 + docs/IdentificationConfig.md | 33 +++++++ docs/InnerIPSecRange.md | 1 + docs/MacDtlsStack.md | 4 +- docs/Metadata.md | 1 + docs/VLANRange.md | 1 + docs/VLANType.md | 14 +++ 24 files changed, 294 insertions(+), 18 deletions(-) create mode 100644 cyperf/models/identification_config.py create mode 100644 cyperf/models/vlan_type.py create mode 100644 docs/IdentificationConfig.md create mode 100644 docs/VLANType.md diff --git a/README.md b/README.md index 6262fb3..d3def1a 100644 --- a/README.md +++ b/README.md @@ -614,6 +614,7 @@ Class | Method | HTTP request | Description - [IPSecRange](docs/IPSecRange.md) - [IPSecStack](docs/IPSecStack.md) - [IdPSignatureAlgo](docs/IdPSignatureAlgo.md) + - [IdentificationConfig](docs/IdentificationConfig.md) - [ImportAllOperation](docs/ImportAllOperation.md) - [ImportOfflineLicenseResult](docs/ImportOfflineLicenseResult.md) - [IngestOperation](docs/IngestOperation.md) @@ -771,6 +772,7 @@ Class | Method | HTTP request | Description - [UpdateNetworkMapping](docs/UpdateNetworkMapping.md) - [UpdatePortTagsOperation](docs/UpdatePortTagsOperation.md) - [VLANRange](docs/VLANRange.md) + - [VLANType](docs/VLANType.md) - [ValidationMessage](docs/ValidationMessage.md) - [Version](docs/Version.md) - [VxLANId](docs/VxLANId.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 8548087..4d24b46 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -279,6 +279,7 @@ from cyperf.models.ip_sec_range import IPSecRange from cyperf.models.ip_sec_stack import IPSecStack from cyperf.models.id_p_signature_algo import IdPSignatureAlgo +from cyperf.models.identification_config import IdentificationConfig from cyperf.models.import_all_operation import ImportAllOperation from cyperf.models.import_offline_license_result import ImportOfflineLicenseResult from cyperf.models.ingest_operation import IngestOperation @@ -436,6 +437,7 @@ from cyperf.models.update_network_mapping import UpdateNetworkMapping from cyperf.models.update_port_tags_operation import UpdatePortTagsOperation from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType from cyperf.models.validation_message import ValidationMessage from cyperf.models.version import Version from cyperf.models.vx_lanid import VxLANId diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 06570c0..52db705 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -245,6 +245,7 @@ IPSecRange = DynamicModel('IPSecRange', (), {} ) IPSecStack = DynamicModel('IPSecStack', (), {} ) IdPSignatureAlgo = DynamicModel('IdPSignatureAlgo', (), {} ) +IdentificationConfig = DynamicModel('IdentificationConfig', (), {} ) ImportAllOperation = DynamicModel('ImportAllOperation', (), {} ) ImportOfflineLicenseResult = DynamicModel('ImportOfflineLicenseResult', (), {} ) IngestOperation = DynamicModel('IngestOperation', (), {} ) @@ -402,6 +403,7 @@ UpdateNetworkMapping = DynamicModel('UpdateNetworkMapping', (), {} ) UpdatePortTagsOperation = DynamicModel('UpdatePortTagsOperation', (), {} ) VLANRange = DynamicModel('VLANRange', (), {} ) +VLANType = DynamicModel('VLANType', (), {} ) ValidationMessage = DynamicModel('ValidationMessage', (), {} ) Version = DynamicModel('Version', (), {} ) VxLANId = DynamicModel('VxLANId', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index fc3b890..209fbab 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -245,6 +245,7 @@ class LinkNameException(Exception): from cyperf.models.ip_sec_range import IPSecRange from cyperf.models.ip_sec_stack import IPSecStack from cyperf.models.id_p_signature_algo import IdPSignatureAlgo +from cyperf.models.identification_config import IdentificationConfig from cyperf.models.import_all_operation import ImportAllOperation from cyperf.models.import_offline_license_result import ImportOfflineLicenseResult from cyperf.models.ingest_operation import IngestOperation @@ -402,6 +403,7 @@ class LinkNameException(Exception): from cyperf.models.update_network_mapping import UpdateNetworkMapping from cyperf.models.update_port_tags_operation import UpdatePortTagsOperation from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType from cyperf.models.validation_message import ValidationMessage from cyperf.models.version import Version from cyperf.models.vx_lanid import VxLANId diff --git a/cyperf/models/application.py b/cyperf/models/application.py index e656008..6779287 100644 --- a/cyperf/models/application.py +++ b/cyperf/models/application.py @@ -27,6 +27,7 @@ from cyperf.models.endpoint import Endpoint from cyperf.models.http_profile import HTTPProfile from cyperf.models.ip_preference import IpPreference +from cyperf.models.llmapi_profile import LLMAPIProfile from cyperf.models.network_mapping import NetworkMapping from cyperf.models.params import Params from cyperf.models.quic_profile import QUICProfile @@ -76,16 +77,19 @@ class Application(BaseModel): links: Optional[List[APILink]] = None client_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ClientTLSProfile") data_types: Optional[List[DataType]] = Field(default=None, alias="DataTypes") + inherit_llmapi: Optional[StrictBool] = Field(default=None, alias="InheritLLMAPI") inherit_tls: Optional[StrictBool] = Field(default=None, alias="InheritTLS") is_stateless_stream: Optional[StrictBool] = Field(default=None, alias="IsStatelessStream") is_streaming: Optional[StrictBool] = Field(default=None, alias="IsStreaming") - objective_weight: StrictInt = Field(description="The objective weight of the application.", alias="ObjectiveWeight") + llmapi_profiles: Optional[List[LLMAPIProfile]] = Field(default=None, alias="LLMAPIProfiles") + objective_weight: Optional[StrictInt] = Field(default=None, description="The objective weight of the application.", alias="ObjectiveWeight") protocol_found: Optional[StrictBool] = Field(default=None, alias="ProtocolFound") server_tls_profile: Optional[TLSProfile] = Field(default=None, alias="ServerTLSProfile") stateless_stream: Optional[StatelessStream] = Field(default=None, alias="StatelessStream") static: Optional[StrictBool] = Field(default=None, alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, alias="SupportedApps") supports_calibration: Optional[StrictBool] = Field(default=None, alias="SupportsCalibration") + supports_http2: Optional[StrictBool] = Field(default=None, alias="SupportsHTTP2") supports_multi_flow: Optional[StrictBool] = Field(default=None, alias="SupportsMultiFlow") supports_strikes: Optional[StrictBool] = Field(default=None, alias="SupportsStrikes") supports_tls: Optional[StrictBool] = Field(default=None, alias="SupportsTLS") @@ -94,7 +98,7 @@ class Application(BaseModel): _modify_excluded_dut_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateApplicationNetworkMapping" }) modify_tags_recursively: Optional[List[UpdateNetworkMapping]] = Field(default=None, alias="modify-tags-recursively") _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateApplicationNetworkMapping" }) - __properties: ClassVar[List[str]] = ["ActionTimeout", "Active", "ClientHTTPProfile", "ClientQUICProfile", "Connections", "ConnectionsMaxTransactions", "Description", "DestinationHostname", "DnnId", "EndPointID", "Endpoints", "ExternalResourceURL", "Index", "InheritHTTPProfile", "InheritQUICProfile", "IpPreference", "IsDeprecated", "IterationCount", "MaxActiveLimit", "Name", "NetworkMapping", "Params", "ProtocolID", "QosFlowId", "ReadonlyMaxTrans", "ServerHTTPProfile", "ServerQUICProfile", "SupportsClientHTTPProfile", "SupportsHTTPProfiles", "SupportsServerHTTPProfile", "id", "links", "ClientTLSProfile", "DataTypes", "InheritTLS", "IsStatelessStream", "IsStreaming", "ObjectiveWeight", "ProtocolFound", "ServerTLSProfile", "StatelessStream", "Static", "SupportedApps", "SupportsCalibration", "SupportsMultiFlow", "SupportsStrikes", "SupportsTLS", "Tracks", "modify-excluded-dut-recursively", "modify-tags-recursively"] + __properties: ClassVar[List[str]] = ["ActionTimeout", "Active", "ClientHTTPProfile", "ClientQUICProfile", "Connections", "ConnectionsMaxTransactions", "Description", "DestinationHostname", "DnnId", "EndPointID", "Endpoints", "ExternalResourceURL", "Index", "InheritHTTPProfile", "InheritQUICProfile", "IpPreference", "IsDeprecated", "IterationCount", "MaxActiveLimit", "Name", "NetworkMapping", "Params", "ProtocolID", "QosFlowId", "ReadonlyMaxTrans", "ServerHTTPProfile", "ServerQUICProfile", "SupportsClientHTTPProfile", "SupportsHTTPProfiles", "SupportsServerHTTPProfile", "id", "links", "ClientTLSProfile", "DataTypes", "InheritLLMAPI", "InheritTLS", "IsStatelessStream", "IsStreaming", "LLMAPIProfiles", "ObjectiveWeight", "ProtocolFound", "ServerTLSProfile", "StatelessStream", "Static", "SupportedApps", "SupportsCalibration", "SupportsHTTP2", "SupportsMultiFlow", "SupportsStrikes", "SupportsTLS", "Tracks", "modify-excluded-dut-recursively", "modify-tags-recursively"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -198,6 +202,13 @@ def to_dict(self) -> Dict[str, Any]: if _item: _items.append(_item.to_dict()) _dict['DataTypes'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in llmapi_profiles (list) + _items = [] + if self.llmapi_profiles: + for _item in self.llmapi_profiles: + if _item: + _items.append(_item.to_dict()) + _dict['LLMAPIProfiles'] = _items # override the default output from pydantic by calling `to_dict()` of server_tls_profile if self.server_tls_profile: _dict['ServerTLSProfile'] = self.server_tls_profile.to_dict() @@ -273,9 +284,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "ClientTLSProfile": TLSProfile.from_dict(obj["ClientTLSProfile"]) if obj.get("ClientTLSProfile") is not None else None, "DataTypes": ( [DataType.from_dict(_item) for _item in obj.get("DataTypes", [])] if obj.get("DataTypes") is not None else None), + "InheritLLMAPI": obj.get("InheritLLMAPI"), "InheritTLS": obj.get("InheritTLS"), "IsStatelessStream": obj.get("IsStatelessStream"), "IsStreaming": obj.get("IsStreaming"), + "LLMAPIProfiles": ( [LLMAPIProfile.from_dict(_item) for _item in obj.get("LLMAPIProfiles", [])] if obj.get("LLMAPIProfiles") is not None else None), "ObjectiveWeight": obj.get("ObjectiveWeight"), "ProtocolFound": obj.get("ProtocolFound"), "ServerTLSProfile": TLSProfile.from_dict(obj["ServerTLSProfile"]) if obj.get("ServerTLSProfile") is not None else None, @@ -283,6 +296,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Static": obj.get("Static"), "SupportedApps": obj.get("SupportedApps") if obj.get("SupportedApps") is not None else [], "SupportsCalibration": obj.get("SupportsCalibration"), + "SupportsHTTP2": obj.get("SupportsHTTP2"), "SupportsMultiFlow": obj.get("SupportsMultiFlow"), "SupportsStrikes": obj.get("SupportsStrikes"), "SupportsTLS": obj.get("SupportsTLS"), diff --git a/cyperf/models/emulated_router_range.py b/cyperf/models/emulated_router_range.py index 5784f38..2b88b82 100644 --- a/cyperf/models/emulated_router_range.py +++ b/cyperf/models/emulated_router_range.py @@ -25,6 +25,7 @@ from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr @@ -49,11 +50,13 @@ class EmulatedRouterRange(BaseModel): mss_auto: StrictBool = Field(description="A flag indicating if Mss settings for the IPRange should be determined automatically (default: false).", alias="MssAuto") net_mask: Optional[StrictInt] = Field(default=None, description="The network mask of the IP Range (default: 16).", alias="NetMask") net_mask_auto: StrictBool = Field(description="A flag indicating if the network mask of the IPRange should be determined automatically (default: true).", alias="NetMaskAuto") + outer_vlan_range: Optional[VLANRange] = Field(default=None, description="The outer VLAN range assigned to the current IP range configuration", alias="OuterVlanRange") + vlan_type: Optional[VLANType] = Field(default=None, description="The type of VLAN used", alias="VLANType") id: StrictStr links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -134,6 +137,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of outer_vlan_range + if self.outer_vlan_range: + _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in links (list) _items = [] if self.links: @@ -171,6 +177,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "MssAuto": obj.get("MssAuto"), "NetMask": obj.get("NetMask"), "NetMaskAuto": obj.get("NetMaskAuto"), + "OuterVlanRange": VLANRange.from_dict(obj["OuterVlanRange"]) if obj.get("OuterVlanRange") is not None else None, + "VLANType": obj.get("VLANType"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "maxCountPerAgent": obj.get("maxCountPerAgent"), diff --git a/cyperf/models/identification_config.py b/cyperf/models/identification_config.py new file mode 100644 index 0000000..4269215 --- /dev/null +++ b/cyperf/models/identification_config.py @@ -0,0 +1,115 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class IdentificationConfig(BaseModel): + """ + IdentificationConfig + """ # noqa: E501 + enable_initiator_idr: StrictBool = Field(alias="EnableInitiatorIdr") + initiator_id: StrictStr = Field(alias="InitiatorId") + initiator_id_type: StrictStr = Field(alias="InitiatorIdType") + responder_id: StrictStr = Field(alias="ResponderId") + responder_id_type: StrictStr = Field(alias="ResponderIdType") + __properties: ClassVar[List[str]] = ["EnableInitiatorIdr", "InitiatorId", "InitiatorIdType", "ResponderId", "ResponderIdType"] + + @field_validator('initiator_id_type') + def initiator_id_type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ID_IP_ADDR', 'ID_FQDN']): + raise ValueError("must be one of enum values ('ID_IP_ADDR', 'ID_FQDN')") + return value + + @field_validator('responder_id_type') + def responder_id_type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['ID_IP_ADDR', 'ID_FQDN']): + raise ValueError("must be one of enum values ('ID_IP_ADDR', 'ID_FQDN')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of IdentificationConfig from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of IdentificationConfig from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "EnableInitiatorIdr": obj.get("EnableInitiatorIdr"), + "InitiatorId": obj.get("InitiatorId"), + "InitiatorIdType": obj.get("InitiatorIdType"), + "ResponderId": obj.get("ResponderId"), + "ResponderIdType": obj.get("ResponderIdType") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/inner_ip_sec_range.py b/cyperf/models/inner_ip_sec_range.py index a5d6a04..c072c58 100644 --- a/cyperf/models/inner_ip_sec_range.py +++ b/cyperf/models/inner_ip_sec_range.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.authentication_settings import AuthenticationSettings +from cyperf.models.identification_config import IdentificationConfig from cyperf.models.local_subnet_config import LocalSubnetConfig from cyperf.models.p1_config import P1Config from cyperf.models.p2_config import P2Config @@ -41,6 +42,7 @@ class InnerIPSecRange(BaseModel): ike_phase1_config: Optional[P1Config] = Field(default=None, alias="IKEPhase1Config") ike_phase2_config: Optional[P2Config] = Field(default=None, alias="IKEPhase2Config") ip_sec_range_name: Annotated[str, Field(strict=True)] = Field(alias="IPSecRangeName") + identification_config: Optional[IdentificationConfig] = Field(default=None, alias="IdentificationConfig") local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") multi_p2_over_p1: StrictBool = Field(alias="MultiP2OverP1") public_peer: Annotated[str, Field(strict=True)] = Field(alias="PublicPeer") @@ -52,7 +54,7 @@ class InnerIPSecRange(BaseModel): tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "LocalSubConfig", "MultiP2OverP1", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "LocalSubConfig", "MultiP2OverP1", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] @field_validator('ip_sec_range_name') def ip_sec_range_name_validate_regular_expression(cls, value): @@ -130,6 +132,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of ike_phase2_config if self.ike_phase2_config: _dict['IKEPhase2Config'] = self.ike_phase2_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of identification_config + if self.identification_config: + _dict['IdentificationConfig'] = self.identification_config.to_dict() # override the default output from pydantic by calling `to_dict()` of local_sub_config if self.local_sub_config: _dict['LocalSubConfig'] = self.local_sub_config.to_dict() @@ -167,6 +172,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IKEPhase1Config": P1Config.from_dict(obj["IKEPhase1Config"]) if obj.get("IKEPhase1Config") is not None else None, "IKEPhase2Config": P2Config.from_dict(obj["IKEPhase2Config"]) if obj.get("IKEPhase2Config") is not None else None, "IPSecRangeName": obj.get("IPSecRangeName"), + "IdentificationConfig": IdentificationConfig.from_dict(obj["IdentificationConfig"]) if obj.get("IdentificationConfig") is not None else None, "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, "MultiP2OverP1": obj.get("MultiP2OverP1"), "PublicPeer": obj.get("PublicPeer"), diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index f8288af..9c83b38 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -25,6 +25,7 @@ from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr @@ -43,17 +44,19 @@ class IPRange(BaseModel): ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") ip_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The start IP for the IPRange (default: 10.0.0.10).", alias="IpStart") - ip_ver: IpVer = Field(description="The type of the IP. 'IPV4' and 'IPV6' are both supported currently.", alias="IpVer") + ip_ver: Optional[IpVer] = Field(default=None, description="The type of the IP. 'IPV4' and 'IPV6' are both supported currently.", alias="IpVer") is_emulated_router: Optional[StrictBool] = Field(default=None, alias="IsEmulatedRouter") mss: Optional[StrictInt] = Field(default=None, description="The maximum segment size of the TCP header.", alias="Mss") - mss_auto: StrictBool = Field(description="A flag indicating if Mss settings for the IPRange should be determined automatically (default: false).", alias="MssAuto") + mss_auto: Optional[StrictBool] = Field(default=None, description="A flag indicating if Mss settings for the IPRange should be determined automatically (default: false).", alias="MssAuto") net_mask: Optional[StrictInt] = Field(default=None, description="The network mask of the IP Range (default: 16).", alias="NetMask") net_mask_auto: StrictBool = Field(description="A flag indicating if the network mask of the IPRange should be determined automatically (default: true).", alias="NetMaskAuto") + outer_vlan_range: Optional[VLANRange] = Field(default=None, description="The outer VLAN range assigned to the current IP range configuration", alias="OuterVlanRange") + vlan_type: Optional[VLANType] = Field(default=None, description="The type of VLAN used", alias="VLANType") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -134,6 +137,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of outer_vlan_range + if self.outer_vlan_range: + _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in links (list) _items = [] if self.links: @@ -171,6 +177,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "MssAuto": obj.get("MssAuto"), "NetMask": obj.get("NetMask"), "NetMaskAuto": obj.get("NetMaskAuto"), + "OuterVlanRange": VLANRange.from_dict(obj["OuterVlanRange"]) if obj.get("OuterVlanRange") is not None else None, + "VLANType": obj.get("VLANType"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "maxCountPerAgent": obj.get("maxCountPerAgent"), diff --git a/cyperf/models/ip_sec_range.py b/cyperf/models/ip_sec_range.py index 901105f..77fd056 100644 --- a/cyperf/models/ip_sec_range.py +++ b/cyperf/models/ip_sec_range.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.authentication_settings import AuthenticationSettings +from cyperf.models.identification_config import IdentificationConfig from cyperf.models.inner_ip_sec_range import InnerIPSecRange from cyperf.models.local_subnet_config import LocalSubnetConfig from cyperf.models.p1_config import P1Config @@ -43,6 +44,7 @@ class IPSecRange(BaseModel): ike_phase1_config: Optional[P1Config] = Field(default=None, alias="IKEPhase1Config") ike_phase2_config: Optional[P2Config] = Field(default=None, alias="IKEPhase2Config") ip_sec_range_name: Annotated[str, Field(strict=True)] = Field(alias="IPSecRangeName") + identification_config: Optional[IdentificationConfig] = Field(default=None, alias="IdentificationConfig") inner_ip_sec: Optional[StrictBool] = Field(default=None, alias="InnerIPSec") inner_ip_sec_range: Optional[InnerIPSecRange] = Field(default=None, alias="InnerIPSecRange") local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") @@ -57,7 +59,7 @@ class IPSecRange(BaseModel): tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "InnerIPSec", "InnerIPSecRange", "LocalSubConfig", "MultiP2OverP1", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "InnerIPSec", "InnerIPSecRange", "LocalSubConfig", "MultiP2OverP1", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] @field_validator('ip_sec_range_name') def ip_sec_range_name_validate_regular_expression(cls, value): @@ -135,6 +137,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of ike_phase2_config if self.ike_phase2_config: _dict['IKEPhase2Config'] = self.ike_phase2_config.to_dict() + # override the default output from pydantic by calling `to_dict()` of identification_config + if self.identification_config: + _dict['IdentificationConfig'] = self.identification_config.to_dict() # override the default output from pydantic by calling `to_dict()` of inner_ip_sec_range if self.inner_ip_sec_range: _dict['InnerIPSecRange'] = self.inner_ip_sec_range.to_dict() @@ -178,6 +183,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IKEPhase1Config": P1Config.from_dict(obj["IKEPhase1Config"]) if obj.get("IKEPhase1Config") is not None else None, "IKEPhase2Config": P2Config.from_dict(obj["IKEPhase2Config"]) if obj.get("IKEPhase2Config") is not None else None, "IPSecRangeName": obj.get("IPSecRangeName"), + "IdentificationConfig": IdentificationConfig.from_dict(obj["IdentificationConfig"]) if obj.get("IdentificationConfig") is not None else None, "InnerIPSec": obj.get("InnerIPSec"), "InnerIPSecRange": InnerIPSecRange.from_dict(obj["InnerIPSecRange"]) if obj.get("InnerIPSecRange") is not None else None, "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, diff --git a/cyperf/models/mac_dtls_stack.py b/cyperf/models/mac_dtls_stack.py index 00b5cdf..df6a7fa 100644 --- a/cyperf/models/mac_dtls_stack.py +++ b/cyperf/models/mac_dtls_stack.py @@ -25,6 +25,7 @@ from cyperf.models.ip_range import IPRange from cyperf.models.network_meshing import NetworkMeshing from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr @@ -35,7 +36,7 @@ class MacDtlsStack(BaseModel): """ # noqa: E501 dtls_enabled: Optional[StrictBool] = Field(default=None, alias="DTLSEnabled") dtls_range_name: Annotated[str, Field(strict=True)] = Field(alias="DTLSRangeName") - epoch: StrictInt = Field(alias="Epoch") + epoch: Optional[StrictInt] = Field(default=None, alias="Epoch") epoch_incr: Optional[StrictInt] = Field(default=None, alias="EpochIncr") ip_range: Optional[IPRange] = Field(default=None, alias="IPRange") in_iv: Annotated[str, Field(strict=True)] = Field(description="The in IV start for the DTLSRange (default: 0x22222222).", alias="InIV") @@ -47,13 +48,15 @@ class MacDtlsStack(BaseModel): out_iv_incr: Annotated[str, Field(strict=True)] = Field(description="The out IV increment for the DTLSRange (default: 0x00000001).", alias="OutIVIncr") out_key: Annotated[str, Field(strict=True)] = Field(description="The out key start for the DTLSRange (default: 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA).", alias="OutKey") out_key_incr: Annotated[str, Field(strict=True)] = Field(description="The out key start for the DTLSRange (default: 0x0000000000000000000000000000000000000000000000000000000000000001).", alias="OutKeyIncr") + outer_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current DTLS Range configuration", alias="OuterVlanRange") tunnel_count: StrictInt = Field(alias="TunnelCount") tunnel_destination_mac_incr: Annotated[str, Field(strict=True)] = Field(description="The MAC address increment rule for the DTLSRange (default: 00:00:00:00:00:01).", alias="TunnelDestinationMacIncr") tunnel_destination_mac_start: Annotated[str, Field(strict=True)] = Field(description="The MAC start address for the DTLSRange (default: AA:BB:CC:DD:EE:FF).", alias="TunnelDestinationMacStart") + vlan_type: Optional[VLANType] = Field(default=None, description="The type of VLAN used", alias="VLANType") vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current DTLS Range configuration", alias="VlanRange") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DTLSEnabled", "DTLSRangeName", "Epoch", "EpochIncr", "IPRange", "InIV", "InIVIncr", "InKey", "InKeyIncr", "NetworkMeshing", "OutIV", "OutIVIncr", "OutKey", "OutKeyIncr", "TunnelCount", "TunnelDestinationMacIncr", "TunnelDestinationMacStart", "VlanRange", "id", "links"] + __properties: ClassVar[List[str]] = ["DTLSEnabled", "DTLSRangeName", "Epoch", "EpochIncr", "IPRange", "InIV", "InIVIncr", "InKey", "InKeyIncr", "NetworkMeshing", "OutIV", "OutIVIncr", "OutKey", "OutKeyIncr", "OuterVlanRange", "TunnelCount", "TunnelDestinationMacIncr", "TunnelDestinationMacStart", "VLANType", "VlanRange", "id", "links"] @field_validator('dtls_range_name') def dtls_range_name_validate_regular_expression(cls, value): @@ -177,6 +180,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of network_meshing if self.network_meshing: _dict['NetworkMeshing'] = self.network_meshing.to_dict() + # override the default output from pydantic by calling `to_dict()` of outer_vlan_range + if self.outer_vlan_range: + _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() # override the default output from pydantic by calling `to_dict()` of vlan_range if self.vlan_range: _dict['VlanRange'] = self.vlan_range.to_dict() @@ -215,9 +221,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "OutIVIncr": obj.get("OutIVIncr"), "OutKey": obj.get("OutKey"), "OutKeyIncr": obj.get("OutKeyIncr"), + "OuterVlanRange": VLANRange.from_dict(obj["OuterVlanRange"]) if obj.get("OuterVlanRange") is not None else None, "TunnelCount": obj.get("TunnelCount"), "TunnelDestinationMacIncr": obj.get("TunnelDestinationMacIncr"), "TunnelDestinationMacStart": obj.get("TunnelDestinationMacStart"), + "VLANType": obj.get("VLANType"), "VlanRange": VLANRange.from_dict(obj["VlanRange"]) if obj.get("VlanRange") is not None else None, "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index a5f6755..6e07d2b 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -47,8 +47,9 @@ class Metadata(BaseModel): sort_severity: Optional[StrictStr] = Field(default=None, description="The field by which the severity is sorted", alias="SortSeverity") static: Optional[StrictBool] = Field(default=None, description="If true, the application/strike is managed directly by the controller", alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, description="The apps that this strike can be used with", alias="SupportedApps") + supports_http2: Optional[StrictBool] = Field(default=None, description="Indicates if the application supports HTTP2 multi-stream", alias="SupportsHTTP2") year: Optional[StrictStr] = Field(default=None, description="The year of the strike", alias="Year") - __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "Year"] + __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportsHTTP2", "Year"] model_config = ConfigDict( populate_by_name=True, @@ -136,6 +137,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "SortSeverity": obj.get("SortSeverity"), "Static": obj.get("Static"), "SupportedApps": obj.get("SupportedApps") if obj.get("SupportedApps") is not None else [], + "SupportsHTTP2": obj.get("SupportsHTTP2"), "Year": obj.get("Year") , "links": obj.get("links") diff --git a/cyperf/models/vlan_range.py b/cyperf/models/vlan_range.py index 75897f6..aa98489 100644 --- a/cyperf/models/vlan_range.py +++ b/cyperf/models/vlan_range.py @@ -32,6 +32,7 @@ class VLANRange(BaseModel): """ # noqa: E501 count: Optional[StrictInt] = Field(default=None, description="The number of VLANs generated (default: 1).", alias="Count") count_per_agent: Optional[StrictInt] = Field(default=None, description="The number of VLANs that should be assigned to each traffic agent for this VLAN range segment in a valid test (default: 1).", alias="CountPerAgent") + increment_every_no_of_ips: Optional[StrictInt] = Field(default=None, description="Sets that number of IPs from the IP Range after which the VLAN is incremented.", alias="IncrementEveryNoOfIPs") max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of VLANs that should be assigned to each traffic agent for this VLAN range segment in a valid test (default: 1).", alias="MaxCountPerAgent") priority: Optional[StrictInt] = Field(default=None, description="The priority code point value (default: 0).", alias="Priority") static_arp_table: Optional[List[StaticARPEntry]] = Field(default=None, alias="StaticARPTable") @@ -41,7 +42,7 @@ class VLANRange(BaseModel): vlan_id: Optional[StrictInt] = Field(default=None, description="The VLAN identifier (default: 1).", alias="VlanId") vlan_incr: Optional[StrictInt] = Field(default=None, description="The VLAN incrementation rule (default: 1).", alias="VlanIncr") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Count", "CountPerAgent", "MaxCountPerAgent", "Priority", "StaticARPTable", "TagProtocolId", "VlanAuto", "VlanEnabled", "VlanId", "VlanIncr", "links"] + __properties: ClassVar[List[str]] = ["Count", "CountPerAgent", "IncrementEveryNoOfIPs", "MaxCountPerAgent", "Priority", "StaticARPTable", "TagProtocolId", "VlanAuto", "VlanEnabled", "VlanId", "VlanIncr", "links"] @field_validator('tag_protocol_id') def tag_protocol_id_validate_enum(cls, value): @@ -49,8 +50,8 @@ def tag_protocol_id_validate_enum(cls, value): if value is None: return value - if value not in set([33024]): - raise ValueError("must be one of enum values (33024)") + if value not in set([33024, 34984]): + raise ValueError("must be one of enum values (33024, 34984)") return value model_config = ConfigDict( @@ -122,6 +123,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Count": obj.get("Count"), "CountPerAgent": obj.get("CountPerAgent"), + "IncrementEveryNoOfIPs": obj.get("IncrementEveryNoOfIPs"), "MaxCountPerAgent": obj.get("MaxCountPerAgent"), "Priority": obj.get("Priority"), "StaticARPTable": ( [StaticARPEntry.from_dict(_item) for _item in obj.get("StaticARPTable", [])] if obj.get("StaticARPTable") is not None else None), diff --git a/cyperf/models/vlan_type.py b/cyperf/models/vlan_type.py new file mode 100644 index 0000000..77cd7e5 --- /dev/null +++ b/cyperf/models/vlan_type.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class VLANType(str, Enum): + """ + VLANType + """ + + """ + allowed enum values + """ + VLAN_NONE = 'VLAN_NONE' + VLAN = 'VLAN' + VLAN_IN_VLAN = 'VLAN_IN_VLAN' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of VLANType from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/docs/Application.md b/docs/Application.md index 64b0257..809ca5e 100644 --- a/docs/Application.md +++ b/docs/Application.md @@ -39,16 +39,19 @@ Name | Type | Description | Notes **links** | [**List[APILink]**](APILink.md) | | [optional] **client_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] **data_types** | [**List[DataType]**](DataType.md) | | [optional] +**inherit_llmapi** | **bool** | | [optional] **inherit_tls** | **bool** | | [optional] **is_stateless_stream** | **bool** | | [optional] **is_streaming** | **bool** | | [optional] -**objective_weight** | **int** | The objective weight of the application. | +**llmapi_profiles** | [**List[LLMAPIProfile]**](LLMAPIProfile.md) | | [optional] +**objective_weight** | **int** | The objective weight of the application. | [optional] **protocol_found** | **bool** | | [optional] **server_tls_profile** | [**TLSProfile**](TLSProfile.md) | | [optional] **stateless_stream** | [**StatelessStream**](StatelessStream.md) | | [optional] **static** | **bool** | | [optional] **supported_apps** | **List[str]** | | [optional] **supports_calibration** | **bool** | | [optional] +**supports_http2** | **bool** | | [optional] **supports_multi_flow** | **bool** | | [optional] **supports_strikes** | **bool** | | [optional] **supports_tls** | **bool** | | [optional] diff --git a/docs/EmulatedRouterRange.md b/docs/EmulatedRouterRange.md index efcbd7c..98757c0 100644 --- a/docs/EmulatedRouterRange.md +++ b/docs/EmulatedRouterRange.md @@ -21,6 +21,8 @@ Name | Type | Description | Notes **mss_auto** | **bool** | A flag indicating if Mss settings for the IPRange should be determined automatically (default: false). | **net_mask** | **int** | The network mask of the IP Range (default: 16). | [optional] **net_mask_auto** | **bool** | A flag indicating if the network mask of the IPRange should be determined automatically (default: true). | +**outer_vlan_range** | [**VLANRange**](VLANRange.md) | The outer VLAN range assigned to the current IP range configuration | [optional] +**vlan_type** | [**VLANType**](VLANType.md) | The type of VLAN used | [optional] **id** | **str** | | **links** | [**List[APILink]**](APILink.md) | | [optional] **max_count_per_agent** | **int** | The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1). | [optional] diff --git a/docs/IPRange.md b/docs/IPRange.md index f6fbf6b..22b27ee 100644 --- a/docs/IPRange.md +++ b/docs/IPRange.md @@ -16,12 +16,14 @@ Name | Type | Description | Notes **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | **ip_start** | **str** | The start IP for the IPRange (default: 10.0.0.10). | [optional] -**ip_ver** | [**IpVer**](IpVer.md) | The type of the IP. 'IPV4' and 'IPV6' are both supported currently. | +**ip_ver** | [**IpVer**](IpVer.md) | The type of the IP. 'IPV4' and 'IPV6' are both supported currently. | [optional] **is_emulated_router** | **bool** | | [optional] **mss** | **int** | The maximum segment size of the TCP header. | [optional] -**mss_auto** | **bool** | A flag indicating if Mss settings for the IPRange should be determined automatically (default: false). | +**mss_auto** | **bool** | A flag indicating if Mss settings for the IPRange should be determined automatically (default: false). | [optional] **net_mask** | **int** | The network mask of the IP Range (default: 16). | [optional] **net_mask_auto** | **bool** | A flag indicating if the network mask of the IPRange should be determined automatically (default: true). | +**outer_vlan_range** | [**VLANRange**](VLANRange.md) | The outer VLAN range assigned to the current IP range configuration | [optional] +**vlan_type** | [**VLANType**](VLANType.md) | The type of VLAN used | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] **max_count_per_agent** | **int** | The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1). | [optional] diff --git a/docs/IPSecRange.md b/docs/IPSecRange.md index 49ff066..54bcd91 100644 --- a/docs/IPSecRange.md +++ b/docs/IPSecRange.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **ike_phase1_config** | [**P1Config**](P1Config.md) | | [optional] **ike_phase2_config** | [**P2Config**](P2Config.md) | | [optional] **ip_sec_range_name** | **str** | | +**identification_config** | [**IdentificationConfig**](IdentificationConfig.md) | | [optional] **inner_ip_sec** | **bool** | | [optional] **inner_ip_sec_range** | [**InnerIPSecRange**](InnerIPSecRange.md) | | [optional] **local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] diff --git a/docs/IdentificationConfig.md b/docs/IdentificationConfig.md new file mode 100644 index 0000000..398887d --- /dev/null +++ b/docs/IdentificationConfig.md @@ -0,0 +1,33 @@ +# IdentificationConfig + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**enable_initiator_idr** | **bool** | | +**initiator_id** | **str** | | +**initiator_id_type** | **str** | | +**responder_id** | **str** | | +**responder_id_type** | **str** | | + +## Example + +```python +from cyperf.models.identification_config import IdentificationConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of IdentificationConfig from a JSON string +identification_config_instance = IdentificationConfig.from_json(json) +# print the JSON string representation of the object +print(IdentificationConfig.to_json()) + +# convert the object into a dict +identification_config_dict = identification_config_instance.to_dict() +# create an instance of IdentificationConfig from a dict +identification_config_from_dict = IdentificationConfig.from_dict(identification_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/InnerIPSecRange.md b/docs/InnerIPSecRange.md index 5cfc1e9..f53c101 100644 --- a/docs/InnerIPSecRange.md +++ b/docs/InnerIPSecRange.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **ike_phase1_config** | [**P1Config**](P1Config.md) | | [optional] **ike_phase2_config** | [**P2Config**](P2Config.md) | | [optional] **ip_sec_range_name** | **str** | | +**identification_config** | [**IdentificationConfig**](IdentificationConfig.md) | | [optional] **local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] **multi_p2_over_p1** | **bool** | | **public_peer** | **str** | | diff --git a/docs/MacDtlsStack.md b/docs/MacDtlsStack.md index 99ca325..da3d753 100644 --- a/docs/MacDtlsStack.md +++ b/docs/MacDtlsStack.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **dtls_enabled** | **bool** | | [optional] **dtls_range_name** | **str** | | -**epoch** | **int** | | +**epoch** | **int** | | [optional] **epoch_incr** | **int** | | [optional] **ip_range** | [**IPRange**](IPRange.md) | | [optional] **in_iv** | **str** | The in IV start for the DTLSRange (default: 0x22222222). | @@ -19,9 +19,11 @@ Name | Type | Description | Notes **out_iv_incr** | **str** | The out IV increment for the DTLSRange (default: 0x00000001). | **out_key** | **str** | The out key start for the DTLSRange (default: 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA). | **out_key_incr** | **str** | The out key start for the DTLSRange (default: 0x0000000000000000000000000000000000000000000000000000000000000001). | +**outer_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current DTLS Range configuration | [optional] **tunnel_count** | **int** | | **tunnel_destination_mac_incr** | **str** | The MAC address increment rule for the DTLSRange (default: 00:00:00:00:00:01). | **tunnel_destination_mac_start** | **str** | The MAC start address for the DTLSRange (default: AA:BB:CC:DD:EE:FF). | +**vlan_type** | [**VLANType**](VLANType.md) | The type of VLAN used | [optional] **vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current DTLS Range configuration | [optional] **id** | **str** | | **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/Metadata.md b/docs/Metadata.md index dc1628f..fbe520a 100644 --- a/docs/Metadata.md +++ b/docs/Metadata.md @@ -21,6 +21,7 @@ Name | Type | Description | Notes **sort_severity** | **str** | The field by which the severity is sorted | [optional] **static** | **bool** | If true, the application/strike is managed directly by the controller | [optional] **supported_apps** | **List[str]** | The apps that this strike can be used with | [optional] +**supports_http2** | **bool** | Indicates if the application supports HTTP2 multi-stream | [optional] **year** | **str** | The year of the strike | [optional] ## Example diff --git a/docs/VLANRange.md b/docs/VLANRange.md index 9895f33..66871bc 100644 --- a/docs/VLANRange.md +++ b/docs/VLANRange.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **count** | **int** | The number of VLANs generated (default: 1). | [optional] **count_per_agent** | **int** | The number of VLANs that should be assigned to each traffic agent for this VLAN range segment in a valid test (default: 1). | [optional] +**increment_every_no_of_ips** | **int** | Sets that number of IPs from the IP Range after which the VLAN is incremented. | [optional] **max_count_per_agent** | **int** | The maximum number of VLANs that should be assigned to each traffic agent for this VLAN range segment in a valid test (default: 1). | [optional] **priority** | **int** | The priority code point value (default: 0). | [optional] **static_arp_table** | [**List[StaticARPEntry]**](StaticARPEntry.md) | | [optional] diff --git a/docs/VLANType.md b/docs/VLANType.md new file mode 100644 index 0000000..bb74898 --- /dev/null +++ b/docs/VLANType.md @@ -0,0 +1,14 @@ +# VLANType + + +## Enum + +* `VLAN_NONE` (value: `'VLAN_NONE'`) + +* `VLAN` (value: `'VLAN'`) + +* `VLAN_IN_VLAN` (value: `'VLAN_IN_VLAN'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + From 98ca849191b2e63eaec2916c54ed8f70fb56541c Mon Sep 17 00:00:00 2001 From: AndreiCostin Martin Date: Mon, 27 Apr 2026 01:57:41 -0600 Subject: [PATCH 06/26] Pull request #71: Update wrapper with IPSec PQC structs Merge in ISGAPPSEC/cyperf-api-wrapper from update/add-ipsec-pqc to main Squashed commit of the following: commit cec8171ec25b9d4aef24b44c95d9b01046163599 Author: Andrei Martin Date: Fri Apr 24 17:15:55 2026 +0300 Update wrapper with IPSec PQC structs Signed-off-by: Andrei Martin --- README.md | 1 + cyperf/__init__.py | 1 + cyperf/dynamic_models/__init__.py | 1 + cyperf/models/__init__.py | 1 + cyperf/models/ip_sec_stack.py | 12 +++- cyperf/models/p1_config.py | 17 +++++- cyperf/models/ppk_pair.py | 95 +++++++++++++++++++++++++++++++ docs/IPSecStack.md | 1 + docs/P1Config.md | 3 + docs/PPKPair.md | 30 ++++++++++ 10 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 cyperf/models/ppk_pair.py create mode 100644 docs/PPKPair.md diff --git a/README.md b/README.md index d3def1a..befb404 100644 --- a/README.md +++ b/README.md @@ -661,6 +661,7 @@ Class | Method | HTTP request | Description - [P2Config](docs/P2Config.md) - [PANGPEncapsulation](docs/PANGPEncapsulation.md) - [PANGPSettings](docs/PANGPSettings.md) + - [PPKPair](docs/PPKPair.md) - [Pair](docs/Pair.md) - [ParamMetadata](docs/ParamMetadata.md) - [ParamMetadataTypeInfo](docs/ParamMetadataTypeInfo.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 4d24b46..3fa3df6 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -326,6 +326,7 @@ from cyperf.models.p2_config import P2Config from cyperf.models.pangp_encapsulation import PANGPEncapsulation from cyperf.models.pangp_settings import PANGPSettings +from cyperf.models.ppk_pair import PPKPair from cyperf.models.pair import Pair from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 52db705..88dea8a 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -292,6 +292,7 @@ P2Config = DynamicModel('P2Config', (), {} ) PANGPEncapsulation = DynamicModel('PANGPEncapsulation', (), {} ) PANGPSettings = DynamicModel('PANGPSettings', (), {} ) +PPKPair = DynamicModel('PPKPair', (), {} ) Pair = DynamicModel('Pair', (), {} ) ParamMetadata = DynamicModel('ParamMetadata', (), {} ) ParamMetadataTypeInfo = DynamicModel('ParamMetadataTypeInfo', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 209fbab..4c04338 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -292,6 +292,7 @@ class LinkNameException(Exception): from cyperf.models.p2_config import P2Config from cyperf.models.pangp_encapsulation import PANGPEncapsulation from cyperf.models.pangp_settings import PANGPSettings +from cyperf.models.ppk_pair import PPKPair from cyperf.models.pair import Pair from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo diff --git a/cyperf/models/ip_sec_stack.py b/cyperf/models/ip_sec_stack.py index f4e1da1..f9a7014 100644 --- a/cyperf/models/ip_sec_stack.py +++ b/cyperf/models/ip_sec_stack.py @@ -27,6 +27,7 @@ from cyperf.models.ip_sec_range import IPSecRange from cyperf.models.local_subnet_config import LocalSubnetConfig from cyperf.models.params import Params +from cyperf.models.ppk_pair import PPKPair from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr @@ -45,6 +46,7 @@ class IPSecStack(BaseModel): max_initiation_rate: StrictInt = Field(alias="MaxInitiationRate") max_pending: StrictInt = Field(alias="MaxPending") outer_ip_range: Optional[IPRange] = Field(default=None, alias="OuterIPRange") + ppk_list: Optional[List[PPKPair]] = Field(default=None, alias="PPKList") rekey_margin: StrictInt = Field(alias="RekeyMargin") rekey_retry_count: StrictInt = Field(alias="RekeyRetryCount") retransmission_timeout: StrictInt = Field(alias="RetransmissionTimeout") @@ -55,7 +57,7 @@ class IPSecStack(BaseModel): stack_role: StrictStr = Field(alias="StackRole") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["CACertificateFile", "EmulatedSubConfig", "EnableRekey", "IPSecRange", "IPSecStackName", "LocalSubConfig", "LogKeys", "MaxInitiationRate", "MaxPending", "OuterIPRange", "RekeyMargin", "RekeyRetryCount", "RetransmissionTimeout", "RetryCount", "RetryInterval", "RetryIntervalIncrement", "SetupTimeout", "StackRole", "id", "links"] + __properties: ClassVar[List[str]] = ["CACertificateFile", "EmulatedSubConfig", "EnableRekey", "IPSecRange", "IPSecStackName", "LocalSubConfig", "LogKeys", "MaxInitiationRate", "MaxPending", "OuterIPRange", "PPKList", "RekeyMargin", "RekeyRetryCount", "RetransmissionTimeout", "RetryCount", "RetryInterval", "RetryIntervalIncrement", "SetupTimeout", "StackRole", "id", "links"] @field_validator('ip_sec_stack_name') def ip_sec_stack_name_validate_regular_expression(cls, value): @@ -125,6 +127,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of outer_ip_range if self.outer_ip_range: _dict['OuterIPRange'] = self.outer_ip_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in ppk_list (list) + _items = [] + if self.ppk_list: + for _item in self.ppk_list: + if _item: + _items.append(_item.to_dict()) + _dict['PPKList'] = _items # override the default output from pydantic by calling `to_dict()` of each item in links (list) _items = [] if self.links: @@ -156,6 +165,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "MaxInitiationRate": obj.get("MaxInitiationRate"), "MaxPending": obj.get("MaxPending"), "OuterIPRange": IPRange.from_dict(obj["OuterIPRange"]) if obj.get("OuterIPRange") is not None else None, + "PPKList": ( [PPKPair.from_dict(_item) for _item in obj.get("PPKList", [])] if obj.get("PPKList") is not None else None), "RekeyMargin": obj.get("RekeyMargin"), "RekeyRetryCount": obj.get("RekeyRetryCount"), "RetransmissionTimeout": obj.get("RetransmissionTimeout"), diff --git a/cyperf/models/p1_config.py b/cyperf/models/p1_config.py index 40f905d..4c88af0 100644 --- a/cyperf/models/p1_config.py +++ b/cyperf/models/p1_config.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List from cyperf.models.dh_p1_group import DhP1Group from cyperf.models.enc_p1_algorithm import EncP1Algorithm @@ -37,8 +37,18 @@ class P1Config(BaseModel): hash_algorithm: HashP1Algorithm = Field(alias="HashAlgorithm") initial_contact: StrictBool = Field(alias="InitialContact") lifetime: StrictInt = Field(alias="Lifetime") + ppk_enabled: StrictBool = Field(alias="PPKEnabled") + ppkid: StrictStr = Field(alias="PPKId") + ppk_mandatory: StrictStr = Field(alias="PPKMandatory") prf_algorithm: PrfP1Algorithm = Field(alias="PrfAlgorithm") - __properties: ClassVar[List[str]] = ["DHGroup", "EncAlgorithm", "HashAlgorithm", "InitialContact", "Lifetime", "PrfAlgorithm"] + __properties: ClassVar[List[str]] = ["DHGroup", "EncAlgorithm", "HashAlgorithm", "InitialContact", "Lifetime", "PPKEnabled", "PPKId", "PPKMandatory", "PrfAlgorithm"] + + @field_validator('ppk_mandatory') + def ppk_mandatory_validate_enum(cls, value): + """Validates the enum""" + if value not in set(['PREFERRED', 'MANDATORY']): + raise ValueError("must be one of enum values ('PREFERRED', 'MANDATORY')") + return value model_config = ConfigDict( populate_by_name=True, @@ -98,6 +108,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "HashAlgorithm": obj.get("HashAlgorithm"), "InitialContact": obj.get("InitialContact"), "Lifetime": obj.get("Lifetime"), + "PPKEnabled": obj.get("PPKEnabled"), + "PPKId": obj.get("PPKId"), + "PPKMandatory": obj.get("PPKMandatory"), "PrfAlgorithm": obj.get("PrfAlgorithm") , "links": obj.get("links") diff --git a/cyperf/models/ppk_pair.py b/cyperf/models/ppk_pair.py new file mode 100644 index 0000000..06205df --- /dev/null +++ b/cyperf/models/ppk_pair.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class PPKPair(BaseModel): + """ + PPKPair + """ # noqa: E501 + ppkid: StrictStr = Field(alias="PPKId") + ppk_key: StrictStr = Field(alias="PPKKey") + __properties: ClassVar[List[str]] = ["PPKId", "PPKKey"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PPKPair from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PPKPair from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "PPKId": obj.get("PPKId"), + "PPKKey": obj.get("PPKKey") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/docs/IPSecStack.md b/docs/IPSecStack.md index dbe15d8..283e0fa 100644 --- a/docs/IPSecStack.md +++ b/docs/IPSecStack.md @@ -15,6 +15,7 @@ Name | Type | Description | Notes **max_initiation_rate** | **int** | | **max_pending** | **int** | | **outer_ip_range** | [**IPRange**](IPRange.md) | | [optional] +**ppk_list** | [**List[PPKPair]**](PPKPair.md) | | [optional] **rekey_margin** | **int** | | **rekey_retry_count** | **int** | | **retransmission_timeout** | **int** | | diff --git a/docs/P1Config.md b/docs/P1Config.md index 4a5daa7..8a55a7d 100644 --- a/docs/P1Config.md +++ b/docs/P1Config.md @@ -10,6 +10,9 @@ Name | Type | Description | Notes **hash_algorithm** | [**HashP1Algorithm**](HashP1Algorithm.md) | | **initial_contact** | **bool** | | **lifetime** | **int** | | +**ppk_enabled** | **bool** | | +**ppkid** | **str** | | +**ppk_mandatory** | **str** | | **prf_algorithm** | [**PrfP1Algorithm**](PrfP1Algorithm.md) | | ## Example diff --git a/docs/PPKPair.md b/docs/PPKPair.md new file mode 100644 index 0000000..5dbb565 --- /dev/null +++ b/docs/PPKPair.md @@ -0,0 +1,30 @@ +# PPKPair + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ppkid** | **str** | | +**ppk_key** | **str** | | + +## Example + +```python +from cyperf.models.ppk_pair import PPKPair + +# TODO update the JSON string below +json = "{}" +# create an instance of PPKPair from a JSON string +ppk_pair_instance = PPKPair.from_json(json) +# print the JSON string representation of the object +print(PPKPair.to_json()) + +# convert the object into a dict +ppk_pair_dict = ppk_pair_instance.to_dict() +# create an instance of PPKPair from a dict +ppk_pair_from_dict = PPKPair.from_dict(ppk_pair_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + From d8666e0ae0ef27dd34303be4b70e689e89d2e598 Mon Sep 17 00:00:00 2001 From: Indradeep Moitra Date: Tue, 19 May 2026 09:24:49 -0600 Subject: [PATCH 07/26] Pull request #73: Added python api wrapper for newly added PSP Stack in Cyperf Merge in ISGAPPSEC/cyperf-api-wrapper from feature/pspStack to main Squashed commit of the following: commit 269aac7e37547a37354cb33780c7eee6dda51c0d Author: inmoitra Date: Mon May 18 13:46:59 2026 +0000 Python api wrapper for newly added PSP Stack in Cyperf --- README.md | 2 + cyperf/__init__.py | 2 + cyperf/api/notifications_api.py | 6 +- cyperf/dynamic_models/__init__.py | 2 + cyperf/models/__init__.py | 2 + cyperf/models/ip_network.py | 12 ++- cyperf/models/psp_range.py | 143 ++++++++++++++++++++++++++++++ cyperf/models/psp_stack.py | 130 +++++++++++++++++++++++++++ docs/IPNetwork.md | 1 + docs/NotificationsApi.md | 2 +- docs/PSPRange.md | 44 +++++++++ docs/PSPStack.md | 35 ++++++++ 12 files changed, 376 insertions(+), 5 deletions(-) create mode 100644 cyperf/models/psp_range.py create mode 100644 cyperf/models/psp_stack.py create mode 100644 docs/PSPRange.md create mode 100644 docs/PSPStack.md diff --git a/README.md b/README.md index befb404..5d530c3 100644 --- a/README.md +++ b/README.md @@ -662,6 +662,8 @@ Class | Method | HTTP request | Description - [PANGPEncapsulation](docs/PANGPEncapsulation.md) - [PANGPSettings](docs/PANGPSettings.md) - [PPKPair](docs/PPKPair.md) + - [PSPRange](docs/PSPRange.md) + - [PSPStack](docs/PSPStack.md) - [Pair](docs/Pair.md) - [ParamMetadata](docs/ParamMetadata.md) - [ParamMetadataTypeInfo](docs/ParamMetadataTypeInfo.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 3fa3df6..6a7fee7 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -327,6 +327,8 @@ from cyperf.models.pangp_encapsulation import PANGPEncapsulation from cyperf.models.pangp_settings import PANGPSettings from cyperf.models.ppk_pair import PPKPair +from cyperf.models.psp_range import PSPRange +from cyperf.models.psp_stack import PSPStack from cyperf.models.pair import Pair from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo diff --git a/cyperf/api/notifications_api.py b/cyperf/api/notifications_api.py index 51c4093..8331050 100644 --- a/cyperf/api/notifications_api.py +++ b/cyperf/api/notifications_api.py @@ -1796,7 +1796,7 @@ def start_notifications_dismiss( ) -> AsyncContext: """start_notifications_dismiss - Dismiss notifications. + Dismiss all notifications that match the specified filter. :param dismiss_operation: :type dismiss_operation: DismissOperation @@ -1859,7 +1859,7 @@ def start_notifications_dismiss_with_http_info( ) -> ApiResponse[AsyncContext]: """start_notifications_dismiss - Dismiss notifications. + Dismiss all notifications that match the specified filter. :param dismiss_operation: :type dismiss_operation: DismissOperation @@ -1922,7 +1922,7 @@ def start_notifications_dismiss_without_preload_content( ) -> RESTResponseType: """start_notifications_dismiss - Dismiss notifications. + Dismiss all notifications that match the specified filter. :param dismiss_operation: :type dismiss_operation: DismissOperation diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 88dea8a..d29722e 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -293,6 +293,8 @@ PANGPEncapsulation = DynamicModel('PANGPEncapsulation', (), {} ) PANGPSettings = DynamicModel('PANGPSettings', (), {} ) PPKPair = DynamicModel('PPKPair', (), {} ) +PSPRange = DynamicModel('PSPRange', (), {} ) +PSPStack = DynamicModel('PSPStack', (), {} ) Pair = DynamicModel('Pair', (), {} ) ParamMetadata = DynamicModel('ParamMetadata', (), {} ) ParamMetadataTypeInfo = DynamicModel('ParamMetadataTypeInfo', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 4c04338..a7516f4 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -293,6 +293,8 @@ class LinkNameException(Exception): from cyperf.models.pangp_encapsulation import PANGPEncapsulation from cyperf.models.pangp_settings import PANGPSettings from cyperf.models.ppk_pair import PPKPair +from cyperf.models.psp_range import PSPRange +from cyperf.models.psp_stack import PSPStack from cyperf.models.pair import Pair from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo diff --git a/cyperf/models/ip_network.py b/cyperf/models/ip_network.py index 221bdf1..60dd149 100644 --- a/cyperf/models/ip_network.py +++ b/cyperf/models/ip_network.py @@ -30,6 +30,7 @@ from cyperf.models.ip_range import IPRange from cyperf.models.ip_sec_stack import IPSecStack from cyperf.models.mac_dtls_stack import MacDtlsStack +from cyperf.models.psp_stack import PSPStack from cyperf.models.tunnel_stack import TunnelStack from cyperf.models.vx_lan_stack import VxLANStack from typing import Optional, Set, Union @@ -51,6 +52,7 @@ class IPNetwork(BaseModel): ip_ranges: Optional[List[IPRange]] = Field(default=None, alias="IPRanges") ip_sec_stacks: Optional[List[IPSecStack]] = Field(default=None, alias="IPSecStacks") mac_dtls_stacks: Optional[List[MacDtlsStack]] = Field(default=None, alias="MacDtlsStacks") + psp_stacks: Optional[List[PSPStack]] = Field(default=None, alias="PSPStacks") tunnel_stacks: Optional[List[TunnelStack]] = Field(default=None, alias="TunnelStacks") vx_lan_stacks: Optional[List[VxLANStack]] = Field(default=None, alias="VxLANStacks") active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the network segment is active.(default: true)") @@ -59,7 +61,7 @@ class IPNetwork(BaseModel): links: Optional[List[APILink]] = None min_agents: Optional[StrictInt] = Field(default=None, description="The minimum number of agents that should be assigned to this network segment in a valid test (default: 1).", alias="minAgents") streaming_cpu_allocation: Optional[StrictInt] = Field(default=None, description="The CPU percentage used by agents assigned to this network segment for streaming purposes (default: 25).", alias="streamingCPUAllocation") - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "DNSResolver", "DNSServer", "DUTConnections", "EmulatedRouter", "EthRange", "IPRanges", "IPSecStacks", "MacDtlsStacks", "TunnelStacks", "VxLANStacks", "active", "agentAssignments", "inheritStreamingCPUAllocation", "links", "minAgents", "streamingCPUAllocation"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "DNSResolver", "DNSServer", "DUTConnections", "EmulatedRouter", "EthRange", "IPRanges", "IPSecStacks", "MacDtlsStacks", "PSPStacks", "TunnelStacks", "VxLANStacks", "active", "agentAssignments", "inheritStreamingCPUAllocation", "links", "minAgents", "streamingCPUAllocation"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -140,6 +142,13 @@ def to_dict(self) -> Dict[str, Any]: if _item: _items.append(_item.to_dict()) _dict['MacDtlsStacks'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in psp_stacks (list) + _items = [] + if self.psp_stacks: + for _item in self.psp_stacks: + if _item: + _items.append(_item.to_dict()) + _dict['PSPStacks'] = _items # override the default output from pydantic by calling `to_dict()` of each item in tunnel_stacks (list) _items = [] if self.tunnel_stacks: @@ -189,6 +198,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IPRanges": ( [IPRange.from_dict(_item) for _item in obj.get("IPRanges", [])] if obj.get("IPRanges") is not None else None), "IPSecStacks": ( [IPSecStack.from_dict(_item) for _item in obj.get("IPSecStacks", [])] if obj.get("IPSecStacks") is not None else None), "MacDtlsStacks": ( [MacDtlsStack.from_dict(_item) for _item in obj.get("MacDtlsStacks", [])] if obj.get("MacDtlsStacks") is not None else None), + "PSPStacks": ( [PSPStack.from_dict(_item) for _item in obj.get("PSPStacks", [])] if obj.get("PSPStacks") is not None else None), "TunnelStacks": ( [TunnelStack.from_dict(_item) for _item in obj.get("TunnelStacks", [])] if obj.get("TunnelStacks") is not None else None), "VxLANStacks": ( [VxLANStack.from_dict(_item) for _item in obj.get("VxLANStacks", [])] if obj.get("VxLANStacks") is not None else None), "active": obj.get("active"), diff --git a/cyperf/models/psp_range.py b/cyperf/models/psp_range.py new file mode 100644 index 0000000..a9a94f5 --- /dev/null +++ b/cyperf/models/psp_range.py @@ -0,0 +1,143 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List +from typing_extensions import Annotated +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class PSPRange(BaseModel): + """ + The PSP tunnel range configuration for M×N tunnel mapping + """ # noqa: E501 + master_key0: StrictStr = Field(description="Master key for phase 0 (256-bit hex string).", alias="MasterKey0") + master_key1: StrictStr = Field(description="Master key for phase 1 (256-bit hex string).", alias="MasterKey1") + psp_range_name: Annotated[str, Field(strict=True)] = Field(alias="PSPRangeName") + psp_version: StrictStr = Field(description="PSP version: AES-GCM-128, AES-GMAC-128 (default: AES-GCM-128).", alias="PspVersion") + remote_inner_ip_count: StrictInt = Field(description="Total Remote Inner IP Count: RemoteTunnelIpCount * RemoteTunnelToInnerIpCountRatio", alias="RemoteInnerIpCount") + remote_inner_ip_incr: StrictStr = Field(description="The remote inner IP increment (default: 0.0.0.1).", alias="RemoteInnerIpIncr") + remote_inner_ip_start: Annotated[str, Field(strict=True)] = Field(description="The start IP for remote inner IPs.", alias="RemoteInnerIpStart") + remote_tunnel_ip_count: StrictInt = Field(description="The number of remote tunnel IPs (default: 1).", alias="RemoteTunnelIpCount") + remote_tunnel_ip_incr: StrictStr = Field(description="The remote tunnel IP increment (default: 0.0.0.1).", alias="RemoteTunnelIpIncr") + remote_tunnel_ip_start: Annotated[str, Field(strict=True)] = Field(description="The start IP for the remote tunnel endpoint.", alias="RemoteTunnelIpStart") + remote_tunnel_to_inner_ip_count_ratio: StrictInt = Field(description="The ratio between the number of remote Tunnel IPs and Remote Inner IPs - (default: 1).", alias="RemoteTunnelToInnerIpCountRatio") + spi_base: StrictInt = Field(description="Security Parameter Index base value (default: 256).", alias="SpiBase") + spi_incr: StrictInt = Field(description="SPI increment per tunnel (default: 1).", alias="SpiIncr") + total_tunnel_count: StrictInt = Field(description="Total tunnel count: OuterIP.Count × RemoteTunnelIpCount (M×N).", alias="TotalTunnelCount") + id: StrictStr + __properties: ClassVar[List[str]] = ["MasterKey0", "MasterKey1", "PSPRangeName", "PspVersion", "RemoteInnerIpCount", "RemoteInnerIpIncr", "RemoteInnerIpStart", "RemoteTunnelIpCount", "RemoteTunnelIpIncr", "RemoteTunnelIpStart", "RemoteTunnelToInnerIpCountRatio", "SpiBase", "SpiIncr", "TotalTunnelCount", "id"] + + @field_validator('psp_range_name') + def psp_range_name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|^[^\"\\]+$", value): + raise ValueError(r"must validate the regular expression /^$|^[^\"\\]+$/") + return value + + @field_validator('remote_inner_ip_start') + def remote_inner_ip_start_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)", value): + raise ValueError(r"must validate the regular expression /^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)/") + return value + + @field_validator('remote_tunnel_ip_start') + def remote_tunnel_ip_start_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)", value): + raise ValueError(r"must validate the regular expression /^$|(^(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))|(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])))$)/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PSPRange from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PSPRange from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "MasterKey0": obj.get("MasterKey0"), + "MasterKey1": obj.get("MasterKey1"), + "PSPRangeName": obj.get("PSPRangeName"), + "PspVersion": obj.get("PspVersion"), + "RemoteInnerIpCount": obj.get("RemoteInnerIpCount"), + "RemoteInnerIpIncr": obj.get("RemoteInnerIpIncr"), + "RemoteInnerIpStart": obj.get("RemoteInnerIpStart"), + "RemoteTunnelIpCount": obj.get("RemoteTunnelIpCount"), + "RemoteTunnelIpIncr": obj.get("RemoteTunnelIpIncr"), + "RemoteTunnelIpStart": obj.get("RemoteTunnelIpStart"), + "RemoteTunnelToInnerIpCountRatio": obj.get("RemoteTunnelToInnerIpCountRatio"), + "SpiBase": obj.get("SpiBase"), + "SpiIncr": obj.get("SpiIncr"), + "TotalTunnelCount": obj.get("TotalTunnelCount"), + "id": obj.get("id") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/psp_stack.py b/cyperf/models/psp_stack.py new file mode 100644 index 0000000..0f80787 --- /dev/null +++ b/cyperf/models/psp_stack.py @@ -0,0 +1,130 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from cyperf.models.api_link import APILink +from cyperf.models.ip_range import IPRange +from cyperf.models.psp_range import PSPRange +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class PSPStack(BaseModel): + """ + The PSP (PSP Security Protocol) stack for M×N tunnel mapping + """ # noqa: E501 + inner_ip_range: Optional[IPRange] = Field(default=None, alias="InnerIPRange") + outer_ip_range: Optional[IPRange] = Field(default=None, alias="OuterIPRange") + psp_range: Optional[PSPRange] = Field(default=None, alias="PSPRange") + psp_stack_name: Annotated[str, Field(strict=True)] = Field(alias="PSPStackName") + id: StrictStr + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["InnerIPRange", "OuterIPRange", "PSPRange", "PSPStackName", "id", "links"] + + @field_validator('psp_stack_name') + def psp_stack_name_validate_regular_expression(cls, value): + """Validates the regular expression""" + if not re.match(r"^$|^[^\"\\]+$", value): + raise ValueError(r"must validate the regular expression /^$|^[^\"\\]+$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PSPStack from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of inner_ip_range + if self.inner_ip_range: + _dict['InnerIPRange'] = self.inner_ip_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of outer_ip_range + if self.outer_ip_range: + _dict['OuterIPRange'] = self.outer_ip_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of psp_range + if self.psp_range: + _dict['PSPRange'] = self.psp_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PSPStack from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "InnerIPRange": IPRange.from_dict(obj["InnerIPRange"]) if obj.get("InnerIPRange") is not None else None, + "OuterIPRange": IPRange.from_dict(obj["OuterIPRange"]) if obj.get("OuterIPRange") is not None else None, + "PSPRange": PSPRange.from_dict(obj["PSPRange"]) if obj.get("PSPRange") is not None else None, + "PSPStackName": obj.get("PSPStackName"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/docs/IPNetwork.md b/docs/IPNetwork.md index dc15acf..6e00149 100644 --- a/docs/IPNetwork.md +++ b/docs/IPNetwork.md @@ -17,6 +17,7 @@ Name | Type | Description | Notes **ip_ranges** | [**List[IPRange]**](IPRange.md) | | [optional] **ip_sec_stacks** | [**List[IPSecStack]**](IPSecStack.md) | | [optional] **mac_dtls_stacks** | [**List[MacDtlsStack]**](MacDtlsStack.md) | | [optional] +**psp_stacks** | [**List[PSPStack]**](PSPStack.md) | | [optional] **tunnel_stacks** | [**List[TunnelStack]**](TunnelStack.md) | | [optional] **vx_lan_stacks** | [**List[VxLANStack]**](VxLANStack.md) | | [optional] **active** | **bool** | A flag indicating if the network segment is active.(default: true) | [optional] diff --git a/docs/NotificationsApi.md b/docs/NotificationsApi.md index 06e60e6..49435bc 100644 --- a/docs/NotificationsApi.md +++ b/docs/NotificationsApi.md @@ -454,7 +454,7 @@ This endpoint does not need any parameter. -Dismiss notifications. +Dismiss all notifications that match the specified filter. ### Example diff --git a/docs/PSPRange.md b/docs/PSPRange.md new file mode 100644 index 0000000..cb5a4eb --- /dev/null +++ b/docs/PSPRange.md @@ -0,0 +1,44 @@ +# PSPRange + +The PSP tunnel range configuration for M×N tunnel mapping + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**master_key0** | **str** | Master key for phase 0 (256-bit hex string). | +**master_key1** | **str** | Master key for phase 1 (256-bit hex string). | +**psp_range_name** | **str** | | +**psp_version** | **str** | PSP version: AES-GCM-128, AES-GMAC-128 (default: AES-GCM-128). | +**remote_inner_ip_count** | **int** | Total Remote Inner IP Count: RemoteTunnelIpCount * RemoteTunnelToInnerIpCountRatio | +**remote_inner_ip_incr** | **str** | The remote inner IP increment (default: 0.0.0.1). | +**remote_inner_ip_start** | **str** | The start IP for remote inner IPs. | +**remote_tunnel_ip_count** | **int** | The number of remote tunnel IPs (default: 1). | +**remote_tunnel_ip_incr** | **str** | The remote tunnel IP increment (default: 0.0.0.1). | +**remote_tunnel_ip_start** | **str** | The start IP for the remote tunnel endpoint. | +**remote_tunnel_to_inner_ip_count_ratio** | **int** | The ratio between the number of remote Tunnel IPs and Remote Inner IPs - (default: 1). | +**spi_base** | **int** | Security Parameter Index base value (default: 256). | +**spi_incr** | **int** | SPI increment per tunnel (default: 1). | +**total_tunnel_count** | **int** | Total tunnel count: OuterIP.Count × RemoteTunnelIpCount (M×N). | +**id** | **str** | | + +## Example + +```python +from cyperf.models.psp_range import PSPRange + +# TODO update the JSON string below +json = "{}" +# create an instance of PSPRange from a JSON string +psp_range_instance = PSPRange.from_json(json) +# print the JSON string representation of the object +print(PSPRange.to_json()) + +# convert the object into a dict +psp_range_dict = psp_range_instance.to_dict() +# create an instance of PSPRange from a dict +psp_range_from_dict = PSPRange.from_dict(psp_range_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PSPStack.md b/docs/PSPStack.md new file mode 100644 index 0000000..06dea01 --- /dev/null +++ b/docs/PSPStack.md @@ -0,0 +1,35 @@ +# PSPStack + +The PSP (PSP Security Protocol) stack for M×N tunnel mapping + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**inner_ip_range** | [**IPRange**](IPRange.md) | | [optional] +**outer_ip_range** | [**IPRange**](IPRange.md) | | [optional] +**psp_range** | [**PSPRange**](PSPRange.md) | | [optional] +**psp_stack_name** | **str** | | +**id** | **str** | | +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.psp_stack import PSPStack + +# TODO update the JSON string below +json = "{}" +# create an instance of PSPStack from a JSON string +psp_stack_instance = PSPStack.from_json(json) +# print the JSON string representation of the object +print(PSPStack.to_json()) + +# convert the object into a dict +psp_stack_dict = psp_stack_instance.to_dict() +# create an instance of PSPStack from a dict +psp_stack_from_dict = PSPStack.from_dict(psp_stack_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + From d26d01eb4c38c4609df6d38b51b06d8237ae5aa4 Mon Sep 17 00:00:00 2001 From: Daniel Muntean Date: Wed, 20 May 2026 02:09:05 -0600 Subject: [PATCH 08/26] Pull request #69: Added support to integrate appsec-automation regression repo with cyperf-api-wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from Support-to-integrate-with-appsec-automation to main Squashed commit of the following: commit 672b8005da53d9d5c74f35c6ddb9abf70e770d59 Author: dmuntean Date: Tue May 19 15:47:50 2026 +0300 Moved 2 regression specific functions into appsec-automation repository commit 15eeea09c9a8c7b7a9686f7e5c598c78f914758e Author: dmuntean Date: Mon May 18 15:18:46 2026 +0300 Small fixes to include latest code review. commit 385da09f6b6b826dbd98eb5ba7b9430143741d99 Author: dmuntean Date: Wed Apr 22 11:30:17 2026 +0300 Small fix for get_notifications() commit 9fdb3d7dd4ca92980533568eec2c3418385f0c31 Author: dmuntean Date: Mon Apr 20 11:31:12 2026 +0300 Removed hasattr logic commit 771b883f142bf9310fd11b41386df9bcb70765d7 Author: dmuntean Date: Mon Apr 20 11:13:19 2026 +0300 Removed functions using requests. Other small fixes. commit 8293355cdee6405551bb5f81835bcd7efffdd5eb Author: dmuntean Date: Thu Apr 9 13:51:55 2026 +0300 Added support to integrate appsec-automation regression repo --- cyperf/utils.py | 119 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 113 insertions(+), 6 deletions(-) diff --git a/cyperf/utils.py b/cyperf/utils.py index 07e342e..9b00ec9 100644 --- a/cyperf/utils.py +++ b/cyperf/utils.py @@ -6,7 +6,7 @@ from pprint import pprint import sys import cyperf - +from zipfile import ZipFile def format_warning_cli_issues(message, category, filename, lineno=None, line=None): return f"{category.__name__}: {message}\n" @@ -14,22 +14,25 @@ def format_warning_cli_issues(message, category, filename, lineno=None, line=Non warnings.formatwarning = format_warning_cli_issues - class TestRunner: """Convenience class for common test run operations""" - def __init__(self, controller, username="", password="", refresh_token="", license_server=None, license_user="", license_password=""): + def __init__(self, controller, username="", password="", refresh_token="", license_server=None, license_user="", license_password="", verify_ssl=True): self.controller = controller self.host = f'https://{controller}' + self.verify_ssl = verify_ssl self.license_server = license_server self.license_user = license_user self.license_password = license_password - + if username and password: + refresh_token = None + else: + refresh_token = refresh_token or os.environ.get("CYPERF_OFFLINE_TOKEN") self.configuration = cyperf.Configuration(host=self.host, refresh_token=refresh_token, username=username, password=password) - self.configuration.verify_ssl = False + self.configuration.verify_ssl = verify_ssl self.api_client = cyperf.ApiClient(self.configuration) self.added_license_servers = [] @@ -277,7 +280,7 @@ def start_test(self, session): except cyperf.ApiException as e: raise (e) - def wait_for_test_stop(self, session, test_monitor=None): + def wait_for_test_end(self, session=None, test_monitor=None): session_api = cyperf.SessionsApi(self.api_client) monitored_at = None wait_interval = 0.5 @@ -480,6 +483,108 @@ def set_model_armor_params(self, session, template_id, location, project_id, acc if not model_armor_applications_found: print("No Model Armor Applications found in the provided session.") + def get_agent_ips(self): + """Return the management IPs of all available agents.""" + agents = list(self.agents.values()) + return [agent.ip for agent in agents if agent.ip] + + def get_agent_ids_by_ips(self, agent_ips=None): + agents = list(self.agents.values()) + + if agent_ips is None: + agent_ips = [agent.ip for agent in agents if agent.ip] + + if isinstance(agent_ips, str): + agent_ips = [agent_ips] + + agent_ids = [] + + for agent_ip in agent_ips: + match = next((a for a in agents if a.ip == agent_ip), None) + + if match: + print(f'agent_ip: {agent_ip}, agent_id: {match.id}') + agent_ids.append(match.id) + + return agent_ids + + def set_test_duration(self, session, duration_seconds): + value = int(float(duration_seconds)) if isinstance(duration_seconds, str) else int(duration_seconds) + + if len(session.config.config.traffic_profiles) > 0 and session.config.config.traffic_profiles[0].active: + tp = session.config.config.traffic_profiles[0] + tp.objectives_and_timeline.primary_objective.timeline[1].duration = value + tp.objectives_and_timeline.update() + + if len(session.config.config.attack_profiles) > 0 and session.config.config.attack_profiles[0].active: + ap = session.config.config.attack_profiles[0] + ap.objectives_and_timeline.timeline_segments[0].duration = value + ap.objectives_and_timeline.update() + + self.testDuration = value + return value + + def get_test_duration(self, session): + traffic_duration = 0 + attack_duration = 0 + + if len(session.config.config.traffic_profiles) == 0 and len(session.config.config.attack_profiles) == 0: + return 0 + + if len(session.config.config.traffic_profiles) != 0 and session.config.config.traffic_profiles[0].active: + traffic_duration = \ + session.config.config.traffic_profiles[0].objectives_and_timeline.primary_objective.timeline[1].duration + + if len(session.config.config.attack_profiles) != 0 and session.config.config.attack_profiles[0].active: + attack_duration = session.config.config.attack_profiles[0].objectives_and_timeline.timeline_segments[ + 0].duration + + test_duration = max(traffic_duration, attack_duration) + self.testDuration = test_duration + return test_duration + + def get_csvs_for_result(self, result_id, download_path): + print("Get CSV statistics...") + os.makedirs(download_path, exist_ok=True) + + reports_api = cyperf.ReportsApi(self.api_client) + op = reports_api.start_result_generate_csv(result_id) + + try: + result = op.await_completion() + except cyperf.ApiException as e: + raise e + + zip_path = None + if isinstance(result, dict): + zip_path = result.get("filePath") or result.get("path") + elif isinstance(result, str): + zip_path = result + + if not zip_path: + raise RuntimeError(f"Could not determine CSV zip path from result: {result}") + + with ZipFile(zip_path, "r") as zf: + zf.extractall(download_path) + + print(f"CSV files extracted to: {download_path}") + return download_path + + def set_tcp_sack(self, session, enabled=True): + value = str(enabled).lower() == 'true' if isinstance(enabled, str) else bool(enabled) + updated = False + + for traffic_profile in session.config.config.traffic_profiles: + for application in traffic_profile.applications: + for connection in application.connections: + tcp = getattr(connection, 'tcp_characteristics', None) + if tcp: + tcp.use_sack_when_permitted = value + tcp.update() + updated = True + + return updated + def parse_cli_options(extra_options=[]): """Can be used to get parameters from the CLI or env vars that are broadly useful for CLI tests""" import argparse @@ -528,3 +633,5 @@ def create_api_client_cli(verify_ssl=True): password=cli_args.password) configuration.verify_ssl = verify_ssl return cyperf.ApiClient(configuration) + +utils = TestRunner \ No newline at end of file From 26ea442a0e2895f72ec258cbac18807dffd68787 Mon Sep 17 00:00:00 2001 From: Marian-Madalin Stanciu Date: Wed, 27 May 2026 06:35:57 -0600 Subject: [PATCH 09/26] Pull request #74: support for Sequences Merge in ISGAPPSEC/cyperf-api-wrapper from multivalue-dev to main Squashed commit of the following: commit 843e10c082e5e55eb451827f4d2670ccefb67638 Author: Marian-Madalin Stanciu Date: Wed May 27 13:07:47 2026 +0300 sample script for sequence/dut ranges commit 025e057b35c34df1c8afee5441f66005f700ac81 Author: Marian-Madalin Stanciu Date: Tue May 26 13:20:44 2026 +0300 multivalue support --- .openapi-generator/FILES | 285 ++++++++++--- README.md | 10 + cyperf/__init__.py | 10 + cyperf/dynamic_models/__init__.py | 10 + cyperf/models/__init__.py | 10 + cyperf/models/action.py | 5 +- cyperf/models/action_base.py | 5 +- cyperf/models/address.py | 122 ++++++ cyperf/models/application_profile.py | 5 +- cyperf/models/attack_action.py | 5 +- cyperf/models/attack_profile.py | 5 +- cyperf/models/custom_sequence.py | 122 ++++++ cyperf/models/dut_network.py | 8 +- cyperf/models/dut_range.py | 123 ++++++ cyperf/models/emulated_router_range.py | 8 +- cyperf/models/eth_range.py | 8 +- cyperf/models/ip_range.py | 8 +- cyperf/models/local_subnet_config.py | 6 +- cyperf/models/metadata.py | 4 +- cyperf/models/pangp_encapsulation.py | 4 +- cyperf/models/playlist_sequencing_method.py | 40 ++ cyperf/models/remote_subnet_config.py | 6 +- cyperf/models/sequence_data_types.py | 39 ++ cyperf/models/sequence_value.py | 123 ++++++ cyperf/models/sequence_value_types.py | 38 ++ cyperf/models/simple_sequence_value.py | 112 +++++ cyperf/models/single_value.py | 99 +++++ cyperf/models/stream_profile.py | 8 +- cyperf/models/sub_step.py | 120 ++++++ cyperf/models/traffic_profile_base.py | 5 +- docs/Action.md | 1 + docs/ActionBase.md | 1 + docs/Address.md | 32 ++ docs/ApplicationProfile.md | 1 + docs/AttackAction.md | 1 + docs/AttackProfile.md | 1 + docs/CustomSequence.md | 32 ++ docs/DUTNetwork.md | 1 + docs/DUTRange.md | 34 ++ docs/EmulatedRouterRange.md | 1 + docs/EthRange.md | 1 + docs/IPRange.md | 1 + docs/LocalSubnetConfig.md | 1 + docs/Metadata.md | 1 + docs/PANGPEncapsulation.md | 1 + docs/PlaylistSequencingMethod.md | 17 + docs/RemoteSubnetConfig.md | 1 + docs/SequenceDataTypes.md | 14 + docs/SequenceValue.md | 35 ++ docs/SequenceValueTypes.md | 12 + docs/SimpleSequenceValue.md | 31 ++ docs/SingleValue.md | 32 ++ docs/StreamProfile.md | 1 + docs/SubStep.md | 32 ++ docs/TrafficProfileBase.md | 1 + samples/sample_sequences_examples.py | 445 ++++++++++++++++++++ 56 files changed, 1995 insertions(+), 89 deletions(-) create mode 100644 cyperf/models/address.py create mode 100644 cyperf/models/custom_sequence.py create mode 100644 cyperf/models/dut_range.py create mode 100644 cyperf/models/playlist_sequencing_method.py create mode 100644 cyperf/models/sequence_data_types.py create mode 100644 cyperf/models/sequence_value.py create mode 100644 cyperf/models/sequence_value_types.py create mode 100644 cyperf/models/simple_sequence_value.py create mode 100644 cyperf/models/single_value.py create mode 100644 cyperf/models/sub_step.py create mode 100644 docs/Address.md create mode 100644 docs/CustomSequence.md create mode 100644 docs/DUTRange.md create mode 100644 docs/PlaylistSequencingMethod.md create mode 100644 docs/SequenceDataTypes.md create mode 100644 docs/SequenceValue.md create mode 100644 docs/SequenceValueTypes.md create mode 100644 docs/SimpleSequenceValue.md create mode 100644 docs/SingleValue.md create mode 100644 docs/SubStep.md create mode 100644 samples/sample_sequences_examples.py diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index fce2375..2a446cc 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -1,8 +1,10 @@ .github/workflows/python.yml .gitignore .gitlab-ci.yml +.openapi-generator-ignore .travis.yml README.md +cyperf/LICENSE cyperf/__init__.py cyperf/api/__init__.py cyperf/api/agents_api.py @@ -30,9 +32,15 @@ cyperf/exceptions.py cyperf/models/__init__.py cyperf/models/action.py cyperf/models/action_base.py +cyperf/models/action_input.py +cyperf/models/action_input_find_param.py +cyperf/models/action_metadata.py cyperf/models/activation_code_info.py cyperf/models/activation_code_list_request.py cyperf/models/activation_code_request.py +cyperf/models/add_action_info.py +cyperf/models/add_input.py +cyperf/models/address.py cyperf/models/advanced_settings.py cyperf/models/agent.py cyperf/models/agent_assignment_by_port.py @@ -49,39 +57,45 @@ cyperf/models/api_link.py cyperf/models/api_relationship.py cyperf/models/app_exchange.py cyperf/models/app_flow.py +cyperf/models/app_flow_desc.py +cyperf/models/app_flow_input.py +cyperf/models/app_flow_input_find_param.py cyperf/models/app_id.py cyperf/models/app_mode.py cyperf/models/application.py cyperf/models/application_profile.py cyperf/models/application_type.py cyperf/models/appsec_app.py +cyperf/models/appsec_app_metadata.py +cyperf/models/appsec_app_metadata_keywords_inner.py cyperf/models/appsec_attack.py cyperf/models/appsec_config.py cyperf/models/archive_info.py cyperf/models/array_v2_element_metadata.py cyperf/models/async_context.py -cyperf/models/async_operation_response.py cyperf/models/attack.py cyperf/models/attack_action.py +cyperf/models/attack_metadata.py cyperf/models/attack_objectives_and_timeline.py cyperf/models/attack_profile.py cyperf/models/attack_timeline_segment.py cyperf/models/attack_track.py cyperf/models/auth_method_type.py cyperf/models/auth_profile.py -cyperf/models/auth_realms_keysight_protocol_openid_connect_token_post200_response.py +cyperf/models/auth_profile_metadata.py cyperf/models/auth_settings.py +cyperf/models/authenticate200_response.py cyperf/models/authentication_settings.py cyperf/models/automatic_ip_type.py cyperf/models/broker.py +cyperf/models/capture_input.py +cyperf/models/capture_input_find_param.py cyperf/models/capture_settings.py cyperf/models/category.py cyperf/models/category_filter.py cyperf/models/category_value.py cyperf/models/cert_config.py cyperf/models/certificate.py -cyperf/models/change_aggregation_mode_operation.py -cyperf/models/change_link_state_operation.py cyperf/models/chassis_info.py cyperf/models/choice.py cyperf/models/cipher_tls12.py @@ -90,12 +104,13 @@ cyperf/models/cisco_any_connect_settings.py cyperf/models/cisco_encapsulation.py cyperf/models/clear_ports_ownership_operation.py cyperf/models/command.py +cyperf/models/command_metadata.py cyperf/models/compute_node.py cyperf/models/config.py cyperf/models/config_category.py cyperf/models/config_id.py cyperf/models/config_metadata.py -cyperf/models/config_metadata_config_data_value.py +cyperf/models/config_sub_category.py cyperf/models/config_validation.py cyperf/models/conflict.py cyperf/models/connection.py @@ -105,22 +120,29 @@ cyperf/models/controller.py cyperf/models/counted_feature_consumer.py cyperf/models/counted_feature_stats.py cyperf/models/create_app_operation.py +cyperf/models/create_app_or_attack_operation_input.py cyperf/models/custom_dashboards.py cyperf/models/custom_import_handler.py +cyperf/models/custom_sequence.py cyperf/models/custom_stat.py cyperf/models/dashboard.py cyperf/models/data_type.py cyperf/models/data_type_values_inner.py cyperf/models/definition.py +cyperf/models/delete_input.py cyperf/models/dh_p1_group.py cyperf/models/diagnostic_component.py cyperf/models/diagnostic_component_context.py cyperf/models/diagnostic_options.py cyperf/models/disk_usage.py +cyperf/models/dismiss_operation.py cyperf/models/dns_resolver.py cyperf/models/dns_server.py cyperf/models/dtls_settings.py cyperf/models/dut_network.py +cyperf/models/dut_range.py +cyperf/models/edit_action_input.py +cyperf/models/edit_app_operation.py cyperf/models/effective_ports.py cyperf/models/emulated_router.py cyperf/models/emulated_router_range.py @@ -135,7 +157,10 @@ cyperf/models/error_description.py cyperf/models/error_response.py cyperf/models/esp_over_udp_settings.py cyperf/models/eth_range.py +cyperf/models/eula_details.py +cyperf/models/eula_summary.py cyperf/models/exchange.py +cyperf/models/exchange_order.py cyperf/models/exchange_payload.py cyperf/models/expected_disk_space.py cyperf/models/expected_disk_space_message.py @@ -156,6 +181,7 @@ cyperf/models/file_metadata.py cyperf/models/file_value.py cyperf/models/filter.py cyperf/models/filtered_stat.py +cyperf/models/find_param_matches_operation.py cyperf/models/fortinet_encapsulation.py cyperf/models/fortinet_settings.py cyperf/models/fulfillment_request.py @@ -163,69 +189,79 @@ cyperf/models/generate_all_operation.py cyperf/models/generate_csv_reports_operation.py cyperf/models/generate_pdf_report_operation.py cyperf/models/generic_file.py -cyperf/models/get_agent_tags200_response.py -cyperf/models/get_agent_tags200_response_one_of.py cyperf/models/get_agents200_response.py cyperf/models/get_agents200_response_one_of.py -cyperf/models/get_application_types200_response.py -cyperf/models/get_application_types200_response_one_of.py -cyperf/models/get_apps200_response.py -cyperf/models/get_apps200_response_one_of.py +cyperf/models/get_agents_tags200_response.py +cyperf/models/get_agents_tags200_response_one_of.py +cyperf/models/get_apps_operation.py cyperf/models/get_async_operation_result200_response.py -cyperf/models/get_attacks200_response.py -cyperf/models/get_attacks200_response_one_of.py cyperf/models/get_attacks_operation.py -cyperf/models/get_auth_profiles200_response.py -cyperf/models/get_auth_profiles200_response_one_of.py cyperf/models/get_brokers200_response.py cyperf/models/get_brokers200_response_one_of.py cyperf/models/get_categories_operation.py -cyperf/models/get_certificates200_response.py -cyperf/models/get_certificates200_response_one_of.py +cyperf/models/get_config_categorie_subcategories200_response.py +cyperf/models/get_config_categorie_subcategories200_response_one_of.py cyperf/models/get_config_categories200_response.py cyperf/models/get_config_categories200_response_one_of.py cyperf/models/get_configs200_response.py cyperf/models/get_configs200_response_one_of.py -cyperf/models/get_consumers200_response.py -cyperf/models/get_consumers200_response_one_of.py cyperf/models/get_controllers200_response.py cyperf/models/get_controllers200_response_one_of.py -cyperf/models/get_custom_import_operations200_response.py -cyperf/models/get_custom_import_operations200_response_one_of.py -cyperf/models/get_files200_response.py -cyperf/models/get_files200_response_one_of.py -cyperf/models/get_http_profiles200_response.py -cyperf/models/get_http_profiles200_response_one_of.py +cyperf/models/get_disk_usage_consumers200_response.py +cyperf/models/get_disk_usage_consumers200_response_one_of.py cyperf/models/get_license_async_operation_result200_response.py cyperf/models/get_license_servers200_response.py cyperf/models/get_license_servers200_response_one_of.py -cyperf/models/get_meta200_response.py -cyperf/models/get_meta200_response_one_of.py cyperf/models/get_notifications200_response.py cyperf/models/get_notifications200_response_one_of.py -cyperf/models/get_plugins200_response.py -cyperf/models/get_plugins200_response_one_of.py -cyperf/models/get_result_tags200_response.py -cyperf/models/get_result_tags200_response_one_of.py +cyperf/models/get_resources_application_types200_response.py +cyperf/models/get_resources_application_types200_response_one_of.py +cyperf/models/get_resources_apps200_response.py +cyperf/models/get_resources_apps200_response_one_of.py +cyperf/models/get_resources_attacks200_response.py +cyperf/models/get_resources_attacks200_response_one_of.py +cyperf/models/get_resources_auth_profiles200_response.py +cyperf/models/get_resources_auth_profiles200_response_one_of.py +cyperf/models/get_resources_certificates200_response.py +cyperf/models/get_resources_certificates200_response_one_of.py +cyperf/models/get_resources_custom_import_operations200_response.py +cyperf/models/get_resources_custom_import_operations200_response_one_of.py +cyperf/models/get_resources_http_profiles200_response.py +cyperf/models/get_resources_http_profiles200_response_one_of.py +cyperf/models/get_resources_llm_api_profiles200_response.py +cyperf/models/get_resources_llm_api_profiles200_response_one_of.py +cyperf/models/get_result_files200_response.py +cyperf/models/get_result_files200_response_one_of.py +cyperf/models/get_result_stats200_response.py +cyperf/models/get_result_stats200_response_one_of.py cyperf/models/get_results200_response.py cyperf/models/get_results200_response_one_of.py +cyperf/models/get_results_tags200_response.py +cyperf/models/get_results_tags200_response_one_of.py +cyperf/models/get_session_meta200_response.py +cyperf/models/get_session_meta200_response_one_of.py cyperf/models/get_sessions200_response.py cyperf/models/get_sessions200_response_one_of.py -cyperf/models/get_stats200_response.py -cyperf/models/get_stats200_response_one_of.py +cyperf/models/get_stats_plugins200_response.py +cyperf/models/get_stats_plugins200_response_one_of.py cyperf/models/get_strikes_operation.py +cyperf/models/group_tls13.py cyperf/models/hash_p1_algorithm.py cyperf/models/hash_p2_algorithm.py cyperf/models/health_check_config.py cyperf/models/health_issue.py cyperf/models/host_id.py cyperf/models/http_profile.py +cyperf/models/http_req_meta.py +cyperf/models/http_res_meta.py cyperf/models/http_version.py cyperf/models/id_p_signature_algo.py +cyperf/models/identification_config.py cyperf/models/import_all_operation.py cyperf/models/import_offline_license_result.py cyperf/models/ingest_operation.py cyperf/models/inner_ip_range.py +cyperf/models/inner_ip_sec_range.py cyperf/models/interface.py cyperf/models/ip_mask.py cyperf/models/ip_network.py @@ -238,12 +274,15 @@ cyperf/models/license.py cyperf/models/license_receipt.py cyperf/models/license_server_metadata.py cyperf/models/link.py +cyperf/models/llmapi_profile.py cyperf/models/load_config_operation.py cyperf/models/local_subnet_config.py cyperf/models/log_config.py cyperf/models/log_level.py cyperf/models/mac_dtls_stack.py +cyperf/models/mapping_type.py cyperf/models/marked_as_deleted.py +cyperf/models/md2_tlv.py cyperf/models/media_file.py cyperf/models/media_track.py cyperf/models/metadata.py @@ -251,8 +290,11 @@ cyperf/models/mos_mode.py cyperf/models/name_id_format.py cyperf/models/name_server.py cyperf/models/network_mapping.py +cyperf/models/network_meshing.py cyperf/models/network_profile.py cyperf/models/network_segment_base.py +cyperf/models/nodes_by_controller.py +cyperf/models/nodes_power_cycle_operation.py cyperf/models/notification.py cyperf/models/notification_counts.py cyperf/models/ntp_info.py @@ -276,6 +318,8 @@ cyperf/models/param_metadata_type_info_string.py cyperf/models/param_source_type.py cyperf/models/param_type.py cyperf/models/parameter.py +cyperf/models/parameter_match.py +cyperf/models/parameter_meta.py cyperf/models/parameter_metadata.py cyperf/models/params.py cyperf/models/params_enum.py @@ -283,20 +327,33 @@ cyperf/models/payload_meta.py cyperf/models/payload_metadata.py cyperf/models/pep_dut.py cyperf/models/pfs_p2_group.py +cyperf/models/playlist_metadata.py +cyperf/models/playlist_sequencing_method.py cyperf/models/plugin.py cyperf/models/plugin_stats.py cyperf/models/port.py cyperf/models/port_settings.py +cyperf/models/ports_by_controller.py +cyperf/models/ports_by_node.py +cyperf/models/ppk_pair.py cyperf/models/prepare_test_operation.py cyperf/models/prepared_test_options.py cyperf/models/prf_p1_algorithm.py cyperf/models/protected_subnet_config.py +cyperf/models/psp_range.py +cyperf/models/psp_stack.py +cyperf/models/quic_profile.py +cyperf/models/quic_version.py cyperf/models/reboot_operation_input.py cyperf/models/reboot_ports_operation.py cyperf/models/reference.py +cyperf/models/regex_match.py cyperf/models/release_operation_input.py cyperf/models/remote_access.py cyperf/models/remote_subnet_config.py +cyperf/models/rename_input.py +cyperf/models/reorder_action_input.py +cyperf/models/reorder_exchanges_input.py cyperf/models/replay_capture.py cyperf/models/required_file_types.py cyperf/models/reserve_operation_input.py @@ -311,16 +368,26 @@ cyperf/models/scenario.py cyperf/models/secondary_objective.py cyperf/models/segment_type.py cyperf/models/selected_env.py +cyperf/models/sequence_data_types.py +cyperf/models/sequence_value.py +cyperf/models/sequence_value_types.py cyperf/models/session.py cyperf/models/session_reuse_method_tls12.py cyperf/models/session_reuse_method_tls13.py +cyperf/models/set_aggregation_mode_operation.py +cyperf/models/set_controller_app_operation.py cyperf/models/set_dpdk_mode_operation_input.py +cyperf/models/set_link_state_operation.py +cyperf/models/set_nodes_app_operation.py cyperf/models/set_ntp_operation_input.py +cyperf/models/simple_sequence_value.py cyperf/models/simulated_id_p.py +cyperf/models/single_value.py cyperf/models/snapshot.py +cyperf/models/snowflake_exporter.py cyperf/models/sort_body_field.py cyperf/models/specific_objective.py -cyperf/models/start_root_batch_delete_request_inner.py +cyperf/models/start_agents_batch_delete_request_inner.py cyperf/models/stateless_stream.py cyperf/models/static_arp_entry.py cyperf/models/stats_result.py @@ -329,12 +396,13 @@ cyperf/models/step_segment.py cyperf/models/stream_direction.py cyperf/models/stream_payload_type.py cyperf/models/stream_profile.py +cyperf/models/sub_step.py cyperf/models/supported_group_tls13.py -cyperf/models/switch_app_operation.py cyperf/models/system_info.py cyperf/models/tcp_profile.py cyperf/models/test_info.py cyperf/models/test_state_changed_operation.py +cyperf/models/test_usage.py cyperf/models/time_value.py cyperf/models/timeline_segment.py cyperf/models/timeline_segment_base.py @@ -358,18 +426,30 @@ cyperf/models/type_media_metadata.py cyperf/models/type_string_metadata.py cyperf/models/udp_profile.py cyperf/models/update_network_mapping.py +cyperf/models/update_port_tags_operation.py cyperf/models/validation_message.py cyperf/models/version.py cyperf/models/vlan_range.py +cyperf/models/vlan_type.py +cyperf/models/vx_lan_range.py +cyperf/models/vx_lan_stack.py +cyperf/models/vx_lanid.py cyperf/py.typed cyperf/rest.py +cyperf/utils.py docs/APILink.md docs/APIRelationship.md docs/Action.md docs/ActionBase.md +docs/ActionInput.md +docs/ActionInputFindParam.md +docs/ActionMetadata.md docs/ActivationCodeInfo.md docs/ActivationCodeListRequest.md docs/ActivationCodeRequest.md +docs/AddActionInfo.md +docs/AddInput.md +docs/Address.md docs/AdvancedSettings.md docs/Agent.md docs/AgentAssignmentByPort.md @@ -385,6 +465,9 @@ docs/AgentsApi.md docs/AgentsGroup.md docs/AppExchange.md docs/AppFlow.md +docs/AppFlowDesc.md +docs/AppFlowInput.md +docs/AppFlowInputFindParam.md docs/AppId.md docs/AppMode.md docs/Application.md @@ -392,6 +475,8 @@ docs/ApplicationProfile.md docs/ApplicationResourcesApi.md docs/ApplicationType.md docs/AppsecApp.md +docs/AppsecAppMetadata.md +docs/AppsecAppMetadataKeywordsInner.md docs/AppsecAttack.md docs/AppsecConfig.md docs/ArchiveInfo.md @@ -399,27 +484,29 @@ docs/ArrayV2ElementMetadata.md docs/AsyncContext.md docs/Attack.md docs/AttackAction.md +docs/AttackMetadata.md docs/AttackObjectivesAndTimeline.md docs/AttackProfile.md docs/AttackTimelineSegment.md docs/AttackTrack.md docs/AuthMethodType.md docs/AuthProfile.md -docs/AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.md +docs/AuthProfileMetadata.md docs/AuthSettings.md +docs/Authenticate200Response.md docs/AuthenticationSettings.md docs/AuthorizationApi.md docs/AutomaticIpType.md docs/Broker.md docs/BrokersApi.md +docs/CaptureInput.md +docs/CaptureInputFindParam.md docs/CaptureSettings.md docs/Category.md docs/CategoryFilter.md docs/CategoryValue.md docs/CertConfig.md docs/Certificate.md -docs/ChangeAggregationModeOperation.md -docs/ChangeLinkStateOperation.md docs/ChassisInfo.md docs/Choice.md docs/CipherTLS12.md @@ -428,12 +515,13 @@ docs/CiscoAnyConnectSettings.md docs/CiscoEncapsulation.md docs/ClearPortsOwnershipOperation.md docs/Command.md +docs/CommandMetadata.md docs/ComputeNode.md docs/Config.md docs/ConfigCategory.md docs/ConfigId.md docs/ConfigMetadata.md -docs/ConfigMetadataConfigDataValue.md +docs/ConfigSubCategory.md docs/ConfigValidation.md docs/ConfigurationsApi.md docs/Conflict.md @@ -444,25 +532,32 @@ docs/Controller.md docs/CountedFeatureConsumer.md docs/CountedFeatureStats.md docs/CreateAppOperation.md +docs/CreateAppOrAttackOperationInput.md docs/CustomDashboards.md docs/CustomImportHandler.md +docs/CustomSequence.md docs/CustomStat.md docs/DNSResolver.md docs/DNSServer.md docs/DTLSSettings.md docs/DUTNetwork.md +docs/DUTRange.md docs/Dashboard.md docs/DataMigrationApi.md docs/DataType.md docs/DataTypeValuesInner.md docs/Definition.md +docs/DeleteInput.md docs/DhP1Group.md docs/DiagnosticComponent.md docs/DiagnosticComponentContext.md docs/DiagnosticOptions.md docs/DiagnosticsApi.md docs/DiskUsage.md +docs/DismissOperation.md docs/ESPOverUDPSettings.md +docs/EditActionInput.md +docs/EditAppOperation.md docs/EffectivePorts.md docs/EmulatedRouter.md docs/EmulatedRouterRange.md @@ -476,7 +571,10 @@ docs/Enum.md docs/ErrorDescription.md docs/ErrorResponse.md docs/EthRange.md +docs/EulaDetails.md +docs/EulaSummary.md docs/Exchange.md +docs/ExchangeOrder.md docs/ExchangePayload.md docs/ExpectedDiskSpace.md docs/ExpectedDiskSpaceMessage.md @@ -497,6 +595,7 @@ docs/FileMetadata.md docs/FileValue.md docs/Filter.md docs/FilteredStat.md +docs/FindParamMatchesOperation.md docs/FortinetEncapsulation.md docs/FortinetSettings.md docs/FulfillmentRequest.md @@ -504,58 +603,66 @@ docs/GenerateAllOperation.md docs/GenerateCSVReportsOperation.md docs/GeneratePDFReportOperation.md docs/GenericFile.md -docs/GetAgentTags200Response.md -docs/GetAgentTags200ResponseOneOf.md docs/GetAgents200Response.md docs/GetAgents200ResponseOneOf.md -docs/GetApplicationTypes200Response.md -docs/GetApplicationTypes200ResponseOneOf.md -docs/GetApps200Response.md -docs/GetApps200ResponseOneOf.md +docs/GetAgentsTags200Response.md +docs/GetAgentsTags200ResponseOneOf.md +docs/GetAppsOperation.md docs/GetAsyncOperationResult200Response.md -docs/GetAttacks200Response.md -docs/GetAttacks200ResponseOneOf.md docs/GetAttacksOperation.md -docs/GetAuthProfiles200Response.md -docs/GetAuthProfiles200ResponseOneOf.md docs/GetBrokers200Response.md docs/GetBrokers200ResponseOneOf.md docs/GetCategoriesOperation.md -docs/GetCertificates200Response.md -docs/GetCertificates200ResponseOneOf.md +docs/GetConfigCategorieSubcategories200Response.md +docs/GetConfigCategorieSubcategories200ResponseOneOf.md docs/GetConfigCategories200Response.md docs/GetConfigCategories200ResponseOneOf.md docs/GetConfigs200Response.md docs/GetConfigs200ResponseOneOf.md -docs/GetConsumers200Response.md -docs/GetConsumers200ResponseOneOf.md docs/GetControllers200Response.md docs/GetControllers200ResponseOneOf.md -docs/GetCustomImportOperations200Response.md -docs/GetCustomImportOperations200ResponseOneOf.md -docs/GetFiles200Response.md -docs/GetFiles200ResponseOneOf.md -docs/GetHttpProfiles200Response.md -docs/GetHttpProfiles200ResponseOneOf.md +docs/GetDiskUsageConsumers200Response.md +docs/GetDiskUsageConsumers200ResponseOneOf.md docs/GetLicenseAsyncOperationResult200Response.md docs/GetLicenseServers200Response.md docs/GetLicenseServers200ResponseOneOf.md -docs/GetMeta200Response.md -docs/GetMeta200ResponseOneOf.md docs/GetNotifications200Response.md docs/GetNotifications200ResponseOneOf.md -docs/GetPlugins200Response.md -docs/GetPlugins200ResponseOneOf.md -docs/GetResultTags200Response.md -docs/GetResultTags200ResponseOneOf.md +docs/GetResourcesApplicationTypes200Response.md +docs/GetResourcesApplicationTypes200ResponseOneOf.md +docs/GetResourcesApps200Response.md +docs/GetResourcesApps200ResponseOneOf.md +docs/GetResourcesAttacks200Response.md +docs/GetResourcesAttacks200ResponseOneOf.md +docs/GetResourcesAuthProfiles200Response.md +docs/GetResourcesAuthProfiles200ResponseOneOf.md +docs/GetResourcesCertificates200Response.md +docs/GetResourcesCertificates200ResponseOneOf.md +docs/GetResourcesCustomImportOperations200Response.md +docs/GetResourcesCustomImportOperations200ResponseOneOf.md +docs/GetResourcesHttpProfiles200Response.md +docs/GetResourcesHttpProfiles200ResponseOneOf.md +docs/GetResourcesLlmApiProfiles200Response.md +docs/GetResourcesLlmApiProfiles200ResponseOneOf.md +docs/GetResultFiles200Response.md +docs/GetResultFiles200ResponseOneOf.md +docs/GetResultStats200Response.md +docs/GetResultStats200ResponseOneOf.md docs/GetResults200Response.md docs/GetResults200ResponseOneOf.md +docs/GetResultsTags200Response.md +docs/GetResultsTags200ResponseOneOf.md +docs/GetSessionMeta200Response.md +docs/GetSessionMeta200ResponseOneOf.md docs/GetSessions200Response.md docs/GetSessions200ResponseOneOf.md -docs/GetStats200Response.md -docs/GetStats200ResponseOneOf.md +docs/GetStatsPlugins200Response.md +docs/GetStatsPlugins200ResponseOneOf.md docs/GetStrikesOperation.md +docs/GroupTLS13.md docs/HTTPProfile.md +docs/HTTPReqMeta.md +docs/HTTPResMeta.md docs/HTTPVersion.md docs/HashP1Algorithm.md docs/HashP2Algorithm.md @@ -567,14 +674,17 @@ docs/IPRange.md docs/IPSecRange.md docs/IPSecStack.md docs/IdPSignatureAlgo.md +docs/IdentificationConfig.md docs/ImportAllOperation.md docs/ImportOfflineLicenseResult.md docs/IngestOperation.md docs/InnerIPRange.md +docs/InnerIPSecRange.md docs/Interface.md docs/IpMask.md docs/IpPreference.md docs/IpVer.md +docs/LLMAPIProfile.md docs/License.md docs/LicenseReceipt.md docs/LicenseServerMetadata.md @@ -586,7 +696,9 @@ docs/LocalSubnetConfig.md docs/LogConfig.md docs/LogLevel.md docs/MacDtlsStack.md +docs/MappingType.md docs/MarkedAsDeleted.md +docs/Md2Tlv.md docs/MediaFile.md docs/MediaTrack.md docs/Metadata.md @@ -594,8 +706,11 @@ docs/MosMode.md docs/NameIdFormat.md docs/NameServer.md docs/NetworkMapping.md +docs/NetworkMeshing.md docs/NetworkProfile.md docs/NetworkSegmentBase.md +docs/NodesByController.md +docs/NodesPowerCycleOperation.md docs/Notification.md docs/NotificationCounts.md docs/NotificationsApi.md @@ -609,6 +724,9 @@ docs/P1Config.md docs/P2Config.md docs/PANGPEncapsulation.md docs/PANGPSettings.md +docs/PPKPair.md +docs/PSPRange.md +docs/PSPStack.md docs/Pair.md docs/ParamMetadata.md docs/ParamMetadataTypeInfo.md @@ -620,6 +738,8 @@ docs/ParamMetadataTypeInfoString.md docs/ParamSourceType.md docs/ParamType.md docs/Parameter.md +docs/ParameterMatch.md +docs/ParameterMeta.md docs/ParameterMetadata.md docs/Params.md docs/ParamsEnum.md @@ -627,23 +747,33 @@ docs/PayloadMeta.md docs/PayloadMetadata.md docs/PepDUT.md docs/PfsP2Group.md +docs/PlaylistMetadata.md +docs/PlaylistSequencingMethod.md docs/Plugin.md docs/PluginStats.md docs/Port.md docs/PortSettings.md +docs/PortsByController.md +docs/PortsByNode.md docs/PrepareTestOperation.md docs/PreparedTestOptions.md docs/PrfP1Algorithm.md docs/ProtectedSubnetConfig.md +docs/QUICProfile.md +docs/QUICVersion.md docs/RTPEncryptionMode.md docs/RTPProfile.md docs/RTPProfileMeta.md docs/RebootOperationInput.md docs/RebootPortsOperation.md docs/Reference.md +docs/RegexMatch.md docs/ReleaseOperationInput.md docs/RemoteAccess.md docs/RemoteSubnetConfig.md +docs/RenameInput.md +docs/ReorderActionInput.md +docs/ReorderExchangesInput.md docs/ReplayCapture.md docs/ReportsApi.md docs/RequiredFileTypes.md @@ -656,17 +786,27 @@ docs/Scenario.md docs/SecondaryObjective.md docs/SegmentType.md docs/SelectedEnv.md +docs/SequenceDataTypes.md +docs/SequenceValue.md +docs/SequenceValueTypes.md docs/Session.md docs/SessionReuseMethodTLS12.md docs/SessionReuseMethodTLS13.md docs/SessionsApi.md +docs/SetAggregationModeOperation.md +docs/SetControllerAppOperation.md docs/SetDpdkModeOperationInput.md +docs/SetLinkStateOperation.md +docs/SetNodesAppOperation.md docs/SetNtpOperationInput.md +docs/SimpleSequenceValue.md docs/SimulatedIdP.md +docs/SingleValue.md docs/Snapshot.md +docs/SnowflakeExporter.md docs/SortBodyField.md docs/SpecificObjective.md -docs/StartRootBatchDeleteRequestInner.md +docs/StartAgentsBatchDeleteRequestInner.md docs/StatelessStream.md docs/StaticARPEntry.md docs/StatisticsApi.md @@ -676,8 +816,8 @@ docs/StepSegment.md docs/StreamDirection.md docs/StreamPayloadType.md docs/StreamProfile.md +docs/SubStep.md docs/SupportedGroupTLS13.md -docs/SwitchAppOperation.md docs/SystemInfo.md docs/TLSProfile.md docs/TcpProfile.md @@ -685,6 +825,7 @@ docs/TestInfo.md docs/TestOperationsApi.md docs/TestResultsApi.md docs/TestStateChangedOperation.md +docs/TestUsage.md docs/TimeValue.md docs/TimelineSegment.md docs/TimelineSegmentBase.md @@ -707,15 +848,19 @@ docs/TypeMediaMetadata.md docs/TypeStringMetadata.md docs/UdpProfile.md docs/UpdateNetworkMapping.md +docs/UpdatePortTagsOperation.md docs/UtilsApi.md docs/VLANRange.md +docs/VLANType.md docs/ValidationMessage.md docs/Version.md +docs/VxLANId.md +docs/VxLANRange.md +docs/VxLANStack.md git_push.sh pyproject.toml requirements.txt setup.cfg setup.py test-requirements.txt -test/__init__.py tox.ini diff --git a/README.md b/README.md index 5d530c3..c7fdfe6 100644 --- a/README.md +++ b/README.md @@ -399,6 +399,7 @@ Class | Method | HTTP request | Description - [ActivationCodeRequest](docs/ActivationCodeRequest.md) - [AddActionInfo](docs/AddActionInfo.md) - [AddInput](docs/AddInput.md) + - [Address](docs/Address.md) - [AdvancedSettings](docs/AdvancedSettings.md) - [Agent](docs/Agent.md) - [AgentAssignmentByPort](docs/AgentAssignmentByPort.md) @@ -479,11 +480,13 @@ Class | Method | HTTP request | Description - [CreateAppOrAttackOperationInput](docs/CreateAppOrAttackOperationInput.md) - [CustomDashboards](docs/CustomDashboards.md) - [CustomImportHandler](docs/CustomImportHandler.md) + - [CustomSequence](docs/CustomSequence.md) - [CustomStat](docs/CustomStat.md) - [DNSResolver](docs/DNSResolver.md) - [DNSServer](docs/DNSServer.md) - [DTLSSettings](docs/DTLSSettings.md) - [DUTNetwork](docs/DUTNetwork.md) + - [DUTRange](docs/DUTRange.md) - [Dashboard](docs/Dashboard.md) - [DataType](docs/DataType.md) - [DataTypeValuesInner](docs/DataTypeValuesInner.md) @@ -685,6 +688,7 @@ Class | Method | HTTP request | Description - [PepDUT](docs/PepDUT.md) - [PfsP2Group](docs/PfsP2Group.md) - [PlaylistMetadata](docs/PlaylistMetadata.md) + - [PlaylistSequencingMethod](docs/PlaylistSequencingMethod.md) - [Plugin](docs/Plugin.md) - [PluginStats](docs/PluginStats.md) - [Port](docs/Port.md) @@ -721,6 +725,9 @@ Class | Method | HTTP request | Description - [SecondaryObjective](docs/SecondaryObjective.md) - [SegmentType](docs/SegmentType.md) - [SelectedEnv](docs/SelectedEnv.md) + - [SequenceDataTypes](docs/SequenceDataTypes.md) + - [SequenceValue](docs/SequenceValue.md) + - [SequenceValueTypes](docs/SequenceValueTypes.md) - [Session](docs/Session.md) - [SessionReuseMethodTLS12](docs/SessionReuseMethodTLS12.md) - [SessionReuseMethodTLS13](docs/SessionReuseMethodTLS13.md) @@ -730,7 +737,9 @@ Class | Method | HTTP request | Description - [SetLinkStateOperation](docs/SetLinkStateOperation.md) - [SetNodesAppOperation](docs/SetNodesAppOperation.md) - [SetNtpOperationInput](docs/SetNtpOperationInput.md) + - [SimpleSequenceValue](docs/SimpleSequenceValue.md) - [SimulatedIdP](docs/SimulatedIdP.md) + - [SingleValue](docs/SingleValue.md) - [Snapshot](docs/Snapshot.md) - [SnowflakeExporter](docs/SnowflakeExporter.md) - [SortBodyField](docs/SortBodyField.md) @@ -744,6 +753,7 @@ Class | Method | HTTP request | Description - [StreamDirection](docs/StreamDirection.md) - [StreamPayloadType](docs/StreamPayloadType.md) - [StreamProfile](docs/StreamProfile.md) + - [SubStep](docs/SubStep.md) - [SupportedGroupTLS13](docs/SupportedGroupTLS13.md) - [SystemInfo](docs/SystemInfo.md) - [TLSProfile](docs/TLSProfile.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 6a7fee7..eb29d89 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -64,6 +64,7 @@ from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput +from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort @@ -144,11 +145,13 @@ from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler +from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork +from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -350,6 +353,7 @@ from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port @@ -386,6 +390,9 @@ from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv +from cyperf.models.sequence_data_types import SequenceDataTypes +from cyperf.models.sequence_value import SequenceValue +from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 @@ -395,7 +402,9 @@ from cyperf.models.set_link_state_operation import SetLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP +from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -409,6 +418,7 @@ from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile +from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index d29722e..2021a3c 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -30,6 +30,7 @@ ActivationCodeRequest = DynamicModel('ActivationCodeRequest', (), {} ) AddActionInfo = DynamicModel('AddActionInfo', (), {} ) AddInput = DynamicModel('AddInput', (), {} ) +Address = DynamicModel('Address', (), {} ) AdvancedSettings = DynamicModel('AdvancedSettings', (), {} ) Agent = DynamicModel('Agent', (), {} ) AgentAssignmentByPort = DynamicModel('AgentAssignmentByPort', (), {} ) @@ -110,11 +111,13 @@ CreateAppOrAttackOperationInput = DynamicModel('CreateAppOrAttackOperationInput', (), {} ) CustomDashboards = DynamicModel('CustomDashboards', (), {} ) CustomImportHandler = DynamicModel('CustomImportHandler', (), {} ) +CustomSequence = DynamicModel('CustomSequence', (), {} ) CustomStat = DynamicModel('CustomStat', (), {} ) DNSResolver = DynamicModel('DNSResolver', (), {} ) DNSServer = DynamicModel('DNSServer', (), {} ) DTLSSettings = DynamicModel('DTLSSettings', (), {} ) DUTNetwork = DynamicModel('DUTNetwork', (), {} ) +DUTRange = DynamicModel('DUTRange', (), {} ) Dashboard = DynamicModel('Dashboard', (), {} ) DataType = DynamicModel('DataType', (), {} ) DataTypeValuesInner = DynamicModel('DataTypeValuesInner', (), {} ) @@ -316,6 +319,7 @@ PepDUT = DynamicModel('PepDUT', (), {} ) PfsP2Group = DynamicModel('PfsP2Group', (), {} ) PlaylistMetadata = DynamicModel('PlaylistMetadata', (), {} ) +PlaylistSequencingMethod = DynamicModel('PlaylistSequencingMethod', (), {} ) Plugin = DynamicModel('Plugin', (), {} ) PluginStats = DynamicModel('PluginStats', (), {} ) Port = DynamicModel('Port', (), {} ) @@ -352,6 +356,9 @@ SecondaryObjective = DynamicModel('SecondaryObjective', (), {} ) SegmentType = DynamicModel('SegmentType', (), {} ) SelectedEnv = DynamicModel('SelectedEnv', (), {} ) +SequenceDataTypes = DynamicModel('SequenceDataTypes', (), {} ) +SequenceValue = DynamicModel('SequenceValue', (), {} ) +SequenceValueTypes = DynamicModel('SequenceValueTypes', (), {} ) Session = DynamicModel('Session', (), {} ) SessionReuseMethodTLS12 = DynamicModel('SessionReuseMethodTLS12', (), {} ) SessionReuseMethodTLS13 = DynamicModel('SessionReuseMethodTLS13', (), {} ) @@ -361,7 +368,9 @@ SetLinkStateOperation = DynamicModel('SetLinkStateOperation', (), {} ) SetNodesAppOperation = DynamicModel('SetNodesAppOperation', (), {} ) SetNtpOperationInput = DynamicModel('SetNtpOperationInput', (), {} ) +SimpleSequenceValue = DynamicModel('SimpleSequenceValue', (), {} ) SimulatedIdP = DynamicModel('SimulatedIdP', (), {} ) +SingleValue = DynamicModel('SingleValue', (), {} ) Snapshot = DynamicModel('Snapshot', (), {} ) SnowflakeExporter = DynamicModel('SnowflakeExporter', (), {} ) SortBodyField = DynamicModel('SortBodyField', (), {} ) @@ -375,6 +384,7 @@ StreamDirection = DynamicModel('StreamDirection', (), {} ) StreamPayloadType = DynamicModel('StreamPayloadType', (), {} ) StreamProfile = DynamicModel('StreamProfile', (), {} ) +SubStep = DynamicModel('SubStep', (), {} ) SupportedGroupTLS13 = DynamicModel('SupportedGroupTLS13', (), {} ) SystemInfo = DynamicModel('SystemInfo', (), {} ) TLSProfile = DynamicModel('TLSProfile', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index a7516f4..3b056c3 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -30,6 +30,7 @@ class LinkNameException(Exception): from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput +from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort @@ -110,11 +111,13 @@ class LinkNameException(Exception): from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler +from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork +from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -316,6 +319,7 @@ class LinkNameException(Exception): from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port @@ -352,6 +356,9 @@ class LinkNameException(Exception): from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv +from cyperf.models.sequence_data_types import SequenceDataTypes +from cyperf.models.sequence_value import SequenceValue +from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 @@ -361,7 +368,9 @@ class LinkNameException(Exception): from cyperf.models.set_link_state_operation import SetLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP +from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -375,6 +384,7 @@ class LinkNameException(Exception): from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile +from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/models/action.py b/cyperf/models/action.py index 6a16cfc..6e029e0 100644 --- a/cyperf/models/action.py +++ b/cyperf/models/action.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class Action(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/action_base.py b/cyperf/models/action_base.py index 6b185c7..2465540 100644 --- a/cyperf/models/action_base.py +++ b/cyperf/models/action_base.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class ActionBase(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/address.py b/cyperf/models/address.py new file mode 100644 index 0000000..d6d4ee6 --- /dev/null +++ b/cyperf/models/address.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from cyperf.models.api_link import APILink +from cyperf.models.dut_range import DUTRange +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class Address(BaseModel): + """ + Address + """ # noqa: E501 + host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, alias="Host") + range: Optional[DUTRange] = Field(default=None, alias="Range") + use_range: Optional[StrictBool] = Field(default=None, alias="UseRange") + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Host", "Range", "UseRange", "links"] + + @field_validator('host') + def host_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^$|^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$", value): + raise ValueError(r"must validate the regular expression /^$|^(([a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$|(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|(([0-9a-fA-F]{1,4}:){5,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}|([0-9a-fA-F]{1,4}:){1,4}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){2,2}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){3,3}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){4,4})|:(:[0-9a-fA-F]{1,4}){1,5}):((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of Address from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of range + if self.range: + _dict['Range'] = self.range.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of Address from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Host": obj.get("Host"), + "Range": DUTRange.from_dict(obj["Range"]) if obj.get("Range") is not None else None, + "UseRange": obj.get("UseRange"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/application_profile.py b/cyperf/models/application_profile.py index 8559031..2b90483 100644 --- a/cyperf/models/application_profile.py +++ b/cyperf/models/application_profile.py @@ -25,6 +25,7 @@ from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping from cyperf.models.objectives_and_timeline import ObjectivesAndTimeline +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -36,6 +37,7 @@ class ApplicationProfile(BaseModel): ApplicationProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -52,7 +54,7 @@ class ApplicationProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateTrafficProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetTrafficProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -152,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/attack_action.py b/cyperf/models/attack_action.py index 03923e0..f261776 100644 --- a/cyperf/models/attack_action.py +++ b/cyperf/models/attack_action.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class AttackAction(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/attack_profile.py b/cyperf/models/attack_profile.py index 643e4f6..7ac4116 100644 --- a/cyperf/models/attack_profile.py +++ b/cyperf/models/attack_profile.py @@ -25,6 +25,7 @@ from cyperf.models.attack_objectives_and_timeline import AttackObjectivesAndTimeline from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -36,6 +37,7 @@ class AttackProfile(BaseModel): AttackProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -52,7 +54,7 @@ class AttackProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateAttackProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetAttackProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -152,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/custom_sequence.py b/cyperf/models/custom_sequence.py new file mode 100644 index 0000000..ccbf7ed --- /dev/null +++ b/cyperf/models/custom_sequence.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.single_value import SingleValue +from cyperf.models.sub_step import SubStep +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class CustomSequence(BaseModel): + """ + CustomSequence + """ # noqa: E501 + start: Optional[SingleValue] = Field(default=None, alias="Start") + step: Optional[SingleValue] = Field(default=None, alias="Step") + links: Optional[List[APILink]] = None + sub_steps: Optional[List[SubStep]] = Field(default=None, alias="SubSteps") + __properties: ClassVar[List[str]] = ["Start", "Step", "links", "SubSteps"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of CustomSequence from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of start + if self.start: + _dict['Start'] = self.start.to_dict() + # override the default output from pydantic by calling `to_dict()` of step + if self.step: + _dict['Step'] = self.step.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in sub_steps (list) + _items = [] + if self.sub_steps: + for _item in self.sub_steps: + if _item: + _items.append(_item.to_dict()) + _dict['SubSteps'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of CustomSequence from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Start": SingleValue.from_dict(obj["Start"]) if obj.get("Start") is not None else None, + "Step": SingleValue.from_dict(obj["Step"]) if obj.get("Step") is not None else None, + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), + "SubSteps": ( [SubStep.from_dict(_item) for _item in obj.get("SubSteps", [])] if obj.get("SubSteps") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index f02ea23..8d74b23 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated +from cyperf.models.address import Address from cyperf.models.api_link import APILink from cyperf.models.health_check_config import HealthCheckConfig from cyperf.models.params import Params @@ -54,6 +55,7 @@ class DUTNetwork(BaseModel): reverse_proxy_pep_dut: Optional[PepDUT] = Field(default=None, alias="ReverseProxyPepDUT") reverse_proxy_pep_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false)", alias="ReverseProxyPepDUTActive") server_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)", alias="ServerDUTActive") + server_dut_address: Optional[Address] = Field(default=None, alias="ServerDUTAddress") server_dut_host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.", alias="ServerDUTHost") server_dut_port: Optional[StrictInt] = Field(default=None, description="The listen port for server-side DUT", alias="ServerDUTPort") tcp_health_check: Optional[HealthCheckConfig] = Field(default=None, description="The TCP HealthCheck configuration for DUT", alias="TCPHealthCheck") @@ -61,7 +63,7 @@ class DUTNetwork(BaseModel): active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)") host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTAddress", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -187,6 +189,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of reverse_proxy_pep_dut if self.reverse_proxy_pep_dut: _dict['ReverseProxyPepDUT'] = self.reverse_proxy_pep_dut.to_dict() + # override the default output from pydantic by calling `to_dict()` of server_dut_address + if self.server_dut_address: + _dict['ServerDUTAddress'] = self.server_dut_address.to_dict() # override the default output from pydantic by calling `to_dict()` of tcp_health_check if self.tcp_health_check: _dict['TCPHealthCheck'] = self.tcp_health_check.to_dict() @@ -232,6 +237,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ReverseProxyPepDUT": PepDUT.from_dict(obj["ReverseProxyPepDUT"]) if obj.get("ReverseProxyPepDUT") is not None else None, "ReverseProxyPepDUTActive": obj.get("ReverseProxyPepDUTActive"), "ServerDUTActive": obj.get("ServerDUTActive"), + "ServerDUTAddress": Address.from_dict(obj["ServerDUTAddress"]) if obj.get("ServerDUTAddress") is not None else None, "ServerDUTHost": obj.get("ServerDUTHost"), "ServerDUTPort": obj.get("ServerDUTPort"), "TCPHealthCheck": HealthCheckConfig.from_dict(obj["TCPHealthCheck"]) if obj.get("TCPHealthCheck") is not None else None, diff --git a/cyperf/models/dut_range.py b/cyperf/models/dut_range.py new file mode 100644 index 0000000..fa81786 --- /dev/null +++ b/cyperf/models/dut_range.py @@ -0,0 +1,123 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.sequence_value import SequenceValue +from cyperf.models.vlan_range import VLANRange +from cyperf.models.vlan_type import VLANType +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class DUTRange(BaseModel): + """ + DUTRange + """ # noqa: E501 + count: Optional[StrictInt] = Field(default=None, alias="Count") + inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current DTLS Range configuration", alias="InnerVlanRange") + ip: Optional[SequenceValue] = Field(default=None, alias="Ip") + outer_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current DTLS Range configuration", alias="OuterVlanRange") + vlan_type: Optional[VLANType] = Field(default=None, description="The type of VLAN used", alias="VLANType") + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Count", "InnerVlanRange", "Ip", "OuterVlanRange", "VLANType", "links"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of DUTRange from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of inner_vlan_range + if self.inner_vlan_range: + _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of ip + if self.ip: + _dict['Ip'] = self.ip.to_dict() + # override the default output from pydantic by calling `to_dict()` of outer_vlan_range + if self.outer_vlan_range: + _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of DUTRange from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Count": obj.get("Count"), + "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, + "Ip": SequenceValue.from_dict(obj["Ip"]) if obj.get("Ip") is not None else None, + "OuterVlanRange": VLANRange.from_dict(obj["OuterVlanRange"]) if obj.get("OuterVlanRange") is not None else None, + "VLANType": obj.get("VLANType"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/emulated_router_range.py b/cyperf/models/emulated_router_range.py index 2b88b82..1fe348d 100644 --- a/cyperf/models/emulated_router_range.py +++ b/cyperf/models/emulated_router_range.py @@ -24,6 +24,7 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer +from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -40,6 +41,7 @@ class EmulatedRouterRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") + ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -56,7 +58,7 @@ class EmulatedRouterRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -137,6 +139,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of ip_address + if self.ip_address: + _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -167,6 +172,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, + "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/eth_range.py b/cyperf/models/eth_range.py index 964ed14..0bf2674 100644 --- a/cyperf/models/eth_range.py +++ b/cyperf/models/eth_range.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from cyperf.models.api_link import APILink +from cyperf.models.sequence_value import SequenceValue from cyperf.models.static_arp_entry import StaticARPEntry from typing import Optional, Set, Union from typing_extensions import Self @@ -32,6 +33,7 @@ class EthRange(BaseModel): The Ethernet Ranges assigned to the current test configuration """ # noqa: E501 count: Optional[StrictInt] = Field(default=None, alias="Count") + mac_address: Optional[SequenceValue] = Field(default=None, alias="MacAddress") mac_auto: StrictBool = Field(description="A flag indicating if the MAC address for the EthRange should be determined automatically (default: true).", alias="MacAuto") mac_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01).", alias="MacIncr") mac_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC start address for the EthRange (default: 00:11:01:00:00:01).", alias="MacStart") @@ -39,7 +41,7 @@ class EthRange(BaseModel): static_arp_table: Optional[List[StaticARPEntry]] = Field(default=None, alias="StaticARPTable") links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of MACs that should be assigned to each traffic agent for this Ethernet range segment in a valid test (default: 0, split equally between agents).", alias="maxCountPerAgent") - __properties: ClassVar[List[str]] = ["Count", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] + __properties: ClassVar[List[str]] = ["Count", "MacAddress", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] @field_validator('mac_incr') def mac_incr_validate_regular_expression(cls, value): @@ -100,6 +102,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of mac_address + if self.mac_address: + _dict['MacAddress'] = self.mac_address.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in static_arp_table (list) _items = [] if self.static_arp_table: @@ -129,6 +134,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Count": obj.get("Count"), + "MacAddress": SequenceValue.from_dict(obj["MacAddress"]) if obj.get("MacAddress") is not None else None, "MacAuto": obj.get("MacAuto"), "MacIncr": obj.get("MacIncr"), "MacStart": obj.get("MacStart"), diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index 9c83b38..58897c8 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -24,6 +24,7 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer +from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -40,6 +41,7 @@ class IPRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") + ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -56,7 +58,7 @@ class IPRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -137,6 +139,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of ip_address + if self.ip_address: + _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -167,6 +172,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, + "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/local_subnet_config.py b/cyperf/models/local_subnet_config.py index 2753476..303751c 100644 --- a/cyperf/models/local_subnet_config.py +++ b/cyperf/models/local_subnet_config.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List from typing_extensions import Annotated from typing import Optional, Set, Union @@ -36,8 +36,9 @@ class LocalSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The network mask of the IP Range (default: 16).", alias="Prefix") start: Annotated[str, Field(strict=True)] = Field(description="The start IP for the IPRange (default: 10.0.0.10).", alias="Start") total_host_count: StrictStr = Field(alias="TotalHostCount") + wildcard_initiator_traffic: StrictBool = Field(alias="WildcardInitiatorTraffic") network_tags: List[StrictStr] = Field(description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "networkTags"] + __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "WildcardInitiatorTraffic", "networkTags"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -120,6 +121,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Prefix": obj.get("Prefix"), "Start": obj.get("Start"), "TotalHostCount": obj.get("TotalHostCount"), + "WildcardInitiatorTraffic": obj.get("WildcardInitiatorTraffic"), "networkTags": obj.get("networkTags") if obj.get("networkTags") is not None else [] , "links": obj.get("links") diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index 6e07d2b..137c4e2 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -47,9 +47,10 @@ class Metadata(BaseModel): sort_severity: Optional[StrictStr] = Field(default=None, description="The field by which the severity is sorted", alias="SortSeverity") static: Optional[StrictBool] = Field(default=None, description="If true, the application/strike is managed directly by the controller", alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, description="The apps that this strike can be used with", alias="SupportedApps") + supported_http_versions: Optional[List[StrictStr]] = Field(default=None, description="The HTTP versions supported by the application", alias="SupportedHTTPVersions") supports_http2: Optional[StrictBool] = Field(default=None, description="Indicates if the application supports HTTP2 multi-stream", alias="SupportsHTTP2") year: Optional[StrictStr] = Field(default=None, description="The year of the strike", alias="Year") - __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportsHTTP2", "Year"] + __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportedHTTPVersions", "SupportsHTTP2", "Year"] model_config = ConfigDict( populate_by_name=True, @@ -137,6 +138,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "SortSeverity": obj.get("SortSeverity"), "Static": obj.get("Static"), "SupportedApps": obj.get("SupportedApps") if obj.get("SupportedApps") is not None else [], + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions") if obj.get("SupportedHTTPVersions") is not None else [], "SupportsHTTP2": obj.get("SupportsHTTP2"), "Year": obj.get("Year") , diff --git a/cyperf/models/pangp_encapsulation.py b/cyperf/models/pangp_encapsulation.py index 5b09a5a..88a533c 100644 --- a/cyperf/models/pangp_encapsulation.py +++ b/cyperf/models/pangp_encapsulation.py @@ -32,10 +32,11 @@ class PANGPEncapsulation(BaseModel): """ # noqa: E501 esp_over_udp_enabled: StrictBool = Field(alias="ESPOverUDPEnabled") esp_over_udp_settings: Optional[ESPOverUDPSettings] = Field(default=None, alias="ESPOverUDPSettings") + enable_ikev2: StrictBool = Field(alias="EnableIKEv2") encapsulation_mode: StrictStr = Field(description="The encapsulation mode for inner traffic.", alias="EncapsulationMode") udp_port: StrictInt = Field(alias="UdpPort") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EncapsulationMode", "UdpPort", "links"] + __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EnableIKEv2", "EncapsulationMode", "UdpPort", "links"] @field_validator('encapsulation_mode') def encapsulation_mode_validate_enum(cls, value): @@ -109,6 +110,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "ESPOverUDPEnabled": obj.get("ESPOverUDPEnabled"), "ESPOverUDPSettings": ESPOverUDPSettings.from_dict(obj["ESPOverUDPSettings"]) if obj.get("ESPOverUDPSettings") is not None else None, + "EnableIKEv2": obj.get("EnableIKEv2"), "EncapsulationMode": obj.get("EncapsulationMode"), "UdpPort": obj.get("UdpPort"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/cyperf/models/playlist_sequencing_method.py b/cyperf/models/playlist_sequencing_method.py new file mode 100644 index 0000000..f19e02b --- /dev/null +++ b/cyperf/models/playlist_sequencing_method.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class PlaylistSequencingMethod(str, Enum): + """ + Use this property to switch between different playlist sequencing strategies + """ + + """ + allowed enum values + """ + SEQUENTIAL_PER_USER_PER_FLOW = 'SEQUENTIAL_PER_USER_PER_FLOW' + UNIQUE_OFFSET_SEQUENTIAL_PER_USER_PER_FLOW = 'UNIQUE_OFFSET_SEQUENTIAL_PER_USER_PER_FLOW' + SEQUENTIAL_GLOBAL_PER_FLOW = 'SEQUENTIAL_GLOBAL_PER_FLOW' + RANDOM_PER_USER_PER_FLOW = 'RANDOM_PER_USER_PER_FLOW' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of PlaylistSequencingMethod from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/remote_subnet_config.py b/cyperf/models/remote_subnet_config.py index b9e55d1..a4b6e66 100644 --- a/cyperf/models/remote_subnet_config.py +++ b/cyperf/models/remote_subnet_config.py @@ -36,7 +36,8 @@ class RemoteSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The length (in bits) of the subnet mask to be applied to all the addresses created in the range.", alias="Prefix") single_remote_subnet: StrictBool = Field(alias="SingleRemoteSubnet") start: Annotated[str, Field(strict=True)] = Field(description="The base address for enumerating all the local subnets in the range", alias="Start") - __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start"] + wildcard_responder_traffic: StrictBool = Field(alias="WildcardResponderTraffic") + __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start", "WildcardResponderTraffic"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -118,7 +119,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Increment": obj.get("Increment"), "Prefix": obj.get("Prefix"), "SingleRemoteSubnet": obj.get("SingleRemoteSubnet"), - "Start": obj.get("Start") + "Start": obj.get("Start"), + "WildcardResponderTraffic": obj.get("WildcardResponderTraffic") , "links": obj.get("links") }) diff --git a/cyperf/models/sequence_data_types.py b/cyperf/models/sequence_data_types.py new file mode 100644 index 0000000..899a421 --- /dev/null +++ b/cyperf/models/sequence_data_types.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class SequenceDataTypes(str, Enum): + """ + SequenceDataTypes + """ + + """ + allowed enum values + """ + IP_SEQ = 'IP_SEQ' + MAC_SEQ = 'MAC_SEQ' + INT32_SEQ = 'INT32_SEQ' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of SequenceDataTypes from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/sequence_value.py b/cyperf/models/sequence_value.py new file mode 100644 index 0000000..b65f5ee --- /dev/null +++ b/cyperf/models/sequence_value.py @@ -0,0 +1,123 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.custom_sequence import CustomSequence +from cyperf.models.sequence_data_types import SequenceDataTypes +from cyperf.models.sequence_value_types import SequenceValueTypes +from cyperf.models.simple_sequence_value import SimpleSequenceValue +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SequenceValue(BaseModel): + """ + SequenceValue + """ # noqa: E501 + custom: Optional[CustomSequence] = Field(default=None, alias="Custom") + data_type: Optional[SequenceDataTypes] = Field(default=None, alias="DataType") + increment: Optional[SimpleSequenceValue] = Field(default=None, alias="Increment") + preview: Optional[List[StrictStr]] = Field(default=None, alias="Preview") + sequence_type: Optional[SequenceValueTypes] = Field(default=None, alias="SequenceType") + id: Optional[StrictStr] = None + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Custom", "DataType", "Increment", "Preview", "SequenceType", "id", "links"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SequenceValue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of custom + if self.custom: + _dict['Custom'] = self.custom.to_dict() + # override the default output from pydantic by calling `to_dict()` of increment + if self.increment: + _dict['Increment'] = self.increment.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SequenceValue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Custom": CustomSequence.from_dict(obj["Custom"]) if obj.get("Custom") is not None else None, + "DataType": obj.get("DataType"), + "Increment": SimpleSequenceValue.from_dict(obj["Increment"]) if obj.get("Increment") is not None else None, + "Preview": obj.get("Preview") if obj.get("Preview") is not None else [], + "SequenceType": obj.get("SequenceType"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/sequence_value_types.py b/cyperf/models/sequence_value_types.py new file mode 100644 index 0000000..9e32def --- /dev/null +++ b/cyperf/models/sequence_value_types.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class SequenceValueTypes(str, Enum): + """ + SequenceValueTypes + """ + + """ + allowed enum values + """ + INCREMENT = 'INCREMENT' + CUSTOM = 'CUSTOM' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of SequenceValueTypes from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/simple_sequence_value.py b/cyperf/models/simple_sequence_value.py new file mode 100644 index 0000000..5ca3ae0 --- /dev/null +++ b/cyperf/models/simple_sequence_value.py @@ -0,0 +1,112 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.single_value import SingleValue +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SimpleSequenceValue(BaseModel): + """ + SimpleSequenceValue + """ # noqa: E501 + start: Optional[SingleValue] = Field(default=None, alias="Start") + step: Optional[SingleValue] = Field(default=None, alias="Step") + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Start", "Step", "links"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SimpleSequenceValue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of start + if self.start: + _dict['Start'] = self.start.to_dict() + # override the default output from pydantic by calling `to_dict()` of step + if self.step: + _dict['Step'] = self.step.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SimpleSequenceValue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Start": SingleValue.from_dict(obj["Start"]) if obj.get("Start") is not None else None, + "Step": SingleValue.from_dict(obj["Step"]) if obj.get("Step") is not None else None, + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/single_value.py b/cyperf/models/single_value.py new file mode 100644 index 0000000..c8e7345 --- /dev/null +++ b/cyperf/models/single_value.py @@ -0,0 +1,99 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional, Union +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SingleValue(BaseModel): + """ + SingleValue + """ # noqa: E501 + bool_value: Optional[StrictBool] = Field(default=None, alias="BoolValue") + float_value: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, alias="FloatValue") + integer_value: Optional[StrictInt] = Field(default=None, alias="IntegerValue") + string_value: Optional[StrictStr] = Field(default=None, alias="StringValue") + __properties: ClassVar[List[str]] = ["BoolValue", "FloatValue", "IntegerValue", "StringValue"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SingleValue from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SingleValue from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "BoolValue": obj.get("BoolValue"), + "FloatValue": obj.get("FloatValue"), + "IntegerValue": obj.get("IntegerValue"), + "StringValue": obj.get("StringValue") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/stream_profile.py b/cyperf/models/stream_profile.py index 5c13d58..a7d3737 100644 --- a/cyperf/models/stream_profile.py +++ b/cyperf/models/stream_profile.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.stream_payload_type import StreamPayloadType from typing import Optional, Set, Union @@ -35,7 +35,8 @@ class StreamProfile(BaseModel): total_estimated_throughput: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughput") total_estimated_throughput_per_simulated_user: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughputPerSimulatedUser") unique_pool_size: Optional[StrictInt] = Field(default=None, alias="uniquePoolSize") - __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize"] + unrestricted_packet_rate: Optional[StrictBool] = Field(default=None, alias="unrestrictedPacketRate") + __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize", "unrestrictedPacketRate"] model_config = ConfigDict( populate_by_name=True, @@ -95,7 +96,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "payloadType": obj.get("payloadType"), "totalEstimatedThroughput": obj.get("totalEstimatedThroughput"), "totalEstimatedThroughputPerSimulatedUser": obj.get("totalEstimatedThroughputPerSimulatedUser"), - "uniquePoolSize": obj.get("uniquePoolSize") + "uniquePoolSize": obj.get("uniquePoolSize"), + "unrestrictedPacketRate": obj.get("unrestrictedPacketRate") , "links": obj.get("links") }) diff --git a/cyperf/models/sub_step.py b/cyperf/models/sub_step.py new file mode 100644 index 0000000..efb6d78 --- /dev/null +++ b/cyperf/models/sub_step.py @@ -0,0 +1,120 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.single_value import SingleValue +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SubStep(BaseModel): + """ + SubStep + """ # noqa: E501 + count: StrictInt = Field(alias="Count") + step: Optional[SingleValue] = Field(default=None, alias="Step") + sub_steps: List[SubStep] = Field(alias="SubSteps") + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Count", "Step", "SubSteps", "links"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SubStep from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of step + if self.step: + _dict['Step'] = self.step.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in sub_steps (list) + _items = [] + if self.sub_steps: + for _item in self.sub_steps: + if _item: + _items.append(_item.to_dict()) + _dict['SubSteps'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SubStep from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "Count": obj.get("Count"), + "Step": SingleValue.from_dict(obj["Step"]) if obj.get("Step") is not None else None, + "SubSteps": ( [SubStep.from_dict(_item) for _item in obj.get("SubSteps", [])] if obj.get("SubSteps") is not None else None), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + +# TODO: Rewrite to not use raise_errors +SubStep.model_rebuild(raise_errors=False) + diff --git a/cyperf/models/traffic_profile_base.py b/cyperf/models/traffic_profile_base.py index e480756..6e10b0d 100644 --- a/cyperf/models/traffic_profile_base.py +++ b/cyperf/models/traffic_profile_base.py @@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from typing import Optional, Set, Union from typing_extensions import Self @@ -31,11 +32,12 @@ class TrafficProfileBase(BaseModel): TrafficProfileBase """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] model_config = ConfigDict( populate_by_name=True, @@ -101,6 +103,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/docs/Action.md b/docs/Action.md index 0e584a6..c832d9d 100644 --- a/docs/Action.md +++ b/docs/Action.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/ActionBase.md b/docs/ActionBase.md index be8a2e2..f419c41 100644 --- a/docs/ActionBase.md +++ b/docs/ActionBase.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/Address.md b/docs/Address.md new file mode 100644 index 0000000..99986d4 --- /dev/null +++ b/docs/Address.md @@ -0,0 +1,32 @@ +# Address + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**host** | **str** | | [optional] +**range** | [**DUTRange**](DUTRange.md) | | [optional] +**use_range** | **bool** | | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.address import Address + +# TODO update the JSON string below +json = "{}" +# create an instance of Address from a JSON string +address_instance = Address.from_json(json) +# print the JSON string representation of the object +print(Address.to_json()) + +# convert the object into a dict +address_dict = address_instance.to_dict() +# create an instance of Address from a dict +address_from_dict = Address.from_dict(address_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ApplicationProfile.md b/docs/ApplicationProfile.md index 6cde695..c2fac4f 100644 --- a/docs/ApplicationProfile.md +++ b/docs/ApplicationProfile.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/AttackAction.md b/docs/AttackAction.md index cf9e1dd..75b7c94 100644 --- a/docs/AttackAction.md +++ b/docs/AttackAction.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/AttackProfile.md b/docs/AttackProfile.md index 4d64831..0c42c28 100644 --- a/docs/AttackProfile.md +++ b/docs/AttackProfile.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/CustomSequence.md b/docs/CustomSequence.md new file mode 100644 index 0000000..e96c6fe --- /dev/null +++ b/docs/CustomSequence.md @@ -0,0 +1,32 @@ +# CustomSequence + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**start** | [**SingleValue**](SingleValue.md) | | [optional] +**step** | [**SingleValue**](SingleValue.md) | | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] +**sub_steps** | [**List[SubStep]**](SubStep.md) | | [optional] + +## Example + +```python +from cyperf.models.custom_sequence import CustomSequence + +# TODO update the JSON string below +json = "{}" +# create an instance of CustomSequence from a JSON string +custom_sequence_instance = CustomSequence.from_json(json) +# print the JSON string representation of the object +print(CustomSequence.to_json()) + +# convert the object into a dict +custom_sequence_dict = custom_sequence_instance.to_dict() +# create an instance of CustomSequence from a dict +custom_sequence_from_dict = CustomSequence.from_dict(custom_sequence_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DUTNetwork.md b/docs/DUTNetwork.md index d44a65c..94b8c76 100644 --- a/docs/DUTNetwork.md +++ b/docs/DUTNetwork.md @@ -26,6 +26,7 @@ Name | Type | Description | Notes **reverse_proxy_pep_dut** | [**PepDUT**](PepDUT.md) | | [optional] **reverse_proxy_pep_dut_active** | **bool** | A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false) | [optional] **server_dut_active** | **bool** | A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false) | [optional] +**server_dut_address** | [**Address**](Address.md) | | [optional] **server_dut_host** | **str** | The hostname where the traffic goes if server DUT is active. | [optional] **server_dut_port** | **int** | The listen port for server-side DUT | [optional] **tcp_health_check** | [**HealthCheckConfig**](HealthCheckConfig.md) | The TCP HealthCheck configuration for DUT | [optional] diff --git a/docs/DUTRange.md b/docs/DUTRange.md new file mode 100644 index 0000000..070885d --- /dev/null +++ b/docs/DUTRange.md @@ -0,0 +1,34 @@ +# DUTRange + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**count** | **int** | | [optional] +**inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current DTLS Range configuration | [optional] +**ip** | [**SequenceValue**](SequenceValue.md) | | [optional] +**outer_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current DTLS Range configuration | [optional] +**vlan_type** | [**VLANType**](VLANType.md) | The type of VLAN used | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.dut_range import DUTRange + +# TODO update the JSON string below +json = "{}" +# create an instance of DUTRange from a JSON string +dut_range_instance = DUTRange.from_json(json) +# print the JSON string representation of the object +print(DUTRange.to_json()) + +# convert the object into a dict +dut_range_dict = dut_range_instance.to_dict() +# create an instance of DUTRange from a dict +dut_range_from_dict = DUTRange.from_dict(dut_range_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/EmulatedRouterRange.md b/docs/EmulatedRouterRange.md index 98757c0..35e5fba 100644 --- a/docs/EmulatedRouterRange.md +++ b/docs/EmulatedRouterRange.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] +**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/EthRange.md b/docs/EthRange.md index 58f4130..c4a2467 100644 --- a/docs/EthRange.md +++ b/docs/EthRange.md @@ -7,6 +7,7 @@ The Ethernet Ranges assigned to the current test configuration Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **count** | **int** | | [optional] +**mac_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **mac_auto** | **bool** | A flag indicating if the MAC address for the EthRange should be determined automatically (default: true). | **mac_incr** | **str** | The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01). | [optional] **mac_start** | **str** | The MAC start address for the EthRange (default: 00:11:01:00:00:01). | [optional] diff --git a/docs/IPRange.md b/docs/IPRange.md index 22b27ee..1ef5e34 100644 --- a/docs/IPRange.md +++ b/docs/IPRange.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] +**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/LocalSubnetConfig.md b/docs/LocalSubnetConfig.md index 52dc57e..2132b36 100644 --- a/docs/LocalSubnetConfig.md +++ b/docs/LocalSubnetConfig.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **prefix** | **int** | The network mask of the IP Range (default: 16). | **start** | **str** | The start IP for the IPRange (default: 10.0.0.10). | **total_host_count** | **str** | | +**wildcard_initiator_traffic** | **bool** | | **network_tags** | **List[str]** | A list of tags. | ## Example diff --git a/docs/Metadata.md b/docs/Metadata.md index fbe520a..eb74216 100644 --- a/docs/Metadata.md +++ b/docs/Metadata.md @@ -21,6 +21,7 @@ Name | Type | Description | Notes **sort_severity** | **str** | The field by which the severity is sorted | [optional] **static** | **bool** | If true, the application/strike is managed directly by the controller | [optional] **supported_apps** | **List[str]** | The apps that this strike can be used with | [optional] +**supported_http_versions** | **List[str]** | The HTTP versions supported by the application | [optional] **supports_http2** | **bool** | Indicates if the application supports HTTP2 multi-stream | [optional] **year** | **str** | The year of the strike | [optional] diff --git a/docs/PANGPEncapsulation.md b/docs/PANGPEncapsulation.md index 5c6a530..54e807c 100644 --- a/docs/PANGPEncapsulation.md +++ b/docs/PANGPEncapsulation.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **esp_over_udp_enabled** | **bool** | | **esp_over_udp_settings** | [**ESPOverUDPSettings**](ESPOverUDPSettings.md) | | [optional] +**enable_ikev2** | **bool** | | **encapsulation_mode** | **str** | The encapsulation mode for inner traffic. | **udp_port** | **int** | | **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/PlaylistSequencingMethod.md b/docs/PlaylistSequencingMethod.md new file mode 100644 index 0000000..d093436 --- /dev/null +++ b/docs/PlaylistSequencingMethod.md @@ -0,0 +1,17 @@ +# PlaylistSequencingMethod + +Use this property to switch between different playlist sequencing strategies + +## Enum + +* `SEQUENTIAL_PER_USER_PER_FLOW` (value: `'SEQUENTIAL_PER_USER_PER_FLOW'`) + +* `UNIQUE_OFFSET_SEQUENTIAL_PER_USER_PER_FLOW` (value: `'UNIQUE_OFFSET_SEQUENTIAL_PER_USER_PER_FLOW'`) + +* `SEQUENTIAL_GLOBAL_PER_FLOW` (value: `'SEQUENTIAL_GLOBAL_PER_FLOW'`) + +* `RANDOM_PER_USER_PER_FLOW` (value: `'RANDOM_PER_USER_PER_FLOW'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RemoteSubnetConfig.md b/docs/RemoteSubnetConfig.md index d21f07b..85b1aaa 100644 --- a/docs/RemoteSubnetConfig.md +++ b/docs/RemoteSubnetConfig.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **prefix** | **int** | The length (in bits) of the subnet mask to be applied to all the addresses created in the range. | **single_remote_subnet** | **bool** | | **start** | **str** | The base address for enumerating all the local subnets in the range | +**wildcard_responder_traffic** | **bool** | | ## Example diff --git a/docs/SequenceDataTypes.md b/docs/SequenceDataTypes.md new file mode 100644 index 0000000..d35b74f --- /dev/null +++ b/docs/SequenceDataTypes.md @@ -0,0 +1,14 @@ +# SequenceDataTypes + + +## Enum + +* `IP_SEQ` (value: `'IP_SEQ'`) + +* `MAC_SEQ` (value: `'MAC_SEQ'`) + +* `INT32_SEQ` (value: `'INT32_SEQ'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SequenceValue.md b/docs/SequenceValue.md new file mode 100644 index 0000000..91c3562 --- /dev/null +++ b/docs/SequenceValue.md @@ -0,0 +1,35 @@ +# SequenceValue + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**custom** | [**CustomSequence**](CustomSequence.md) | | [optional] +**data_type** | [**SequenceDataTypes**](SequenceDataTypes.md) | | [optional] +**increment** | [**SimpleSequenceValue**](SimpleSequenceValue.md) | | [optional] +**preview** | **List[str]** | | [optional] +**sequence_type** | [**SequenceValueTypes**](SequenceValueTypes.md) | | [optional] +**id** | **str** | | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.sequence_value import SequenceValue + +# TODO update the JSON string below +json = "{}" +# create an instance of SequenceValue from a JSON string +sequence_value_instance = SequenceValue.from_json(json) +# print the JSON string representation of the object +print(SequenceValue.to_json()) + +# convert the object into a dict +sequence_value_dict = sequence_value_instance.to_dict() +# create an instance of SequenceValue from a dict +sequence_value_from_dict = SequenceValue.from_dict(sequence_value_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SequenceValueTypes.md b/docs/SequenceValueTypes.md new file mode 100644 index 0000000..9a0cb4c --- /dev/null +++ b/docs/SequenceValueTypes.md @@ -0,0 +1,12 @@ +# SequenceValueTypes + + +## Enum + +* `INCREMENT` (value: `'INCREMENT'`) + +* `CUSTOM` (value: `'CUSTOM'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SimpleSequenceValue.md b/docs/SimpleSequenceValue.md new file mode 100644 index 0000000..9839406 --- /dev/null +++ b/docs/SimpleSequenceValue.md @@ -0,0 +1,31 @@ +# SimpleSequenceValue + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**start** | [**SingleValue**](SingleValue.md) | | [optional] +**step** | [**SingleValue**](SingleValue.md) | | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.simple_sequence_value import SimpleSequenceValue + +# TODO update the JSON string below +json = "{}" +# create an instance of SimpleSequenceValue from a JSON string +simple_sequence_value_instance = SimpleSequenceValue.from_json(json) +# print the JSON string representation of the object +print(SimpleSequenceValue.to_json()) + +# convert the object into a dict +simple_sequence_value_dict = simple_sequence_value_instance.to_dict() +# create an instance of SimpleSequenceValue from a dict +simple_sequence_value_from_dict = SimpleSequenceValue.from_dict(simple_sequence_value_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SingleValue.md b/docs/SingleValue.md new file mode 100644 index 0000000..365313f --- /dev/null +++ b/docs/SingleValue.md @@ -0,0 +1,32 @@ +# SingleValue + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bool_value** | **bool** | | [optional] +**float_value** | **float** | | [optional] +**integer_value** | **int** | | [optional] +**string_value** | **str** | | [optional] + +## Example + +```python +from cyperf.models.single_value import SingleValue + +# TODO update the JSON string below +json = "{}" +# create an instance of SingleValue from a JSON string +single_value_instance = SingleValue.from_json(json) +# print the JSON string representation of the object +print(SingleValue.to_json()) + +# convert the object into a dict +single_value_dict = single_value_instance.to_dict() +# create an instance of SingleValue from a dict +single_value_from_dict = SingleValue.from_dict(single_value_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/StreamProfile.md b/docs/StreamProfile.md index 189344f..0281ab9 100644 --- a/docs/StreamProfile.md +++ b/docs/StreamProfile.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **total_estimated_throughput** | **str** | | [optional] **total_estimated_throughput_per_simulated_user** | **str** | | [optional] **unique_pool_size** | **int** | | [optional] +**unrestricted_packet_rate** | **bool** | | [optional] ## Example diff --git a/docs/SubStep.md b/docs/SubStep.md new file mode 100644 index 0000000..2796d06 --- /dev/null +++ b/docs/SubStep.md @@ -0,0 +1,32 @@ +# SubStep + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**count** | **int** | | +**step** | [**SingleValue**](SingleValue.md) | | [optional] +**sub_steps** | [**List[SubStep]**](SubStep.md) | | +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.sub_step import SubStep + +# TODO update the JSON string below +json = "{}" +# create an instance of SubStep from a JSON string +sub_step_instance = SubStep.from_json(json) +# print the JSON string representation of the object +print(SubStep.to_json()) + +# convert the object into a dict +sub_step_dict = sub_step_instance.to_dict() +# create an instance of SubStep from a dict +sub_step_from_dict = SubStep.from_dict(sub_step_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/TrafficProfileBase.md b/docs/TrafficProfileBase.md index 31f48b9..a8e538a 100644 --- a/docs/TrafficProfileBase.md +++ b/docs/TrafficProfileBase.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/samples/sample_sequences_examples.py b/samples/sample_sequences_examples.py new file mode 100644 index 0000000..0db2fee --- /dev/null +++ b/samples/sample_sequences_examples.py @@ -0,0 +1,445 @@ +from dataclasses import dataclass, field + +import cyperf +from cyperf import AgentAssignments, IPNetwork, DUTNetwork, Address, DUTRange +from cyperf.utils import parse_cli_options + +BASE_CONFIG_NAME = "Cyperf Empty Config" + +OUTER_VLAN_ID = 200 +OUTER_VLAN_INCR = 1 +OUTER_VLAN_COUNT = 1 +OUTER_TPID = 0x88A8 +OUTER_INCREMENT_EVERY_NO_OF_IPS = 1 +OUTER_PRIORITY = 0 + +INNER_VLAN_ID = 100 +INNER_VLAN_INCR = 1 +INNER_VLAN_COUNT = 1 +INNER_TPID = 0x8100 +INNER_INCREMENT_EVERY_NO_OF_IPS = 1 +INNER_PRIORITY = 0 +HTTP_APP_SEARCH = "HTTP App" +DEFAULT_MSS = 1460 + +DEFAULT_COUNT = 18 +DEFAULT_SUB_STEP_COUNT = 3 +DEFAULT_CLIENT_START_IP="10.0.0.10" +DEFAULT_SERVER_START_IP="10.0.0.40" +DEFAULT_IP_INCREMENT="0.1.0.0" + +DEFAULT_CLIENT_START_MAC="10:00:00:00:00:10" +DEFAULT_SERVER_START_MAC="20:00:00:00:00:00" +DEFAULT_MAC_INCREMENT="00:00:00:01:00:00" + +@dataclass +class StepNode: + step: str + count: int = field(default=DEFAULT_SUB_STEP_COUNT) + sub_steps: list["StepNode"] = field(default_factory=list) + + def to_substep(self): + return _step_s( + step=self.step, + count=self.count, + sub_steps=[c.to_substep() for c in self.sub_steps], + ) + +IP_SUBSTEPS=[ + StepNode(step="0.0.1.0", sub_steps=[StepNode("0.0.0.1")]), + StepNode(step="0.0.2.0", sub_steps=[StepNode("0.0.0.2")]), +] + +MAC_SUBSTEPS=[ + StepNode(step="00:00:00:00:01:00", sub_steps=[StepNode("00:00:00:00:00:01")]), + StepNode(step="00:00:00:00:02:00", sub_steps=[StepNode("00:00:00:00:00:02")]), +] + +def _create_api_client_from_cli(): + args, offline_token = parse_cli_options( + extra_options=[ + ("--client-agent-ip", "Agent IP to assign to IP Network 1", True), + ("--server-agent-ip", "Agent IP to assign to IP Network 2", True), + ] + ) + + configuration = cyperf.Configuration( + host=f"https://{args.controller}", + refresh_token=offline_token, + username=args.user, + password=args.password, + ) + configuration.verify_ssl = False + api_client = cyperf.ApiClient(configuration) + + return api_client, args.client_agent_ip, args.server_agent_ip + +def _find_config_url(api_client, config_name: str) -> str: + configs_api = cyperf.ConfigurationsApi(api_client) + configs = configs_api.get_configs( + take=1, + search_col="displayName", + search_val=config_name, + ) + + if not configs.data: + raise ValueError(f"Configuration '{config_name}' was not found.") + + return configs.data[0].config_url + +def _create_session(api_client, config_url: str): + sessions_api = cyperf.SessionsApi(api_client) + sessions = sessions_api.create_sessions([cyperf.Session(config_url=config_url)]) + if not sessions: + raise RuntimeError("Failed to create session.") + return sessions[0] + +def _add_application_profile_with_http_app(api_client, session): + sessions_api = cyperf.SessionsApi(api_client) + app_resources_api = cyperf.ApplicationResourcesApi(api_client) + + traffic_profiles = session.config.config.traffic_profiles + existing_profiles = len(traffic_profiles) if traffic_profiles else 0 + traffic_profiles.append(cyperf.ApplicationProfile(Name="Application Profile")) + traffic_profiles.update() + + apps = app_resources_api.get_resources_apps( + take=1, + skip=0, + search_col="Name", + search_val=HTTP_APP_SEARCH, + sort="Name:asc", + ) + if not apps.data: + raise ValueError(f"No application found for search value '{HTTP_APP_SEARCH}'.") + + app = apps.data[0] + traffic_profile_id = str(existing_profiles + 1) + operation = sessions_api.start_config_add_applications( + session.id, + traffic_profile_id, + external_resource_info=[ + cyperf.ExternalResourceInfo(externalResourceURL=str(app.id)) + ], + ) + operation.await_completion() + +def _ip_range(name: str, count: int): + return cyperf.IPRange( + GwAuto=False, + IpAuto=False, + IpRangeName=name, + MssAuto=True, + Mss=DEFAULT_MSS, + NetMaskAuto=False, + NetMask=16, + VLANType=cyperf.VLANType.VLAN_NONE, + HostCount=1, + IpVer=cyperf.IpVer.IPV4, + Count=count, + GwStart="10.0.0.1", + ) + +def _create_ip_range(ip_net, count, ip_address_seq: cyperf.SequenceValue, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + default_ip_range = _ip_range(f"{ip_net.name} Range 1", count) + ip_net.ip_ranges = [default_ip_range] + ip_net.ip_ranges.update() + ip_range = ip_net.ip_ranges[0] + ip_range.ip_auto = False + ip_range.gw_auto = False + ip_range.count = count + ip_range.max_count_per_agent = count + ip_range.gw_start = "10.0.0.0" + ip_range.mss = DEFAULT_MSS + ip_range.ip_address = ip_address_seq + if inner_vlan is not None: + ip_range.vlan_type = cyperf.VLANType.VLAN + ip_range.inner_vlan_range = inner_vlan + if outer_vlan is not None: + ip_range.vlan_type = cyperf.VLANType.VLAN_IN_VLAN + ip_range.outer_vlan_range = outer_vlan + + ip_range.update() + +def _ip_seq(seq_type: cyperf.SequenceValueTypes, ip_start: str, increment: str, sub_steps: list[cyperf.SubStep] | None = None): + return _sequence(seq_type, ip_start, increment, cyperf.SequenceDataTypes.IP_SEQ, *(sub_steps or [])) + +def _mac_seq(seq_type: cyperf.SequenceValueTypes, ip_start: str, increment: str, sub_steps: list[cyperf.SubStep] | None = None): + return _sequence(seq_type, ip_start, increment, cyperf.SequenceDataTypes.MAC_SEQ, *(sub_steps or [])) + +def _step_s(step: str, count: int, sub_steps: list[cyperf.SubStep] | None = None): + return cyperf.SubStep( + Step=cyperf.SingleValue( + StringValue=step, + ), + Count=count, + SubSteps=sub_steps or [] + ) + +def _dut_address(count: int, ip_seq: cyperf.SequenceValue, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + address = Address( + UseRange=True, + Range=DUTRange( + Count=count, + Ip=ip_seq, + VLANType=cyperf.VLANType.VLAN_NONE + ) + ) + if inner_vlan is not None: + address.range.vlan_type = cyperf.VLANType.VLAN + address.range.inner_vlan_range = inner_vlan + if outer_vlan is not None: + address.range.vlan_type = cyperf.VLANType.VLAN_IN_VLAN + address.range.outer_vlan_range = outer_vlan + return address + +def _dut(inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + dut_seq = _ip_seq( + seq_type=cyperf.SequenceValueTypes.CUSTOM, + ip_start=DEFAULT_SERVER_START_IP, + increment=DEFAULT_IP_INCREMENT, + sub_steps=[n.to_substep() for n in IP_SUBSTEPS] + ) + return DUTNetwork( + id="1", + Name="DUT Network 1", + ConfigSettings="ADVANCED_MODE", + ServerDUTAddress=_dut_address( + count=DEFAULT_COUNT, + ip_seq=dut_seq, + inner_vlan=inner_vlan, + outer_vlan=outer_vlan), + active=True, + ServerDUTActive=True, + ) + +def _sequence(seq_type: cyperf.SequenceValueTypes, ip_start: str, increment: str, seq_data_type: cyperf.SequenceDataTypes, *sub_steps: cyperf.SubStep): + return cyperf.SequenceValue( + SequenceType=seq_type, + Custom=cyperf.CustomSequence( + Start=cyperf.SingleValue( + StringValue=ip_start + ), + Step=cyperf.SingleValue( + StringValue=increment + ), + SubSteps=list(sub_steps), + ), + Increment=cyperf.SimpleSequenceValue( + Start=cyperf.SingleValue( + StringValue=ip_start + ), + Step=cyperf.SingleValue( + StringValue=increment + ), + ), + DataType=seq_data_type, + ) + +def _vlan_range(vlan_range_name: str, vlan_id: int, vlan_incr: int, vlan_count: int, tpid: int, increment_every_no_of_ips: int = 1, priority: int = 0, +): + vlan_range = cyperf.VLANRange(VlanAuto=False, VlanRangeName=vlan_range_name, VlanId=vlan_id) + vlan_range.vlan_auto = False + vlan_range.vlan_id = vlan_id + vlan_range.vlan_incr = vlan_incr + vlan_range.count = vlan_count + vlan_range.priority = priority + vlan_range.tag_protocol_id = tpid + vlan_range.count_per_agent = 1 + vlan_range.increment_every_no_of_ips = increment_every_no_of_ips + return vlan_range + +def configure_networks(session, dut_id: str | None = None): + if not session.config.config.network_profiles: + raise ValueError("Session configuration has no network profiles.") + + dut_connections: list[str] = ["1"] + if dut_id is not None: + dut_connections = [dut_id] + client_net = IPNetwork(Name="IP Network 1", id="1", agentAssignments=AgentAssignments(ByID=[], ByTag=[]), minAgents=1, IPRanges=[], DUTConnections=dut_connections) + server_net = IPNetwork(Name="IP Network 2", id="2", agentAssignments=AgentAssignments(ByID=[], ByTag=[]), minAgents=1, IPRanges=[], DUTConnections=dut_connections) + session.config.config.network_profiles[0].ip_network_segment = [client_net, server_net] + session.config.config.network_profiles[0].ip_network_segment.update() + +def configure_dut(session, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + if not session.config.config.network_profiles: + raise ValueError("Session configuration has no network profiles.") + + session.config.config.network_profiles[0].dut_network_segment = [_dut(inner_vlan, outer_vlan)] + session.config.config.network_profiles[0].dut_network_segment.update() + + return session.config.config.network_profiles[0].dut_network_segment[0].id + +def configure_ip_ranges(session, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + client_net = session.config.config.network_profiles[0].ip_network_segment[0] + server_net = session.config.config.network_profiles[0].ip_network_segment[1] + _create_ip_range(client_net, DEFAULT_COUNT, _ip_seq( + seq_type=cyperf.SequenceValueTypes.INCREMENT, + ip_start=DEFAULT_CLIENT_START_IP, + increment=DEFAULT_IP_INCREMENT + ), inner_vlan, outer_vlan) + _create_ip_range(server_net, DEFAULT_COUNT, _ip_seq( + seq_type=cyperf.SequenceValueTypes.CUSTOM, + ip_start=DEFAULT_SERVER_START_IP, + increment=DEFAULT_IP_INCREMENT, + sub_steps=[n.to_substep() for n in IP_SUBSTEPS] + ), inner_vlan, outer_vlan) + +def _mac_dtls(name: str, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + mac_dtls_stack = cyperf.MacDtlsStack( + id="1", + DTLSRangeName=name, + TunnelDestinationMacStart="AA:BB:CC:DD:EE:FF", + TunnelDestinationMacIncr="00:00:00:00:00:01", + InIV="0x22222222", + InIVIncr="0x00000001", + InKey="0xBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB", + InKeyIncr="0x0000000000000000000000000000000000000000000000000000000000000001", + OutIV="0x11111111", + OutIVIncr="0x00000001", + OutKey="0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + OutKeyIncr="0x0000000000000000000000000000000000000000000000000000000000000001", + TunnelCount=1 + ) + mac_dtls_stack.ip_range = _ip_range(f"{name} IP Range 1", DEFAULT_COUNT) + if inner_vlan is not None: + mac_dtls_stack.vlan_type = cyperf.VLANType.VLAN + mac_dtls_stack.vlan_range = inner_vlan + if outer_vlan is not None: + mac_dtls_stack.vlan_type = cyperf.VLANType.VLAN_IN_VLAN + mac_dtls_stack.outer_vlan_range = outer_vlan + return mac_dtls_stack + +def configure_mac_dtls(session, inner_vlan: cyperf.VLANRange | None = None, outer_vlan: cyperf.VLANRange | None = None): + client_net = session.config.config.network_profiles[0].ip_network_segment[0] + server_net = session.config.config.network_profiles[0].ip_network_segment[1] + client_net.mac_dtls_stacks = [_mac_dtls("Client MAC-DTLS 1", inner_vlan, outer_vlan)] + server_net.mac_dtls_stacks = [_mac_dtls("Server MAC-DTLS 1", inner_vlan, outer_vlan)] + client_net.mac_dtls_stacks.update() + server_net.mac_dtls_stacks.update() + + client_mac_dtls = client_net.mac_dtls_stacks[0] + client_mac_dtls.dtls_enabled = False + client_mac_dtls.update() + + client_ip_range = client_mac_dtls.ip_range + client_ip_range.ip_address = _ip_seq( + seq_type=cyperf.SequenceValueTypes.INCREMENT, + ip_start=DEFAULT_CLIENT_START_IP, + increment=DEFAULT_IP_INCREMENT + ) + client_ip_range.update() + + server_mac_dtls = server_net.mac_dtls_stacks[0] + server_mac_dtls.dtls_enabled = False + server_mac_dtls.update() + + server_ip_range = server_mac_dtls.ip_range + server_ip_range.ip_address = _ip_seq( + seq_type=cyperf.SequenceValueTypes.CUSTOM, + ip_start=DEFAULT_SERVER_START_IP, + increment=DEFAULT_IP_INCREMENT, + sub_steps=[n.to_substep() for n in IP_SUBSTEPS] + ) + server_ip_range.update() + + +def configure_ethernet(session): + client_net = session.config.config.network_profiles[0].ip_network_segment[0] + server_net = session.config.config.network_profiles[0].ip_network_segment[1] + + client_net.eth_range.mac_auto = False + client_net.eth_range.one_mac_per_ip = False + client_net.eth_range.mac_address = _mac_seq( + seq_type=cyperf.SequenceValueTypes.INCREMENT, + ip_start=DEFAULT_CLIENT_START_MAC, + increment=DEFAULT_MAC_INCREMENT, + ) + client_net.eth_range.update() + server_net.eth_range.mac_auto = False + server_net.eth_range.one_mac_per_ip = False + server_net.eth_range.mac_address = _mac_seq( + seq_type=cyperf.SequenceValueTypes.CUSTOM, + ip_start=DEFAULT_SERVER_START_MAC, + increment=DEFAULT_MAC_INCREMENT, + sub_steps=[n.to_substep() for n in MAC_SUBSTEPS] + ) + server_net.eth_range.update() + +def assign_agents_by_ip(api_client, session, network_to_agent_ip): + agents_api = cyperf.AgentsApi(api_client) + available_agents = agents_api.get_agents(exclude_offline="true") + available_by_ip = {agent.ip: agent for agent in available_agents} + + net_profile = session.config.config.network_profiles[0] + + for idx, ip_net in enumerate(net_profile.ip_network_segment): + if ip_net.name not in network_to_agent_ip: + continue + + agent_ip = network_to_agent_ip[ip_net.name] + if agent_ip not in available_by_ip: + raise ValueError( + f"Agent IP '{agent_ip}' is not connected or is offline." + ) + + agent = available_by_ip[agent_ip] + agent_details = [cyperf.AgentAssignmentDetails(agentId=agent.id, id = str(idx))] + ip_net.agent_assignments.by_id = agent_details + ip_net.agent_assignments.update() + +if __name__ == "__main__": + import urllib3 + + urllib3.disable_warnings() + + api_client, client_agent_ip, server_agent_ip = _create_api_client_from_cli() + + with api_client: + config_url = _find_config_url(api_client, BASE_CONFIG_NAME) + session = _create_session(api_client, config_url) + + print(f"Session created: {session.id}") + print("Creating application profile with HTTP app...") + _add_application_profile_with_http_app(api_client, session) + + + print("Applying Network settings...") + + #without VLAN + inner_vlan = None + outer_vlan = None + + #with VLAN + inner_vlan = _vlan_range('inner_vlan', INNER_VLAN_ID, INNER_VLAN_INCR, INNER_VLAN_COUNT, INNER_TPID, 1, INNER_PRIORITY) + outer_vlan = _vlan_range('outer_vlan', OUTER_VLAN_ID, OUTER_VLAN_INCR, OUTER_VLAN_COUNT, OUTER_TPID, 1, OUTER_PRIORITY) + + print("Configuring DUT") + dut_id = None + + #uncomment this line for plain IP, comment it for MAC DTLS + dut_id = configure_dut(session, inner_vlan, outer_vlan) + print("Configuring Networks") + configure_networks(session, dut_id) + print("Configuring ethernet for networks") + configure_ethernet(session) + print("Configuring IP ranges for networks") + + #uncomment this line for plain IP, comment it for MAC DTLS + configure_ip_ranges(session, inner_vlan, outer_vlan) + + #uncomment this line for MAC DTLS, comment it for plain IP + # configure_mac_dtls(session, inner_vlan, outer_vlan) + print("Network configured successfully.") + + print("Assigning agents by IP...") + assign_agents_by_ip( + api_client, + session, + { + "IP Network 1": client_agent_ip, + "IP Network 2": server_agent_ip, + }, + ) + + print("Test is now configured!") From 7deb5d534369a135041ac5a452f6ddd705d6306c Mon Sep 17 00:00:00 2001 From: AndreiCostin Martin Date: Thu, 4 Jun 2026 02:29:06 -0600 Subject: [PATCH 10/26] Pull request #75: Fix/ISGAPPSEC2 38042/encrypted payloads Merge in ISGAPPSEC/cyperf-api-wrapper from fix/ISGAPPSEC2-38042/encrypted_payloads to main Squashed commit of the following: commit 9c23dc992185a0ca88b3d43461d02f4738c34334 Author: Andrei Martin Date: Wed Jun 3 18:10:29 2026 +0300 Add async context to encrypted captures uploadfile Signed-off-by: Andrei Martin commit 2533f57786a51e07429e901f2377a975dd13fb7e Author: Andrei Martin Date: Wed Jun 3 17:23:58 2026 +0300 Actualy ssl key file required for encrypted endpoint Signed-off-by: Andrei Martin commit 135ed98a0408f4a13bc251646039d3e0b324a0fd Author: Andrei Martin Date: Wed Jun 3 17:19:07 2026 +0300 The ssl key file is optional Signed-off-by: Andrei Martin commit 179f7d3483f33eb67d5a4b2e0b648843fd301ea1 Author: Andrei Martin Date: Wed Jun 3 16:42:51 2026 +0300 Update wrapper Signed-off-by: Andrei Martin --- README.md | 10 ------- cyperf/__init__.py | 10 ------- cyperf/api/application_resources_api.py | 37 +++++++++++++++++-------- cyperf/dynamic_models/__init__.py | 10 ------- cyperf/models/__init__.py | 10 ------- cyperf/models/action.py | 5 +--- cyperf/models/action_base.py | 5 +--- cyperf/models/application_profile.py | 5 +--- cyperf/models/attack_action.py | 5 +--- cyperf/models/attack_profile.py | 5 +--- cyperf/models/dut_network.py | 8 +----- cyperf/models/emulated_router_range.py | 8 +----- cyperf/models/eth_range.py | 8 +----- cyperf/models/ip_range.py | 8 +----- cyperf/models/local_subnet_config.py | 6 ++-- cyperf/models/metadata.py | 4 +-- cyperf/models/pangp_encapsulation.py | 4 +-- cyperf/models/remote_subnet_config.py | 6 ++-- cyperf/models/stream_profile.py | 8 ++---- cyperf/models/traffic_profile_base.py | 5 +--- docs/Action.md | 1 - docs/ActionBase.md | 1 - docs/ApplicationProfile.md | 1 - docs/ApplicationResourcesApi.md | 15 ++++++---- docs/AttackAction.md | 1 - docs/AttackProfile.md | 1 - docs/DUTNetwork.md | 1 - docs/EmulatedRouterRange.md | 1 - docs/EthRange.md | 1 - docs/IPRange.md | 1 - docs/LocalSubnetConfig.md | 1 - docs/Metadata.md | 1 - docs/PANGPEncapsulation.md | 1 - docs/RemoteSubnetConfig.md | 1 - docs/StreamProfile.md | 1 - docs/TrafficProfileBase.md | 1 - 36 files changed, 55 insertions(+), 142 deletions(-) diff --git a/README.md b/README.md index c7fdfe6..5d530c3 100644 --- a/README.md +++ b/README.md @@ -399,7 +399,6 @@ Class | Method | HTTP request | Description - [ActivationCodeRequest](docs/ActivationCodeRequest.md) - [AddActionInfo](docs/AddActionInfo.md) - [AddInput](docs/AddInput.md) - - [Address](docs/Address.md) - [AdvancedSettings](docs/AdvancedSettings.md) - [Agent](docs/Agent.md) - [AgentAssignmentByPort](docs/AgentAssignmentByPort.md) @@ -480,13 +479,11 @@ Class | Method | HTTP request | Description - [CreateAppOrAttackOperationInput](docs/CreateAppOrAttackOperationInput.md) - [CustomDashboards](docs/CustomDashboards.md) - [CustomImportHandler](docs/CustomImportHandler.md) - - [CustomSequence](docs/CustomSequence.md) - [CustomStat](docs/CustomStat.md) - [DNSResolver](docs/DNSResolver.md) - [DNSServer](docs/DNSServer.md) - [DTLSSettings](docs/DTLSSettings.md) - [DUTNetwork](docs/DUTNetwork.md) - - [DUTRange](docs/DUTRange.md) - [Dashboard](docs/Dashboard.md) - [DataType](docs/DataType.md) - [DataTypeValuesInner](docs/DataTypeValuesInner.md) @@ -688,7 +685,6 @@ Class | Method | HTTP request | Description - [PepDUT](docs/PepDUT.md) - [PfsP2Group](docs/PfsP2Group.md) - [PlaylistMetadata](docs/PlaylistMetadata.md) - - [PlaylistSequencingMethod](docs/PlaylistSequencingMethod.md) - [Plugin](docs/Plugin.md) - [PluginStats](docs/PluginStats.md) - [Port](docs/Port.md) @@ -725,9 +721,6 @@ Class | Method | HTTP request | Description - [SecondaryObjective](docs/SecondaryObjective.md) - [SegmentType](docs/SegmentType.md) - [SelectedEnv](docs/SelectedEnv.md) - - [SequenceDataTypes](docs/SequenceDataTypes.md) - - [SequenceValue](docs/SequenceValue.md) - - [SequenceValueTypes](docs/SequenceValueTypes.md) - [Session](docs/Session.md) - [SessionReuseMethodTLS12](docs/SessionReuseMethodTLS12.md) - [SessionReuseMethodTLS13](docs/SessionReuseMethodTLS13.md) @@ -737,9 +730,7 @@ Class | Method | HTTP request | Description - [SetLinkStateOperation](docs/SetLinkStateOperation.md) - [SetNodesAppOperation](docs/SetNodesAppOperation.md) - [SetNtpOperationInput](docs/SetNtpOperationInput.md) - - [SimpleSequenceValue](docs/SimpleSequenceValue.md) - [SimulatedIdP](docs/SimulatedIdP.md) - - [SingleValue](docs/SingleValue.md) - [Snapshot](docs/Snapshot.md) - [SnowflakeExporter](docs/SnowflakeExporter.md) - [SortBodyField](docs/SortBodyField.md) @@ -753,7 +744,6 @@ Class | Method | HTTP request | Description - [StreamDirection](docs/StreamDirection.md) - [StreamPayloadType](docs/StreamPayloadType.md) - [StreamProfile](docs/StreamProfile.md) - - [SubStep](docs/SubStep.md) - [SupportedGroupTLS13](docs/SupportedGroupTLS13.md) - [SystemInfo](docs/SystemInfo.md) - [TLSProfile](docs/TLSProfile.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index eb29d89..6a7fee7 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -64,7 +64,6 @@ from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput -from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort @@ -145,13 +144,11 @@ from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler -from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork -from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -353,7 +350,6 @@ from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata -from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port @@ -390,9 +386,6 @@ from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv -from cyperf.models.sequence_data_types import SequenceDataTypes -from cyperf.models.sequence_value import SequenceValue -from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 @@ -402,9 +395,7 @@ from cyperf.models.set_link_state_operation import SetLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput -from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP -from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -418,7 +409,6 @@ from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile -from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/api/application_resources_api.py b/cyperf/api/application_resources_api.py index 3bf9bca..aa42349 100644 --- a/cyperf/api/application_resources_api.py +++ b/cyperf/api/application_resources_api.py @@ -30951,7 +30951,8 @@ def _start_resources_captures_batch_delete_serialize( @validate_call def start_resources_captures_encrypted_upload_file( self, - file: Optional[Union[StrictBytes, StrictStr]] = None, + file: Union[StrictBytes, StrictStr], + ssl_key_log_file: Union[StrictBytes, StrictStr], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -30964,13 +30965,15 @@ def start_resources_captures_encrypted_upload_file( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: + ) -> AsyncContext: """start_resources_captures_encrypted_upload_file Upload a file. - :param file: + :param file: (required) :type file: bytearray + :param ssl_key_log_file: (required) + :type ssl_key_log_file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -30995,6 +30998,7 @@ def start_resources_captures_encrypted_upload_file( _param = self._start_resources_captures_encrypted_upload_file_serialize( file=file, + ssl_key_log_file=ssl_key_log_file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -31002,7 +31006,7 @@ def start_resources_captures_encrypted_upload_file( ) _response_types_map: Dict[str, Optional[str]] = { - '202': None, + '202': "AsyncContext", '500': "ErrorResponse", } return self.api_client.call_api( @@ -31015,7 +31019,8 @@ def start_resources_captures_encrypted_upload_file( @validate_call def start_resources_captures_encrypted_upload_file_with_http_info( self, - file: Optional[Union[StrictBytes, StrictStr]] = None, + file: Union[StrictBytes, StrictStr], + ssl_key_log_file: Union[StrictBytes, StrictStr], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -31028,13 +31033,15 @@ def start_resources_captures_encrypted_upload_file_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[None]: + ) -> ApiResponse[AsyncContext]: """start_resources_captures_encrypted_upload_file Upload a file. - :param file: + :param file: (required) :type file: bytearray + :param ssl_key_log_file: (required) + :type ssl_key_log_file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -31059,6 +31066,7 @@ def start_resources_captures_encrypted_upload_file_with_http_info( _param = self._start_resources_captures_encrypted_upload_file_serialize( file=file, + ssl_key_log_file=ssl_key_log_file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -31066,7 +31074,7 @@ def start_resources_captures_encrypted_upload_file_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '202': None, + '202': "AsyncContext", '500': "ErrorResponse", } return self.api_client.call_api( @@ -31079,7 +31087,8 @@ def start_resources_captures_encrypted_upload_file_with_http_info( @validate_call def start_resources_captures_encrypted_upload_file_without_preload_content( self, - file: Optional[Union[StrictBytes, StrictStr]] = None, + file: Union[StrictBytes, StrictStr], + ssl_key_log_file: Union[StrictBytes, StrictStr], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -31097,8 +31106,10 @@ def start_resources_captures_encrypted_upload_file_without_preload_content( Upload a file. - :param file: + :param file: (required) :type file: bytearray + :param ssl_key_log_file: (required) + :type ssl_key_log_file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -31123,6 +31134,7 @@ def start_resources_captures_encrypted_upload_file_without_preload_content( _param = self._start_resources_captures_encrypted_upload_file_serialize( file=file, + ssl_key_log_file=ssl_key_log_file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -31130,7 +31142,7 @@ def start_resources_captures_encrypted_upload_file_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '202': None, + '202': "AsyncContext", '500': "ErrorResponse", } return self.api_client.call_api( @@ -31143,6 +31155,7 @@ def start_resources_captures_encrypted_upload_file_without_preload_content( def _start_resources_captures_encrypted_upload_file_serialize( self, file, + ssl_key_log_file, _request_auth, _content_type, _headers, @@ -31167,6 +31180,8 @@ def _start_resources_captures_encrypted_upload_file_serialize( # process the form parameters if file is not None: _files['file'] = file + if ssl_key_log_file is not None: + _files['sslKeyLogFile'] = ssl_key_log_file # process the body parameter diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 2021a3c..d29722e 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -30,7 +30,6 @@ ActivationCodeRequest = DynamicModel('ActivationCodeRequest', (), {} ) AddActionInfo = DynamicModel('AddActionInfo', (), {} ) AddInput = DynamicModel('AddInput', (), {} ) -Address = DynamicModel('Address', (), {} ) AdvancedSettings = DynamicModel('AdvancedSettings', (), {} ) Agent = DynamicModel('Agent', (), {} ) AgentAssignmentByPort = DynamicModel('AgentAssignmentByPort', (), {} ) @@ -111,13 +110,11 @@ CreateAppOrAttackOperationInput = DynamicModel('CreateAppOrAttackOperationInput', (), {} ) CustomDashboards = DynamicModel('CustomDashboards', (), {} ) CustomImportHandler = DynamicModel('CustomImportHandler', (), {} ) -CustomSequence = DynamicModel('CustomSequence', (), {} ) CustomStat = DynamicModel('CustomStat', (), {} ) DNSResolver = DynamicModel('DNSResolver', (), {} ) DNSServer = DynamicModel('DNSServer', (), {} ) DTLSSettings = DynamicModel('DTLSSettings', (), {} ) DUTNetwork = DynamicModel('DUTNetwork', (), {} ) -DUTRange = DynamicModel('DUTRange', (), {} ) Dashboard = DynamicModel('Dashboard', (), {} ) DataType = DynamicModel('DataType', (), {} ) DataTypeValuesInner = DynamicModel('DataTypeValuesInner', (), {} ) @@ -319,7 +316,6 @@ PepDUT = DynamicModel('PepDUT', (), {} ) PfsP2Group = DynamicModel('PfsP2Group', (), {} ) PlaylistMetadata = DynamicModel('PlaylistMetadata', (), {} ) -PlaylistSequencingMethod = DynamicModel('PlaylistSequencingMethod', (), {} ) Plugin = DynamicModel('Plugin', (), {} ) PluginStats = DynamicModel('PluginStats', (), {} ) Port = DynamicModel('Port', (), {} ) @@ -356,9 +352,6 @@ SecondaryObjective = DynamicModel('SecondaryObjective', (), {} ) SegmentType = DynamicModel('SegmentType', (), {} ) SelectedEnv = DynamicModel('SelectedEnv', (), {} ) -SequenceDataTypes = DynamicModel('SequenceDataTypes', (), {} ) -SequenceValue = DynamicModel('SequenceValue', (), {} ) -SequenceValueTypes = DynamicModel('SequenceValueTypes', (), {} ) Session = DynamicModel('Session', (), {} ) SessionReuseMethodTLS12 = DynamicModel('SessionReuseMethodTLS12', (), {} ) SessionReuseMethodTLS13 = DynamicModel('SessionReuseMethodTLS13', (), {} ) @@ -368,9 +361,7 @@ SetLinkStateOperation = DynamicModel('SetLinkStateOperation', (), {} ) SetNodesAppOperation = DynamicModel('SetNodesAppOperation', (), {} ) SetNtpOperationInput = DynamicModel('SetNtpOperationInput', (), {} ) -SimpleSequenceValue = DynamicModel('SimpleSequenceValue', (), {} ) SimulatedIdP = DynamicModel('SimulatedIdP', (), {} ) -SingleValue = DynamicModel('SingleValue', (), {} ) Snapshot = DynamicModel('Snapshot', (), {} ) SnowflakeExporter = DynamicModel('SnowflakeExporter', (), {} ) SortBodyField = DynamicModel('SortBodyField', (), {} ) @@ -384,7 +375,6 @@ StreamDirection = DynamicModel('StreamDirection', (), {} ) StreamPayloadType = DynamicModel('StreamPayloadType', (), {} ) StreamProfile = DynamicModel('StreamProfile', (), {} ) -SubStep = DynamicModel('SubStep', (), {} ) SupportedGroupTLS13 = DynamicModel('SupportedGroupTLS13', (), {} ) SystemInfo = DynamicModel('SystemInfo', (), {} ) TLSProfile = DynamicModel('TLSProfile', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 3b056c3..a7516f4 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -30,7 +30,6 @@ class LinkNameException(Exception): from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput -from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort @@ -111,13 +110,11 @@ class LinkNameException(Exception): from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler -from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork -from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -319,7 +316,6 @@ class LinkNameException(Exception): from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata -from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port @@ -356,9 +352,6 @@ class LinkNameException(Exception): from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv -from cyperf.models.sequence_data_types import SequenceDataTypes -from cyperf.models.sequence_value import SequenceValue -from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 @@ -368,9 +361,7 @@ class LinkNameException(Exception): from cyperf.models.set_link_state_operation import SetLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput -from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP -from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -384,7 +375,6 @@ class LinkNameException(Exception): from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile -from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/models/action.py b/cyperf/models/action.py index 6e029e0..6a16cfc 100644 --- a/cyperf/models/action.py +++ b/cyperf/models/action.py @@ -23,7 +23,6 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange -from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -46,10 +45,9 @@ class Action(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") - supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -148,7 +146,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), - "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/action_base.py b/cyperf/models/action_base.py index 2465540..6b185c7 100644 --- a/cyperf/models/action_base.py +++ b/cyperf/models/action_base.py @@ -23,7 +23,6 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange -from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -46,10 +45,9 @@ class ActionBase(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") - supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -148,7 +146,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), - "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/application_profile.py b/cyperf/models/application_profile.py index 2b90483..8559031 100644 --- a/cyperf/models/application_profile.py +++ b/cyperf/models/application_profile.py @@ -25,7 +25,6 @@ from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping from cyperf.models.objectives_and_timeline import ObjectivesAndTimeline -from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -37,7 +36,6 @@ class ApplicationProfile(BaseModel): ApplicationProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") - playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -54,7 +52,7 @@ class ApplicationProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateTrafficProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetTrafficProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -154,7 +152,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), - "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/attack_action.py b/cyperf/models/attack_action.py index f261776..03923e0 100644 --- a/cyperf/models/attack_action.py +++ b/cyperf/models/attack_action.py @@ -23,7 +23,6 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange -from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -46,10 +45,9 @@ class AttackAction(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") - supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -148,7 +146,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), - "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/attack_profile.py b/cyperf/models/attack_profile.py index 7ac4116..643e4f6 100644 --- a/cyperf/models/attack_profile.py +++ b/cyperf/models/attack_profile.py @@ -25,7 +25,6 @@ from cyperf.models.attack_objectives_and_timeline import AttackObjectivesAndTimeline from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping -from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -37,7 +36,6 @@ class AttackProfile(BaseModel): AttackProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") - playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -54,7 +52,7 @@ class AttackProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateAttackProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetAttackProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -154,7 +152,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), - "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index 8d74b23..f02ea23 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -21,7 +21,6 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated -from cyperf.models.address import Address from cyperf.models.api_link import APILink from cyperf.models.health_check_config import HealthCheckConfig from cyperf.models.params import Params @@ -55,7 +54,6 @@ class DUTNetwork(BaseModel): reverse_proxy_pep_dut: Optional[PepDUT] = Field(default=None, alias="ReverseProxyPepDUT") reverse_proxy_pep_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false)", alias="ReverseProxyPepDUTActive") server_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)", alias="ServerDUTActive") - server_dut_address: Optional[Address] = Field(default=None, alias="ServerDUTAddress") server_dut_host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.", alias="ServerDUTHost") server_dut_port: Optional[StrictInt] = Field(default=None, description="The listen port for server-side DUT", alias="ServerDUTPort") tcp_health_check: Optional[HealthCheckConfig] = Field(default=None, description="The TCP HealthCheck configuration for DUT", alias="TCPHealthCheck") @@ -63,7 +61,7 @@ class DUTNetwork(BaseModel): active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)") host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTAddress", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -189,9 +187,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of reverse_proxy_pep_dut if self.reverse_proxy_pep_dut: _dict['ReverseProxyPepDUT'] = self.reverse_proxy_pep_dut.to_dict() - # override the default output from pydantic by calling `to_dict()` of server_dut_address - if self.server_dut_address: - _dict['ServerDUTAddress'] = self.server_dut_address.to_dict() # override the default output from pydantic by calling `to_dict()` of tcp_health_check if self.tcp_health_check: _dict['TCPHealthCheck'] = self.tcp_health_check.to_dict() @@ -237,7 +232,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ReverseProxyPepDUT": PepDUT.from_dict(obj["ReverseProxyPepDUT"]) if obj.get("ReverseProxyPepDUT") is not None else None, "ReverseProxyPepDUTActive": obj.get("ReverseProxyPepDUTActive"), "ServerDUTActive": obj.get("ServerDUTActive"), - "ServerDUTAddress": Address.from_dict(obj["ServerDUTAddress"]) if obj.get("ServerDUTAddress") is not None else None, "ServerDUTHost": obj.get("ServerDUTHost"), "ServerDUTPort": obj.get("ServerDUTPort"), "TCPHealthCheck": HealthCheckConfig.from_dict(obj["TCPHealthCheck"]) if obj.get("TCPHealthCheck") is not None else None, diff --git a/cyperf/models/emulated_router_range.py b/cyperf/models/emulated_router_range.py index 1fe348d..2b88b82 100644 --- a/cyperf/models/emulated_router_range.py +++ b/cyperf/models/emulated_router_range.py @@ -24,7 +24,6 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer -from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -41,7 +40,6 @@ class EmulatedRouterRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") - ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -58,7 +56,7 @@ class EmulatedRouterRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -139,9 +137,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() - # override the default output from pydantic by calling `to_dict()` of ip_address - if self.ip_address: - _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -172,7 +167,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, - "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/eth_range.py b/cyperf/models/eth_range.py index 0bf2674..964ed14 100644 --- a/cyperf/models/eth_range.py +++ b/cyperf/models/eth_range.py @@ -22,7 +22,6 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from cyperf.models.api_link import APILink -from cyperf.models.sequence_value import SequenceValue from cyperf.models.static_arp_entry import StaticARPEntry from typing import Optional, Set, Union from typing_extensions import Self @@ -33,7 +32,6 @@ class EthRange(BaseModel): The Ethernet Ranges assigned to the current test configuration """ # noqa: E501 count: Optional[StrictInt] = Field(default=None, alias="Count") - mac_address: Optional[SequenceValue] = Field(default=None, alias="MacAddress") mac_auto: StrictBool = Field(description="A flag indicating if the MAC address for the EthRange should be determined automatically (default: true).", alias="MacAuto") mac_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01).", alias="MacIncr") mac_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC start address for the EthRange (default: 00:11:01:00:00:01).", alias="MacStart") @@ -41,7 +39,7 @@ class EthRange(BaseModel): static_arp_table: Optional[List[StaticARPEntry]] = Field(default=None, alias="StaticARPTable") links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of MACs that should be assigned to each traffic agent for this Ethernet range segment in a valid test (default: 0, split equally between agents).", alias="maxCountPerAgent") - __properties: ClassVar[List[str]] = ["Count", "MacAddress", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] + __properties: ClassVar[List[str]] = ["Count", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] @field_validator('mac_incr') def mac_incr_validate_regular_expression(cls, value): @@ -102,9 +100,6 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of mac_address - if self.mac_address: - _dict['MacAddress'] = self.mac_address.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in static_arp_table (list) _items = [] if self.static_arp_table: @@ -134,7 +129,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Count": obj.get("Count"), - "MacAddress": SequenceValue.from_dict(obj["MacAddress"]) if obj.get("MacAddress") is not None else None, "MacAuto": obj.get("MacAuto"), "MacIncr": obj.get("MacIncr"), "MacStart": obj.get("MacStart"), diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index 58897c8..9c83b38 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -24,7 +24,6 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer -from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -41,7 +40,6 @@ class IPRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") - ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -58,7 +56,7 @@ class IPRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -139,9 +137,6 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() - # override the default output from pydantic by calling `to_dict()` of ip_address - if self.ip_address: - _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -172,7 +167,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, - "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/local_subnet_config.py b/cyperf/models/local_subnet_config.py index 303751c..2753476 100644 --- a/cyperf/models/local_subnet_config.py +++ b/cyperf/models/local_subnet_config.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List from typing_extensions import Annotated from typing import Optional, Set, Union @@ -36,9 +36,8 @@ class LocalSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The network mask of the IP Range (default: 16).", alias="Prefix") start: Annotated[str, Field(strict=True)] = Field(description="The start IP for the IPRange (default: 10.0.0.10).", alias="Start") total_host_count: StrictStr = Field(alias="TotalHostCount") - wildcard_initiator_traffic: StrictBool = Field(alias="WildcardInitiatorTraffic") network_tags: List[StrictStr] = Field(description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "WildcardInitiatorTraffic", "networkTags"] + __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "networkTags"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -121,7 +120,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Prefix": obj.get("Prefix"), "Start": obj.get("Start"), "TotalHostCount": obj.get("TotalHostCount"), - "WildcardInitiatorTraffic": obj.get("WildcardInitiatorTraffic"), "networkTags": obj.get("networkTags") if obj.get("networkTags") is not None else [] , "links": obj.get("links") diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index 137c4e2..6e07d2b 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -47,10 +47,9 @@ class Metadata(BaseModel): sort_severity: Optional[StrictStr] = Field(default=None, description="The field by which the severity is sorted", alias="SortSeverity") static: Optional[StrictBool] = Field(default=None, description="If true, the application/strike is managed directly by the controller", alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, description="The apps that this strike can be used with", alias="SupportedApps") - supported_http_versions: Optional[List[StrictStr]] = Field(default=None, description="The HTTP versions supported by the application", alias="SupportedHTTPVersions") supports_http2: Optional[StrictBool] = Field(default=None, description="Indicates if the application supports HTTP2 multi-stream", alias="SupportsHTTP2") year: Optional[StrictStr] = Field(default=None, description="The year of the strike", alias="Year") - __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportedHTTPVersions", "SupportsHTTP2", "Year"] + __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportsHTTP2", "Year"] model_config = ConfigDict( populate_by_name=True, @@ -138,7 +137,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "SortSeverity": obj.get("SortSeverity"), "Static": obj.get("Static"), "SupportedApps": obj.get("SupportedApps") if obj.get("SupportedApps") is not None else [], - "SupportedHTTPVersions": obj.get("SupportedHTTPVersions") if obj.get("SupportedHTTPVersions") is not None else [], "SupportsHTTP2": obj.get("SupportsHTTP2"), "Year": obj.get("Year") , diff --git a/cyperf/models/pangp_encapsulation.py b/cyperf/models/pangp_encapsulation.py index 88a533c..5b09a5a 100644 --- a/cyperf/models/pangp_encapsulation.py +++ b/cyperf/models/pangp_encapsulation.py @@ -32,11 +32,10 @@ class PANGPEncapsulation(BaseModel): """ # noqa: E501 esp_over_udp_enabled: StrictBool = Field(alias="ESPOverUDPEnabled") esp_over_udp_settings: Optional[ESPOverUDPSettings] = Field(default=None, alias="ESPOverUDPSettings") - enable_ikev2: StrictBool = Field(alias="EnableIKEv2") encapsulation_mode: StrictStr = Field(description="The encapsulation mode for inner traffic.", alias="EncapsulationMode") udp_port: StrictInt = Field(alias="UdpPort") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EnableIKEv2", "EncapsulationMode", "UdpPort", "links"] + __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EncapsulationMode", "UdpPort", "links"] @field_validator('encapsulation_mode') def encapsulation_mode_validate_enum(cls, value): @@ -110,7 +109,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "ESPOverUDPEnabled": obj.get("ESPOverUDPEnabled"), "ESPOverUDPSettings": ESPOverUDPSettings.from_dict(obj["ESPOverUDPSettings"]) if obj.get("ESPOverUDPSettings") is not None else None, - "EnableIKEv2": obj.get("EnableIKEv2"), "EncapsulationMode": obj.get("EncapsulationMode"), "UdpPort": obj.get("UdpPort"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/cyperf/models/remote_subnet_config.py b/cyperf/models/remote_subnet_config.py index a4b6e66..b9e55d1 100644 --- a/cyperf/models/remote_subnet_config.py +++ b/cyperf/models/remote_subnet_config.py @@ -36,8 +36,7 @@ class RemoteSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The length (in bits) of the subnet mask to be applied to all the addresses created in the range.", alias="Prefix") single_remote_subnet: StrictBool = Field(alias="SingleRemoteSubnet") start: Annotated[str, Field(strict=True)] = Field(description="The base address for enumerating all the local subnets in the range", alias="Start") - wildcard_responder_traffic: StrictBool = Field(alias="WildcardResponderTraffic") - __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start", "WildcardResponderTraffic"] + __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -119,8 +118,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Increment": obj.get("Increment"), "Prefix": obj.get("Prefix"), "SingleRemoteSubnet": obj.get("SingleRemoteSubnet"), - "Start": obj.get("Start"), - "WildcardResponderTraffic": obj.get("WildcardResponderTraffic") + "Start": obj.get("Start") , "links": obj.get("links") }) diff --git a/cyperf/models/stream_profile.py b/cyperf/models/stream_profile.py index a7d3737..5c13d58 100644 --- a/cyperf/models/stream_profile.py +++ b/cyperf/models/stream_profile.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.stream_payload_type import StreamPayloadType from typing import Optional, Set, Union @@ -35,8 +35,7 @@ class StreamProfile(BaseModel): total_estimated_throughput: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughput") total_estimated_throughput_per_simulated_user: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughputPerSimulatedUser") unique_pool_size: Optional[StrictInt] = Field(default=None, alias="uniquePoolSize") - unrestricted_packet_rate: Optional[StrictBool] = Field(default=None, alias="unrestrictedPacketRate") - __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize", "unrestrictedPacketRate"] + __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize"] model_config = ConfigDict( populate_by_name=True, @@ -96,8 +95,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "payloadType": obj.get("payloadType"), "totalEstimatedThroughput": obj.get("totalEstimatedThroughput"), "totalEstimatedThroughputPerSimulatedUser": obj.get("totalEstimatedThroughputPerSimulatedUser"), - "uniquePoolSize": obj.get("uniquePoolSize"), - "unrestrictedPacketRate": obj.get("unrestrictedPacketRate") + "uniquePoolSize": obj.get("uniquePoolSize") , "links": obj.get("links") }) diff --git a/cyperf/models/traffic_profile_base.py b/cyperf/models/traffic_profile_base.py index 6e10b0d..e480756 100644 --- a/cyperf/models/traffic_profile_base.py +++ b/cyperf/models/traffic_profile_base.py @@ -21,7 +21,6 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink -from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from typing import Optional, Set, Union from typing_extensions import Self @@ -32,12 +31,11 @@ class TrafficProfileBase(BaseModel): TrafficProfileBase """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") - playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] + __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] model_config = ConfigDict( populate_by_name=True, @@ -103,7 +101,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), - "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/docs/Action.md b/docs/Action.md index c832d9d..0e584a6 100644 --- a/docs/Action.md +++ b/docs/Action.md @@ -18,7 +18,6 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] -**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/ActionBase.md b/docs/ActionBase.md index f419c41..be8a2e2 100644 --- a/docs/ActionBase.md +++ b/docs/ActionBase.md @@ -18,7 +18,6 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] -**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/ApplicationProfile.md b/docs/ApplicationProfile.md index c2fac4f..6cde695 100644 --- a/docs/ApplicationProfile.md +++ b/docs/ApplicationProfile.md @@ -6,7 +6,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] -**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/ApplicationResourcesApi.md b/docs/ApplicationResourcesApi.md index ba91e49..e5c2971 100644 --- a/docs/ApplicationResourcesApi.md +++ b/docs/ApplicationResourcesApi.md @@ -9173,7 +9173,7 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_resources_captures_encrypted_upload_file** -> start_resources_captures_encrypted_upload_file(file=file) +> AsyncContext start_resources_captures_encrypted_upload_file(file, ssl_key_log_file) @@ -9186,6 +9186,7 @@ Upload a file. ```python import cyperf +from cyperf.models.async_context import AsyncContext from cyperf.rest import ApiException from pprint import pprint @@ -9208,10 +9209,13 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.ApplicationResourcesApi(api_client) - file = None # bytearray | (optional) + file = None # bytearray | + ssl_key_log_file = None # bytearray | try: - api_instance.start_resources_captures_encrypted_upload_file(file=file) + api_response = api_instance.start_resources_captures_encrypted_upload_file(file, ssl_key_log_file) + print("The response of ApplicationResourcesApi->start_resources_captures_encrypted_upload_file:\n") + pprint(api_response) except Exception as e: print("Exception when calling ApplicationResourcesApi->start_resources_captures_encrypted_upload_file: %s\n" % e) ``` @@ -9223,11 +9227,12 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **file** | **bytearray**| | [optional] + **file** | **bytearray**| | + **ssl_key_log_file** | **bytearray**| | ### Return type -void (empty response body) +[**AsyncContext**](AsyncContext.md) ### Authorization diff --git a/docs/AttackAction.md b/docs/AttackAction.md index 75b7c94..cf9e1dd 100644 --- a/docs/AttackAction.md +++ b/docs/AttackAction.md @@ -18,7 +18,6 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] -**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/AttackProfile.md b/docs/AttackProfile.md index 0c42c28..4d64831 100644 --- a/docs/AttackProfile.md +++ b/docs/AttackProfile.md @@ -6,7 +6,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] -**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/DUTNetwork.md b/docs/DUTNetwork.md index 94b8c76..d44a65c 100644 --- a/docs/DUTNetwork.md +++ b/docs/DUTNetwork.md @@ -26,7 +26,6 @@ Name | Type | Description | Notes **reverse_proxy_pep_dut** | [**PepDUT**](PepDUT.md) | | [optional] **reverse_proxy_pep_dut_active** | **bool** | A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false) | [optional] **server_dut_active** | **bool** | A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false) | [optional] -**server_dut_address** | [**Address**](Address.md) | | [optional] **server_dut_host** | **str** | The hostname where the traffic goes if server DUT is active. | [optional] **server_dut_port** | **int** | The listen port for server-side DUT | [optional] **tcp_health_check** | [**HealthCheckConfig**](HealthCheckConfig.md) | The TCP HealthCheck configuration for DUT | [optional] diff --git a/docs/EmulatedRouterRange.md b/docs/EmulatedRouterRange.md index 35e5fba..98757c0 100644 --- a/docs/EmulatedRouterRange.md +++ b/docs/EmulatedRouterRange.md @@ -11,7 +11,6 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] -**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/EthRange.md b/docs/EthRange.md index c4a2467..58f4130 100644 --- a/docs/EthRange.md +++ b/docs/EthRange.md @@ -7,7 +7,6 @@ The Ethernet Ranges assigned to the current test configuration Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **count** | **int** | | [optional] -**mac_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **mac_auto** | **bool** | A flag indicating if the MAC address for the EthRange should be determined automatically (default: true). | **mac_incr** | **str** | The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01). | [optional] **mac_start** | **str** | The MAC start address for the EthRange (default: 00:11:01:00:00:01). | [optional] diff --git a/docs/IPRange.md b/docs/IPRange.md index 1ef5e34..22b27ee 100644 --- a/docs/IPRange.md +++ b/docs/IPRange.md @@ -12,7 +12,6 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] -**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/LocalSubnetConfig.md b/docs/LocalSubnetConfig.md index 2132b36..52dc57e 100644 --- a/docs/LocalSubnetConfig.md +++ b/docs/LocalSubnetConfig.md @@ -13,7 +13,6 @@ Name | Type | Description | Notes **prefix** | **int** | The network mask of the IP Range (default: 16). | **start** | **str** | The start IP for the IPRange (default: 10.0.0.10). | **total_host_count** | **str** | | -**wildcard_initiator_traffic** | **bool** | | **network_tags** | **List[str]** | A list of tags. | ## Example diff --git a/docs/Metadata.md b/docs/Metadata.md index eb74216..fbe520a 100644 --- a/docs/Metadata.md +++ b/docs/Metadata.md @@ -21,7 +21,6 @@ Name | Type | Description | Notes **sort_severity** | **str** | The field by which the severity is sorted | [optional] **static** | **bool** | If true, the application/strike is managed directly by the controller | [optional] **supported_apps** | **List[str]** | The apps that this strike can be used with | [optional] -**supported_http_versions** | **List[str]** | The HTTP versions supported by the application | [optional] **supports_http2** | **bool** | Indicates if the application supports HTTP2 multi-stream | [optional] **year** | **str** | The year of the strike | [optional] diff --git a/docs/PANGPEncapsulation.md b/docs/PANGPEncapsulation.md index 54e807c..5c6a530 100644 --- a/docs/PANGPEncapsulation.md +++ b/docs/PANGPEncapsulation.md @@ -7,7 +7,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **esp_over_udp_enabled** | **bool** | | **esp_over_udp_settings** | [**ESPOverUDPSettings**](ESPOverUDPSettings.md) | | [optional] -**enable_ikev2** | **bool** | | **encapsulation_mode** | **str** | The encapsulation mode for inner traffic. | **udp_port** | **int** | | **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/RemoteSubnetConfig.md b/docs/RemoteSubnetConfig.md index 85b1aaa..d21f07b 100644 --- a/docs/RemoteSubnetConfig.md +++ b/docs/RemoteSubnetConfig.md @@ -12,7 +12,6 @@ Name | Type | Description | Notes **prefix** | **int** | The length (in bits) of the subnet mask to be applied to all the addresses created in the range. | **single_remote_subnet** | **bool** | | **start** | **str** | The base address for enumerating all the local subnets in the range | -**wildcard_responder_traffic** | **bool** | | ## Example diff --git a/docs/StreamProfile.md b/docs/StreamProfile.md index 0281ab9..189344f 100644 --- a/docs/StreamProfile.md +++ b/docs/StreamProfile.md @@ -11,7 +11,6 @@ Name | Type | Description | Notes **total_estimated_throughput** | **str** | | [optional] **total_estimated_throughput_per_simulated_user** | **str** | | [optional] **unique_pool_size** | **int** | | [optional] -**unrestricted_packet_rate** | **bool** | | [optional] ## Example diff --git a/docs/TrafficProfileBase.md b/docs/TrafficProfileBase.md index a8e538a..31f48b9 100644 --- a/docs/TrafficProfileBase.md +++ b/docs/TrafficProfileBase.md @@ -6,7 +6,6 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] -**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] From d2b246b3794edf278808f2ee06e74dae7c471b55 Mon Sep 17 00:00:00 2001 From: Luca Muntean Date: Fri, 12 Jun 2026 03:40:44 -0600 Subject: [PATCH 11/26] Pull request #76: Updated sample scripts to use the new wait_for_test_end function name Merge in ISGAPPSEC/cyperf-api-wrapper from update-function-calls to main Squashed commit of the following: commit 28b0190076def0f8b9cb0b00e4e272200b7fdc5c Author: lucamunt Date: Fri Jun 12 10:18:35 2026 +0300 updated sample scripts to use the new wait_for_test_end function name --- samples/sample_attacks_load_and_run.py | 2 +- samples/sample_udp_streaming_run.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/sample_attacks_load_and_run.py b/samples/sample_attacks_load_and_run.py index 2172de4..f4cf1df 100644 --- a/samples/sample_attacks_load_and_run.py +++ b/samples/sample_attacks_load_and_run.py @@ -101,7 +101,7 @@ def _print_attack_stats(self, test, time_from, time_to): def _wait_until_stopped(self): self.last_recorded_time_stamp = 0 - self.utils.wait_for_test_stop(self.session, self._print_attack_stats) + self.utils.wait_for_test_end(self.session, self._print_attack_stats) print('Stopped test ...') def run(self): diff --git a/samples/sample_udp_streaming_run.py b/samples/sample_udp_streaming_run.py index a36caff..f58efc3 100644 --- a/samples/sample_udp_streaming_run.py +++ b/samples/sample_udp_streaming_run.py @@ -122,7 +122,7 @@ def print_run_time_stats(self, test, time_from, time_to, stat_names): def _wait_until_stopped(self): self.last_recorded_time_stamps = {} - self.utils.wait_for_test_stop(self.session, self._print_run_time_stats) + self.utils.wait_for_test_end(self.session, self._print_run_time_stats) print('Stopped test ...') def run(self): From eb4ab74165211ecdd3e86ec9372a01b4862f0665 Mon Sep 17 00:00:00 2001 From: Stingescu Andrei Petrut Date: Fri, 10 Jul 2026 07:24:34 -0600 Subject: [PATCH 12/26] Pull request #78: Regenerate Python API Wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from feature/ISGAPPSEC2-37153-exposeeagle-heavy-apis-in-the-cyperf-python-wrapper to main Squashed commit of the following: commit 634034a8f9c152295f67e31de249bc1edabed9af Author: stinandr Date: Fri Jul 10 13:34:17 2026 +0300 Remove the folder .openapi-generator & git should ignore it commit 1617263af5bf582b44a9522f5f85b5f8a91870d8 Author: stinandr Date: Fri Jul 10 13:15:16 2026 +0300 Update FILES commit 859605d674e6044a4a40d03ccab9584d7f21021a Author: stinandr Date: Fri Jul 10 11:29:31 2026 +0300 Remove the deprecated hw operation files commit 4c9c9dbc47121d1578fa396cf338dc4a173ff214 Author: stinandr Date: Thu Jul 9 12:41:56 2026 +0300 Regenerate Python API Wrapper --- .gitignore | 3 + .openapi-generator/FILES | 866 ---- .openapi-generator/VERSION | 1 - README.md | 33 +- cyperf/__init__.py | 23 +- cyperf/api/agents_api.py | 4220 ++++++++++++++--- cyperf/dynamic_models/__init__.py | 23 +- cyperf/models/__init__.py | 23 +- cyperf/models/action.py | 5 +- cyperf/models/action_base.py | 5 +- .../agent_assignment_by_front_panel_port.py | 113 + cyperf/models/agent_assignments.py | 14 +- cyperf/models/agent_reservation.py | 4 +- cyperf/models/application_profile.py | 5 +- cyperf/models/attack_action.py | 5 +- cyperf/models/attack_profile.py | 5 +- cyperf/models/chassis_info.py | 22 +- ...r_compute_resources_ownership_operation.py | 101 + ...r_front_panel_ports_ownership_operation.py | 101 + cyperf/models/compute_node.py | 16 +- cyperf/models/compute_resource.py | 107 + .../models/compute_resources_by_controller.py | 103 + cyperf/models/compute_resources_by_node.py | 95 + cyperf/models/controller.py | 16 +- cyperf/models/dut_network.py | 8 +- cyperf/models/emulated_router_range.py | 8 +- cyperf/models/eth_range.py | 8 +- cyperf/models/front_panel.py | 131 + .../models/front_panel_ports_by_controller.py | 103 + cyperf/models/ip_range.py | 8 +- cyperf/models/local_subnet_config.py | 6 +- cyperf/models/metadata.py | 4 +- cyperf/models/pangp_encapsulation.py | 4 +- cyperf/models/ports_by_panel.py | 95 + .../reboot_compute_resources_operation.py | 101 + cyperf/models/remote_subnet_config.py | 6 +- ..._front_panel_ports_link_state_operation.py | 114 + ...n.py => set_ports_link_state_operation.py} | 8 +- cyperf/models/stream_profile.py | 8 +- cyperf/models/traffic_profile_base.py | 5 +- docs/Action.md | 1 + docs/ActionBase.md | 1 + docs/AgentAssignmentByFrontPanelPort.md | 34 + docs/AgentAssignments.md | 1 + docs/AgentReservation.md | 1 + docs/AgentsApi.md | 1117 ++++- docs/ApplicationProfile.md | 1 + docs/AttackAction.md | 1 + docs/AttackProfile.md | 1 + docs/ChassisInfo.md | 6 +- ...ClearComputeResourcesOwnershipOperation.md | 29 + .../ClearFrontPanelPortsOwnershipOperation.md | 29 + docs/ComputeNode.md | 2 + docs/ComputeResource.md | 36 + docs/ComputeResourcesByController.md | 30 + docs/ComputeResourcesByNode.md | 30 + docs/Controller.md | 2 + docs/DUTNetwork.md | 1 + docs/EmulatedRouterRange.md | 1 + docs/EthRange.md | 1 + docs/FrontPanel.md | 36 + docs/FrontPanelPortsByController.md | 30 + docs/IPRange.md | 1 + docs/LocalSubnetConfig.md | 1 + docs/Metadata.md | 1 + docs/PANGPEncapsulation.md | 1 + docs/PortsByPanel.md | 30 + docs/RebootComputeResourcesOperation.md | 29 + docs/RemoteSubnetConfig.md | 1 + docs/SetFrontPanelPortsLinkStateOperation.md | 30 + ...ation.md => SetPortsLinkStateOperation.md} | 16 +- docs/StreamProfile.md | 1 + docs/TrafficProfileBase.md | 1 + 73 files changed, 6265 insertions(+), 1764 deletions(-) delete mode 100644 .openapi-generator/FILES delete mode 100644 .openapi-generator/VERSION create mode 100644 cyperf/models/agent_assignment_by_front_panel_port.py create mode 100644 cyperf/models/clear_compute_resources_ownership_operation.py create mode 100644 cyperf/models/clear_front_panel_ports_ownership_operation.py create mode 100644 cyperf/models/compute_resource.py create mode 100644 cyperf/models/compute_resources_by_controller.py create mode 100644 cyperf/models/compute_resources_by_node.py create mode 100644 cyperf/models/front_panel.py create mode 100644 cyperf/models/front_panel_ports_by_controller.py create mode 100644 cyperf/models/ports_by_panel.py create mode 100644 cyperf/models/reboot_compute_resources_operation.py create mode 100644 cyperf/models/set_front_panel_ports_link_state_operation.py rename cyperf/models/{set_link_state_operation.py => set_ports_link_state_operation.py} (93%) create mode 100644 docs/AgentAssignmentByFrontPanelPort.md create mode 100644 docs/ClearComputeResourcesOwnershipOperation.md create mode 100644 docs/ClearFrontPanelPortsOwnershipOperation.md create mode 100644 docs/ComputeResource.md create mode 100644 docs/ComputeResourcesByController.md create mode 100644 docs/ComputeResourcesByNode.md create mode 100644 docs/FrontPanel.md create mode 100644 docs/FrontPanelPortsByController.md create mode 100644 docs/PortsByPanel.md create mode 100644 docs/RebootComputeResourcesOperation.md create mode 100644 docs/SetFrontPanelPortsLinkStateOperation.md rename docs/{SetLinkStateOperation.md => SetPortsLinkStateOperation.md} (51%) diff --git a/.gitignore b/.gitignore index 43995bd..3edc819 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ target/ #Ipython Notebook .ipynb_checkpoints + +# OpenAPI Generator metadata +.openapi-generator/ diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES deleted file mode 100644 index 2a446cc..0000000 --- a/.openapi-generator/FILES +++ /dev/null @@ -1,866 +0,0 @@ -.github/workflows/python.yml -.gitignore -.gitlab-ci.yml -.openapi-generator-ignore -.travis.yml -README.md -cyperf/LICENSE -cyperf/__init__.py -cyperf/api/__init__.py -cyperf/api/agents_api.py -cyperf/api/application_resources_api.py -cyperf/api/authorization_api.py -cyperf/api/brokers_api.py -cyperf/api/configurations_api.py -cyperf/api/data_migration_api.py -cyperf/api/diagnostics_api.py -cyperf/api/license_servers_api.py -cyperf/api/licensing_api.py -cyperf/api/notifications_api.py -cyperf/api/reports_api.py -cyperf/api/sessions_api.py -cyperf/api/statistics_api.py -cyperf/api/test_operations_api.py -cyperf/api/test_results_api.py -cyperf/api/utils_api.py -cyperf/api_client.py -cyperf/api_response.py -cyperf/configuration.py -cyperf/dynamic_model_meta.py -cyperf/dynamic_models/__init__.py -cyperf/exceptions.py -cyperf/models/__init__.py -cyperf/models/action.py -cyperf/models/action_base.py -cyperf/models/action_input.py -cyperf/models/action_input_find_param.py -cyperf/models/action_metadata.py -cyperf/models/activation_code_info.py -cyperf/models/activation_code_list_request.py -cyperf/models/activation_code_request.py -cyperf/models/add_action_info.py -cyperf/models/add_input.py -cyperf/models/address.py -cyperf/models/advanced_settings.py -cyperf/models/agent.py -cyperf/models/agent_assignment_by_port.py -cyperf/models/agent_assignment_details.py -cyperf/models/agent_assignments.py -cyperf/models/agent_cpu_info.py -cyperf/models/agent_features.py -cyperf/models/agent_optimization_mode.py -cyperf/models/agent_release.py -cyperf/models/agent_reservation.py -cyperf/models/agent_to_be_rebooted.py -cyperf/models/agents_group.py -cyperf/models/api_link.py -cyperf/models/api_relationship.py -cyperf/models/app_exchange.py -cyperf/models/app_flow.py -cyperf/models/app_flow_desc.py -cyperf/models/app_flow_input.py -cyperf/models/app_flow_input_find_param.py -cyperf/models/app_id.py -cyperf/models/app_mode.py -cyperf/models/application.py -cyperf/models/application_profile.py -cyperf/models/application_type.py -cyperf/models/appsec_app.py -cyperf/models/appsec_app_metadata.py -cyperf/models/appsec_app_metadata_keywords_inner.py -cyperf/models/appsec_attack.py -cyperf/models/appsec_config.py -cyperf/models/archive_info.py -cyperf/models/array_v2_element_metadata.py -cyperf/models/async_context.py -cyperf/models/attack.py -cyperf/models/attack_action.py -cyperf/models/attack_metadata.py -cyperf/models/attack_objectives_and_timeline.py -cyperf/models/attack_profile.py -cyperf/models/attack_timeline_segment.py -cyperf/models/attack_track.py -cyperf/models/auth_method_type.py -cyperf/models/auth_profile.py -cyperf/models/auth_profile_metadata.py -cyperf/models/auth_settings.py -cyperf/models/authenticate200_response.py -cyperf/models/authentication_settings.py -cyperf/models/automatic_ip_type.py -cyperf/models/broker.py -cyperf/models/capture_input.py -cyperf/models/capture_input_find_param.py -cyperf/models/capture_settings.py -cyperf/models/category.py -cyperf/models/category_filter.py -cyperf/models/category_value.py -cyperf/models/cert_config.py -cyperf/models/certificate.py -cyperf/models/chassis_info.py -cyperf/models/choice.py -cyperf/models/cipher_tls12.py -cyperf/models/cipher_tls13.py -cyperf/models/cisco_any_connect_settings.py -cyperf/models/cisco_encapsulation.py -cyperf/models/clear_ports_ownership_operation.py -cyperf/models/command.py -cyperf/models/command_metadata.py -cyperf/models/compute_node.py -cyperf/models/config.py -cyperf/models/config_category.py -cyperf/models/config_id.py -cyperf/models/config_metadata.py -cyperf/models/config_sub_category.py -cyperf/models/config_validation.py -cyperf/models/conflict.py -cyperf/models/connection.py -cyperf/models/connection_persistence.py -cyperf/models/consumer.py -cyperf/models/controller.py -cyperf/models/counted_feature_consumer.py -cyperf/models/counted_feature_stats.py -cyperf/models/create_app_operation.py -cyperf/models/create_app_or_attack_operation_input.py -cyperf/models/custom_dashboards.py -cyperf/models/custom_import_handler.py -cyperf/models/custom_sequence.py -cyperf/models/custom_stat.py -cyperf/models/dashboard.py -cyperf/models/data_type.py -cyperf/models/data_type_values_inner.py -cyperf/models/definition.py -cyperf/models/delete_input.py -cyperf/models/dh_p1_group.py -cyperf/models/diagnostic_component.py -cyperf/models/diagnostic_component_context.py -cyperf/models/diagnostic_options.py -cyperf/models/disk_usage.py -cyperf/models/dismiss_operation.py -cyperf/models/dns_resolver.py -cyperf/models/dns_server.py -cyperf/models/dtls_settings.py -cyperf/models/dut_network.py -cyperf/models/dut_range.py -cyperf/models/edit_action_input.py -cyperf/models/edit_app_operation.py -cyperf/models/effective_ports.py -cyperf/models/emulated_router.py -cyperf/models/emulated_router_range.py -cyperf/models/emulated_subnet_config.py -cyperf/models/enc_p1_algorithm.py -cyperf/models/enc_p2_algorithm.py -cyperf/models/endpoint.py -cyperf/models/entitlement_code_info.py -cyperf/models/entitlement_code_request.py -cyperf/models/enum.py -cyperf/models/error_description.py -cyperf/models/error_response.py -cyperf/models/esp_over_udp_settings.py -cyperf/models/eth_range.py -cyperf/models/eula_details.py -cyperf/models/eula_summary.py -cyperf/models/exchange.py -cyperf/models/exchange_order.py -cyperf/models/exchange_payload.py -cyperf/models/expected_disk_space.py -cyperf/models/expected_disk_space_message.py -cyperf/models/expected_disk_space_pretty_size.py -cyperf/models/expected_disk_space_size.py -cyperf/models/export_all_operation.py -cyperf/models/export_apps_operation_input.py -cyperf/models/export_files_operation_input.py -cyperf/models/export_files_request.py -cyperf/models/export_package_operation.py -cyperf/models/external_resource_info.py -cyperf/models/f5_encapsulation.py -cyperf/models/f5_settings.py -cyperf/models/feature.py -cyperf/models/feature_reservation.py -cyperf/models/feature_reservation_reserve.py -cyperf/models/file_metadata.py -cyperf/models/file_value.py -cyperf/models/filter.py -cyperf/models/filtered_stat.py -cyperf/models/find_param_matches_operation.py -cyperf/models/fortinet_encapsulation.py -cyperf/models/fortinet_settings.py -cyperf/models/fulfillment_request.py -cyperf/models/generate_all_operation.py -cyperf/models/generate_csv_reports_operation.py -cyperf/models/generate_pdf_report_operation.py -cyperf/models/generic_file.py -cyperf/models/get_agents200_response.py -cyperf/models/get_agents200_response_one_of.py -cyperf/models/get_agents_tags200_response.py -cyperf/models/get_agents_tags200_response_one_of.py -cyperf/models/get_apps_operation.py -cyperf/models/get_async_operation_result200_response.py -cyperf/models/get_attacks_operation.py -cyperf/models/get_brokers200_response.py -cyperf/models/get_brokers200_response_one_of.py -cyperf/models/get_categories_operation.py -cyperf/models/get_config_categorie_subcategories200_response.py -cyperf/models/get_config_categorie_subcategories200_response_one_of.py -cyperf/models/get_config_categories200_response.py -cyperf/models/get_config_categories200_response_one_of.py -cyperf/models/get_configs200_response.py -cyperf/models/get_configs200_response_one_of.py -cyperf/models/get_controllers200_response.py -cyperf/models/get_controllers200_response_one_of.py -cyperf/models/get_disk_usage_consumers200_response.py -cyperf/models/get_disk_usage_consumers200_response_one_of.py -cyperf/models/get_license_async_operation_result200_response.py -cyperf/models/get_license_servers200_response.py -cyperf/models/get_license_servers200_response_one_of.py -cyperf/models/get_notifications200_response.py -cyperf/models/get_notifications200_response_one_of.py -cyperf/models/get_resources_application_types200_response.py -cyperf/models/get_resources_application_types200_response_one_of.py -cyperf/models/get_resources_apps200_response.py -cyperf/models/get_resources_apps200_response_one_of.py -cyperf/models/get_resources_attacks200_response.py -cyperf/models/get_resources_attacks200_response_one_of.py -cyperf/models/get_resources_auth_profiles200_response.py -cyperf/models/get_resources_auth_profiles200_response_one_of.py -cyperf/models/get_resources_certificates200_response.py -cyperf/models/get_resources_certificates200_response_one_of.py -cyperf/models/get_resources_custom_import_operations200_response.py -cyperf/models/get_resources_custom_import_operations200_response_one_of.py -cyperf/models/get_resources_http_profiles200_response.py -cyperf/models/get_resources_http_profiles200_response_one_of.py -cyperf/models/get_resources_llm_api_profiles200_response.py -cyperf/models/get_resources_llm_api_profiles200_response_one_of.py -cyperf/models/get_result_files200_response.py -cyperf/models/get_result_files200_response_one_of.py -cyperf/models/get_result_stats200_response.py -cyperf/models/get_result_stats200_response_one_of.py -cyperf/models/get_results200_response.py -cyperf/models/get_results200_response_one_of.py -cyperf/models/get_results_tags200_response.py -cyperf/models/get_results_tags200_response_one_of.py -cyperf/models/get_session_meta200_response.py -cyperf/models/get_session_meta200_response_one_of.py -cyperf/models/get_sessions200_response.py -cyperf/models/get_sessions200_response_one_of.py -cyperf/models/get_stats_plugins200_response.py -cyperf/models/get_stats_plugins200_response_one_of.py -cyperf/models/get_strikes_operation.py -cyperf/models/group_tls13.py -cyperf/models/hash_p1_algorithm.py -cyperf/models/hash_p2_algorithm.py -cyperf/models/health_check_config.py -cyperf/models/health_issue.py -cyperf/models/host_id.py -cyperf/models/http_profile.py -cyperf/models/http_req_meta.py -cyperf/models/http_res_meta.py -cyperf/models/http_version.py -cyperf/models/id_p_signature_algo.py -cyperf/models/identification_config.py -cyperf/models/import_all_operation.py -cyperf/models/import_offline_license_result.py -cyperf/models/ingest_operation.py -cyperf/models/inner_ip_range.py -cyperf/models/inner_ip_sec_range.py -cyperf/models/interface.py -cyperf/models/ip_mask.py -cyperf/models/ip_network.py -cyperf/models/ip_preference.py -cyperf/models/ip_range.py -cyperf/models/ip_sec_range.py -cyperf/models/ip_sec_stack.py -cyperf/models/ip_ver.py -cyperf/models/license.py -cyperf/models/license_receipt.py -cyperf/models/license_server_metadata.py -cyperf/models/link.py -cyperf/models/llmapi_profile.py -cyperf/models/load_config_operation.py -cyperf/models/local_subnet_config.py -cyperf/models/log_config.py -cyperf/models/log_level.py -cyperf/models/mac_dtls_stack.py -cyperf/models/mapping_type.py -cyperf/models/marked_as_deleted.py -cyperf/models/md2_tlv.py -cyperf/models/media_file.py -cyperf/models/media_track.py -cyperf/models/metadata.py -cyperf/models/mos_mode.py -cyperf/models/name_id_format.py -cyperf/models/name_server.py -cyperf/models/network_mapping.py -cyperf/models/network_meshing.py -cyperf/models/network_profile.py -cyperf/models/network_segment_base.py -cyperf/models/nodes_by_controller.py -cyperf/models/nodes_power_cycle_operation.py -cyperf/models/notification.py -cyperf/models/notification_counts.py -cyperf/models/ntp_info.py -cyperf/models/objective_type.py -cyperf/models/objective_unit.py -cyperf/models/objective_value_entry.py -cyperf/models/objectives_and_timeline.py -cyperf/models/open_api_definitions.py -cyperf/models/p1_config.py -cyperf/models/p2_config.py -cyperf/models/pair.py -cyperf/models/pangp_encapsulation.py -cyperf/models/pangp_settings.py -cyperf/models/param_metadata.py -cyperf/models/param_metadata_type_info.py -cyperf/models/param_metadata_type_info_array_v2.py -cyperf/models/param_metadata_type_info_array_v2_elements_inner.py -cyperf/models/param_metadata_type_info_int.py -cyperf/models/param_metadata_type_info_media.py -cyperf/models/param_metadata_type_info_string.py -cyperf/models/param_source_type.py -cyperf/models/param_type.py -cyperf/models/parameter.py -cyperf/models/parameter_match.py -cyperf/models/parameter_meta.py -cyperf/models/parameter_metadata.py -cyperf/models/params.py -cyperf/models/params_enum.py -cyperf/models/payload_meta.py -cyperf/models/payload_metadata.py -cyperf/models/pep_dut.py -cyperf/models/pfs_p2_group.py -cyperf/models/playlist_metadata.py -cyperf/models/playlist_sequencing_method.py -cyperf/models/plugin.py -cyperf/models/plugin_stats.py -cyperf/models/port.py -cyperf/models/port_settings.py -cyperf/models/ports_by_controller.py -cyperf/models/ports_by_node.py -cyperf/models/ppk_pair.py -cyperf/models/prepare_test_operation.py -cyperf/models/prepared_test_options.py -cyperf/models/prf_p1_algorithm.py -cyperf/models/protected_subnet_config.py -cyperf/models/psp_range.py -cyperf/models/psp_stack.py -cyperf/models/quic_profile.py -cyperf/models/quic_version.py -cyperf/models/reboot_operation_input.py -cyperf/models/reboot_ports_operation.py -cyperf/models/reference.py -cyperf/models/regex_match.py -cyperf/models/release_operation_input.py -cyperf/models/remote_access.py -cyperf/models/remote_subnet_config.py -cyperf/models/rename_input.py -cyperf/models/reorder_action_input.py -cyperf/models/reorder_exchanges_input.py -cyperf/models/replay_capture.py -cyperf/models/required_file_types.py -cyperf/models/reserve_operation_input.py -cyperf/models/result_file_metadata.py -cyperf/models/result_metadata.py -cyperf/models/results_group.py -cyperf/models/rtp_encryption_mode.py -cyperf/models/rtp_profile.py -cyperf/models/rtp_profile_meta.py -cyperf/models/save_config_operation.py -cyperf/models/scenario.py -cyperf/models/secondary_objective.py -cyperf/models/segment_type.py -cyperf/models/selected_env.py -cyperf/models/sequence_data_types.py -cyperf/models/sequence_value.py -cyperf/models/sequence_value_types.py -cyperf/models/session.py -cyperf/models/session_reuse_method_tls12.py -cyperf/models/session_reuse_method_tls13.py -cyperf/models/set_aggregation_mode_operation.py -cyperf/models/set_controller_app_operation.py -cyperf/models/set_dpdk_mode_operation_input.py -cyperf/models/set_link_state_operation.py -cyperf/models/set_nodes_app_operation.py -cyperf/models/set_ntp_operation_input.py -cyperf/models/simple_sequence_value.py -cyperf/models/simulated_id_p.py -cyperf/models/single_value.py -cyperf/models/snapshot.py -cyperf/models/snowflake_exporter.py -cyperf/models/sort_body_field.py -cyperf/models/specific_objective.py -cyperf/models/start_agents_batch_delete_request_inner.py -cyperf/models/stateless_stream.py -cyperf/models/static_arp_entry.py -cyperf/models/stats_result.py -cyperf/models/steady_segment.py -cyperf/models/step_segment.py -cyperf/models/stream_direction.py -cyperf/models/stream_payload_type.py -cyperf/models/stream_profile.py -cyperf/models/sub_step.py -cyperf/models/supported_group_tls13.py -cyperf/models/system_info.py -cyperf/models/tcp_profile.py -cyperf/models/test_info.py -cyperf/models/test_state_changed_operation.py -cyperf/models/test_usage.py -cyperf/models/time_value.py -cyperf/models/timeline_segment.py -cyperf/models/timeline_segment_base.py -cyperf/models/timeline_segment_union.py -cyperf/models/timers.py -cyperf/models/tls_profile.py -cyperf/models/track.py -cyperf/models/track_type.py -cyperf/models/traffic_agent_info.py -cyperf/models/traffic_profile_base.py -cyperf/models/traffic_settings.py -cyperf/models/transport_profile.py -cyperf/models/transport_profile_base.py -cyperf/models/tunnel_range.py -cyperf/models/tunnel_settings.py -cyperf/models/tunnel_stack.py -cyperf/models/type_array_v2_metadata.py -cyperf/models/type_info_metadata.py -cyperf/models/type_int_metadata.py -cyperf/models/type_media_metadata.py -cyperf/models/type_string_metadata.py -cyperf/models/udp_profile.py -cyperf/models/update_network_mapping.py -cyperf/models/update_port_tags_operation.py -cyperf/models/validation_message.py -cyperf/models/version.py -cyperf/models/vlan_range.py -cyperf/models/vlan_type.py -cyperf/models/vx_lan_range.py -cyperf/models/vx_lan_stack.py -cyperf/models/vx_lanid.py -cyperf/py.typed -cyperf/rest.py -cyperf/utils.py -docs/APILink.md -docs/APIRelationship.md -docs/Action.md -docs/ActionBase.md -docs/ActionInput.md -docs/ActionInputFindParam.md -docs/ActionMetadata.md -docs/ActivationCodeInfo.md -docs/ActivationCodeListRequest.md -docs/ActivationCodeRequest.md -docs/AddActionInfo.md -docs/AddInput.md -docs/Address.md -docs/AdvancedSettings.md -docs/Agent.md -docs/AgentAssignmentByPort.md -docs/AgentAssignmentDetails.md -docs/AgentAssignments.md -docs/AgentCPUInfo.md -docs/AgentFeatures.md -docs/AgentOptimizationMode.md -docs/AgentRelease.md -docs/AgentReservation.md -docs/AgentToBeRebooted.md -docs/AgentsApi.md -docs/AgentsGroup.md -docs/AppExchange.md -docs/AppFlow.md -docs/AppFlowDesc.md -docs/AppFlowInput.md -docs/AppFlowInputFindParam.md -docs/AppId.md -docs/AppMode.md -docs/Application.md -docs/ApplicationProfile.md -docs/ApplicationResourcesApi.md -docs/ApplicationType.md -docs/AppsecApp.md -docs/AppsecAppMetadata.md -docs/AppsecAppMetadataKeywordsInner.md -docs/AppsecAttack.md -docs/AppsecConfig.md -docs/ArchiveInfo.md -docs/ArrayV2ElementMetadata.md -docs/AsyncContext.md -docs/Attack.md -docs/AttackAction.md -docs/AttackMetadata.md -docs/AttackObjectivesAndTimeline.md -docs/AttackProfile.md -docs/AttackTimelineSegment.md -docs/AttackTrack.md -docs/AuthMethodType.md -docs/AuthProfile.md -docs/AuthProfileMetadata.md -docs/AuthSettings.md -docs/Authenticate200Response.md -docs/AuthenticationSettings.md -docs/AuthorizationApi.md -docs/AutomaticIpType.md -docs/Broker.md -docs/BrokersApi.md -docs/CaptureInput.md -docs/CaptureInputFindParam.md -docs/CaptureSettings.md -docs/Category.md -docs/CategoryFilter.md -docs/CategoryValue.md -docs/CertConfig.md -docs/Certificate.md -docs/ChassisInfo.md -docs/Choice.md -docs/CipherTLS12.md -docs/CipherTLS13.md -docs/CiscoAnyConnectSettings.md -docs/CiscoEncapsulation.md -docs/ClearPortsOwnershipOperation.md -docs/Command.md -docs/CommandMetadata.md -docs/ComputeNode.md -docs/Config.md -docs/ConfigCategory.md -docs/ConfigId.md -docs/ConfigMetadata.md -docs/ConfigSubCategory.md -docs/ConfigValidation.md -docs/ConfigurationsApi.md -docs/Conflict.md -docs/Connection.md -docs/ConnectionPersistence.md -docs/Consumer.md -docs/Controller.md -docs/CountedFeatureConsumer.md -docs/CountedFeatureStats.md -docs/CreateAppOperation.md -docs/CreateAppOrAttackOperationInput.md -docs/CustomDashboards.md -docs/CustomImportHandler.md -docs/CustomSequence.md -docs/CustomStat.md -docs/DNSResolver.md -docs/DNSServer.md -docs/DTLSSettings.md -docs/DUTNetwork.md -docs/DUTRange.md -docs/Dashboard.md -docs/DataMigrationApi.md -docs/DataType.md -docs/DataTypeValuesInner.md -docs/Definition.md -docs/DeleteInput.md -docs/DhP1Group.md -docs/DiagnosticComponent.md -docs/DiagnosticComponentContext.md -docs/DiagnosticOptions.md -docs/DiagnosticsApi.md -docs/DiskUsage.md -docs/DismissOperation.md -docs/ESPOverUDPSettings.md -docs/EditActionInput.md -docs/EditAppOperation.md -docs/EffectivePorts.md -docs/EmulatedRouter.md -docs/EmulatedRouterRange.md -docs/EmulatedSubnetConfig.md -docs/EncP1Algorithm.md -docs/EncP2Algorithm.md -docs/Endpoint.md -docs/EntitlementCodeInfo.md -docs/EntitlementCodeRequest.md -docs/Enum.md -docs/ErrorDescription.md -docs/ErrorResponse.md -docs/EthRange.md -docs/EulaDetails.md -docs/EulaSummary.md -docs/Exchange.md -docs/ExchangeOrder.md -docs/ExchangePayload.md -docs/ExpectedDiskSpace.md -docs/ExpectedDiskSpaceMessage.md -docs/ExpectedDiskSpacePrettySize.md -docs/ExpectedDiskSpaceSize.md -docs/ExportAllOperation.md -docs/ExportAppsOperationInput.md -docs/ExportFilesOperationInput.md -docs/ExportFilesRequest.md -docs/ExportPackageOperation.md -docs/ExternalResourceInfo.md -docs/F5Encapsulation.md -docs/F5Settings.md -docs/Feature.md -docs/FeatureReservation.md -docs/FeatureReservationReserve.md -docs/FileMetadata.md -docs/FileValue.md -docs/Filter.md -docs/FilteredStat.md -docs/FindParamMatchesOperation.md -docs/FortinetEncapsulation.md -docs/FortinetSettings.md -docs/FulfillmentRequest.md -docs/GenerateAllOperation.md -docs/GenerateCSVReportsOperation.md -docs/GeneratePDFReportOperation.md -docs/GenericFile.md -docs/GetAgents200Response.md -docs/GetAgents200ResponseOneOf.md -docs/GetAgentsTags200Response.md -docs/GetAgentsTags200ResponseOneOf.md -docs/GetAppsOperation.md -docs/GetAsyncOperationResult200Response.md -docs/GetAttacksOperation.md -docs/GetBrokers200Response.md -docs/GetBrokers200ResponseOneOf.md -docs/GetCategoriesOperation.md -docs/GetConfigCategorieSubcategories200Response.md -docs/GetConfigCategorieSubcategories200ResponseOneOf.md -docs/GetConfigCategories200Response.md -docs/GetConfigCategories200ResponseOneOf.md -docs/GetConfigs200Response.md -docs/GetConfigs200ResponseOneOf.md -docs/GetControllers200Response.md -docs/GetControllers200ResponseOneOf.md -docs/GetDiskUsageConsumers200Response.md -docs/GetDiskUsageConsumers200ResponseOneOf.md -docs/GetLicenseAsyncOperationResult200Response.md -docs/GetLicenseServers200Response.md -docs/GetLicenseServers200ResponseOneOf.md -docs/GetNotifications200Response.md -docs/GetNotifications200ResponseOneOf.md -docs/GetResourcesApplicationTypes200Response.md -docs/GetResourcesApplicationTypes200ResponseOneOf.md -docs/GetResourcesApps200Response.md -docs/GetResourcesApps200ResponseOneOf.md -docs/GetResourcesAttacks200Response.md -docs/GetResourcesAttacks200ResponseOneOf.md -docs/GetResourcesAuthProfiles200Response.md -docs/GetResourcesAuthProfiles200ResponseOneOf.md -docs/GetResourcesCertificates200Response.md -docs/GetResourcesCertificates200ResponseOneOf.md -docs/GetResourcesCustomImportOperations200Response.md -docs/GetResourcesCustomImportOperations200ResponseOneOf.md -docs/GetResourcesHttpProfiles200Response.md -docs/GetResourcesHttpProfiles200ResponseOneOf.md -docs/GetResourcesLlmApiProfiles200Response.md -docs/GetResourcesLlmApiProfiles200ResponseOneOf.md -docs/GetResultFiles200Response.md -docs/GetResultFiles200ResponseOneOf.md -docs/GetResultStats200Response.md -docs/GetResultStats200ResponseOneOf.md -docs/GetResults200Response.md -docs/GetResults200ResponseOneOf.md -docs/GetResultsTags200Response.md -docs/GetResultsTags200ResponseOneOf.md -docs/GetSessionMeta200Response.md -docs/GetSessionMeta200ResponseOneOf.md -docs/GetSessions200Response.md -docs/GetSessions200ResponseOneOf.md -docs/GetStatsPlugins200Response.md -docs/GetStatsPlugins200ResponseOneOf.md -docs/GetStrikesOperation.md -docs/GroupTLS13.md -docs/HTTPProfile.md -docs/HTTPReqMeta.md -docs/HTTPResMeta.md -docs/HTTPVersion.md -docs/HashP1Algorithm.md -docs/HashP2Algorithm.md -docs/HealthCheckConfig.md -docs/HealthIssue.md -docs/HostID.md -docs/IPNetwork.md -docs/IPRange.md -docs/IPSecRange.md -docs/IPSecStack.md -docs/IdPSignatureAlgo.md -docs/IdentificationConfig.md -docs/ImportAllOperation.md -docs/ImportOfflineLicenseResult.md -docs/IngestOperation.md -docs/InnerIPRange.md -docs/InnerIPSecRange.md -docs/Interface.md -docs/IpMask.md -docs/IpPreference.md -docs/IpVer.md -docs/LLMAPIProfile.md -docs/License.md -docs/LicenseReceipt.md -docs/LicenseServerMetadata.md -docs/LicenseServersApi.md -docs/LicensingApi.md -docs/Link.md -docs/LoadConfigOperation.md -docs/LocalSubnetConfig.md -docs/LogConfig.md -docs/LogLevel.md -docs/MacDtlsStack.md -docs/MappingType.md -docs/MarkedAsDeleted.md -docs/Md2Tlv.md -docs/MediaFile.md -docs/MediaTrack.md -docs/Metadata.md -docs/MosMode.md -docs/NameIdFormat.md -docs/NameServer.md -docs/NetworkMapping.md -docs/NetworkMeshing.md -docs/NetworkProfile.md -docs/NetworkSegmentBase.md -docs/NodesByController.md -docs/NodesPowerCycleOperation.md -docs/Notification.md -docs/NotificationCounts.md -docs/NotificationsApi.md -docs/NtpInfo.md -docs/ObjectiveType.md -docs/ObjectiveUnit.md -docs/ObjectiveValueEntry.md -docs/ObjectivesAndTimeline.md -docs/OpenAPIDefinitions.md -docs/P1Config.md -docs/P2Config.md -docs/PANGPEncapsulation.md -docs/PANGPSettings.md -docs/PPKPair.md -docs/PSPRange.md -docs/PSPStack.md -docs/Pair.md -docs/ParamMetadata.md -docs/ParamMetadataTypeInfo.md -docs/ParamMetadataTypeInfoArrayV2.md -docs/ParamMetadataTypeInfoArrayV2ElementsInner.md -docs/ParamMetadataTypeInfoInt.md -docs/ParamMetadataTypeInfoMedia.md -docs/ParamMetadataTypeInfoString.md -docs/ParamSourceType.md -docs/ParamType.md -docs/Parameter.md -docs/ParameterMatch.md -docs/ParameterMeta.md -docs/ParameterMetadata.md -docs/Params.md -docs/ParamsEnum.md -docs/PayloadMeta.md -docs/PayloadMetadata.md -docs/PepDUT.md -docs/PfsP2Group.md -docs/PlaylistMetadata.md -docs/PlaylistSequencingMethod.md -docs/Plugin.md -docs/PluginStats.md -docs/Port.md -docs/PortSettings.md -docs/PortsByController.md -docs/PortsByNode.md -docs/PrepareTestOperation.md -docs/PreparedTestOptions.md -docs/PrfP1Algorithm.md -docs/ProtectedSubnetConfig.md -docs/QUICProfile.md -docs/QUICVersion.md -docs/RTPEncryptionMode.md -docs/RTPProfile.md -docs/RTPProfileMeta.md -docs/RebootOperationInput.md -docs/RebootPortsOperation.md -docs/Reference.md -docs/RegexMatch.md -docs/ReleaseOperationInput.md -docs/RemoteAccess.md -docs/RemoteSubnetConfig.md -docs/RenameInput.md -docs/ReorderActionInput.md -docs/ReorderExchangesInput.md -docs/ReplayCapture.md -docs/ReportsApi.md -docs/RequiredFileTypes.md -docs/ReserveOperationInput.md -docs/ResultFileMetadata.md -docs/ResultMetadata.md -docs/ResultsGroup.md -docs/SaveConfigOperation.md -docs/Scenario.md -docs/SecondaryObjective.md -docs/SegmentType.md -docs/SelectedEnv.md -docs/SequenceDataTypes.md -docs/SequenceValue.md -docs/SequenceValueTypes.md -docs/Session.md -docs/SessionReuseMethodTLS12.md -docs/SessionReuseMethodTLS13.md -docs/SessionsApi.md -docs/SetAggregationModeOperation.md -docs/SetControllerAppOperation.md -docs/SetDpdkModeOperationInput.md -docs/SetLinkStateOperation.md -docs/SetNodesAppOperation.md -docs/SetNtpOperationInput.md -docs/SimpleSequenceValue.md -docs/SimulatedIdP.md -docs/SingleValue.md -docs/Snapshot.md -docs/SnowflakeExporter.md -docs/SortBodyField.md -docs/SpecificObjective.md -docs/StartAgentsBatchDeleteRequestInner.md -docs/StatelessStream.md -docs/StaticARPEntry.md -docs/StatisticsApi.md -docs/StatsResult.md -docs/SteadySegment.md -docs/StepSegment.md -docs/StreamDirection.md -docs/StreamPayloadType.md -docs/StreamProfile.md -docs/SubStep.md -docs/SupportedGroupTLS13.md -docs/SystemInfo.md -docs/TLSProfile.md -docs/TcpProfile.md -docs/TestInfo.md -docs/TestOperationsApi.md -docs/TestResultsApi.md -docs/TestStateChangedOperation.md -docs/TestUsage.md -docs/TimeValue.md -docs/TimelineSegment.md -docs/TimelineSegmentBase.md -docs/TimelineSegmentUnion.md -docs/Timers.md -docs/Track.md -docs/TrackType.md -docs/TrafficAgentInfo.md -docs/TrafficProfileBase.md -docs/TrafficSettings.md -docs/TransportProfile.md -docs/TransportProfileBase.md -docs/TunnelRange.md -docs/TunnelSettings.md -docs/TunnelStack.md -docs/TypeArrayV2Metadata.md -docs/TypeInfoMetadata.md -docs/TypeIntMetadata.md -docs/TypeMediaMetadata.md -docs/TypeStringMetadata.md -docs/UdpProfile.md -docs/UpdateNetworkMapping.md -docs/UpdatePortTagsOperation.md -docs/UtilsApi.md -docs/VLANRange.md -docs/VLANType.md -docs/ValidationMessage.md -docs/Version.md -docs/VxLANId.md -docs/VxLANRange.md -docs/VxLANStack.md -git_push.sh -pyproject.toml -requirements.txt -setup.cfg -setup.py -test-requirements.txt -tox.ini diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION deleted file mode 100644 index 1985849..0000000 --- a/.openapi-generator/VERSION +++ /dev/null @@ -1 +0,0 @@ -7.7.0 diff --git a/README.md b/README.md index 5d530c3..635aa8d 100644 --- a/README.md +++ b/README.md @@ -75,12 +75,18 @@ Class | Method | HTTP request | Description *AgentsApi* | [**get_agent_by_id**](docs/AgentsApi.md#get_agent_by_id) | **GET** /api/v2/agents/{agentId} | *AgentsApi* | [**get_agents**](docs/AgentsApi.md#get_agents) | **GET** /api/v2/agents | *AgentsApi* | [**get_agents_tags**](docs/AgentsApi.md#get_agents_tags) | **GET** /api/v2/tags | +*AgentsApi* | [**get_compute_node_compute_resource_by_id**](docs/AgentsApi.md#get_compute_node_compute_resource_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources/{computeResourceId} | +*AgentsApi* | [**get_compute_node_compute_resources**](docs/AgentsApi.md#get_compute_node_compute_resources) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources | *AgentsApi* | [**get_compute_node_port_by_id**](docs/AgentsApi.md#get_compute_node_port_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports/{portId} | *AgentsApi* | [**get_compute_node_ports**](docs/AgentsApi.md#get_compute_node_ports) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports | *AgentsApi* | [**get_controller_by_id**](docs/AgentsApi.md#get_controller_by_id) | **GET** /api/v2/controllers/{controllerId} | *AgentsApi* | [**get_controller_compute_node_by_id**](docs/AgentsApi.md#get_controller_compute_node_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId} | *AgentsApi* | [**get_controller_compute_nodes**](docs/AgentsApi.md#get_controller_compute_nodes) | **GET** /api/v2/controllers/{controllerId}/compute-nodes | +*AgentsApi* | [**get_controller_front_panel_by_id**](docs/AgentsApi.md#get_controller_front_panel_by_id) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId} | +*AgentsApi* | [**get_controller_front_panels**](docs/AgentsApi.md#get_controller_front_panels) | **GET** /api/v2/controllers/{controllerId}/front-panels | *AgentsApi* | [**get_controllers**](docs/AgentsApi.md#get_controllers) | **GET** /api/v2/controllers | +*AgentsApi* | [**get_front_panel_port_by_id**](docs/AgentsApi.md#get_front_panel_port_by_id) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports/{portId} | +*AgentsApi* | [**get_front_panel_ports**](docs/AgentsApi.md#get_front_panel_ports) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports | *AgentsApi* | [**patch_agent**](docs/AgentsApi.md#patch_agent) | **PATCH** /api/v2/agents/{agentId} | *AgentsApi* | [**start_agents_batch_delete**](docs/AgentsApi.md#start_agents_batch_delete) | **POST** /api/v2/agents/operations/batch-delete | *AgentsApi* | [**start_agents_export_files**](docs/AgentsApi.md#start_agents_export_files) | **POST** /api/v2/agents/operations/exportFiles | @@ -90,10 +96,14 @@ Class | Method | HTTP request | Description *AgentsApi* | [**start_agents_set_dpdk_mode**](docs/AgentsApi.md#start_agents_set_dpdk_mode) | **POST** /api/v2/agents/operations/set-dpdk-mode | *AgentsApi* | [**start_agents_set_ntp**](docs/AgentsApi.md#start_agents_set_ntp) | **POST** /api/v2/agents/operations/set-ntp | *AgentsApi* | [**start_agents_update**](docs/AgentsApi.md#start_agents_update) | **POST** /api/v2/agents/operations/update | +*AgentsApi* | [**start_controllers_clear_compute_resource_ownership**](docs/AgentsApi.md#start_controllers_clear_compute_resource_ownership) | **POST** /api/v2/controllers/operations/clear-compute-resource-ownership | +*AgentsApi* | [**start_controllers_clear_front_panel_port_ownership**](docs/AgentsApi.md#start_controllers_clear_front_panel_port_ownership) | **POST** /api/v2/controllers/operations/clear-front-panel-port-ownership | *AgentsApi* | [**start_controllers_clear_port_ownership**](docs/AgentsApi.md#start_controllers_clear_port_ownership) | **POST** /api/v2/controllers/operations/clear-port-ownership | *AgentsApi* | [**start_controllers_power_cycle_nodes**](docs/AgentsApi.md#start_controllers_power_cycle_nodes) | **POST** /api/v2/controllers/operations/power-cycle-nodes | +*AgentsApi* | [**start_controllers_reboot_compute_resource**](docs/AgentsApi.md#start_controllers_reboot_compute_resource) | **POST** /api/v2/controllers/operations/reboot-compute-resource | *AgentsApi* | [**start_controllers_reboot_port**](docs/AgentsApi.md#start_controllers_reboot_port) | **POST** /api/v2/controllers/operations/reboot-port | *AgentsApi* | [**start_controllers_set_app**](docs/AgentsApi.md#start_controllers_set_app) | **POST** /api/v2/controllers/operations/set-app | +*AgentsApi* | [**start_controllers_set_front_panel_port_link_state**](docs/AgentsApi.md#start_controllers_set_front_panel_port_link_state) | **POST** /api/v2/controllers/operations/set-front-panel-port-link-state | *AgentsApi* | [**start_controllers_set_node_aggregation**](docs/AgentsApi.md#start_controllers_set_node_aggregation) | **POST** /api/v2/controllers/operations/set-node-aggregation | *AgentsApi* | [**start_controllers_set_node_app**](docs/AgentsApi.md#start_controllers_set_node_app) | **POST** /api/v2/controllers/operations/set-node-app | *AgentsApi* | [**start_controllers_set_port_link_state**](docs/AgentsApi.md#start_controllers_set_port_link_state) | **POST** /api/v2/controllers/operations/set-port-link-state | @@ -399,8 +409,10 @@ Class | Method | HTTP request | Description - [ActivationCodeRequest](docs/ActivationCodeRequest.md) - [AddActionInfo](docs/AddActionInfo.md) - [AddInput](docs/AddInput.md) + - [Address](docs/Address.md) - [AdvancedSettings](docs/AdvancedSettings.md) - [Agent](docs/Agent.md) + - [AgentAssignmentByFrontPanelPort](docs/AgentAssignmentByFrontPanelPort.md) - [AgentAssignmentByPort](docs/AgentAssignmentByPort.md) - [AgentAssignmentDetails](docs/AgentAssignmentDetails.md) - [AgentAssignments](docs/AgentAssignments.md) @@ -458,10 +470,15 @@ Class | Method | HTTP request | Description - [CipherTLS13](docs/CipherTLS13.md) - [CiscoAnyConnectSettings](docs/CiscoAnyConnectSettings.md) - [CiscoEncapsulation](docs/CiscoEncapsulation.md) + - [ClearComputeResourcesOwnershipOperation](docs/ClearComputeResourcesOwnershipOperation.md) + - [ClearFrontPanelPortsOwnershipOperation](docs/ClearFrontPanelPortsOwnershipOperation.md) - [ClearPortsOwnershipOperation](docs/ClearPortsOwnershipOperation.md) - [Command](docs/Command.md) - [CommandMetadata](docs/CommandMetadata.md) - [ComputeNode](docs/ComputeNode.md) + - [ComputeResource](docs/ComputeResource.md) + - [ComputeResourcesByController](docs/ComputeResourcesByController.md) + - [ComputeResourcesByNode](docs/ComputeResourcesByNode.md) - [Config](docs/Config.md) - [ConfigCategory](docs/ConfigCategory.md) - [ConfigId](docs/ConfigId.md) @@ -479,11 +496,13 @@ Class | Method | HTTP request | Description - [CreateAppOrAttackOperationInput](docs/CreateAppOrAttackOperationInput.md) - [CustomDashboards](docs/CustomDashboards.md) - [CustomImportHandler](docs/CustomImportHandler.md) + - [CustomSequence](docs/CustomSequence.md) - [CustomStat](docs/CustomStat.md) - [DNSResolver](docs/DNSResolver.md) - [DNSServer](docs/DNSServer.md) - [DTLSSettings](docs/DTLSSettings.md) - [DUTNetwork](docs/DUTNetwork.md) + - [DUTRange](docs/DUTRange.md) - [Dashboard](docs/Dashboard.md) - [DataType](docs/DataType.md) - [DataTypeValuesInner](docs/DataTypeValuesInner.md) @@ -538,6 +557,8 @@ Class | Method | HTTP request | Description - [FindParamMatchesOperation](docs/FindParamMatchesOperation.md) - [FortinetEncapsulation](docs/FortinetEncapsulation.md) - [FortinetSettings](docs/FortinetSettings.md) + - [FrontPanel](docs/FrontPanel.md) + - [FrontPanelPortsByController](docs/FrontPanelPortsByController.md) - [FulfillmentRequest](docs/FulfillmentRequest.md) - [GenerateAllOperation](docs/GenerateAllOperation.md) - [GenerateCSVReportsOperation](docs/GenerateCSVReportsOperation.md) @@ -685,12 +706,14 @@ Class | Method | HTTP request | Description - [PepDUT](docs/PepDUT.md) - [PfsP2Group](docs/PfsP2Group.md) - [PlaylistMetadata](docs/PlaylistMetadata.md) + - [PlaylistSequencingMethod](docs/PlaylistSequencingMethod.md) - [Plugin](docs/Plugin.md) - [PluginStats](docs/PluginStats.md) - [Port](docs/Port.md) - [PortSettings](docs/PortSettings.md) - [PortsByController](docs/PortsByController.md) - [PortsByNode](docs/PortsByNode.md) + - [PortsByPanel](docs/PortsByPanel.md) - [PrepareTestOperation](docs/PrepareTestOperation.md) - [PreparedTestOptions](docs/PreparedTestOptions.md) - [PrfP1Algorithm](docs/PrfP1Algorithm.md) @@ -700,6 +723,7 @@ Class | Method | HTTP request | Description - [RTPEncryptionMode](docs/RTPEncryptionMode.md) - [RTPProfile](docs/RTPProfile.md) - [RTPProfileMeta](docs/RTPProfileMeta.md) + - [RebootComputeResourcesOperation](docs/RebootComputeResourcesOperation.md) - [RebootOperationInput](docs/RebootOperationInput.md) - [RebootPortsOperation](docs/RebootPortsOperation.md) - [Reference](docs/Reference.md) @@ -721,16 +745,22 @@ Class | Method | HTTP request | Description - [SecondaryObjective](docs/SecondaryObjective.md) - [SegmentType](docs/SegmentType.md) - [SelectedEnv](docs/SelectedEnv.md) + - [SequenceDataTypes](docs/SequenceDataTypes.md) + - [SequenceValue](docs/SequenceValue.md) + - [SequenceValueTypes](docs/SequenceValueTypes.md) - [Session](docs/Session.md) - [SessionReuseMethodTLS12](docs/SessionReuseMethodTLS12.md) - [SessionReuseMethodTLS13](docs/SessionReuseMethodTLS13.md) - [SetAggregationModeOperation](docs/SetAggregationModeOperation.md) - [SetControllerAppOperation](docs/SetControllerAppOperation.md) - [SetDpdkModeOperationInput](docs/SetDpdkModeOperationInput.md) - - [SetLinkStateOperation](docs/SetLinkStateOperation.md) + - [SetFrontPanelPortsLinkStateOperation](docs/SetFrontPanelPortsLinkStateOperation.md) - [SetNodesAppOperation](docs/SetNodesAppOperation.md) - [SetNtpOperationInput](docs/SetNtpOperationInput.md) + - [SetPortsLinkStateOperation](docs/SetPortsLinkStateOperation.md) + - [SimpleSequenceValue](docs/SimpleSequenceValue.md) - [SimulatedIdP](docs/SimulatedIdP.md) + - [SingleValue](docs/SingleValue.md) - [Snapshot](docs/Snapshot.md) - [SnowflakeExporter](docs/SnowflakeExporter.md) - [SortBodyField](docs/SortBodyField.md) @@ -744,6 +774,7 @@ Class | Method | HTTP request | Description - [StreamDirection](docs/StreamDirection.md) - [StreamPayloadType](docs/StreamPayloadType.md) - [StreamProfile](docs/StreamProfile.md) + - [SubStep](docs/SubStep.md) - [SupportedGroupTLS13](docs/SupportedGroupTLS13.md) - [SystemInfo](docs/SystemInfo.md) - [TLSProfile](docs/TLSProfile.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 6a7fee7..089f072 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -64,8 +64,10 @@ from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput +from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent +from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort from cyperf.models.agent_assignment_details import AgentAssignmentDetails from cyperf.models.agent_assignments import AgentAssignments @@ -123,10 +125,15 @@ from cyperf.models.cipher_tls13 import CipherTLS13 from cyperf.models.cisco_any_connect_settings import CiscoAnyConnectSettings from cyperf.models.cisco_encapsulation import CiscoEncapsulation +from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation +from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.models.command import Command from cyperf.models.command_metadata import CommandMetadata from cyperf.models.compute_node import ComputeNode +from cyperf.models.compute_resource import ComputeResource +from cyperf.models.compute_resources_by_controller import ComputeResourcesByController +from cyperf.models.compute_resources_by_node import ComputeResourcesByNode from cyperf.models.config import Config from cyperf.models.config_category import ConfigCategory from cyperf.models.config_id import ConfigId @@ -144,11 +151,13 @@ from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler +from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork +from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -203,6 +212,8 @@ from cyperf.models.find_param_matches_operation import FindParamMatchesOperation from cyperf.models.fortinet_encapsulation import FortinetEncapsulation from cyperf.models.fortinet_settings import FortinetSettings +from cyperf.models.front_panel import FrontPanel +from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController from cyperf.models.fulfillment_request import FulfillmentRequest from cyperf.models.generate_all_operation import GenerateAllOperation from cyperf.models.generate_csv_reports_operation import GenerateCSVReportsOperation @@ -350,12 +361,14 @@ from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port from cyperf.models.port_settings import PortSettings from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode +from cyperf.models.ports_by_panel import PortsByPanel from cyperf.models.prepare_test_operation import PrepareTestOperation from cyperf.models.prepared_test_options import PreparedTestOptions from cyperf.models.prf_p1_algorithm import PrfP1Algorithm @@ -365,6 +378,7 @@ from cyperf.models.rtp_encryption_mode import RTPEncryptionMode from cyperf.models.rtp_profile import RTPProfile from cyperf.models.rtp_profile_meta import RTPProfileMeta +from cyperf.models.reboot_compute_resources_operation import RebootComputeResourcesOperation from cyperf.models.reboot_operation_input import RebootOperationInput from cyperf.models.reboot_ports_operation import RebootPortsOperation from cyperf.models.reference import Reference @@ -386,16 +400,22 @@ from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv +from cyperf.models.sequence_data_types import SequenceDataTypes +from cyperf.models.sequence_value import SequenceValue +from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput -from cyperf.models.set_link_state_operation import SetLinkStateOperation +from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.set_ports_link_state_operation import SetPortsLinkStateOperation +from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP +from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -409,6 +429,7 @@ from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile +from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/api/agents_api.py b/cyperf/api/agents_api.py index 58b5f49..e805f8c 100644 --- a/cyperf/api/agents_api.py +++ b/cyperf/api/agents_api.py @@ -22,15 +22,20 @@ from typing_extensions import Annotated from cyperf.models.agent import Agent from cyperf.models.async_context import AsyncContext +from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation +from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.models.compute_node import ComputeNode +from cyperf.models.compute_resource import ComputeResource from cyperf.models.controller import Controller from cyperf.models.export_files_operation_input import ExportFilesOperationInput +from cyperf.models.front_panel import FrontPanel from cyperf.models.get_agents200_response import GetAgents200Response from cyperf.models.get_agents_tags200_response import GetAgentsTags200Response from cyperf.models.get_controllers200_response import GetControllers200Response from cyperf.models.nodes_power_cycle_operation import NodesPowerCycleOperation from cyperf.models.port import Port +from cyperf.models.reboot_compute_resources_operation import RebootComputeResourcesOperation from cyperf.models.reboot_operation_input import RebootOperationInput from cyperf.models.reboot_ports_operation import RebootPortsOperation from cyperf.models.release_operation_input import ReleaseOperationInput @@ -38,9 +43,10 @@ from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput -from cyperf.models.set_link_state_operation import SetLinkStateOperation +from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.set_ports_link_state_operation import SetPortsLinkStateOperation from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner from cyperf.models.update_port_tags_operation import UpdatePortTagsOperation @@ -1213,11 +1219,11 @@ def _get_agents_tags_serialize( @validate_call - def get_compute_node_port_by_id( + def get_compute_node_compute_resource_by_id( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], - port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + compute_resource_id: Annotated[StrictStr, Field(description="The ID of the compute resource.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1230,16 +1236,16 @@ def get_compute_node_port_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Port: - """get_compute_node_port_by_id + ) -> ComputeResource: + """get_compute_node_compute_resource_by_id :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str - :param port_id: The ID of the port. (required) - :type port_id: str + :param compute_resource_id: The ID of the compute resource. (required) + :type compute_resource_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1262,10 +1268,10 @@ def get_compute_node_port_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_port_by_id_serialize( + _param = self._get_compute_node_compute_resource_by_id_serialize( controller_id=controller_id, compute_node_id=compute_node_id, - port_id=port_id, + compute_resource_id=compute_resource_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1273,7 +1279,7 @@ def get_compute_node_port_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Port", + '200': "ComputeResource", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -1285,11 +1291,11 @@ def get_compute_node_port_by_id( @validate_call - def get_compute_node_port_by_id_with_http_info( + def get_compute_node_compute_resource_by_id_with_http_info( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], - port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + compute_resource_id: Annotated[StrictStr, Field(description="The ID of the compute resource.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1302,16 +1308,16 @@ def get_compute_node_port_by_id_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[Port]: - """get_compute_node_port_by_id + ) -> ApiResponse[ComputeResource]: + """get_compute_node_compute_resource_by_id :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str - :param port_id: The ID of the port. (required) - :type port_id: str + :param compute_resource_id: The ID of the compute resource. (required) + :type compute_resource_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1334,10 +1340,10 @@ def get_compute_node_port_by_id_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_port_by_id_serialize( + _param = self._get_compute_node_compute_resource_by_id_serialize( controller_id=controller_id, compute_node_id=compute_node_id, - port_id=port_id, + compute_resource_id=compute_resource_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1345,7 +1351,7 @@ def get_compute_node_port_by_id_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Port", + '200': "ComputeResource", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -1357,11 +1363,11 @@ def get_compute_node_port_by_id_with_http_info( @validate_call - def get_compute_node_port_by_id_without_preload_content( + def get_compute_node_compute_resource_by_id_without_preload_content( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], - port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + compute_resource_id: Annotated[StrictStr, Field(description="The ID of the compute resource.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1375,15 +1381,15 @@ def get_compute_node_port_by_id_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_compute_node_port_by_id + """get_compute_node_compute_resource_by_id :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str - :param port_id: The ID of the port. (required) - :type port_id: str + :param compute_resource_id: The ID of the compute resource. (required) + :type compute_resource_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1406,10 +1412,10 @@ def get_compute_node_port_by_id_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_port_by_id_serialize( + _param = self._get_compute_node_compute_resource_by_id_serialize( controller_id=controller_id, compute_node_id=compute_node_id, - port_id=port_id, + compute_resource_id=compute_resource_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1417,7 +1423,7 @@ def get_compute_node_port_by_id_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Port", + '200': "ComputeResource", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -1428,11 +1434,11 @@ def get_compute_node_port_by_id_without_preload_content( ) - def _get_compute_node_port_by_id_serialize( + def _get_compute_node_compute_resource_by_id_serialize( self, controller_id, compute_node_id, - port_id, + compute_resource_id, _request_auth, _content_type, _headers, @@ -1456,8 +1462,8 @@ def _get_compute_node_port_by_id_serialize( _path_params['controllerId'] = controller_id if compute_node_id is not None: _path_params['computeNodeId'] = compute_node_id - if port_id is not None: - _path_params['portId'] = port_id + if compute_resource_id is not None: + _path_params['computeResourceId'] = compute_resource_id # process the query parameters # process the header parameters # process the form parameters @@ -1481,7 +1487,7 @@ def _get_compute_node_port_by_id_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports/{portId}', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources/{computeResourceId}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1498,7 +1504,7 @@ def _get_compute_node_port_by_id_serialize( @validate_call - def get_compute_node_ports( + def get_compute_node_compute_resources( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], @@ -1516,8 +1522,8 @@ def get_compute_node_ports( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[Port]: - """get_compute_node_ports + ) -> List[ComputeResource]: + """get_compute_node_compute_resources :param controller_id: The ID of the controller. (required) @@ -1550,7 +1556,7 @@ def get_compute_node_ports( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_ports_serialize( + _param = self._get_compute_node_compute_resources_serialize( controller_id=controller_id, compute_node_id=compute_node_id, take=take, @@ -1562,7 +1568,7 @@ def get_compute_node_ports( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "List[ComputeResource]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1573,7 +1579,7 @@ def get_compute_node_ports( @validate_call - def get_compute_node_ports_with_http_info( + def get_compute_node_compute_resources_with_http_info( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], @@ -1591,8 +1597,8 @@ def get_compute_node_ports_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[Port]]: - """get_compute_node_ports + ) -> ApiResponse[List[ComputeResource]]: + """get_compute_node_compute_resources :param controller_id: The ID of the controller. (required) @@ -1625,7 +1631,7 @@ def get_compute_node_ports_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_ports_serialize( + _param = self._get_compute_node_compute_resources_serialize( controller_id=controller_id, compute_node_id=compute_node_id, take=take, @@ -1637,7 +1643,7 @@ def get_compute_node_ports_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "List[ComputeResource]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1648,7 +1654,7 @@ def get_compute_node_ports_with_http_info( @validate_call - def get_compute_node_ports_without_preload_content( + def get_compute_node_compute_resources_without_preload_content( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], @@ -1667,7 +1673,7 @@ def get_compute_node_ports_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_compute_node_ports + """get_compute_node_compute_resources :param controller_id: The ID of the controller. (required) @@ -1700,7 +1706,7 @@ def get_compute_node_ports_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_compute_node_ports_serialize( + _param = self._get_compute_node_compute_resources_serialize( controller_id=controller_id, compute_node_id=compute_node_id, take=take, @@ -1712,7 +1718,7 @@ def get_compute_node_ports_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "List[ComputeResource]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1722,7 +1728,7 @@ def get_compute_node_ports_without_preload_content( ) - def _get_compute_node_ports_serialize( + def _get_compute_node_compute_resources_serialize( self, controller_id, compute_node_id, @@ -1782,7 +1788,7 @@ def _get_compute_node_ports_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -1799,9 +1805,11 @@ def _get_compute_node_ports_serialize( @validate_call - def get_controller_by_id( + def get_compute_node_port_by_id( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1814,13 +1822,16 @@ def get_controller_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> Controller: - """get_controller_by_id + ) -> Port: + """get_compute_node_port_by_id - Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str + :param port_id: The ID of the port. (required) + :type port_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1843,8 +1854,10 @@ def get_controller_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_by_id_serialize( + _param = self._get_compute_node_port_by_id_serialize( controller_id=controller_id, + compute_node_id=compute_node_id, + port_id=port_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1852,7 +1865,8 @@ def get_controller_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Controller", + '200': "Port", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1863,9 +1877,11 @@ def get_controller_by_id( @validate_call - def get_controller_by_id_with_http_info( + def get_compute_node_port_by_id_with_http_info( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1878,13 +1894,16 @@ def get_controller_by_id_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[Controller]: - """get_controller_by_id + ) -> ApiResponse[Port]: + """get_compute_node_port_by_id - Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str + :param port_id: The ID of the port. (required) + :type port_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1907,8 +1926,10 @@ def get_controller_by_id_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_by_id_serialize( + _param = self._get_compute_node_port_by_id_serialize( controller_id=controller_id, + compute_node_id=compute_node_id, + port_id=port_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1916,7 +1937,8 @@ def get_controller_by_id_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Controller", + '200': "Port", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1927,9 +1949,11 @@ def get_controller_by_id_with_http_info( @validate_call - def get_controller_by_id_without_preload_content( + def get_compute_node_port_by_id_without_preload_content( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -1943,12 +1967,15 @@ def get_controller_by_id_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_controller_by_id + """get_compute_node_port_by_id - Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str + :param port_id: The ID of the port. (required) + :type port_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -1971,8 +1998,10 @@ def get_controller_by_id_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_by_id_serialize( + _param = self._get_compute_node_port_by_id_serialize( controller_id=controller_id, + compute_node_id=compute_node_id, + port_id=port_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -1980,7 +2009,8 @@ def get_controller_by_id_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "Controller", + '200': "Port", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1990,9 +2020,11 @@ def get_controller_by_id_without_preload_content( ) - def _get_controller_by_id_serialize( + def _get_compute_node_port_by_id_serialize( self, controller_id, + compute_node_id, + port_id, _request_auth, _content_type, _headers, @@ -2014,6 +2046,10 @@ def _get_controller_by_id_serialize( # process the path parameters if controller_id is not None: _path_params['controllerId'] = controller_id + if compute_node_id is not None: + _path_params['computeNodeId'] = compute_node_id + if port_id is not None: + _path_params['portId'] = port_id # process the query parameters # process the header parameters # process the form parameters @@ -2037,7 +2073,7 @@ def _get_controller_by_id_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers/{controllerId}', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports/{portId}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2054,10 +2090,12 @@ def _get_controller_by_id_serialize( @validate_call - def get_controller_compute_node_by_id( + def get_compute_node_ports( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2070,14 +2108,18 @@ def get_controller_compute_node_by_id( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ComputeNode: - """get_controller_compute_node_by_id + ) -> List[Port]: + """get_compute_node_ports :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2100,9 +2142,11 @@ def get_controller_compute_node_by_id( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_node_by_id_serialize( + _param = self._get_compute_node_ports_serialize( controller_id=controller_id, compute_node_id=compute_node_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2110,8 +2154,7 @@ def get_controller_compute_node_by_id( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "ComputeNode", - '404': "ErrorResponse", + '200': "List[Port]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2122,10 +2165,12 @@ def get_controller_compute_node_by_id( @validate_call - def get_controller_compute_node_by_id_with_http_info( + def get_compute_node_ports_with_http_info( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2138,14 +2183,18 @@ def get_controller_compute_node_by_id_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[ComputeNode]: - """get_controller_compute_node_by_id + ) -> ApiResponse[List[Port]]: + """get_compute_node_ports :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2168,9 +2217,11 @@ def get_controller_compute_node_by_id_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_node_by_id_serialize( + _param = self._get_compute_node_ports_serialize( controller_id=controller_id, compute_node_id=compute_node_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2178,8 +2229,7 @@ def get_controller_compute_node_by_id_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "ComputeNode", - '404': "ErrorResponse", + '200': "List[Port]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2190,10 +2240,12 @@ def get_controller_compute_node_by_id_with_http_info( @validate_call - def get_controller_compute_node_by_id_without_preload_content( + def get_compute_node_ports_without_preload_content( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2207,13 +2259,17 @@ def get_controller_compute_node_by_id_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_controller_compute_node_by_id + """get_compute_node_ports :param controller_id: The ID of the controller. (required) :type controller_id: str :param compute_node_id: The ID of the compute node. (required) :type compute_node_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2236,9 +2292,11 @@ def get_controller_compute_node_by_id_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_node_by_id_serialize( + _param = self._get_compute_node_ports_serialize( controller_id=controller_id, compute_node_id=compute_node_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2246,8 +2304,7 @@ def get_controller_compute_node_by_id_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "ComputeNode", - '404': "ErrorResponse", + '200': "List[Port]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2257,10 +2314,12 @@ def get_controller_compute_node_by_id_without_preload_content( ) - def _get_controller_compute_node_by_id_serialize( + def _get_compute_node_ports_serialize( self, controller_id, compute_node_id, + take, + skip, _request_auth, _content_type, _headers, @@ -2285,6 +2344,14 @@ def _get_controller_compute_node_by_id_serialize( if compute_node_id is not None: _path_params['computeNodeId'] = compute_node_id # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + # process the header parameters # process the form parameters # process the body parameter @@ -2307,7 +2374,7 @@ def _get_controller_compute_node_by_id_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2324,11 +2391,9 @@ def _get_controller_compute_node_by_id_serialize( @validate_call - def get_controller_compute_nodes( + def get_controller_by_id( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2341,16 +2406,13 @@ def get_controller_compute_nodes( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[ComputeNode]: - """get_controller_compute_nodes + ) -> Controller: + """get_controller_by_id + Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2373,10 +2435,8 @@ def get_controller_compute_nodes( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_nodes_serialize( + _param = self._get_controller_by_id_serialize( controller_id=controller_id, - take=take, - skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2384,7 +2444,7 @@ def get_controller_compute_nodes( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "Controller", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2395,11 +2455,9 @@ def get_controller_compute_nodes( @validate_call - def get_controller_compute_nodes_with_http_info( + def get_controller_by_id_with_http_info( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2412,16 +2470,13 @@ def get_controller_compute_nodes_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[ComputeNode]]: - """get_controller_compute_nodes + ) -> ApiResponse[Controller]: + """get_controller_by_id + Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2444,10 +2499,8 @@ def get_controller_compute_nodes_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_nodes_serialize( + _param = self._get_controller_by_id_serialize( controller_id=controller_id, - take=take, - skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2455,7 +2508,7 @@ def get_controller_compute_nodes_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "Controller", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2466,11 +2519,9 @@ def get_controller_compute_nodes_with_http_info( @validate_call - def get_controller_compute_nodes_without_preload_content( + def get_controller_by_id_without_preload_content( self, controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2484,15 +2535,12 @@ def get_controller_compute_nodes_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_controller_compute_nodes + """get_controller_by_id + Get the controller chain. :param controller_id: The ID of the controller. (required) :type controller_id: str - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2515,10 +2563,8 @@ def get_controller_compute_nodes_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controller_compute_nodes_serialize( + _param = self._get_controller_by_id_serialize( controller_id=controller_id, - take=take, - skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2526,7 +2572,7 @@ def get_controller_compute_nodes_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "Controller", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2536,11 +2582,9 @@ def get_controller_compute_nodes_without_preload_content( ) - def _get_controller_compute_nodes_serialize( + def _get_controller_by_id_serialize( self, controller_id, - take, - skip, _request_auth, _content_type, _headers, @@ -2563,14 +2607,6 @@ def _get_controller_compute_nodes_serialize( if controller_id is not None: _path_params['controllerId'] = controller_id # process the query parameters - if take is not None: - - _query_params.append(('take', take)) - - if skip is not None: - - _query_params.append(('skip', skip)) - # process the header parameters # process the form parameters # process the body parameter @@ -2593,7 +2629,7 @@ def _get_controller_compute_nodes_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers/{controllerId}/compute-nodes', + resource_path='/api/v2/controllers/{controllerId}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2610,11 +2646,10 @@ def _get_controller_compute_nodes_serialize( @validate_call - def get_controllers( + def get_controller_compute_node_by_id( self, - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, - include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2627,17 +2662,14 @@ def get_controllers( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> GetControllers200Response: - """get_controllers + ) -> ComputeNode: + """get_controller_compute_node_by_id - Get the controllers chain. - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int - :param include: Specifies if the sub-fields that are objects should be included. - :type include: str + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2660,10 +2692,9 @@ def get_controllers( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controllers_serialize( - take=take, - skip=skip, - include=include, + _param = self._get_controller_compute_node_by_id_serialize( + controller_id=controller_id, + compute_node_id=compute_node_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2671,7 +2702,8 @@ def get_controllers( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GetControllers200Response", + '200': "ComputeNode", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2682,11 +2714,10 @@ def get_controllers( @validate_call - def get_controllers_with_http_info( + def get_controller_compute_node_by_id_with_http_info( self, - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, - include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2699,17 +2730,14 @@ def get_controllers_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[GetControllers200Response]: - """get_controllers + ) -> ApiResponse[ComputeNode]: + """get_controller_compute_node_by_id - Get the controllers chain. - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int - :param include: Specifies if the sub-fields that are objects should be included. - :type include: str + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2732,10 +2760,9 @@ def get_controllers_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controllers_serialize( - take=take, - skip=skip, - include=include, + _param = self._get_controller_compute_node_by_id_serialize( + controller_id=controller_id, + compute_node_id=compute_node_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2743,7 +2770,8 @@ def get_controllers_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GetControllers200Response", + '200': "ComputeNode", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2754,11 +2782,10 @@ def get_controllers_with_http_info( @validate_call - def get_controllers_without_preload_content( + def get_controller_compute_node_by_id_without_preload_content( self, - take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, - skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, - include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + compute_node_id: Annotated[StrictStr, Field(description="The ID of the compute node.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2772,16 +2799,13 @@ def get_controllers_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """get_controllers + """get_controller_compute_node_by_id - Get the controllers chain. - :param take: The number of search results to return - :type take: int - :param skip: The number of search results to skip - :type skip: int - :param include: Specifies if the sub-fields that are objects should be included. - :type include: str + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param compute_node_id: The ID of the compute node. (required) + :type compute_node_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2804,10 +2828,9 @@ def get_controllers_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._get_controllers_serialize( - take=take, - skip=skip, - include=include, + _param = self._get_controller_compute_node_by_id_serialize( + controller_id=controller_id, + compute_node_id=compute_node_id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2815,7 +2838,8 @@ def get_controllers_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "GetControllers200Response", + '200': "ComputeNode", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2825,11 +2849,10 @@ def get_controllers_without_preload_content( ) - def _get_controllers_serialize( + def _get_controller_compute_node_by_id_serialize( self, - take, - skip, - include, + controller_id, + compute_node_id, _request_auth, _content_type, _headers, @@ -2849,19 +2872,11 @@ def _get_controllers_serialize( _body_params: Optional[bytes] = None # process the path parameters + if controller_id is not None: + _path_params['controllerId'] = controller_id + if compute_node_id is not None: + _path_params['computeNodeId'] = compute_node_id # process the query parameters - if take is not None: - - _query_params.append(('take', take)) - - if skip is not None: - - _query_params.append(('skip', skip)) - - if include is not None: - - _query_params.append(('include', include)) - # process the header parameters # process the form parameters # process the body parameter @@ -2884,7 +2899,7 @@ def _get_controllers_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/api/v2/controllers', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -2901,10 +2916,11 @@ def _get_controllers_serialize( @validate_call - def patch_agent( + def get_controller_compute_nodes( self, - agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], - agent: Optional[Agent] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2917,15 +2933,16 @@ def patch_agent( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> None: - """patch_agent + ) -> List[ComputeNode]: + """get_controller_compute_nodes - Update a particular agent. Only non-null fields are updated. - :param agent_id: The ID of the agent. (required) - :type agent_id: str - :param agent: - :type agent: Agent + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2948,9 +2965,10 @@ def patch_agent( :return: Returns the result object. """ # noqa: E501 - _param = self._patch_agent_serialize( - agent_id=agent_id, - agent=agent, + _param = self._get_controller_compute_nodes_serialize( + controller_id=controller_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2958,8 +2976,7 @@ def patch_agent( ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '404': "ErrorResponse", + '200': "List[ComputeNode]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2970,10 +2987,11 @@ def patch_agent( @validate_call - def patch_agent_with_http_info( + def get_controller_compute_nodes_with_http_info( self, - agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], - agent: Optional[Agent] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2986,15 +3004,16 @@ def patch_agent_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[None]: - """patch_agent + ) -> ApiResponse[List[ComputeNode]]: + """get_controller_compute_nodes - Update a particular agent. Only non-null fields are updated. - :param agent_id: The ID of the agent. (required) - :type agent_id: str - :param agent: - :type agent: Agent + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3017,9 +3036,10 @@ def patch_agent_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._patch_agent_serialize( - agent_id=agent_id, - agent=agent, + _param = self._get_controller_compute_nodes_serialize( + controller_id=controller_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3027,8 +3047,7 @@ def patch_agent_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '404': "ErrorResponse", + '200': "List[ComputeNode]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3039,10 +3058,11 @@ def patch_agent_with_http_info( @validate_call - def patch_agent_without_preload_content( + def get_controller_compute_nodes_without_preload_content( self, - agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], - agent: Optional[Agent] = None, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3056,14 +3076,15 @@ def patch_agent_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """patch_agent + """get_controller_compute_nodes - Update a particular agent. Only non-null fields are updated. - :param agent_id: The ID of the agent. (required) - :type agent_id: str - :param agent: - :type agent: Agent + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3086,9 +3107,10 @@ def patch_agent_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._patch_agent_serialize( - agent_id=agent_id, - agent=agent, + _param = self._get_controller_compute_nodes_serialize( + controller_id=controller_id, + take=take, + skip=skip, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3096,8 +3118,7 @@ def patch_agent_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '204': None, - '404': "ErrorResponse", + '200': "List[ComputeNode]", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3107,10 +3128,11 @@ def patch_agent_without_preload_content( ) - def _patch_agent_serialize( + def _get_controller_compute_nodes_serialize( self, - agent_id, - agent, + controller_id, + take, + skip, _request_auth, _content_type, _headers, @@ -3130,14 +3152,20 @@ def _patch_agent_serialize( _body_params: Optional[bytes] = None # process the path parameters - if agent_id is not None: - _path_params['agentId'] = agent_id + if controller_id is not None: + _path_params['controllerId'] = controller_id # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + # process the header parameters # process the form parameters # process the body parameter - if agent is not None: - _body_params = agent # set the HTTP header `Accept` @@ -3148,19 +3176,6 @@ def _patch_agent_serialize( ] ) - # set the HTTP header `Content-Type` - if _content_type: - _header_params['Content-Type'] = _content_type - else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) - if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type # authentication setting _auth_settings: List[str] = [ @@ -3169,8 +3184,8 @@ def _patch_agent_serialize( ] return self.api_client.param_serialize( - method='PATCH', - resource_path='/api/v2/agents/{agentId}', + method='GET', + resource_path='/api/v2/controllers/{controllerId}/compute-nodes', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3186,170 +3201,2990 @@ def _patch_agent_serialize( - - - - - - - - - - - - - - - - - - + @validate_call + def get_controller_front_panel_by_id( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> FrontPanel: + """get_controller_front_panel_by_id - + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 - + _param = self._get_controller_front_panel_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '200': "FrontPanel", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + @validate_call + def get_controller_front_panel_by_id_with_http_info( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[FrontPanel]: + """get_controller_front_panel_by_id + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._get_controller_front_panel_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '200': "FrontPanel", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) - - - - - - + @validate_call + def get_controller_front_panel_by_id_without_preload_content( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_controller_front_panel_by_id - + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 - + _param = self._get_controller_front_panel_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '200': "FrontPanel", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + def _get_controller_front_panel_by_id_serialize( + self, + controller_id, + front_panel_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + _host = None + _collection_formats: Dict[str, str] = { + } + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None - - - - - - - + # process the path parameters + if controller_id is not None: + _path_params['controllerId'] = controller_id + if front_panel_id is not None: + _path_params['frontPanelId'] = front_panel_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) - - + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] - + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/controllers/{controllerId}/front-panels/{frontPanelId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + @validate_call + def get_controller_front_panels( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[FrontPanel]: + """get_controller_front_panels - + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controller_front_panels_serialize( + controller_id=controller_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FrontPanel]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_controller_front_panels_with_http_info( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[FrontPanel]]: + """get_controller_front_panels + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controller_front_panels_serialize( + controller_id=controller_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FrontPanel]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_controller_front_panels_without_preload_content( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_controller_front_panels + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controller_front_panels_serialize( + controller_id=controller_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[FrontPanel]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_controller_front_panels_serialize( + self, + controller_id, + take, + skip, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if controller_id is not None: + _path_params['controllerId'] = controller_id + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/controllers/{controllerId}/front-panels', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_controllers( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GetControllers200Response: + """get_controllers + + Get the controllers chain. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param include: Specifies if the sub-fields that are objects should be included. + :type include: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controllers_serialize( + take=take, + skip=skip, + include=include, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetControllers200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_controllers_with_http_info( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[GetControllers200Response]: + """get_controllers + + Get the controllers chain. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param include: Specifies if the sub-fields that are objects should be included. + :type include: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controllers_serialize( + take=take, + skip=skip, + include=include, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetControllers200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_controllers_without_preload_content( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + include: Annotated[Optional[StrictStr], Field(description="Specifies if the sub-fields that are objects should be included.")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_controllers + + Get the controllers chain. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param include: Specifies if the sub-fields that are objects should be included. + :type include: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_controllers_serialize( + take=take, + skip=skip, + include=include, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetControllers200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_controllers_serialize( + self, + take, + skip, + include, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + if include is not None: + + _query_params.append(('include', include)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/controllers', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_front_panel_port_by_id( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> Port: + """get_front_panel_port_by_id + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param port_id: The ID of the port. (required) + :type port_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_port_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + port_id=port_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "Port", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_front_panel_port_by_id_with_http_info( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[Port]: + """get_front_panel_port_by_id + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param port_id: The ID of the port. (required) + :type port_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_port_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + port_id=port_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "Port", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_front_panel_port_by_id_without_preload_content( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + port_id: Annotated[StrictStr, Field(description="The ID of the port.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_front_panel_port_by_id + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param port_id: The ID of the port. (required) + :type port_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_port_by_id_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + port_id=port_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "Port", + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_front_panel_port_by_id_serialize( + self, + controller_id, + front_panel_id, + port_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if controller_id is not None: + _path_params['controllerId'] = controller_id + if front_panel_id is not None: + _path_params['frontPanelId'] = front_panel_id + if port_id is not None: + _path_params['portId'] = port_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports/{portId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_front_panel_ports( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[Port]: + """get_front_panel_ports + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_ports_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[Port]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_front_panel_ports_with_http_info( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[Port]]: + """get_front_panel_ports + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_ports_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[Port]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_front_panel_ports_without_preload_content( + self, + controller_id: Annotated[StrictStr, Field(description="The ID of the controller.")], + front_panel_id: Annotated[StrictStr, Field(description="The ID of the front panel.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_front_panel_ports + + + :param controller_id: The ID of the controller. (required) + :type controller_id: str + :param front_panel_id: The ID of the front panel. (required) + :type front_panel_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_front_panel_ports_serialize( + controller_id=controller_id, + front_panel_id=front_panel_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "List[Port]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_front_panel_ports_serialize( + self, + controller_id, + front_panel_id, + take, + skip, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if controller_id is not None: + _path_params['controllerId'] = controller_id + if front_panel_id is not None: + _path_params['frontPanelId'] = front_panel_id + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def patch_agent( + self, + agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], + agent: Optional[Agent] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """patch_agent + + Update a particular agent. Only non-null fields are updated. + + :param agent_id: The ID of the agent. (required) + :type agent_id: str + :param agent: + :type agent: Agent + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._patch_agent_serialize( + agent_id=agent_id, + agent=agent, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def patch_agent_with_http_info( + self, + agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], + agent: Optional[Agent] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """patch_agent + + Update a particular agent. Only non-null fields are updated. + + :param agent_id: The ID of the agent. (required) + :type agent_id: str + :param agent: + :type agent: Agent + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._patch_agent_serialize( + agent_id=agent_id, + agent=agent, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def patch_agent_without_preload_content( + self, + agent_id: Annotated[StrictStr, Field(description="The ID of the agent.")], + agent: Optional[Agent] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """patch_agent + + Update a particular agent. Only non-null fields are updated. + + :param agent_id: The ID of the agent. (required) + :type agent_id: str + :param agent: + :type agent: Agent + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._patch_agent_serialize( + agent_id=agent_id, + agent=agent, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '404': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _patch_agent_serialize( + self, + agent_id, + agent, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if agent_id is not None: + _path_params['agentId'] = agent_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if agent is not None: + _body_params = agent + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='PATCH', + resource_path='/api/v2/agents/{agentId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @validate_call + def start_agents_batch_delete( + self, + start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_agents_batch_delete + + Remove multiple agents. + + :param start_agents_batch_delete_request_inner: + :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_batch_delete_serialize( + start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_agents_batch_delete_with_http_info( + self, + start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_agents_batch_delete + + Remove multiple agents. + + :param start_agents_batch_delete_request_inner: + :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_batch_delete_serialize( + start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_agents_batch_delete_without_preload_content( + self, + start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_agents_batch_delete + + Remove multiple agents. + + :param start_agents_batch_delete_request_inner: + :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_batch_delete_serialize( + start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _start_agents_batch_delete_serialize( + self, + start_agents_batch_delete_request_inner, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'StartAgentsBatchDeleteRequestInner': '', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if start_agents_batch_delete_request_inner is not None: + _body_params = start_agents_batch_delete_request_inner + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/agents/operations/batch-delete', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def start_agents_export_files( + self, + export_files_operation_input: Optional[ExportFilesOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_agents_export_files + + Sends export files requests to a list of agents. + + :param export_files_operation_input: + :type export_files_operation_input: ExportFilesOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_export_files_serialize( + export_files_operation_input=export_files_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + @validate_call + def start_agents_export_files_with_http_info( + self, + export_files_operation_input: Optional[ExportFilesOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_agents_export_files + + Sends export files requests to a list of agents. + + :param export_files_operation_input: + :type export_files_operation_input: ExportFilesOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_export_files_serialize( + export_files_operation_input=export_files_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + @validate_call + def start_agents_export_files_without_preload_content( + self, + export_files_operation_input: Optional[ExportFilesOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_agents_export_files + Sends export files requests to a list of agents. + :param export_files_operation_input: + :type export_files_operation_input: ExportFilesOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._start_agents_export_files_serialize( + export_files_operation_input=export_files_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) - + def _start_agents_export_files_serialize( + self, + export_files_operation_input, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if export_files_operation_input is not None: + _body_params = export_files_operation_input + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/agents/operations/exportFiles', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def start_agents_reboot( + self, + reboot_operation_input: Optional[RebootOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_agents_reboot + + Reboot the agents specified in the request. + + :param reboot_operation_input: + :type reboot_operation_input: RebootOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_agents_reboot_serialize( + reboot_operation_input=reboot_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + @validate_call + def start_agents_reboot_with_http_info( + self, + reboot_operation_input: Optional[RebootOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_agents_reboot + Reboot the agents specified in the request. + :param reboot_operation_input: + :type reboot_operation_input: RebootOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._start_agents_reboot_serialize( + reboot_operation_input=reboot_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) - + @validate_call + def start_agents_reboot_without_preload_content( + self, + reboot_operation_input: Optional[RebootOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_agents_reboot - + Reboot the agents specified in the request. + :param reboot_operation_input: + :type reboot_operation_input: RebootOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._start_agents_reboot_serialize( + reboot_operation_input=reboot_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + def _start_agents_reboot_serialize( + self, + reboot_operation_input, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: - + _host = None - + _collection_formats: Dict[str, str] = { + } - + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if reboot_operation_input is not None: + _body_params = reboot_operation_input + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type - + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] - + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/agents/operations/reboot', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) - + @validate_call + def start_agents_release( + self, + release_operation_input: Optional[ReleaseOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_agents_release + Releases all the agents from the given session. - + :param release_operation_input: + :type release_operation_input: ReleaseOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 - + _param = self._start_agents_release_serialize( + release_operation_input=release_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + @validate_call + def start_agents_release_with_http_info( + self, + release_operation_input: Optional[ReleaseOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_agents_release + Releases all the agents from the given session. + :param release_operation_input: + :type release_operation_input: ReleaseOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._start_agents_release_serialize( + release_operation_input=release_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) - - - - + @validate_call + def start_agents_release_without_preload_content( + self, + release_operation_input: Optional[ReleaseOperationInput] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_agents_release + Releases all the agents from the given session. + :param release_operation_input: + :type release_operation_input: ReleaseOperationInput + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + _param = self._start_agents_release_serialize( + release_operation_input=release_operation_input, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) - + def _start_agents_release_serialize( + self, + release_operation_input, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: - + _host = None + _collection_formats: Dict[str, str] = { + } + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if release_operation_input is not None: + _body_params = release_operation_input - + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) - + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type - + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/agents/operations/release', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) @validate_call - def start_agents_batch_delete( + def start_agents_reserve( self, - start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + reserve_operation_input: Optional[ReserveOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3363,12 +6198,12 @@ def start_agents_batch_delete( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_batch_delete + """start_agents_reserve - Remove multiple agents. + Reserves all the agents from the given session. - :param start_agents_batch_delete_request_inner: - :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param reserve_operation_input: + :type reserve_operation_input: ReserveOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3391,8 +6226,8 @@ def start_agents_batch_delete( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_batch_delete_serialize( - start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _param = self._start_agents_reserve_serialize( + reserve_operation_input=reserve_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3410,9 +6245,9 @@ def start_agents_batch_delete( @validate_call - def start_agents_batch_delete_with_http_info( + def start_agents_reserve_with_http_info( self, - start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + reserve_operation_input: Optional[ReserveOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3426,12 +6261,12 @@ def start_agents_batch_delete_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_batch_delete + """start_agents_reserve - Remove multiple agents. + Reserves all the agents from the given session. - :param start_agents_batch_delete_request_inner: - :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param reserve_operation_input: + :type reserve_operation_input: ReserveOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3454,8 +6289,8 @@ def start_agents_batch_delete_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_batch_delete_serialize( - start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _param = self._start_agents_reserve_serialize( + reserve_operation_input=reserve_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3473,9 +6308,9 @@ def start_agents_batch_delete_with_http_info( @validate_call - def start_agents_batch_delete_without_preload_content( + def start_agents_reserve_without_preload_content( self, - start_agents_batch_delete_request_inner: Optional[List[StartAgentsBatchDeleteRequestInner]] = None, + reserve_operation_input: Optional[ReserveOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3489,12 +6324,12 @@ def start_agents_batch_delete_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_batch_delete + """start_agents_reserve - Remove multiple agents. + Reserves all the agents from the given session. - :param start_agents_batch_delete_request_inner: - :type start_agents_batch_delete_request_inner: List[StartAgentsBatchDeleteRequestInner] + :param reserve_operation_input: + :type reserve_operation_input: ReserveOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3517,8 +6352,8 @@ def start_agents_batch_delete_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_batch_delete_serialize( - start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner, + _param = self._start_agents_reserve_serialize( + reserve_operation_input=reserve_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3535,9 +6370,9 @@ def start_agents_batch_delete_without_preload_content( ) - def _start_agents_batch_delete_serialize( + def _start_agents_reserve_serialize( self, - start_agents_batch_delete_request_inner, + reserve_operation_input, _request_auth, _content_type, _headers, @@ -3547,7 +6382,6 @@ def _start_agents_batch_delete_serialize( _host = None _collection_formats: Dict[str, str] = { - 'StartAgentsBatchDeleteRequestInner': '', } _path_params: Dict[str, str] = {} @@ -3562,8 +6396,8 @@ def _start_agents_batch_delete_serialize( # process the header parameters # process the form parameters # process the body parameter - if start_agents_batch_delete_request_inner is not None: - _body_params = start_agents_batch_delete_request_inner + if reserve_operation_input is not None: + _body_params = reserve_operation_input # set the HTTP header `Accept` @@ -3596,7 +6430,7 @@ def _start_agents_batch_delete_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/batch-delete', + resource_path='/api/v2/agents/operations/reserve', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3613,9 +6447,9 @@ def _start_agents_batch_delete_serialize( @validate_call - def start_agents_export_files( + def start_agents_set_dpdk_mode( self, - export_files_operation_input: Optional[ExportFilesOperationInput] = None, + set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3629,12 +6463,12 @@ def start_agents_export_files( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_export_files + """start_agents_set_dpdk_mode - Sends export files requests to a list of agents. + Enable/disable DPDK for a list of agents. - :param export_files_operation_input: - :type export_files_operation_input: ExportFilesOperationInput + :param set_dpdk_mode_operation_input: + :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3657,8 +6491,8 @@ def start_agents_export_files( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_export_files_serialize( - export_files_operation_input=export_files_operation_input, + _param = self._start_agents_set_dpdk_mode_serialize( + set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3676,9 +6510,9 @@ def start_agents_export_files( @validate_call - def start_agents_export_files_with_http_info( + def start_agents_set_dpdk_mode_with_http_info( self, - export_files_operation_input: Optional[ExportFilesOperationInput] = None, + set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3692,12 +6526,12 @@ def start_agents_export_files_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_export_files + """start_agents_set_dpdk_mode - Sends export files requests to a list of agents. + Enable/disable DPDK for a list of agents. - :param export_files_operation_input: - :type export_files_operation_input: ExportFilesOperationInput + :param set_dpdk_mode_operation_input: + :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3720,8 +6554,8 @@ def start_agents_export_files_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_export_files_serialize( - export_files_operation_input=export_files_operation_input, + _param = self._start_agents_set_dpdk_mode_serialize( + set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3739,9 +6573,9 @@ def start_agents_export_files_with_http_info( @validate_call - def start_agents_export_files_without_preload_content( + def start_agents_set_dpdk_mode_without_preload_content( self, - export_files_operation_input: Optional[ExportFilesOperationInput] = None, + set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3755,12 +6589,12 @@ def start_agents_export_files_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_export_files + """start_agents_set_dpdk_mode - Sends export files requests to a list of agents. + Enable/disable DPDK for a list of agents. - :param export_files_operation_input: - :type export_files_operation_input: ExportFilesOperationInput + :param set_dpdk_mode_operation_input: + :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3783,8 +6617,8 @@ def start_agents_export_files_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_export_files_serialize( - export_files_operation_input=export_files_operation_input, + _param = self._start_agents_set_dpdk_mode_serialize( + set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3801,9 +6635,9 @@ def start_agents_export_files_without_preload_content( ) - def _start_agents_export_files_serialize( + def _start_agents_set_dpdk_mode_serialize( self, - export_files_operation_input, + set_dpdk_mode_operation_input, _request_auth, _content_type, _headers, @@ -3827,8 +6661,8 @@ def _start_agents_export_files_serialize( # process the header parameters # process the form parameters # process the body parameter - if export_files_operation_input is not None: - _body_params = export_files_operation_input + if set_dpdk_mode_operation_input is not None: + _body_params = set_dpdk_mode_operation_input # set the HTTP header `Accept` @@ -3861,7 +6695,7 @@ def _start_agents_export_files_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/exportFiles', + resource_path='/api/v2/agents/operations/set-dpdk-mode', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3878,9 +6712,9 @@ def _start_agents_export_files_serialize( @validate_call - def start_agents_reboot( + def start_agents_set_ntp( self, - reboot_operation_input: Optional[RebootOperationInput] = None, + set_ntp_operation_input: Optional[SetNtpOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3894,12 +6728,12 @@ def start_agents_reboot( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_reboot + """start_agents_set_ntp - Reboot the agents specified in the request. + Set the NTP servers for a list of agents. - :param reboot_operation_input: - :type reboot_operation_input: RebootOperationInput + :param set_ntp_operation_input: + :type set_ntp_operation_input: SetNtpOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3922,8 +6756,8 @@ def start_agents_reboot( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reboot_serialize( - reboot_operation_input=reboot_operation_input, + _param = self._start_agents_set_ntp_serialize( + set_ntp_operation_input=set_ntp_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -3941,9 +6775,9 @@ def start_agents_reboot( @validate_call - def start_agents_reboot_with_http_info( + def start_agents_set_ntp_with_http_info( self, - reboot_operation_input: Optional[RebootOperationInput] = None, + set_ntp_operation_input: Optional[SetNtpOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -3957,12 +6791,12 @@ def start_agents_reboot_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_reboot + """start_agents_set_ntp - Reboot the agents specified in the request. + Set the NTP servers for a list of agents. - :param reboot_operation_input: - :type reboot_operation_input: RebootOperationInput + :param set_ntp_operation_input: + :type set_ntp_operation_input: SetNtpOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -3985,8 +6819,8 @@ def start_agents_reboot_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reboot_serialize( - reboot_operation_input=reboot_operation_input, + _param = self._start_agents_set_ntp_serialize( + set_ntp_operation_input=set_ntp_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4004,9 +6838,9 @@ def start_agents_reboot_with_http_info( @validate_call - def start_agents_reboot_without_preload_content( + def start_agents_set_ntp_without_preload_content( self, - reboot_operation_input: Optional[RebootOperationInput] = None, + set_ntp_operation_input: Optional[SetNtpOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4020,12 +6854,12 @@ def start_agents_reboot_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_reboot + """start_agents_set_ntp - Reboot the agents specified in the request. + Set the NTP servers for a list of agents. - :param reboot_operation_input: - :type reboot_operation_input: RebootOperationInput + :param set_ntp_operation_input: + :type set_ntp_operation_input: SetNtpOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4048,8 +6882,8 @@ def start_agents_reboot_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reboot_serialize( - reboot_operation_input=reboot_operation_input, + _param = self._start_agents_set_ntp_serialize( + set_ntp_operation_input=set_ntp_operation_input, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4066,9 +6900,9 @@ def start_agents_reboot_without_preload_content( ) - def _start_agents_reboot_serialize( + def _start_agents_set_ntp_serialize( self, - reboot_operation_input, + set_ntp_operation_input, _request_auth, _content_type, _headers, @@ -4092,8 +6926,8 @@ def _start_agents_reboot_serialize( # process the header parameters # process the form parameters # process the body parameter - if reboot_operation_input is not None: - _body_params = reboot_operation_input + if set_ntp_operation_input is not None: + _body_params = set_ntp_operation_input # set the HTTP header `Accept` @@ -4126,7 +6960,7 @@ def _start_agents_reboot_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/reboot', + resource_path='/api/v2/agents/operations/set-ntp', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4143,9 +6977,8 @@ def _start_agents_reboot_serialize( @validate_call - def start_agents_release( + def start_agents_update( self, - release_operation_input: Optional[ReleaseOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4159,12 +6992,10 @@ def start_agents_release( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_release + """start_agents_update - Releases all the agents from the given session. + Update agents to the recommended version. - :param release_operation_input: - :type release_operation_input: ReleaseOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4187,8 +7018,7 @@ def start_agents_release( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_release_serialize( - release_operation_input=release_operation_input, + _param = self._start_agents_update_serialize( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4206,9 +7036,8 @@ def start_agents_release( @validate_call - def start_agents_release_with_http_info( + def start_agents_update_with_http_info( self, - release_operation_input: Optional[ReleaseOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4222,12 +7051,10 @@ def start_agents_release_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_release + """start_agents_update - Releases all the agents from the given session. + Update agents to the recommended version. - :param release_operation_input: - :type release_operation_input: ReleaseOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4250,8 +7077,7 @@ def start_agents_release_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_release_serialize( - release_operation_input=release_operation_input, + _param = self._start_agents_update_serialize( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4269,9 +7095,8 @@ def start_agents_release_with_http_info( @validate_call - def start_agents_release_without_preload_content( + def start_agents_update_without_preload_content( self, - release_operation_input: Optional[ReleaseOperationInput] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4285,12 +7110,10 @@ def start_agents_release_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_release + """start_agents_update - Releases all the agents from the given session. + Update agents to the recommended version. - :param release_operation_input: - :type release_operation_input: ReleaseOperationInput :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4313,8 +7136,7 @@ def start_agents_release_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_release_serialize( - release_operation_input=release_operation_input, + _param = self._start_agents_update_serialize( _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4331,9 +7153,8 @@ def start_agents_release_without_preload_content( ) - def _start_agents_release_serialize( + def _start_agents_update_serialize( self, - release_operation_input, _request_auth, _content_type, _headers, @@ -4357,8 +7178,6 @@ def _start_agents_release_serialize( # process the header parameters # process the form parameters # process the body parameter - if release_operation_input is not None: - _body_params = release_operation_input # set the HTTP header `Accept` @@ -4369,19 +7188,6 @@ def _start_agents_release_serialize( ] ) - # set the HTTP header `Content-Type` - if _content_type: - _header_params['Content-Type'] = _content_type - else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) - if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type # authentication setting _auth_settings: List[str] = [ @@ -4391,7 +7197,7 @@ def _start_agents_release_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/release', + resource_path='/api/v2/agents/operations/update', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4408,9 +7214,9 @@ def _start_agents_release_serialize( @validate_call - def start_agents_reserve( + def start_controllers_clear_compute_resource_ownership( self, - reserve_operation_input: Optional[ReserveOperationInput] = None, + clear_compute_resources_ownership_operation: Optional[ClearComputeResourcesOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4424,12 +7230,12 @@ def start_agents_reserve( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_reserve + """start_controllers_clear_compute_resource_ownership - Reserves all the agents from the given session. + Clear the ownership of the compute resources. - :param reserve_operation_input: - :type reserve_operation_input: ReserveOperationInput + :param clear_compute_resources_ownership_operation: + :type clear_compute_resources_ownership_operation: ClearComputeResourcesOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4452,8 +7258,8 @@ def start_agents_reserve( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reserve_serialize( - reserve_operation_input=reserve_operation_input, + _param = self._start_controllers_clear_compute_resource_ownership_serialize( + clear_compute_resources_ownership_operation=clear_compute_resources_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4471,9 +7277,9 @@ def start_agents_reserve( @validate_call - def start_agents_reserve_with_http_info( + def start_controllers_clear_compute_resource_ownership_with_http_info( self, - reserve_operation_input: Optional[ReserveOperationInput] = None, + clear_compute_resources_ownership_operation: Optional[ClearComputeResourcesOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4487,12 +7293,12 @@ def start_agents_reserve_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_reserve + """start_controllers_clear_compute_resource_ownership - Reserves all the agents from the given session. + Clear the ownership of the compute resources. - :param reserve_operation_input: - :type reserve_operation_input: ReserveOperationInput + :param clear_compute_resources_ownership_operation: + :type clear_compute_resources_ownership_operation: ClearComputeResourcesOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4515,8 +7321,8 @@ def start_agents_reserve_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reserve_serialize( - reserve_operation_input=reserve_operation_input, + _param = self._start_controllers_clear_compute_resource_ownership_serialize( + clear_compute_resources_ownership_operation=clear_compute_resources_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4534,9 +7340,9 @@ def start_agents_reserve_with_http_info( @validate_call - def start_agents_reserve_without_preload_content( + def start_controllers_clear_compute_resource_ownership_without_preload_content( self, - reserve_operation_input: Optional[ReserveOperationInput] = None, + clear_compute_resources_ownership_operation: Optional[ClearComputeResourcesOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4550,12 +7356,12 @@ def start_agents_reserve_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_reserve + """start_controllers_clear_compute_resource_ownership - Reserves all the agents from the given session. + Clear the ownership of the compute resources. - :param reserve_operation_input: - :type reserve_operation_input: ReserveOperationInput + :param clear_compute_resources_ownership_operation: + :type clear_compute_resources_ownership_operation: ClearComputeResourcesOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4578,8 +7384,8 @@ def start_agents_reserve_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_reserve_serialize( - reserve_operation_input=reserve_operation_input, + _param = self._start_controllers_clear_compute_resource_ownership_serialize( + clear_compute_resources_ownership_operation=clear_compute_resources_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4596,9 +7402,9 @@ def start_agents_reserve_without_preload_content( ) - def _start_agents_reserve_serialize( + def _start_controllers_clear_compute_resource_ownership_serialize( self, - reserve_operation_input, + clear_compute_resources_ownership_operation, _request_auth, _content_type, _headers, @@ -4622,8 +7428,8 @@ def _start_agents_reserve_serialize( # process the header parameters # process the form parameters # process the body parameter - if reserve_operation_input is not None: - _body_params = reserve_operation_input + if clear_compute_resources_ownership_operation is not None: + _body_params = clear_compute_resources_ownership_operation # set the HTTP header `Accept` @@ -4656,7 +7462,7 @@ def _start_agents_reserve_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/reserve', + resource_path='/api/v2/controllers/operations/clear-compute-resource-ownership', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4673,9 +7479,9 @@ def _start_agents_reserve_serialize( @validate_call - def start_agents_set_dpdk_mode( + def start_controllers_clear_front_panel_port_ownership( self, - set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, + clear_front_panel_ports_ownership_operation: Optional[ClearFrontPanelPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4689,12 +7495,12 @@ def start_agents_set_dpdk_mode( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_set_dpdk_mode + """start_controllers_clear_front_panel_port_ownership - Enable/disable DPDK for a list of agents. + Clear the ownership of the front panel ports. - :param set_dpdk_mode_operation_input: - :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput + :param clear_front_panel_ports_ownership_operation: + :type clear_front_panel_ports_ownership_operation: ClearFrontPanelPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4717,8 +7523,8 @@ def start_agents_set_dpdk_mode( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_dpdk_mode_serialize( - set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, + _param = self._start_controllers_clear_front_panel_port_ownership_serialize( + clear_front_panel_ports_ownership_operation=clear_front_panel_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4736,9 +7542,9 @@ def start_agents_set_dpdk_mode( @validate_call - def start_agents_set_dpdk_mode_with_http_info( + def start_controllers_clear_front_panel_port_ownership_with_http_info( self, - set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, + clear_front_panel_ports_ownership_operation: Optional[ClearFrontPanelPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4752,12 +7558,12 @@ def start_agents_set_dpdk_mode_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_set_dpdk_mode + """start_controllers_clear_front_panel_port_ownership - Enable/disable DPDK for a list of agents. + Clear the ownership of the front panel ports. - :param set_dpdk_mode_operation_input: - :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput + :param clear_front_panel_ports_ownership_operation: + :type clear_front_panel_ports_ownership_operation: ClearFrontPanelPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4780,8 +7586,8 @@ def start_agents_set_dpdk_mode_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_dpdk_mode_serialize( - set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, + _param = self._start_controllers_clear_front_panel_port_ownership_serialize( + clear_front_panel_ports_ownership_operation=clear_front_panel_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4799,9 +7605,9 @@ def start_agents_set_dpdk_mode_with_http_info( @validate_call - def start_agents_set_dpdk_mode_without_preload_content( + def start_controllers_clear_front_panel_port_ownership_without_preload_content( self, - set_dpdk_mode_operation_input: Optional[SetDpdkModeOperationInput] = None, + clear_front_panel_ports_ownership_operation: Optional[ClearFrontPanelPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4815,12 +7621,12 @@ def start_agents_set_dpdk_mode_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_set_dpdk_mode + """start_controllers_clear_front_panel_port_ownership - Enable/disable DPDK for a list of agents. + Clear the ownership of the front panel ports. - :param set_dpdk_mode_operation_input: - :type set_dpdk_mode_operation_input: SetDpdkModeOperationInput + :param clear_front_panel_ports_ownership_operation: + :type clear_front_panel_ports_ownership_operation: ClearFrontPanelPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4843,8 +7649,8 @@ def start_agents_set_dpdk_mode_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_dpdk_mode_serialize( - set_dpdk_mode_operation_input=set_dpdk_mode_operation_input, + _param = self._start_controllers_clear_front_panel_port_ownership_serialize( + clear_front_panel_ports_ownership_operation=clear_front_panel_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -4861,9 +7667,9 @@ def start_agents_set_dpdk_mode_without_preload_content( ) - def _start_agents_set_dpdk_mode_serialize( + def _start_controllers_clear_front_panel_port_ownership_serialize( self, - set_dpdk_mode_operation_input, + clear_front_panel_ports_ownership_operation, _request_auth, _content_type, _headers, @@ -4887,8 +7693,8 @@ def _start_agents_set_dpdk_mode_serialize( # process the header parameters # process the form parameters # process the body parameter - if set_dpdk_mode_operation_input is not None: - _body_params = set_dpdk_mode_operation_input + if clear_front_panel_ports_ownership_operation is not None: + _body_params = clear_front_panel_ports_ownership_operation # set the HTTP header `Accept` @@ -4921,7 +7727,7 @@ def _start_agents_set_dpdk_mode_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/set-dpdk-mode', + resource_path='/api/v2/controllers/operations/clear-front-panel-port-ownership', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -4938,9 +7744,9 @@ def _start_agents_set_dpdk_mode_serialize( @validate_call - def start_agents_set_ntp( + def start_controllers_clear_port_ownership( self, - set_ntp_operation_input: Optional[SetNtpOperationInput] = None, + clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -4954,12 +7760,12 @@ def start_agents_set_ntp( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_set_ntp + """start_controllers_clear_port_ownership - Set the NTP servers for a list of agents. + Clear the ownership of the ports. - :param set_ntp_operation_input: - :type set_ntp_operation_input: SetNtpOperationInput + :param clear_ports_ownership_operation: + :type clear_ports_ownership_operation: ClearPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -4982,8 +7788,8 @@ def start_agents_set_ntp( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_ntp_serialize( - set_ntp_operation_input=set_ntp_operation_input, + _param = self._start_controllers_clear_port_ownership_serialize( + clear_ports_ownership_operation=clear_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5001,9 +7807,9 @@ def start_agents_set_ntp( @validate_call - def start_agents_set_ntp_with_http_info( + def start_controllers_clear_port_ownership_with_http_info( self, - set_ntp_operation_input: Optional[SetNtpOperationInput] = None, + clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5017,12 +7823,12 @@ def start_agents_set_ntp_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_set_ntp + """start_controllers_clear_port_ownership - Set the NTP servers for a list of agents. + Clear the ownership of the ports. - :param set_ntp_operation_input: - :type set_ntp_operation_input: SetNtpOperationInput + :param clear_ports_ownership_operation: + :type clear_ports_ownership_operation: ClearPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5045,8 +7851,8 @@ def start_agents_set_ntp_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_ntp_serialize( - set_ntp_operation_input=set_ntp_operation_input, + _param = self._start_controllers_clear_port_ownership_serialize( + clear_ports_ownership_operation=clear_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5064,9 +7870,9 @@ def start_agents_set_ntp_with_http_info( @validate_call - def start_agents_set_ntp_without_preload_content( + def start_controllers_clear_port_ownership_without_preload_content( self, - set_ntp_operation_input: Optional[SetNtpOperationInput] = None, + clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5080,12 +7886,12 @@ def start_agents_set_ntp_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_set_ntp + """start_controllers_clear_port_ownership - Set the NTP servers for a list of agents. + Clear the ownership of the ports. - :param set_ntp_operation_input: - :type set_ntp_operation_input: SetNtpOperationInput + :param clear_ports_ownership_operation: + :type clear_ports_ownership_operation: ClearPortsOwnershipOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5108,8 +7914,8 @@ def start_agents_set_ntp_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_set_ntp_serialize( - set_ntp_operation_input=set_ntp_operation_input, + _param = self._start_controllers_clear_port_ownership_serialize( + clear_ports_ownership_operation=clear_ports_ownership_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5126,9 +7932,9 @@ def start_agents_set_ntp_without_preload_content( ) - def _start_agents_set_ntp_serialize( + def _start_controllers_clear_port_ownership_serialize( self, - set_ntp_operation_input, + clear_ports_ownership_operation, _request_auth, _content_type, _headers, @@ -5152,8 +7958,8 @@ def _start_agents_set_ntp_serialize( # process the header parameters # process the form parameters # process the body parameter - if set_ntp_operation_input is not None: - _body_params = set_ntp_operation_input + if clear_ports_ownership_operation is not None: + _body_params = clear_ports_ownership_operation # set the HTTP header `Accept` @@ -5186,7 +7992,7 @@ def _start_agents_set_ntp_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/set-ntp', + resource_path='/api/v2/controllers/operations/clear-port-ownership', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5203,8 +8009,9 @@ def _start_agents_set_ntp_serialize( @validate_call - def start_agents_update( + def start_controllers_power_cycle_nodes( self, + nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5218,10 +8025,12 @@ def start_agents_update( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_agents_update + """start_controllers_power_cycle_nodes - Update agents to the recommended version. + Power cycle the compute nodes. + :param nodes_power_cycle_operation: + :type nodes_power_cycle_operation: NodesPowerCycleOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5244,7 +8053,8 @@ def start_agents_update( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_update_serialize( + _param = self._start_controllers_power_cycle_nodes_serialize( + nodes_power_cycle_operation=nodes_power_cycle_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5262,8 +8072,9 @@ def start_agents_update( @validate_call - def start_agents_update_with_http_info( + def start_controllers_power_cycle_nodes_with_http_info( self, + nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5277,10 +8088,12 @@ def start_agents_update_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_agents_update + """start_controllers_power_cycle_nodes - Update agents to the recommended version. + Power cycle the compute nodes. + :param nodes_power_cycle_operation: + :type nodes_power_cycle_operation: NodesPowerCycleOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5303,7 +8116,8 @@ def start_agents_update_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_update_serialize( + _param = self._start_controllers_power_cycle_nodes_serialize( + nodes_power_cycle_operation=nodes_power_cycle_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5321,8 +8135,9 @@ def start_agents_update_with_http_info( @validate_call - def start_agents_update_without_preload_content( + def start_controllers_power_cycle_nodes_without_preload_content( self, + nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5336,10 +8151,12 @@ def start_agents_update_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_agents_update + """start_controllers_power_cycle_nodes - Update agents to the recommended version. + Power cycle the compute nodes. + :param nodes_power_cycle_operation: + :type nodes_power_cycle_operation: NodesPowerCycleOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5362,7 +8179,8 @@ def start_agents_update_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_agents_update_serialize( + _param = self._start_controllers_power_cycle_nodes_serialize( + nodes_power_cycle_operation=nodes_power_cycle_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5379,8 +8197,9 @@ def start_agents_update_without_preload_content( ) - def _start_agents_update_serialize( + def _start_controllers_power_cycle_nodes_serialize( self, + nodes_power_cycle_operation, _request_auth, _content_type, _headers, @@ -5404,6 +8223,8 @@ def _start_agents_update_serialize( # process the header parameters # process the form parameters # process the body parameter + if nodes_power_cycle_operation is not None: + _body_params = nodes_power_cycle_operation # set the HTTP header `Accept` @@ -5414,6 +8235,19 @@ def _start_agents_update_serialize( ] ) + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting _auth_settings: List[str] = [ @@ -5423,7 +8257,7 @@ def _start_agents_update_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/agents/operations/update', + resource_path='/api/v2/controllers/operations/power-cycle-nodes', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5440,9 +8274,9 @@ def _start_agents_update_serialize( @validate_call - def start_controllers_clear_port_ownership( + def start_controllers_reboot_compute_resource( self, - clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, + reboot_compute_resources_operation: Optional[RebootComputeResourcesOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5456,12 +8290,12 @@ def start_controllers_clear_port_ownership( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_controllers_clear_port_ownership + """start_controllers_reboot_compute_resource - Clear the ownership of the ports. + Reboot compute resources. - :param clear_ports_ownership_operation: - :type clear_ports_ownership_operation: ClearPortsOwnershipOperation + :param reboot_compute_resources_operation: + :type reboot_compute_resources_operation: RebootComputeResourcesOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5484,8 +8318,8 @@ def start_controllers_clear_port_ownership( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_clear_port_ownership_serialize( - clear_ports_ownership_operation=clear_ports_ownership_operation, + _param = self._start_controllers_reboot_compute_resource_serialize( + reboot_compute_resources_operation=reboot_compute_resources_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5503,9 +8337,9 @@ def start_controllers_clear_port_ownership( @validate_call - def start_controllers_clear_port_ownership_with_http_info( + def start_controllers_reboot_compute_resource_with_http_info( self, - clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, + reboot_compute_resources_operation: Optional[RebootComputeResourcesOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5519,12 +8353,12 @@ def start_controllers_clear_port_ownership_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_controllers_clear_port_ownership + """start_controllers_reboot_compute_resource - Clear the ownership of the ports. + Reboot compute resources. - :param clear_ports_ownership_operation: - :type clear_ports_ownership_operation: ClearPortsOwnershipOperation + :param reboot_compute_resources_operation: + :type reboot_compute_resources_operation: RebootComputeResourcesOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5547,8 +8381,8 @@ def start_controllers_clear_port_ownership_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_clear_port_ownership_serialize( - clear_ports_ownership_operation=clear_ports_ownership_operation, + _param = self._start_controllers_reboot_compute_resource_serialize( + reboot_compute_resources_operation=reboot_compute_resources_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5566,9 +8400,9 @@ def start_controllers_clear_port_ownership_with_http_info( @validate_call - def start_controllers_clear_port_ownership_without_preload_content( + def start_controllers_reboot_compute_resource_without_preload_content( self, - clear_ports_ownership_operation: Optional[ClearPortsOwnershipOperation] = None, + reboot_compute_resources_operation: Optional[RebootComputeResourcesOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5582,12 +8416,12 @@ def start_controllers_clear_port_ownership_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_controllers_clear_port_ownership + """start_controllers_reboot_compute_resource - Clear the ownership of the ports. + Reboot compute resources. - :param clear_ports_ownership_operation: - :type clear_ports_ownership_operation: ClearPortsOwnershipOperation + :param reboot_compute_resources_operation: + :type reboot_compute_resources_operation: RebootComputeResourcesOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5610,8 +8444,8 @@ def start_controllers_clear_port_ownership_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_clear_port_ownership_serialize( - clear_ports_ownership_operation=clear_ports_ownership_operation, + _param = self._start_controllers_reboot_compute_resource_serialize( + reboot_compute_resources_operation=reboot_compute_resources_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5628,9 +8462,9 @@ def start_controllers_clear_port_ownership_without_preload_content( ) - def _start_controllers_clear_port_ownership_serialize( + def _start_controllers_reboot_compute_resource_serialize( self, - clear_ports_ownership_operation, + reboot_compute_resources_operation, _request_auth, _content_type, _headers, @@ -5654,8 +8488,8 @@ def _start_controllers_clear_port_ownership_serialize( # process the header parameters # process the form parameters # process the body parameter - if clear_ports_ownership_operation is not None: - _body_params = clear_ports_ownership_operation + if reboot_compute_resources_operation is not None: + _body_params = reboot_compute_resources_operation # set the HTTP header `Accept` @@ -5688,7 +8522,7 @@ def _start_controllers_clear_port_ownership_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/controllers/operations/clear-port-ownership', + resource_path='/api/v2/controllers/operations/reboot-compute-resource', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5705,9 +8539,9 @@ def _start_controllers_clear_port_ownership_serialize( @validate_call - def start_controllers_power_cycle_nodes( + def start_controllers_reboot_port( self, - nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, + reboot_ports_operation: Optional[RebootPortsOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5721,12 +8555,12 @@ def start_controllers_power_cycle_nodes( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_controllers_power_cycle_nodes + """start_controllers_reboot_port - Power cycle the compute nodes. + Reboot ports. - :param nodes_power_cycle_operation: - :type nodes_power_cycle_operation: NodesPowerCycleOperation + :param reboot_ports_operation: + :type reboot_ports_operation: RebootPortsOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5749,8 +8583,8 @@ def start_controllers_power_cycle_nodes( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_power_cycle_nodes_serialize( - nodes_power_cycle_operation=nodes_power_cycle_operation, + _param = self._start_controllers_reboot_port_serialize( + reboot_ports_operation=reboot_ports_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5768,9 +8602,9 @@ def start_controllers_power_cycle_nodes( @validate_call - def start_controllers_power_cycle_nodes_with_http_info( + def start_controllers_reboot_port_with_http_info( self, - nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, + reboot_ports_operation: Optional[RebootPortsOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5784,12 +8618,12 @@ def start_controllers_power_cycle_nodes_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_controllers_power_cycle_nodes + """start_controllers_reboot_port - Power cycle the compute nodes. + Reboot ports. - :param nodes_power_cycle_operation: - :type nodes_power_cycle_operation: NodesPowerCycleOperation + :param reboot_ports_operation: + :type reboot_ports_operation: RebootPortsOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5812,8 +8646,8 @@ def start_controllers_power_cycle_nodes_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_power_cycle_nodes_serialize( - nodes_power_cycle_operation=nodes_power_cycle_operation, + _param = self._start_controllers_reboot_port_serialize( + reboot_ports_operation=reboot_ports_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5831,9 +8665,9 @@ def start_controllers_power_cycle_nodes_with_http_info( @validate_call - def start_controllers_power_cycle_nodes_without_preload_content( + def start_controllers_reboot_port_without_preload_content( self, - nodes_power_cycle_operation: Optional[NodesPowerCycleOperation] = None, + reboot_ports_operation: Optional[RebootPortsOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5847,12 +8681,12 @@ def start_controllers_power_cycle_nodes_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_controllers_power_cycle_nodes + """start_controllers_reboot_port - Power cycle the compute nodes. + Reboot ports. - :param nodes_power_cycle_operation: - :type nodes_power_cycle_operation: NodesPowerCycleOperation + :param reboot_ports_operation: + :type reboot_ports_operation: RebootPortsOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -5875,8 +8709,8 @@ def start_controllers_power_cycle_nodes_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_power_cycle_nodes_serialize( - nodes_power_cycle_operation=nodes_power_cycle_operation, + _param = self._start_controllers_reboot_port_serialize( + reboot_ports_operation=reboot_ports_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -5893,9 +8727,9 @@ def start_controllers_power_cycle_nodes_without_preload_content( ) - def _start_controllers_power_cycle_nodes_serialize( + def _start_controllers_reboot_port_serialize( self, - nodes_power_cycle_operation, + reboot_ports_operation, _request_auth, _content_type, _headers, @@ -5919,8 +8753,8 @@ def _start_controllers_power_cycle_nodes_serialize( # process the header parameters # process the form parameters # process the body parameter - if nodes_power_cycle_operation is not None: - _body_params = nodes_power_cycle_operation + if reboot_ports_operation is not None: + _body_params = reboot_ports_operation # set the HTTP header `Accept` @@ -5953,7 +8787,7 @@ def _start_controllers_power_cycle_nodes_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/controllers/operations/power-cycle-nodes', + resource_path='/api/v2/controllers/operations/reboot-port', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -5970,9 +8804,9 @@ def _start_controllers_power_cycle_nodes_serialize( @validate_call - def start_controllers_reboot_port( + def start_controllers_set_app( self, - reboot_ports_operation: Optional[RebootPortsOperation] = None, + set_controller_app_operation: Optional[SetControllerAppOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -5986,12 +8820,12 @@ def start_controllers_reboot_port( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_controllers_reboot_port + """start_controllers_set_app - Reboot ports. + Set the active app of the controllers. - :param reboot_ports_operation: - :type reboot_ports_operation: RebootPortsOperation + :param set_controller_app_operation: + :type set_controller_app_operation: SetControllerAppOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6014,8 +8848,8 @@ def start_controllers_reboot_port( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_reboot_port_serialize( - reboot_ports_operation=reboot_ports_operation, + _param = self._start_controllers_set_app_serialize( + set_controller_app_operation=set_controller_app_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6033,9 +8867,9 @@ def start_controllers_reboot_port( @validate_call - def start_controllers_reboot_port_with_http_info( + def start_controllers_set_app_with_http_info( self, - reboot_ports_operation: Optional[RebootPortsOperation] = None, + set_controller_app_operation: Optional[SetControllerAppOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6049,12 +8883,12 @@ def start_controllers_reboot_port_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_controllers_reboot_port + """start_controllers_set_app - Reboot ports. + Set the active app of the controllers. - :param reboot_ports_operation: - :type reboot_ports_operation: RebootPortsOperation + :param set_controller_app_operation: + :type set_controller_app_operation: SetControllerAppOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6077,8 +8911,8 @@ def start_controllers_reboot_port_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_reboot_port_serialize( - reboot_ports_operation=reboot_ports_operation, + _param = self._start_controllers_set_app_serialize( + set_controller_app_operation=set_controller_app_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6096,9 +8930,9 @@ def start_controllers_reboot_port_with_http_info( @validate_call - def start_controllers_reboot_port_without_preload_content( + def start_controllers_set_app_without_preload_content( self, - reboot_ports_operation: Optional[RebootPortsOperation] = None, + set_controller_app_operation: Optional[SetControllerAppOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6112,12 +8946,12 @@ def start_controllers_reboot_port_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_controllers_reboot_port + """start_controllers_set_app - Reboot ports. + Set the active app of the controllers. - :param reboot_ports_operation: - :type reboot_ports_operation: RebootPortsOperation + :param set_controller_app_operation: + :type set_controller_app_operation: SetControllerAppOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6140,8 +8974,8 @@ def start_controllers_reboot_port_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_reboot_port_serialize( - reboot_ports_operation=reboot_ports_operation, + _param = self._start_controllers_set_app_serialize( + set_controller_app_operation=set_controller_app_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6158,9 +8992,9 @@ def start_controllers_reboot_port_without_preload_content( ) - def _start_controllers_reboot_port_serialize( + def _start_controllers_set_app_serialize( self, - reboot_ports_operation, + set_controller_app_operation, _request_auth, _content_type, _headers, @@ -6184,8 +9018,8 @@ def _start_controllers_reboot_port_serialize( # process the header parameters # process the form parameters # process the body parameter - if reboot_ports_operation is not None: - _body_params = reboot_ports_operation + if set_controller_app_operation is not None: + _body_params = set_controller_app_operation # set the HTTP header `Accept` @@ -6218,7 +9052,7 @@ def _start_controllers_reboot_port_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/controllers/operations/reboot-port', + resource_path='/api/v2/controllers/operations/set-app', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -6235,9 +9069,9 @@ def _start_controllers_reboot_port_serialize( @validate_call - def start_controllers_set_app( + def start_controllers_set_front_panel_port_link_state( self, - set_controller_app_operation: Optional[SetControllerAppOperation] = None, + set_front_panel_ports_link_state_operation: Optional[SetFrontPanelPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6251,12 +9085,12 @@ def start_controllers_set_app( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> AsyncContext: - """start_controllers_set_app + """start_controllers_set_front_panel_port_link_state - Set the active app of the controllers. + Set the link state of the front panel ports. - :param set_controller_app_operation: - :type set_controller_app_operation: SetControllerAppOperation + :param set_front_panel_ports_link_state_operation: + :type set_front_panel_ports_link_state_operation: SetFrontPanelPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6279,8 +9113,8 @@ def start_controllers_set_app( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_set_app_serialize( - set_controller_app_operation=set_controller_app_operation, + _param = self._start_controllers_set_front_panel_port_link_state_serialize( + set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6298,9 +9132,9 @@ def start_controllers_set_app( @validate_call - def start_controllers_set_app_with_http_info( + def start_controllers_set_front_panel_port_link_state_with_http_info( self, - set_controller_app_operation: Optional[SetControllerAppOperation] = None, + set_front_panel_ports_link_state_operation: Optional[SetFrontPanelPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6314,12 +9148,12 @@ def start_controllers_set_app_with_http_info( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> ApiResponse[AsyncContext]: - """start_controllers_set_app + """start_controllers_set_front_panel_port_link_state - Set the active app of the controllers. + Set the link state of the front panel ports. - :param set_controller_app_operation: - :type set_controller_app_operation: SetControllerAppOperation + :param set_front_panel_ports_link_state_operation: + :type set_front_panel_ports_link_state_operation: SetFrontPanelPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6342,8 +9176,8 @@ def start_controllers_set_app_with_http_info( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_set_app_serialize( - set_controller_app_operation=set_controller_app_operation, + _param = self._start_controllers_set_front_panel_port_link_state_serialize( + set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6361,9 +9195,9 @@ def start_controllers_set_app_with_http_info( @validate_call - def start_controllers_set_app_without_preload_content( + def start_controllers_set_front_panel_port_link_state_without_preload_content( self, - set_controller_app_operation: Optional[SetControllerAppOperation] = None, + set_front_panel_ports_link_state_operation: Optional[SetFrontPanelPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -6377,12 +9211,12 @@ def start_controllers_set_app_without_preload_content( _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, ) -> RESTResponseType: - """start_controllers_set_app + """start_controllers_set_front_panel_port_link_state - Set the active app of the controllers. + Set the link state of the front panel ports. - :param set_controller_app_operation: - :type set_controller_app_operation: SetControllerAppOperation + :param set_front_panel_ports_link_state_operation: + :type set_front_panel_ports_link_state_operation: SetFrontPanelPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -6405,8 +9239,8 @@ def start_controllers_set_app_without_preload_content( :return: Returns the result object. """ # noqa: E501 - _param = self._start_controllers_set_app_serialize( - set_controller_app_operation=set_controller_app_operation, + _param = self._start_controllers_set_front_panel_port_link_state_serialize( + set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -6423,9 +9257,9 @@ def start_controllers_set_app_without_preload_content( ) - def _start_controllers_set_app_serialize( + def _start_controllers_set_front_panel_port_link_state_serialize( self, - set_controller_app_operation, + set_front_panel_ports_link_state_operation, _request_auth, _content_type, _headers, @@ -6449,8 +9283,8 @@ def _start_controllers_set_app_serialize( # process the header parameters # process the form parameters # process the body parameter - if set_controller_app_operation is not None: - _body_params = set_controller_app_operation + if set_front_panel_ports_link_state_operation is not None: + _body_params = set_front_panel_ports_link_state_operation # set the HTTP header `Accept` @@ -6483,7 +9317,7 @@ def _start_controllers_set_app_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/api/v2/controllers/operations/set-app', + resource_path='/api/v2/controllers/operations/set-front-panel-port-link-state', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -7032,7 +9866,7 @@ def _start_controllers_set_node_app_serialize( @validate_call def start_controllers_set_port_link_state( self, - set_link_state_operation: Optional[SetLinkStateOperation] = None, + set_ports_link_state_operation: Optional[SetPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7050,8 +9884,8 @@ def start_controllers_set_port_link_state( Set the link state of the ports. - :param set_link_state_operation: - :type set_link_state_operation: SetLinkStateOperation + :param set_ports_link_state_operation: + :type set_ports_link_state_operation: SetPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7075,7 +9909,7 @@ def start_controllers_set_port_link_state( """ # noqa: E501 _param = self._start_controllers_set_port_link_state_serialize( - set_link_state_operation=set_link_state_operation, + set_ports_link_state_operation=set_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7095,7 +9929,7 @@ def start_controllers_set_port_link_state( @validate_call def start_controllers_set_port_link_state_with_http_info( self, - set_link_state_operation: Optional[SetLinkStateOperation] = None, + set_ports_link_state_operation: Optional[SetPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7113,8 +9947,8 @@ def start_controllers_set_port_link_state_with_http_info( Set the link state of the ports. - :param set_link_state_operation: - :type set_link_state_operation: SetLinkStateOperation + :param set_ports_link_state_operation: + :type set_ports_link_state_operation: SetPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7138,7 +9972,7 @@ def start_controllers_set_port_link_state_with_http_info( """ # noqa: E501 _param = self._start_controllers_set_port_link_state_serialize( - set_link_state_operation=set_link_state_operation, + set_ports_link_state_operation=set_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7158,7 +9992,7 @@ def start_controllers_set_port_link_state_with_http_info( @validate_call def start_controllers_set_port_link_state_without_preload_content( self, - set_link_state_operation: Optional[SetLinkStateOperation] = None, + set_ports_link_state_operation: Optional[SetPortsLinkStateOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -7176,8 +10010,8 @@ def start_controllers_set_port_link_state_without_preload_content( Set the link state of the ports. - :param set_link_state_operation: - :type set_link_state_operation: SetLinkStateOperation + :param set_ports_link_state_operation: + :type set_ports_link_state_operation: SetPortsLinkStateOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -7201,7 +10035,7 @@ def start_controllers_set_port_link_state_without_preload_content( """ # noqa: E501 _param = self._start_controllers_set_port_link_state_serialize( - set_link_state_operation=set_link_state_operation, + set_ports_link_state_operation=set_ports_link_state_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -7220,7 +10054,7 @@ def start_controllers_set_port_link_state_without_preload_content( def _start_controllers_set_port_link_state_serialize( self, - set_link_state_operation, + set_ports_link_state_operation, _request_auth, _content_type, _headers, @@ -7244,8 +10078,8 @@ def _start_controllers_set_port_link_state_serialize( # process the header parameters # process the form parameters # process the body parameter - if set_link_state_operation is not None: - _body_params = set_link_state_operation + if set_ports_link_state_operation is not None: + _body_params = set_ports_link_state_operation # set the HTTP header `Accept` diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index d29722e..36df2ec 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -30,8 +30,10 @@ ActivationCodeRequest = DynamicModel('ActivationCodeRequest', (), {} ) AddActionInfo = DynamicModel('AddActionInfo', (), {} ) AddInput = DynamicModel('AddInput', (), {} ) +Address = DynamicModel('Address', (), {} ) AdvancedSettings = DynamicModel('AdvancedSettings', (), {} ) Agent = DynamicModel('Agent', (), {} ) +AgentAssignmentByFrontPanelPort = DynamicModel('AgentAssignmentByFrontPanelPort', (), {} ) AgentAssignmentByPort = DynamicModel('AgentAssignmentByPort', (), {} ) AgentAssignmentDetails = DynamicModel('AgentAssignmentDetails', (), {} ) AgentAssignments = DynamicModel('AgentAssignments', (), {} ) @@ -89,10 +91,15 @@ CipherTLS13 = DynamicModel('CipherTLS13', (), {} ) CiscoAnyConnectSettings = DynamicModel('CiscoAnyConnectSettings', (), {} ) CiscoEncapsulation = DynamicModel('CiscoEncapsulation', (), {} ) +ClearComputeResourcesOwnershipOperation = DynamicModel('ClearComputeResourcesOwnershipOperation', (), {} ) +ClearFrontPanelPortsOwnershipOperation = DynamicModel('ClearFrontPanelPortsOwnershipOperation', (), {} ) ClearPortsOwnershipOperation = DynamicModel('ClearPortsOwnershipOperation', (), {} ) Command = DynamicModel('Command', (), {} ) CommandMetadata = DynamicModel('CommandMetadata', (), {} ) ComputeNode = DynamicModel('ComputeNode', (), {} ) +ComputeResource = DynamicModel('ComputeResource', (), {} ) +ComputeResourcesByController = DynamicModel('ComputeResourcesByController', (), {} ) +ComputeResourcesByNode = DynamicModel('ComputeResourcesByNode', (), {} ) Config = DynamicModel('Config', (), {} ) ConfigCategory = DynamicModel('ConfigCategory', (), {} ) ConfigId = DynamicModel('ConfigId', (), {} ) @@ -110,11 +117,13 @@ CreateAppOrAttackOperationInput = DynamicModel('CreateAppOrAttackOperationInput', (), {} ) CustomDashboards = DynamicModel('CustomDashboards', (), {} ) CustomImportHandler = DynamicModel('CustomImportHandler', (), {} ) +CustomSequence = DynamicModel('CustomSequence', (), {} ) CustomStat = DynamicModel('CustomStat', (), {} ) DNSResolver = DynamicModel('DNSResolver', (), {} ) DNSServer = DynamicModel('DNSServer', (), {} ) DTLSSettings = DynamicModel('DTLSSettings', (), {} ) DUTNetwork = DynamicModel('DUTNetwork', (), {} ) +DUTRange = DynamicModel('DUTRange', (), {} ) Dashboard = DynamicModel('Dashboard', (), {} ) DataType = DynamicModel('DataType', (), {} ) DataTypeValuesInner = DynamicModel('DataTypeValuesInner', (), {} ) @@ -169,6 +178,8 @@ FindParamMatchesOperation = DynamicModel('FindParamMatchesOperation', (), {} ) FortinetEncapsulation = DynamicModel('FortinetEncapsulation', (), {} ) FortinetSettings = DynamicModel('FortinetSettings', (), {} ) +FrontPanel = DynamicModel('FrontPanel', (), {} ) +FrontPanelPortsByController = DynamicModel('FrontPanelPortsByController', (), {} ) FulfillmentRequest = DynamicModel('FulfillmentRequest', (), {} ) GenerateAllOperation = DynamicModel('GenerateAllOperation', (), {} ) GenerateCSVReportsOperation = DynamicModel('GenerateCSVReportsOperation', (), {} ) @@ -316,12 +327,14 @@ PepDUT = DynamicModel('PepDUT', (), {} ) PfsP2Group = DynamicModel('PfsP2Group', (), {} ) PlaylistMetadata = DynamicModel('PlaylistMetadata', (), {} ) +PlaylistSequencingMethod = DynamicModel('PlaylistSequencingMethod', (), {} ) Plugin = DynamicModel('Plugin', (), {} ) PluginStats = DynamicModel('PluginStats', (), {} ) Port = DynamicModel('Port', (), {} ) PortSettings = DynamicModel('PortSettings', (), {} ) PortsByController = DynamicModel('PortsByController', (), {} ) PortsByNode = DynamicModel('PortsByNode', (), {} ) +PortsByPanel = DynamicModel('PortsByPanel', (), {} ) PrepareTestOperation = DynamicModel('PrepareTestOperation', (), {} ) PreparedTestOptions = DynamicModel('PreparedTestOptions', (), {} ) PrfP1Algorithm = DynamicModel('PrfP1Algorithm', (), {} ) @@ -331,6 +344,7 @@ RTPEncryptionMode = DynamicModel('RTPEncryptionMode', (), {} ) RTPProfile = DynamicModel('RTPProfile', (), {} ) RTPProfileMeta = DynamicModel('RTPProfileMeta', (), {} ) +RebootComputeResourcesOperation = DynamicModel('RebootComputeResourcesOperation', (), {} ) RebootOperationInput = DynamicModel('RebootOperationInput', (), {} ) RebootPortsOperation = DynamicModel('RebootPortsOperation', (), {} ) Reference = DynamicModel('Reference', (), {} ) @@ -352,16 +366,22 @@ SecondaryObjective = DynamicModel('SecondaryObjective', (), {} ) SegmentType = DynamicModel('SegmentType', (), {} ) SelectedEnv = DynamicModel('SelectedEnv', (), {} ) +SequenceDataTypes = DynamicModel('SequenceDataTypes', (), {} ) +SequenceValue = DynamicModel('SequenceValue', (), {} ) +SequenceValueTypes = DynamicModel('SequenceValueTypes', (), {} ) Session = DynamicModel('Session', (), {} ) SessionReuseMethodTLS12 = DynamicModel('SessionReuseMethodTLS12', (), {} ) SessionReuseMethodTLS13 = DynamicModel('SessionReuseMethodTLS13', (), {} ) SetAggregationModeOperation = DynamicModel('SetAggregationModeOperation', (), {} ) SetControllerAppOperation = DynamicModel('SetControllerAppOperation', (), {} ) SetDpdkModeOperationInput = DynamicModel('SetDpdkModeOperationInput', (), {} ) -SetLinkStateOperation = DynamicModel('SetLinkStateOperation', (), {} ) +SetFrontPanelPortsLinkStateOperation = DynamicModel('SetFrontPanelPortsLinkStateOperation', (), {} ) SetNodesAppOperation = DynamicModel('SetNodesAppOperation', (), {} ) SetNtpOperationInput = DynamicModel('SetNtpOperationInput', (), {} ) +SetPortsLinkStateOperation = DynamicModel('SetPortsLinkStateOperation', (), {} ) +SimpleSequenceValue = DynamicModel('SimpleSequenceValue', (), {} ) SimulatedIdP = DynamicModel('SimulatedIdP', (), {} ) +SingleValue = DynamicModel('SingleValue', (), {} ) Snapshot = DynamicModel('Snapshot', (), {} ) SnowflakeExporter = DynamicModel('SnowflakeExporter', (), {} ) SortBodyField = DynamicModel('SortBodyField', (), {} ) @@ -375,6 +395,7 @@ StreamDirection = DynamicModel('StreamDirection', (), {} ) StreamPayloadType = DynamicModel('StreamPayloadType', (), {} ) StreamProfile = DynamicModel('StreamProfile', (), {} ) +SubStep = DynamicModel('SubStep', (), {} ) SupportedGroupTLS13 = DynamicModel('SupportedGroupTLS13', (), {} ) SystemInfo = DynamicModel('SystemInfo', (), {} ) TLSProfile = DynamicModel('TLSProfile', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index a7516f4..57762b5 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -30,8 +30,10 @@ class LinkNameException(Exception): from cyperf.models.activation_code_request import ActivationCodeRequest from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput +from cyperf.models.address import Address from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent +from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort from cyperf.models.agent_assignment_details import AgentAssignmentDetails from cyperf.models.agent_assignments import AgentAssignments @@ -89,10 +91,15 @@ class LinkNameException(Exception): from cyperf.models.cipher_tls13 import CipherTLS13 from cyperf.models.cisco_any_connect_settings import CiscoAnyConnectSettings from cyperf.models.cisco_encapsulation import CiscoEncapsulation +from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation +from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.models.command import Command from cyperf.models.command_metadata import CommandMetadata from cyperf.models.compute_node import ComputeNode +from cyperf.models.compute_resource import ComputeResource +from cyperf.models.compute_resources_by_controller import ComputeResourcesByController +from cyperf.models.compute_resources_by_node import ComputeResourcesByNode from cyperf.models.config import Config from cyperf.models.config_category import ConfigCategory from cyperf.models.config_id import ConfigId @@ -110,11 +117,13 @@ class LinkNameException(Exception): from cyperf.models.create_app_or_attack_operation_input import CreateAppOrAttackOperationInput from cyperf.models.custom_dashboards import CustomDashboards from cyperf.models.custom_import_handler import CustomImportHandler +from cyperf.models.custom_sequence import CustomSequence from cyperf.models.custom_stat import CustomStat from cyperf.models.dns_resolver import DNSResolver from cyperf.models.dns_server import DNSServer from cyperf.models.dtls_settings import DTLSSettings from cyperf.models.dut_network import DUTNetwork +from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner @@ -169,6 +178,8 @@ class LinkNameException(Exception): from cyperf.models.find_param_matches_operation import FindParamMatchesOperation from cyperf.models.fortinet_encapsulation import FortinetEncapsulation from cyperf.models.fortinet_settings import FortinetSettings +from cyperf.models.front_panel import FrontPanel +from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController from cyperf.models.fulfillment_request import FulfillmentRequest from cyperf.models.generate_all_operation import GenerateAllOperation from cyperf.models.generate_csv_reports_operation import GenerateCSVReportsOperation @@ -316,12 +327,14 @@ class LinkNameException(Exception): from cyperf.models.pep_dut import PepDUT from cyperf.models.pfs_p2_group import PfsP2Group from cyperf.models.playlist_metadata import PlaylistMetadata +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.plugin import Plugin from cyperf.models.plugin_stats import PluginStats from cyperf.models.port import Port from cyperf.models.port_settings import PortSettings from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode +from cyperf.models.ports_by_panel import PortsByPanel from cyperf.models.prepare_test_operation import PrepareTestOperation from cyperf.models.prepared_test_options import PreparedTestOptions from cyperf.models.prf_p1_algorithm import PrfP1Algorithm @@ -331,6 +344,7 @@ class LinkNameException(Exception): from cyperf.models.rtp_encryption_mode import RTPEncryptionMode from cyperf.models.rtp_profile import RTPProfile from cyperf.models.rtp_profile_meta import RTPProfileMeta +from cyperf.models.reboot_compute_resources_operation import RebootComputeResourcesOperation from cyperf.models.reboot_operation_input import RebootOperationInput from cyperf.models.reboot_ports_operation import RebootPortsOperation from cyperf.models.reference import Reference @@ -352,16 +366,22 @@ class LinkNameException(Exception): from cyperf.models.secondary_objective import SecondaryObjective from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv +from cyperf.models.sequence_data_types import SequenceDataTypes +from cyperf.models.sequence_value import SequenceValue +from cyperf.models.sequence_value_types import SequenceValueTypes from cyperf.models.session import Session from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput -from cyperf.models.set_link_state_operation import SetLinkStateOperation +from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.set_ports_link_state_operation import SetPortsLinkStateOperation +from cyperf.models.simple_sequence_value import SimpleSequenceValue from cyperf.models.simulated_id_p import SimulatedIdP +from cyperf.models.single_value import SingleValue from cyperf.models.snapshot import Snapshot from cyperf.models.snowflake_exporter import SnowflakeExporter from cyperf.models.sort_body_field import SortBodyField @@ -375,6 +395,7 @@ class LinkNameException(Exception): from cyperf.models.stream_direction import StreamDirection from cyperf.models.stream_payload_type import StreamPayloadType from cyperf.models.stream_profile import StreamProfile +from cyperf.models.sub_step import SubStep from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 from cyperf.models.system_info import SystemInfo from cyperf.models.tls_profile import TLSProfile diff --git a/cyperf/models/action.py b/cyperf/models/action.py index 6a16cfc..6e029e0 100644 --- a/cyperf/models/action.py +++ b/cyperf/models/action.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class Action(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/action_base.py b/cyperf/models/action_base.py index 6b185c7..2465540 100644 --- a/cyperf/models/action_base.py +++ b/cyperf/models/action_base.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class ActionBase(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/agent_assignment_by_front_panel_port.py b/cyperf/models/agent_assignment_by_front_panel_port.py new file mode 100644 index 0000000..9f4dc70 --- /dev/null +++ b/cyperf/models/agent_assignment_by_front_panel_port.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.capture_settings import CaptureSettings +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class AgentAssignmentByFrontPanelPort(BaseModel): + """ + Details of an agent assignment by front panel port + """ # noqa: E501 + capture_settings: Optional[CaptureSettings] = Field(default=None, description="The capture settings of the front panel port that is assigned.", alias="captureSettings") + compute_resources_by_type: Optional[Dict[str, StrictInt]] = Field(default=None, description="The number of compute resources to assign per compute node type.", alias="computeResourcesByType") + front_panel_port_id: StrictStr = Field(description="The id of the front panel port that is assigned.", alias="frontPanelPortId") + id: StrictStr + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["captureSettings", "computeResourcesByType", "frontPanelPortId", "id", "links"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AgentAssignmentByFrontPanelPort from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of capture_settings + if self.capture_settings: + _dict['captureSettings'] = self.capture_settings.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AgentAssignmentByFrontPanelPort from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "captureSettings": CaptureSettings.from_dict(obj["captureSettings"]) if obj.get("captureSettings") is not None else None, + "computeResourcesByType": obj.get("computeResourcesByType"), + "frontPanelPortId": obj.get("frontPanelPortId"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/agent_assignments.py b/cyperf/models/agent_assignments.py index d2400e2..ea9c9bf 100644 --- a/cyperf/models/agent_assignments.py +++ b/cyperf/models/agent_assignments.py @@ -20,6 +20,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictStr from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort from cyperf.models.agent_assignment_by_port import AgentAssignmentByPort from cyperf.models.agent_assignment_details import AgentAssignmentDetails from cyperf.models.api_link import APILink @@ -31,11 +32,12 @@ class AgentAssignments(BaseModel): """ The agents assigned to the current test configuration """ # noqa: E501 + by_front_panel_port: Optional[List[AgentAssignmentByFrontPanelPort]] = Field(default=None, description="The front panel ports assigned to the current test configuration.", alias="ByFrontPanelPort") by_id: Optional[List[AgentAssignmentDetails]] = Field(default=None, description="The agents statically assigned to the current test configuration.", alias="ByID") by_port: Optional[List[AgentAssignmentByPort]] = Field(default=None, description="The ports assigned to the current test configuration.", alias="ByPort") by_tag: Optional[List[StrictStr]] = Field(default=None, description="The tags according to which the agents are dynamically assigned.", alias="ByTag") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["ByID", "ByPort", "ByTag", "links"] + __properties: ClassVar[List[str]] = ["ByFrontPanelPort", "ByID", "ByPort", "ByTag", "links"] model_config = ConfigDict( populate_by_name=True, @@ -76,6 +78,13 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of each item in by_front_panel_port (list) + _items = [] + if self.by_front_panel_port: + for _item in self.by_front_panel_port: + if _item: + _items.append(_item.to_dict()) + _dict['ByFrontPanelPort'] = _items # override the default output from pydantic by calling `to_dict()` of each item in by_id (list) _items = [] if self.by_id: @@ -111,7 +120,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "ByID": ( [AgentAssignmentDetails.from_dict(_item) for _item in obj.get("ByID", [])] if obj.get("ByID") is not None else None), + "ByFrontPanelPort": ( [AgentAssignmentByFrontPanelPort.from_dict(_item) for _item in obj.get("ByFrontPanelPort", [])] if obj.get("ByFrontPanelPort") is not None else None), + "ByID": ( [AgentAssignmentDetails.from_dict(_item) for _item in obj.get("ByID", [])] if obj.get("ByID") is not None else None), "ByPort": ( [AgentAssignmentByPort.from_dict(_item) for _item in obj.get("ByPort", [])] if obj.get("ByPort") is not None else None), "ByTag": obj.get("ByTag") if obj.get("ByTag") is not None else [], "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/cyperf/models/agent_reservation.py b/cyperf/models/agent_reservation.py index cfe014e..4cf6977 100644 --- a/cyperf/models/agent_reservation.py +++ b/cyperf/models/agent_reservation.py @@ -30,11 +30,12 @@ class AgentReservation(BaseModel): """ # noqa: E501 agent_id: Optional[StrictStr] = Field(default=None, alias="agentId") agent_payload_names: Optional[List[StrictStr]] = Field(default=None, alias="agentPayloadNames") + front_panel_port_id: Optional[StrictStr] = Field(default=None, alias="frontPanelPortId") general_purpose_cpu_percent: Optional[StrictInt] = Field(default=None, alias="generalPurposeCPUPercent") interfaces: Optional[List[StrictStr]] = None ip_address_version_used: Optional[StrictStr] = Field(default=None, alias="ipAddressVersionUsed") optimization_mode: Optional[StrictStr] = Field(default=None, alias="optimizationMode") - __properties: ClassVar[List[str]] = ["agentId", "agentPayloadNames", "generalPurposeCPUPercent", "interfaces", "ipAddressVersionUsed", "optimizationMode"] + __properties: ClassVar[List[str]] = ["agentId", "agentPayloadNames", "frontPanelPortId", "generalPurposeCPUPercent", "interfaces", "ipAddressVersionUsed", "optimizationMode"] model_config = ConfigDict( populate_by_name=True, @@ -91,6 +92,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "agentId": obj.get("agentId"), "agentPayloadNames": obj.get("agentPayloadNames") if obj.get("agentPayloadNames") is not None else [], + "frontPanelPortId": obj.get("frontPanelPortId"), "generalPurposeCPUPercent": obj.get("generalPurposeCPUPercent"), "interfaces": obj.get("interfaces") if obj.get("interfaces") is not None else [], "ipAddressVersionUsed": obj.get("ipAddressVersionUsed"), diff --git a/cyperf/models/application_profile.py b/cyperf/models/application_profile.py index 8559031..2b90483 100644 --- a/cyperf/models/application_profile.py +++ b/cyperf/models/application_profile.py @@ -25,6 +25,7 @@ from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping from cyperf.models.objectives_and_timeline import ObjectivesAndTimeline +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -36,6 +37,7 @@ class ApplicationProfile(BaseModel): ApplicationProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -52,7 +54,7 @@ class ApplicationProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateTrafficProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetTrafficProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Applications", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-applications", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -152,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/attack_action.py b/cyperf/models/attack_action.py index 03923e0..f261776 100644 --- a/cyperf/models/attack_action.py +++ b/cyperf/models/attack_action.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.api_link import APILink from cyperf.models.exchange import Exchange +from cyperf.models.http_version import HTTPVersion from cyperf.models.params import Params from typing import Optional, Set, Union from typing_extensions import Self @@ -45,9 +46,10 @@ class AttackAction(BaseModel): port: Optional[StrictInt] = Field(default=None, description="The port of the destination host.", alias="Port") protocol_id: Optional[StrictStr] = Field(default=None, alias="ProtocolID") requires_uniqueness: Optional[StrictBool] = Field(default=None, description="If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands.", alias="RequiresUniqueness") + supported_http_versions: Optional[List[HTTPVersion]] = Field(default=None, description="The HTTP versions supported by the action.", alias="SupportedHTTPVersions") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "id", "links"] + __properties: ClassVar[List[str]] = ["DstHost", "Exchanges", "Index", "IsBanner", "IsDeprecated", "IsHostname", "IsLLMStrike", "IsStrike", "Name", "Params", "Port", "ProtocolID", "RequiresUniqueness", "SupportedHTTPVersions", "id", "links"] @field_validator('dst_host') def dst_host_validate_regular_expression(cls, value): @@ -146,6 +148,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Port": obj.get("Port"), "ProtocolID": obj.get("ProtocolID"), "RequiresUniqueness": obj.get("RequiresUniqueness"), + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , diff --git a/cyperf/models/attack_profile.py b/cyperf/models/attack_profile.py index 643e4f6..7ac4116 100644 --- a/cyperf/models/attack_profile.py +++ b/cyperf/models/attack_profile.py @@ -25,6 +25,7 @@ from cyperf.models.attack_objectives_and_timeline import AttackObjectivesAndTimeline from cyperf.models.external_resource_info import ExternalResourceInfo from cyperf.models.network_mapping import NetworkMapping +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from cyperf.models.update_network_mapping import UpdateNetworkMapping from typing import Optional, Set, Union @@ -36,6 +37,7 @@ class AttackProfile(BaseModel): AttackProfile """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None @@ -52,7 +54,7 @@ class AttackProfile(BaseModel): _modify_tags_recursively_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,UpdateAttackProfileNetworkMapping" }) reset_tags_to_default: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="reset-tags-to-default") _reset_tags_to_default_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResetAttackProfileNetworkMapping" }) - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links", "Attacks", "DefaultNetworkMapping", "Name", "ObjectivesAndTimeline", "add-attacks", "modify-excluded-dut-recursively", "modify-tags-recursively", "reset-tags-to-default"] model_config = ConfigDict( populate_by_name=True, @@ -152,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/cyperf/models/chassis_info.py b/cyperf/models/chassis_info.py index da9b587..330ab40 100644 --- a/cyperf/models/chassis_info.py +++ b/cyperf/models/chassis_info.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set, Union from typing_extensions import Self @@ -28,12 +28,14 @@ class ChassisInfo(BaseModel): """ ChassisInfo """ # noqa: E501 + aggregated_mode: Optional[StrictBool] = Field(default=None, description="Whether the ports of this compute node are aggregated", alias="aggregatedMode") checkout_id: Optional[StrictInt] = Field(default=None, description="The id of the compute node used for checkout licenses", alias="checkoutID") compute_node_id: Optional[StrictStr] = Field(default=None, description="The id of the compute node where the agent is running", alias="computeNodeID") - hw_platform: Optional[StrictStr] = Field(default=None, alias="hwPlatform") - hw_revision: Optional[StrictStr] = Field(default=None, alias="hwRevision") + front_panel_port_id: Optional[StrictStr] = Field(default=None, description="The ID of the Front Panel Port", alias="frontPanelPortID") + hw_platform: Optional[StrictStr] = Field(default=None, description="The hardware platform the corresponding port is running on", alias="hwPlatform") + hw_revision: Optional[StrictStr] = Field(default=None, description="The hardware revision of the underlying platform", alias="hwRevision") port_id: Optional[StrictStr] = Field(default=None, description="The id of the corresponding port", alias="portID") - __properties: ClassVar[List[str]] = ["checkoutID", "computeNodeID", "hwPlatform", "hwRevision", "portID"] + __properties: ClassVar[List[str]] = ["aggregatedMode", "checkoutID", "computeNodeID", "frontPanelPortID", "hwPlatform", "hwRevision", "portID"] model_config = ConfigDict( populate_by_name=True, @@ -68,10 +70,18 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set([ + "aggregated_mode", "checkout_id", "compute_node_id", + "front_panel_port_id", + "hw_platform", + "hw_revision", "port_id", ]) @@ -94,8 +104,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "checkoutID": obj.get("checkoutID"), + "aggregatedMode": obj.get("aggregatedMode"), + "checkoutID": obj.get("checkoutID"), "computeNodeID": obj.get("computeNodeID"), + "frontPanelPortID": obj.get("frontPanelPortID"), "hwPlatform": obj.get("hwPlatform"), "hwRevision": obj.get("hwRevision"), "portID": obj.get("portID") diff --git a/cyperf/models/clear_compute_resources_ownership_operation.py b/cyperf/models/clear_compute_resources_ownership_operation.py new file mode 100644 index 0000000..8523d78 --- /dev/null +++ b/cyperf/models/clear_compute_resources_ownership_operation.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.compute_resources_by_controller import ComputeResourcesByController +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ClearComputeResourcesOwnershipOperation(BaseModel): + """ + ClearComputeResourcesOwnershipOperation + """ # noqa: E501 + controllers: Optional[List[ComputeResourcesByController]] = Field(default=None, description="The controllers that the compute resources are part of.") + __properties: ClassVar[List[str]] = ["controllers"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ClearComputeResourcesOwnershipOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in controllers (list) + _items = [] + if self.controllers: + for _item in self.controllers: + if _item: + _items.append(_item.to_dict()) + _dict['controllers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ClearComputeResourcesOwnershipOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllers": ( [ComputeResourcesByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/clear_front_panel_ports_ownership_operation.py b/cyperf/models/clear_front_panel_ports_ownership_operation.py new file mode 100644 index 0000000..4f4129f --- /dev/null +++ b/cyperf/models/clear_front_panel_ports_ownership_operation.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ClearFrontPanelPortsOwnershipOperation(BaseModel): + """ + ClearFrontPanelPortsOwnershipOperation + """ # noqa: E501 + controllers: Optional[List[FrontPanelPortsByController]] = Field(default=None, description="The controllers that the front panel ports are part of.") + __properties: ClassVar[List[str]] = ["controllers"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ClearFrontPanelPortsOwnershipOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in controllers (list) + _items = [] + if self.controllers: + for _item in self.controllers: + if _item: + _items.append(_item.to_dict()) + _dict['controllers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ClearFrontPanelPortsOwnershipOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllers": ( [FrontPanelPortsByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/compute_node.py b/cyperf/models/compute_node.py index 9327e8b..ca2bd1d 100644 --- a/cyperf/models/compute_node.py +++ b/cyperf/models/compute_node.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink from cyperf.models.app_mode import AppMode +from cyperf.models.compute_resource import ComputeResource from cyperf.models.health_issue import HealthIssue from cyperf.models.port import Port from typing import Optional, Set, Union @@ -34,6 +35,7 @@ class ComputeNode(BaseModel): """ # noqa: E501 aggregated_mode: Optional[StrictBool] = Field(default=None, description="Whether the ports of the compute node are aggregated or not", alias="aggregatedMode") app_mode: Optional[AppMode] = Field(default=None, alias="appMode") + compute_resources: Optional[List[ComputeResource]] = Field(default=None, description="The compute Resources of the compute node", alias="computeResources") health_details: Optional[List[HealthIssue]] = Field(default=None, description="A list with more details regarding the health of the compute node", alias="healthDetails") healthy: Optional[StrictBool] = Field(default=None, description="Whether the compute node has any health issue or not") id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the compute node") @@ -44,7 +46,8 @@ class ComputeNode(BaseModel): slot_number: Optional[StrictInt] = Field(default=None, description="The slot number of the compute node", alias="slotNumber") status: Optional[StrictStr] = Field(default=None, description="The current status of the compute node: ready or not ready") type: Optional[StrictStr] = Field(default=None, description="The type of the compute node") - __properties: ClassVar[List[str]] = ["aggregatedMode", "appMode", "healthDetails", "healthy", "id", "links", "name", "ports", "serial", "slotNumber", "status", "type"] + type_display_name: Optional[StrictStr] = Field(default=None, description="The display type name of the compute node", alias="typeDisplayName") + __properties: ClassVar[List[str]] = ["aggregatedMode", "appMode", "computeResources", "healthDetails", "healthy", "id", "links", "name", "ports", "serial", "slotNumber", "status", "type", "typeDisplayName"] model_config = ConfigDict( populate_by_name=True, @@ -88,6 +91,13 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of app_mode if self.app_mode: _dict['appMode'] = self.app_mode.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in compute_resources (list) + _items = [] + if self.compute_resources: + for _item in self.compute_resources: + if _item: + _items.append(_item.to_dict()) + _dict['computeResources'] = _items # override the default output from pydantic by calling `to_dict()` of each item in health_details (list) _items = [] if self.health_details: @@ -125,6 +135,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "aggregatedMode": obj.get("aggregatedMode"), "appMode": AppMode.from_dict(obj["appMode"]) if obj.get("appMode") is not None else None, + "computeResources": ( [ComputeResource.from_dict(_item) for _item in obj.get("computeResources", [])] if obj.get("computeResources") is not None else None), "healthDetails": ( [HealthIssue.from_dict(_item) for _item in obj.get("healthDetails", [])] if obj.get("healthDetails") is not None else None), "healthy": obj.get("healthy"), "id": obj.get("id"), @@ -134,7 +145,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "serial": obj.get("serial"), "slotNumber": obj.get("slotNumber"), "status": obj.get("status"), - "type": obj.get("type") + "type": obj.get("type"), + "typeDisplayName": obj.get("typeDisplayName") , "links": obj.get("links") }) diff --git a/cyperf/models/compute_resource.py b/cyperf/models/compute_resource.py new file mode 100644 index 0000000..8e5d924 --- /dev/null +++ b/cyperf/models/compute_resource.py @@ -0,0 +1,107 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ComputeResource(BaseModel): + """ + ComputeResource + """ # noqa: E501 + disabled: Optional[StrictBool] = Field(default=None, description="Whether the compute resource is disabled or not") + id: Optional[StrictStr] = Field(default=None, description="The compute resource's unique identifier") + link: Optional[StrictStr] = Field(default=None, description="The link state of the compute resource: up or down") + name: Optional[StrictStr] = Field(default=None, description="A user-friendly display name for the compute resource") + reserved_by: Optional[StrictStr] = Field(default=None, description="The owner of the compute resource", alias="reservedBy") + speed: Optional[StrictStr] = Field(default=None, description="The compute resource's speed") + status: Optional[StrictStr] = Field(default=None, description="The current status of the compute resource: ready or not ready") + traffic_status: Optional[StrictStr] = Field(default=None, description="The traffic status of the compute resource", alias="trafficStatus") + __properties: ClassVar[List[str]] = ["disabled", "id", "link", "name", "reservedBy", "speed", "status", "trafficStatus"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ComputeResource from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ComputeResource from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "disabled": obj.get("disabled"), + "id": obj.get("id"), + "link": obj.get("link"), + "name": obj.get("name"), + "reservedBy": obj.get("reservedBy"), + "speed": obj.get("speed"), + "status": obj.get("status"), + "trafficStatus": obj.get("trafficStatus") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/compute_resources_by_controller.py b/cyperf/models/compute_resources_by_controller.py new file mode 100644 index 0000000..88408a5 --- /dev/null +++ b/cyperf/models/compute_resources_by_controller.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.compute_resources_by_node import ComputeResourcesByNode +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ComputeResourcesByController(BaseModel): + """ + ComputeResourcesByController + """ # noqa: E501 + compute_nodes: Optional[List[ComputeResourcesByNode]] = Field(default=None, description="The compute nodes that the compute resources are part of.", alias="computeNodes") + controller_id: Optional[StrictStr] = Field(default=None, description="The id of the controller that the compute resources are part of.", alias="controllerId") + __properties: ClassVar[List[str]] = ["computeNodes", "controllerId"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ComputeResourcesByController from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in compute_nodes (list) + _items = [] + if self.compute_nodes: + for _item in self.compute_nodes: + if _item: + _items.append(_item.to_dict()) + _dict['computeNodes'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ComputeResourcesByController from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "computeNodes": ( [ComputeResourcesByNode.from_dict(_item) for _item in obj.get("computeNodes", [])] if obj.get("computeNodes") is not None else None), + "controllerId": obj.get("controllerId") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/compute_resources_by_node.py b/cyperf/models/compute_resources_by_node.py new file mode 100644 index 0000000..7340aa4 --- /dev/null +++ b/cyperf/models/compute_resources_by_node.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ComputeResourcesByNode(BaseModel): + """ + ComputeResourcesByNode + """ # noqa: E501 + compute_node_id: Optional[StrictStr] = Field(default=None, description="The id of the compute node that the compute resources are part of.", alias="computeNodeId") + compute_resources: Optional[List[StrictStr]] = Field(default=None, description="The compute resource ids.", alias="computeResources") + __properties: ClassVar[List[str]] = ["computeNodeId", "computeResources"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ComputeResourcesByNode from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ComputeResourcesByNode from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "computeNodeId": obj.get("computeNodeId"), + "computeResources": obj.get("computeResources") if obj.get("computeResources") is not None else [] + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/controller.py b/cyperf/models/controller.py index 3de31b8..0acffc6 100644 --- a/cyperf/models/controller.py +++ b/cyperf/models/controller.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink from cyperf.models.compute_node import ComputeNode +from cyperf.models.front_panel import FrontPanel from cyperf.models.health_issue import HealthIssue from typing import Optional, Set, Union from typing_extensions import Self @@ -32,6 +33,7 @@ class Controller(BaseModel): Controller """ # noqa: E501 compute_nodes: Optional[List[ComputeNode]] = Field(default=None, description="The compute nodes of the controller", alias="computeNodes") + front_panels: Optional[List[FrontPanel]] = Field(default=None, description="The front panels of the controller", alias="frontPanels") health_details: Optional[List[HealthIssue]] = Field(default=None, description="Details regarding any health issue of the controller", alias="healthDetails") healthy: Optional[StrictBool] = Field(default=None, description="Whether the controller has any health issue or not") id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the controller") @@ -39,7 +41,8 @@ class Controller(BaseModel): name: Optional[StrictStr] = Field(default=None, description="A user-friendly display name for the controller") serial: Optional[StrictStr] = Field(default=None, description="The serial of the controller") type: Optional[StrictStr] = Field(default=None, description="The type of the controller") - __properties: ClassVar[List[str]] = ["computeNodes", "healthDetails", "healthy", "id", "links", "name", "serial", "type"] + type_display_name: Optional[StrictStr] = Field(default=None, description="The display type name of the controller", alias="typeDisplayName") + __properties: ClassVar[List[str]] = ["computeNodes", "frontPanels", "healthDetails", "healthy", "id", "links", "name", "serial", "type", "typeDisplayName"] model_config = ConfigDict( populate_by_name=True, @@ -87,6 +90,13 @@ def to_dict(self) -> Dict[str, Any]: if _item: _items.append(_item.to_dict()) _dict['computeNodes'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in front_panels (list) + _items = [] + if self.front_panels: + for _item in self.front_panels: + if _item: + _items.append(_item.to_dict()) + _dict['frontPanels'] = _items # override the default output from pydantic by calling `to_dict()` of each item in health_details (list) _items = [] if self.health_details: @@ -116,13 +126,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "computeNodes": ( [ComputeNode.from_dict(_item) for _item in obj.get("computeNodes", [])] if obj.get("computeNodes") is not None else None), + "frontPanels": ( [FrontPanel.from_dict(_item) for _item in obj.get("frontPanels", [])] if obj.get("frontPanels") is not None else None), "healthDetails": ( [HealthIssue.from_dict(_item) for _item in obj.get("healthDetails", [])] if obj.get("healthDetails") is not None else None), "healthy": obj.get("healthy"), "id": obj.get("id"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "name": obj.get("name"), "serial": obj.get("serial"), - "type": obj.get("type") + "type": obj.get("type"), + "typeDisplayName": obj.get("typeDisplayName") , "links": obj.get("links") }) diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index f02ea23..8d74b23 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated +from cyperf.models.address import Address from cyperf.models.api_link import APILink from cyperf.models.health_check_config import HealthCheckConfig from cyperf.models.params import Params @@ -54,6 +55,7 @@ class DUTNetwork(BaseModel): reverse_proxy_pep_dut: Optional[PepDUT] = Field(default=None, alias="ReverseProxyPepDUT") reverse_proxy_pep_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false)", alias="ReverseProxyPepDUTActive") server_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)", alias="ServerDUTActive") + server_dut_address: Optional[Address] = Field(default=None, alias="ServerDUTAddress") server_dut_host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.", alias="ServerDUTHost") server_dut_port: Optional[StrictInt] = Field(default=None, description="The listen port for server-side DUT", alias="ServerDUTPort") tcp_health_check: Optional[HealthCheckConfig] = Field(default=None, description="The TCP HealthCheck configuration for DUT", alias="TCPHealthCheck") @@ -61,7 +63,7 @@ class DUTNetwork(BaseModel): active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)") host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTAddress", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -187,6 +189,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of reverse_proxy_pep_dut if self.reverse_proxy_pep_dut: _dict['ReverseProxyPepDUT'] = self.reverse_proxy_pep_dut.to_dict() + # override the default output from pydantic by calling `to_dict()` of server_dut_address + if self.server_dut_address: + _dict['ServerDUTAddress'] = self.server_dut_address.to_dict() # override the default output from pydantic by calling `to_dict()` of tcp_health_check if self.tcp_health_check: _dict['TCPHealthCheck'] = self.tcp_health_check.to_dict() @@ -232,6 +237,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "ReverseProxyPepDUT": PepDUT.from_dict(obj["ReverseProxyPepDUT"]) if obj.get("ReverseProxyPepDUT") is not None else None, "ReverseProxyPepDUTActive": obj.get("ReverseProxyPepDUTActive"), "ServerDUTActive": obj.get("ServerDUTActive"), + "ServerDUTAddress": Address.from_dict(obj["ServerDUTAddress"]) if obj.get("ServerDUTAddress") is not None else None, "ServerDUTHost": obj.get("ServerDUTHost"), "ServerDUTPort": obj.get("ServerDUTPort"), "TCPHealthCheck": HealthCheckConfig.from_dict(obj["TCPHealthCheck"]) if obj.get("TCPHealthCheck") is not None else None, diff --git a/cyperf/models/emulated_router_range.py b/cyperf/models/emulated_router_range.py index 2b88b82..1fe348d 100644 --- a/cyperf/models/emulated_router_range.py +++ b/cyperf/models/emulated_router_range.py @@ -24,6 +24,7 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer +from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -40,6 +41,7 @@ class EmulatedRouterRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") + ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -56,7 +58,7 @@ class EmulatedRouterRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -137,6 +139,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of ip_address + if self.ip_address: + _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -167,6 +172,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, + "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/eth_range.py b/cyperf/models/eth_range.py index 964ed14..0bf2674 100644 --- a/cyperf/models/eth_range.py +++ b/cyperf/models/eth_range.py @@ -22,6 +22,7 @@ from typing import Any, ClassVar, Dict, List, Optional from typing_extensions import Annotated from cyperf.models.api_link import APILink +from cyperf.models.sequence_value import SequenceValue from cyperf.models.static_arp_entry import StaticARPEntry from typing import Optional, Set, Union from typing_extensions import Self @@ -32,6 +33,7 @@ class EthRange(BaseModel): The Ethernet Ranges assigned to the current test configuration """ # noqa: E501 count: Optional[StrictInt] = Field(default=None, alias="Count") + mac_address: Optional[SequenceValue] = Field(default=None, alias="MacAddress") mac_auto: StrictBool = Field(description="A flag indicating if the MAC address for the EthRange should be determined automatically (default: true).", alias="MacAuto") mac_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01).", alias="MacIncr") mac_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC start address for the EthRange (default: 00:11:01:00:00:01).", alias="MacStart") @@ -39,7 +41,7 @@ class EthRange(BaseModel): static_arp_table: Optional[List[StaticARPEntry]] = Field(default=None, alias="StaticARPTable") links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of MACs that should be assigned to each traffic agent for this Ethernet range segment in a valid test (default: 0, split equally between agents).", alias="maxCountPerAgent") - __properties: ClassVar[List[str]] = ["Count", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] + __properties: ClassVar[List[str]] = ["Count", "MacAddress", "MacAuto", "MacIncr", "MacStart", "OneMacPerIP", "StaticARPTable", "links", "maxCountPerAgent"] @field_validator('mac_incr') def mac_incr_validate_regular_expression(cls, value): @@ -100,6 +102,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of mac_address + if self.mac_address: + _dict['MacAddress'] = self.mac_address.to_dict() # override the default output from pydantic by calling `to_dict()` of each item in static_arp_table (list) _items = [] if self.static_arp_table: @@ -129,6 +134,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Count": obj.get("Count"), + "MacAddress": SequenceValue.from_dict(obj["MacAddress"]) if obj.get("MacAddress") is not None else None, "MacAuto": obj.get("MacAuto"), "MacIncr": obj.get("MacIncr"), "MacStart": obj.get("MacStart"), diff --git a/cyperf/models/front_panel.py b/cyperf/models/front_panel.py new file mode 100644 index 0000000..67c2c9e --- /dev/null +++ b/cyperf/models/front_panel.py @@ -0,0 +1,131 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.health_issue import HealthIssue +from cyperf.models.port import Port +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class FrontPanel(BaseModel): + """ + FrontPanel + """ # noqa: E501 + fan_out_mode: Optional[StrictStr] = Field(default=None, description="The current fanOut mode of the front panel", alias="fanOutMode") + health_details: Optional[List[HealthIssue]] = Field(default=None, description="A list with more details regarding the health of the front panel", alias="healthDetails") + healthy: Optional[StrictBool] = Field(default=None, description="Whether the front panel has any health issue or not") + id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the front panel") + links: Optional[List[APILink]] = None + name: Optional[StrictStr] = Field(default=None, description="A user-friendly display name for the front panel") + ports: Optional[List[Port]] = Field(default=None, description="The front panel ports of the front panel") + status: Optional[StrictStr] = Field(default=None, description="The current status of the front panel: ready or not ready") + __properties: ClassVar[List[str]] = ["fanOutMode", "healthDetails", "healthy", "id", "links", "name", "ports", "status"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of FrontPanel from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in health_details (list) + _items = [] + if self.health_details: + for _item in self.health_details: + if _item: + _items.append(_item.to_dict()) + _dict['healthDetails'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in ports (list) + _items = [] + if self.ports: + for _item in self.ports: + if _item: + _items.append(_item.to_dict()) + _dict['ports'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of FrontPanel from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "fanOutMode": obj.get("fanOutMode"), + "healthDetails": ( [HealthIssue.from_dict(_item) for _item in obj.get("healthDetails", [])] if obj.get("healthDetails") is not None else None), + "healthy": obj.get("healthy"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), + "name": obj.get("name"), + "ports": ( [Port.from_dict(_item) for _item in obj.get("ports", [])] if obj.get("ports") is not None else None), + "status": obj.get("status") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/front_panel_ports_by_controller.py b/cyperf/models/front_panel_ports_by_controller.py new file mode 100644 index 0000000..ec9f631 --- /dev/null +++ b/cyperf/models/front_panel_ports_by_controller.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.ports_by_panel import PortsByPanel +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class FrontPanelPortsByController(BaseModel): + """ + FrontPanelPortsByController + """ # noqa: E501 + controller_id: Optional[StrictStr] = Field(default=None, description="The id of the controller that the front panel ports are part of.", alias="controllerId") + front_panels: Optional[List[PortsByPanel]] = Field(default=None, description="The front panels that the ports are part of.", alias="frontPanels") + __properties: ClassVar[List[str]] = ["controllerId", "frontPanels"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of FrontPanelPortsByController from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in front_panels (list) + _items = [] + if self.front_panels: + for _item in self.front_panels: + if _item: + _items.append(_item.to_dict()) + _dict['frontPanels'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of FrontPanelPortsByController from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllerId": obj.get("controllerId"), + "frontPanels": ( [PortsByPanel.from_dict(_item) for _item in obj.get("frontPanels", [])] if obj.get("frontPanels") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index 9c83b38..58897c8 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -24,6 +24,7 @@ from cyperf.models.api_link import APILink from cyperf.models.automatic_ip_type import AutomaticIpType from cyperf.models.ip_ver import IpVer +from cyperf.models.sequence_value import SequenceValue from cyperf.models.vlan_range import VLANRange from cyperf.models.vlan_type import VLANType from typing import Optional, Set, Union @@ -40,6 +41,7 @@ class IPRange(BaseModel): gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") + ip_address: Optional[SequenceValue] = Field(default=None, alias="IpAddress") ip_auto: StrictBool = Field(description="A flag indicating if IP settings for the IPRange should be determined automatically (default: true).", alias="IpAuto") ip_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The IP incrementation rule (default: 0.0.0.1).", alias="IpIncr") ip_range_name: Annotated[str, Field(strict=True)] = Field(alias="IpRangeName") @@ -56,7 +58,7 @@ class IPRange(BaseModel): links: Optional[List[APILink]] = None max_count_per_agent: Optional[StrictInt] = Field(default=None, description="The maximum number of IPs that should be assigned to each traffic agent for this IP range segment in a valid test (default: 1).", alias="maxCountPerAgent") network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] + __properties: ClassVar[List[str]] = ["AutomaticIpType", "Count", "GwAuto", "GwStart", "HostCount", "InnerVlanRange", "IpAddress", "IpAuto", "IpIncr", "IpRangeName", "IpStart", "IpVer", "IsEmulatedRouter", "Mss", "MssAuto", "NetMask", "NetMaskAuto", "OuterVlanRange", "VLANType", "id", "links", "maxCountPerAgent", "networkTags"] @field_validator('gw_start') def gw_start_validate_regular_expression(cls, value): @@ -137,6 +139,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of inner_vlan_range if self.inner_vlan_range: _dict['InnerVlanRange'] = self.inner_vlan_range.to_dict() + # override the default output from pydantic by calling `to_dict()` of ip_address + if self.ip_address: + _dict['IpAddress'] = self.ip_address.to_dict() # override the default output from pydantic by calling `to_dict()` of outer_vlan_range if self.outer_vlan_range: _dict['OuterVlanRange'] = self.outer_vlan_range.to_dict() @@ -167,6 +172,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "GwStart": obj.get("GwStart"), "HostCount": obj.get("HostCount"), "InnerVlanRange": VLANRange.from_dict(obj["InnerVlanRange"]) if obj.get("InnerVlanRange") is not None else None, + "IpAddress": SequenceValue.from_dict(obj["IpAddress"]) if obj.get("IpAddress") is not None else None, "IpAuto": obj.get("IpAuto"), "IpIncr": obj.get("IpIncr"), "IpRangeName": obj.get("IpRangeName"), diff --git a/cyperf/models/local_subnet_config.py b/cyperf/models/local_subnet_config.py index 2753476..303751c 100644 --- a/cyperf/models/local_subnet_config.py +++ b/cyperf/models/local_subnet_config.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, field_validator +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, field_validator from typing import Any, ClassVar, Dict, List from typing_extensions import Annotated from typing import Optional, Set, Union @@ -36,8 +36,9 @@ class LocalSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The network mask of the IP Range (default: 16).", alias="Prefix") start: Annotated[str, Field(strict=True)] = Field(description="The start IP for the IPRange (default: 10.0.0.10).", alias="Start") total_host_count: StrictStr = Field(alias="TotalHostCount") + wildcard_initiator_traffic: StrictBool = Field(alias="WildcardInitiatorTraffic") network_tags: List[StrictStr] = Field(description="A list of tags.", alias="networkTags") - __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "networkTags"] + __properties: ClassVar[List[str]] = ["HostCountPerTunnel", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "Start", "TotalHostCount", "WildcardInitiatorTraffic", "networkTags"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -120,6 +121,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Prefix": obj.get("Prefix"), "Start": obj.get("Start"), "TotalHostCount": obj.get("TotalHostCount"), + "WildcardInitiatorTraffic": obj.get("WildcardInitiatorTraffic"), "networkTags": obj.get("networkTags") if obj.get("networkTags") is not None else [] , "links": obj.get("links") diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index 6e07d2b..137c4e2 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -47,9 +47,10 @@ class Metadata(BaseModel): sort_severity: Optional[StrictStr] = Field(default=None, description="The field by which the severity is sorted", alias="SortSeverity") static: Optional[StrictBool] = Field(default=None, description="If true, the application/strike is managed directly by the controller", alias="Static") supported_apps: Optional[List[StrictStr]] = Field(default=None, description="The apps that this strike can be used with", alias="SupportedApps") + supported_http_versions: Optional[List[StrictStr]] = Field(default=None, description="The HTTP versions supported by the application", alias="SupportedHTTPVersions") supports_http2: Optional[StrictBool] = Field(default=None, description="Indicates if the application supports HTTP2 multi-stream", alias="SupportsHTTP2") year: Optional[StrictStr] = Field(default=None, description="The year of the strike", alias="Year") - __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportsHTTP2", "Year"] + __properties: ClassVar[List[str]] = ["Direction", "IsBanner", "IsLLMStrike", "IsStreaming", "Keywords", "LegacyNames", "NoMultiFlowSupport", "Protocol", "RTPProfileMeta", "References", "RequiresUniqueness", "Severity", "SkipAttackGeneration", "SortSeverity", "Static", "SupportedApps", "SupportedHTTPVersions", "SupportsHTTP2", "Year"] model_config = ConfigDict( populate_by_name=True, @@ -137,6 +138,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "SortSeverity": obj.get("SortSeverity"), "Static": obj.get("Static"), "SupportedApps": obj.get("SupportedApps") if obj.get("SupportedApps") is not None else [], + "SupportedHTTPVersions": obj.get("SupportedHTTPVersions") if obj.get("SupportedHTTPVersions") is not None else [], "SupportsHTTP2": obj.get("SupportsHTTP2"), "Year": obj.get("Year") , diff --git a/cyperf/models/pangp_encapsulation.py b/cyperf/models/pangp_encapsulation.py index 5b09a5a..88a533c 100644 --- a/cyperf/models/pangp_encapsulation.py +++ b/cyperf/models/pangp_encapsulation.py @@ -32,10 +32,11 @@ class PANGPEncapsulation(BaseModel): """ # noqa: E501 esp_over_udp_enabled: StrictBool = Field(alias="ESPOverUDPEnabled") esp_over_udp_settings: Optional[ESPOverUDPSettings] = Field(default=None, alias="ESPOverUDPSettings") + enable_ikev2: StrictBool = Field(alias="EnableIKEv2") encapsulation_mode: StrictStr = Field(description="The encapsulation mode for inner traffic.", alias="EncapsulationMode") udp_port: StrictInt = Field(alias="UdpPort") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EncapsulationMode", "UdpPort", "links"] + __properties: ClassVar[List[str]] = ["ESPOverUDPEnabled", "ESPOverUDPSettings", "EnableIKEv2", "EncapsulationMode", "UdpPort", "links"] @field_validator('encapsulation_mode') def encapsulation_mode_validate_enum(cls, value): @@ -109,6 +110,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "ESPOverUDPEnabled": obj.get("ESPOverUDPEnabled"), "ESPOverUDPSettings": ESPOverUDPSettings.from_dict(obj["ESPOverUDPSettings"]) if obj.get("ESPOverUDPSettings") is not None else None, + "EnableIKEv2": obj.get("EnableIKEv2"), "EncapsulationMode": obj.get("EncapsulationMode"), "UdpPort": obj.get("UdpPort"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) diff --git a/cyperf/models/ports_by_panel.py b/cyperf/models/ports_by_panel.py new file mode 100644 index 0000000..a5bf3c1 --- /dev/null +++ b/cyperf/models/ports_by_panel.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class PortsByPanel(BaseModel): + """ + PortsByPanel + """ # noqa: E501 + front_panel_id: Optional[StrictStr] = Field(default=None, description="The id of the front panel that the ports are part of.", alias="frontPanelId") + ports: Optional[List[StrictStr]] = Field(default=None, description="The port ids.") + __properties: ClassVar[List[str]] = ["frontPanelId", "ports"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of PortsByPanel from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of PortsByPanel from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "frontPanelId": obj.get("frontPanelId"), + "ports": obj.get("ports") if obj.get("ports") is not None else [] + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/reboot_compute_resources_operation.py b/cyperf/models/reboot_compute_resources_operation.py new file mode 100644 index 0000000..fdfcd2a --- /dev/null +++ b/cyperf/models/reboot_compute_resources_operation.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.compute_resources_by_controller import ComputeResourcesByController +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class RebootComputeResourcesOperation(BaseModel): + """ + RebootComputeResourcesOperation + """ # noqa: E501 + controllers: Optional[List[ComputeResourcesByController]] = Field(default=None, description="The controllers that the compute resources are part of.") + __properties: ClassVar[List[str]] = ["controllers"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of RebootComputeResourcesOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in controllers (list) + _items = [] + if self.controllers: + for _item in self.controllers: + if _item: + _items.append(_item.to_dict()) + _dict['controllers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of RebootComputeResourcesOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllers": ( [ComputeResourcesByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/remote_subnet_config.py b/cyperf/models/remote_subnet_config.py index b9e55d1..a4b6e66 100644 --- a/cyperf/models/remote_subnet_config.py +++ b/cyperf/models/remote_subnet_config.py @@ -36,7 +36,8 @@ class RemoteSubnetConfig(BaseModel): prefix: StrictInt = Field(description="The length (in bits) of the subnet mask to be applied to all the addresses created in the range.", alias="Prefix") single_remote_subnet: StrictBool = Field(alias="SingleRemoteSubnet") start: Annotated[str, Field(strict=True)] = Field(description="The base address for enumerating all the local subnets in the range", alias="Start") - __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start"] + wildcard_responder_traffic: StrictBool = Field(alias="WildcardResponderTraffic") + __properties: ClassVar[List[str]] = ["Automatic", "HostsIncrement", "HostsPrefix", "Increment", "Prefix", "SingleRemoteSubnet", "Start", "WildcardResponderTraffic"] @field_validator('hosts_increment') def hosts_increment_validate_regular_expression(cls, value): @@ -118,7 +119,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Increment": obj.get("Increment"), "Prefix": obj.get("Prefix"), "SingleRemoteSubnet": obj.get("SingleRemoteSubnet"), - "Start": obj.get("Start") + "Start": obj.get("Start"), + "WildcardResponderTraffic": obj.get("WildcardResponderTraffic") , "links": obj.get("links") }) diff --git a/cyperf/models/set_front_panel_ports_link_state_operation.py b/cyperf/models/set_front_panel_ports_link_state_operation.py new file mode 100644 index 0000000..d4a92b9 --- /dev/null +++ b/cyperf/models/set_front_panel_ports_link_state_operation.py @@ -0,0 +1,114 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, field_validator +from typing import Any, ClassVar, Dict, List, Optional +from typing_extensions import Annotated +from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SetFrontPanelPortsLinkStateOperation(BaseModel): + """ + SetFrontPanelPortsLinkStateOperation + """ # noqa: E501 + controllers: Optional[List[FrontPanelPortsByController]] = Field(default=None, description="The controllers that the front panel ports are part of.") + link: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The desired link state.") + __properties: ClassVar[List[str]] = ["controllers", "link"] + + @field_validator('link') + def link_validate_regular_expression(cls, value): + """Validates the regular expression""" + if value is None: + return value + + if not re.match(r"^(UP|DOWN)$", value): + raise ValueError(r"must validate the regular expression /^(UP|DOWN)$/") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SetFrontPanelPortsLinkStateOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in controllers (list) + _items = [] + if self.controllers: + for _item in self.controllers: + if _item: + _items.append(_item.to_dict()) + _dict['controllers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SetFrontPanelPortsLinkStateOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllers": ( [FrontPanelPortsByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None), + "link": obj.get("link") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/set_link_state_operation.py b/cyperf/models/set_ports_link_state_operation.py similarity index 93% rename from cyperf/models/set_link_state_operation.py rename to cyperf/models/set_ports_link_state_operation.py index f5eaa24..035fe02 100644 --- a/cyperf/models/set_link_state_operation.py +++ b/cyperf/models/set_ports_link_state_operation.py @@ -26,9 +26,9 @@ from typing_extensions import Self from pydantic import Field, PrivateAttr -class SetLinkStateOperation(BaseModel): +class SetPortsLinkStateOperation(BaseModel): """ - SetLinkStateOperation + SetPortsLinkStateOperation """ # noqa: E501 controllers: Optional[List[PortsByController]] = Field(default=None, description="The controllers that the ports are part of.") link: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The desired link state.") @@ -62,7 +62,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of SetLinkStateOperation from a JSON string""" + """Create an instance of SetPortsLinkStateOperation from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -94,7 +94,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of SetLinkStateOperation from a dict""" + """Create an instance of SetPortsLinkStateOperation from a dict""" if obj is None: return None diff --git a/cyperf/models/stream_profile.py b/cyperf/models/stream_profile.py index 5c13d58..a7d3737 100644 --- a/cyperf/models/stream_profile.py +++ b/cyperf/models/stream_profile.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.stream_payload_type import StreamPayloadType from typing import Optional, Set, Union @@ -35,7 +35,8 @@ class StreamProfile(BaseModel): total_estimated_throughput: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughput") total_estimated_throughput_per_simulated_user: Optional[StrictStr] = Field(default=None, alias="totalEstimatedThroughputPerSimulatedUser") unique_pool_size: Optional[StrictInt] = Field(default=None, alias="uniquePoolSize") - __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize"] + unrestricted_packet_rate: Optional[StrictBool] = Field(default=None, alias="unrestrictedPacketRate") + __properties: ClassVar[List[str]] = ["packetRate", "payloadSize", "payloadType", "totalEstimatedThroughput", "totalEstimatedThroughputPerSimulatedUser", "uniquePoolSize", "unrestrictedPacketRate"] model_config = ConfigDict( populate_by_name=True, @@ -95,7 +96,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "payloadType": obj.get("payloadType"), "totalEstimatedThroughput": obj.get("totalEstimatedThroughput"), "totalEstimatedThroughputPerSimulatedUser": obj.get("totalEstimatedThroughputPerSimulatedUser"), - "uniquePoolSize": obj.get("uniquePoolSize") + "uniquePoolSize": obj.get("uniquePoolSize"), + "unrestrictedPacketRate": obj.get("unrestrictedPacketRate") , "links": obj.get("links") }) diff --git a/cyperf/models/traffic_profile_base.py b/cyperf/models/traffic_profile_base.py index e480756..6e10b0d 100644 --- a/cyperf/models/traffic_profile_base.py +++ b/cyperf/models/traffic_profile_base.py @@ -21,6 +21,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.api_link import APILink +from cyperf.models.playlist_sequencing_method import PlaylistSequencingMethod from cyperf.models.traffic_settings import TrafficSettings from typing import Optional, Set, Union from typing_extensions import Self @@ -31,11 +32,12 @@ class TrafficProfileBase(BaseModel): TrafficProfileBase """ # noqa: E501 active: Optional[StrictBool] = Field(default=None, description="Indicates whether the profile is enabled or not.", alias="Active") + playlist_sequencing_method: Optional[PlaylistSequencingMethod] = Field(default=None, alias="PlaylistSequencingMethod") traffic_settings: Optional[TrafficSettings] = Field(default=None, alias="TrafficSettings") use_all_source_ips_per_user: Optional[StrictBool] = Field(default=None, description="Indicates whether one or all source IPs are used for each simulated user.", alias="UseAllSourceIPsPerUser") id: Optional[StrictStr] = None links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Active", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] + __properties: ClassVar[List[str]] = ["Active", "PlaylistSequencingMethod", "TrafficSettings", "UseAllSourceIPsPerUser", "id", "links"] model_config = ConfigDict( populate_by_name=True, @@ -101,6 +103,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "Active": obj.get("Active"), + "PlaylistSequencingMethod": obj.get("PlaylistSequencingMethod"), "TrafficSettings": TrafficSettings.from_dict(obj["TrafficSettings"]) if obj.get("TrafficSettings") is not None else None, "UseAllSourceIPsPerUser": obj.get("UseAllSourceIPsPerUser"), "id": obj.get("id"), diff --git a/docs/Action.md b/docs/Action.md index 0e584a6..c832d9d 100644 --- a/docs/Action.md +++ b/docs/Action.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/ActionBase.md b/docs/ActionBase.md index be8a2e2..f419c41 100644 --- a/docs/ActionBase.md +++ b/docs/ActionBase.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/AgentAssignmentByFrontPanelPort.md b/docs/AgentAssignmentByFrontPanelPort.md new file mode 100644 index 0000000..8a4e9ab --- /dev/null +++ b/docs/AgentAssignmentByFrontPanelPort.md @@ -0,0 +1,34 @@ +# AgentAssignmentByFrontPanelPort + +Details of an agent assignment by front panel port + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**capture_settings** | [**CaptureSettings**](CaptureSettings.md) | The capture settings of the front panel port that is assigned. | [optional] +**compute_resources_by_type** | **Dict[str, int]** | The number of compute resources to assign per compute node type. | [optional] +**front_panel_port_id** | **str** | The id of the front panel port that is assigned. | +**id** | **str** | | +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort + +# TODO update the JSON string below +json = "{}" +# create an instance of AgentAssignmentByFrontPanelPort from a JSON string +agent_assignment_by_front_panel_port_instance = AgentAssignmentByFrontPanelPort.from_json(json) +# print the JSON string representation of the object +print(AgentAssignmentByFrontPanelPort.to_json()) + +# convert the object into a dict +agent_assignment_by_front_panel_port_dict = agent_assignment_by_front_panel_port_instance.to_dict() +# create an instance of AgentAssignmentByFrontPanelPort from a dict +agent_assignment_by_front_panel_port_from_dict = AgentAssignmentByFrontPanelPort.from_dict(agent_assignment_by_front_panel_port_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AgentAssignments.md b/docs/AgentAssignments.md index 2b0cca7..64a3012 100644 --- a/docs/AgentAssignments.md +++ b/docs/AgentAssignments.md @@ -6,6 +6,7 @@ The agents assigned to the current test configuration Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**by_front_panel_port** | [**List[AgentAssignmentByFrontPanelPort]**](AgentAssignmentByFrontPanelPort.md) | The front panel ports assigned to the current test configuration. | [optional] **by_id** | [**List[AgentAssignmentDetails]**](AgentAssignmentDetails.md) | The agents statically assigned to the current test configuration. | [optional] **by_port** | [**List[AgentAssignmentByPort]**](AgentAssignmentByPort.md) | The ports assigned to the current test configuration. | [optional] **by_tag** | **List[str]** | The tags according to which the agents are dynamically assigned. | [optional] diff --git a/docs/AgentReservation.md b/docs/AgentReservation.md index 16a565a..205b542 100644 --- a/docs/AgentReservation.md +++ b/docs/AgentReservation.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **agent_id** | **str** | | [optional] **agent_payload_names** | **List[str]** | | [optional] +**front_panel_port_id** | **str** | | [optional] **general_purpose_cpu_percent** | **int** | | [optional] **interfaces** | **List[str]** | | [optional] **ip_address_version_used** | **str** | | [optional] diff --git a/docs/AgentsApi.md b/docs/AgentsApi.md index e0b7374..ff8134a 100644 --- a/docs/AgentsApi.md +++ b/docs/AgentsApi.md @@ -8,12 +8,18 @@ Method | HTTP request | Description [**get_agent_by_id**](AgentsApi.md#get_agent_by_id) | **GET** /api/v2/agents/{agentId} | [**get_agents**](AgentsApi.md#get_agents) | **GET** /api/v2/agents | [**get_agents_tags**](AgentsApi.md#get_agents_tags) | **GET** /api/v2/tags | +[**get_compute_node_compute_resource_by_id**](AgentsApi.md#get_compute_node_compute_resource_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources/{computeResourceId} | +[**get_compute_node_compute_resources**](AgentsApi.md#get_compute_node_compute_resources) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/compute-resources | [**get_compute_node_port_by_id**](AgentsApi.md#get_compute_node_port_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports/{portId} | [**get_compute_node_ports**](AgentsApi.md#get_compute_node_ports) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports | [**get_controller_by_id**](AgentsApi.md#get_controller_by_id) | **GET** /api/v2/controllers/{controllerId} | [**get_controller_compute_node_by_id**](AgentsApi.md#get_controller_compute_node_by_id) | **GET** /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId} | [**get_controller_compute_nodes**](AgentsApi.md#get_controller_compute_nodes) | **GET** /api/v2/controllers/{controllerId}/compute-nodes | +[**get_controller_front_panel_by_id**](AgentsApi.md#get_controller_front_panel_by_id) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId} | +[**get_controller_front_panels**](AgentsApi.md#get_controller_front_panels) | **GET** /api/v2/controllers/{controllerId}/front-panels | [**get_controllers**](AgentsApi.md#get_controllers) | **GET** /api/v2/controllers | +[**get_front_panel_port_by_id**](AgentsApi.md#get_front_panel_port_by_id) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports/{portId} | +[**get_front_panel_ports**](AgentsApi.md#get_front_panel_ports) | **GET** /api/v2/controllers/{controllerId}/front-panels/{frontPanelId}/ports | [**patch_agent**](AgentsApi.md#patch_agent) | **PATCH** /api/v2/agents/{agentId} | [**start_agents_batch_delete**](AgentsApi.md#start_agents_batch_delete) | **POST** /api/v2/agents/operations/batch-delete | [**start_agents_export_files**](AgentsApi.md#start_agents_export_files) | **POST** /api/v2/agents/operations/exportFiles | @@ -23,10 +29,14 @@ Method | HTTP request | Description [**start_agents_set_dpdk_mode**](AgentsApi.md#start_agents_set_dpdk_mode) | **POST** /api/v2/agents/operations/set-dpdk-mode | [**start_agents_set_ntp**](AgentsApi.md#start_agents_set_ntp) | **POST** /api/v2/agents/operations/set-ntp | [**start_agents_update**](AgentsApi.md#start_agents_update) | **POST** /api/v2/agents/operations/update | +[**start_controllers_clear_compute_resource_ownership**](AgentsApi.md#start_controllers_clear_compute_resource_ownership) | **POST** /api/v2/controllers/operations/clear-compute-resource-ownership | +[**start_controllers_clear_front_panel_port_ownership**](AgentsApi.md#start_controllers_clear_front_panel_port_ownership) | **POST** /api/v2/controllers/operations/clear-front-panel-port-ownership | [**start_controllers_clear_port_ownership**](AgentsApi.md#start_controllers_clear_port_ownership) | **POST** /api/v2/controllers/operations/clear-port-ownership | [**start_controllers_power_cycle_nodes**](AgentsApi.md#start_controllers_power_cycle_nodes) | **POST** /api/v2/controllers/operations/power-cycle-nodes | +[**start_controllers_reboot_compute_resource**](AgentsApi.md#start_controllers_reboot_compute_resource) | **POST** /api/v2/controllers/operations/reboot-compute-resource | [**start_controllers_reboot_port**](AgentsApi.md#start_controllers_reboot_port) | **POST** /api/v2/controllers/operations/reboot-port | [**start_controllers_set_app**](AgentsApi.md#start_controllers_set_app) | **POST** /api/v2/controllers/operations/set-app | +[**start_controllers_set_front_panel_port_link_state**](AgentsApi.md#start_controllers_set_front_panel_port_link_state) | **POST** /api/v2/controllers/operations/set-front-panel-port-link-state | [**start_controllers_set_node_aggregation**](AgentsApi.md#start_controllers_set_node_aggregation) | **POST** /api/v2/controllers/operations/set-node-aggregation | [**start_controllers_set_node_app**](AgentsApi.md#start_controllers_set_node_app) | **POST** /api/v2/controllers/operations/set-node-app | [**start_controllers_set_port_link_state**](AgentsApi.md#start_controllers_set_port_link_state) | **POST** /api/v2/controllers/operations/set-port-link-state | @@ -358,6 +368,169 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **get_compute_node_compute_resource_by_id** +> ComputeResource get_compute_node_compute_resource_by_id(controller_id, compute_node_id, compute_resource_id) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.compute_resource import ComputeResource +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + compute_node_id = 'compute_node_id_example' # str | The ID of the compute node. + compute_resource_id = 'compute_resource_id_example' # str | The ID of the compute resource. + + try: + api_response = api_instance.get_compute_node_compute_resource_by_id(controller_id, compute_node_id, compute_resource_id) + print("The response of AgentsApi->get_compute_node_compute_resource_by_id:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_compute_node_compute_resource_by_id: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **compute_node_id** | **str**| The ID of the compute node. | + **compute_resource_id** | **str**| The ID of the compute resource. | + +### Return type + +[**ComputeResource**](ComputeResource.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**404** | A resource with the specified ID was not found. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_compute_node_compute_resources** +> List[ComputeResource] get_compute_node_compute_resources(controller_id, compute_node_id, take=take, skip=skip) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.compute_resource import ComputeResource +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + compute_node_id = 'compute_node_id_example' # str | The ID of the compute node. + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_compute_node_compute_resources(controller_id, compute_node_id, take=take, skip=skip) + print("The response of AgentsApi->get_compute_node_compute_resources:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_compute_node_compute_resources: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **compute_node_id** | **str**| The ID of the compute node. | + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**List[ComputeResource]**](ComputeResource.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **get_compute_node_port_by_id** > Port get_compute_node_port_by_id(controller_id, compute_node_id, port_id) @@ -722,7 +895,649 @@ with cyperf.ApiClient(configuration) as api_client: print("The response of AgentsApi->get_controller_compute_nodes:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->get_controller_compute_nodes: %s\n" % e) + print("Exception when calling AgentsApi->get_controller_compute_nodes: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**List[ComputeNode]**](ComputeNode.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_controller_front_panel_by_id** +> FrontPanel get_controller_front_panel_by_id(controller_id, front_panel_id) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.front_panel import FrontPanel +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + front_panel_id = 'front_panel_id_example' # str | The ID of the front panel. + + try: + api_response = api_instance.get_controller_front_panel_by_id(controller_id, front_panel_id) + print("The response of AgentsApi->get_controller_front_panel_by_id:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_controller_front_panel_by_id: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **front_panel_id** | **str**| The ID of the front panel. | + +### Return type + +[**FrontPanel**](FrontPanel.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**404** | A resource with the specified ID was not found. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_controller_front_panels** +> List[FrontPanel] get_controller_front_panels(controller_id, take=take, skip=skip) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.front_panel import FrontPanel +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_controller_front_panels(controller_id, take=take, skip=skip) + print("The response of AgentsApi->get_controller_front_panels:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_controller_front_panels: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**List[FrontPanel]**](FrontPanel.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_controllers** +> GetControllers200Response get_controllers(take=take, skip=skip, include=include) + + + +Get the controllers chain. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.get_controllers200_response import GetControllers200Response +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + include = 'include_example' # str | Specifies if the sub-fields that are objects should be included. (optional) + + try: + api_response = api_instance.get_controllers(take=take, skip=skip, include=include) + print("The response of AgentsApi->get_controllers:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_controllers: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + **include** | **str**| Specifies if the sub-fields that are objects should be included. | [optional] + +### Return type + +[**GetControllers200Response**](GetControllers200Response.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The list of controllers. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_front_panel_port_by_id** +> Port get_front_panel_port_by_id(controller_id, front_panel_id, port_id) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.port import Port +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + front_panel_id = 'front_panel_id_example' # str | The ID of the front panel. + port_id = 'port_id_example' # str | The ID of the port. + + try: + api_response = api_instance.get_front_panel_port_by_id(controller_id, front_panel_id, port_id) + print("The response of AgentsApi->get_front_panel_port_by_id:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_front_panel_port_by_id: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **front_panel_id** | **str**| The ID of the front panel. | + **port_id** | **str**| The ID of the port. | + +### Return type + +[**Port**](Port.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**404** | A resource with the specified ID was not found. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_front_panel_ports** +> List[Port] get_front_panel_ports(controller_id, front_panel_id, take=take, skip=skip) + + + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.port import Port +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + controller_id = 'controller_id_example' # str | The ID of the controller. + front_panel_id = 'front_panel_id_example' # str | The ID of the front panel. + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_front_panel_ports(controller_id, front_panel_id, take=take, skip=skip) + print("The response of AgentsApi->get_front_panel_ports:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->get_front_panel_ports: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **controller_id** | **str**| The ID of the controller. | + **front_panel_id** | **str**| The ID of the front panel. | + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**List[Port]**](Port.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **patch_agent** +> patch_agent(agent_id, agent=agent) + + + +Update a particular agent. Only non-null fields are updated. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.agent import Agent +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + agent_id = 'agent_id_example' # str | The ID of the agent. + agent = cyperf.Agent() # Agent | (optional) + + try: + api_instance.patch_agent(agent_id, agent=agent) + except Exception as e: + print("Exception when calling AgentsApi->patch_agent: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **agent_id** | **str**| The ID of the agent. | + **agent** | [**Agent**](Agent.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | The agent was successfully updated. | - | +**404** | An agent with the specified ID was not found. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **start_agents_batch_delete** +> AsyncContext start_agents_batch_delete(start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner) + + + +Remove multiple agents. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.async_context import AsyncContext +from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + start_agents_batch_delete_request_inner = [cyperf.StartAgentsBatchDeleteRequestInner()] # List[StartAgentsBatchDeleteRequestInner] | (optional) + + try: + api_response = api_instance.start_agents_batch_delete(start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner) + print("The response of AgentsApi->start_agents_batch_delete:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->start_agents_batch_delete: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **start_agents_batch_delete_request_inner** | [**List[StartAgentsBatchDeleteRequestInner]**](StartAgentsBatchDeleteRequestInner.md)| | [optional] + +### Return type + +[**AsyncContext**](AsyncContext.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Details about the operation that just started | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **start_agents_export_files** +> AsyncContext start_agents_export_files(export_files_operation_input=export_files_operation_input) + + + +Sends export files requests to a list of agents. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.async_context import AsyncContext +from cyperf.models.export_files_operation_input import ExportFilesOperationInput +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + export_files_operation_input = cyperf.ExportFilesOperationInput() # ExportFilesOperationInput | (optional) + + try: + api_response = api_instance.start_agents_export_files(export_files_operation_input=export_files_operation_input) + print("The response of AgentsApi->start_agents_export_files:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->start_agents_export_files: %s\n" % e) ``` @@ -732,13 +1547,11 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **controller_id** | **str**| The ID of the controller. | - **take** | **int**| The number of search results to return | [optional] - **skip** | **int**| The number of search results to skip | [optional] + **export_files_operation_input** | [**ExportFilesOperationInput**](ExportFilesOperationInput.md)| | [optional] ### Return type -[**List[ComputeNode]**](ComputeNode.md) +[**AsyncContext**](AsyncContext.md) ### Authorization @@ -746,24 +1559,23 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | -**500** | Unexpected error | - | +**202** | Details about the operation that just started | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **get_controllers** -> GetControllers200Response get_controllers(take=take, skip=skip, include=include) +# **start_agents_reboot** +> AsyncContext start_agents_reboot(reboot_operation_input=reboot_operation_input) -Get the controllers chain. +Reboot the agents specified in the request. ### Example @@ -772,7 +1584,8 @@ Get the controllers chain. ```python import cyperf -from cyperf.models.get_controllers200_response import GetControllers200Response +from cyperf.models.async_context import AsyncContext +from cyperf.models.reboot_operation_input import RebootOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -795,16 +1608,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - take = 56 # int | The number of search results to return (optional) - skip = 56 # int | The number of search results to skip (optional) - include = 'include_example' # str | Specifies if the sub-fields that are objects should be included. (optional) + reboot_operation_input = cyperf.RebootOperationInput() # RebootOperationInput | (optional) try: - api_response = api_instance.get_controllers(take=take, skip=skip, include=include) - print("The response of AgentsApi->get_controllers:\n") + api_response = api_instance.start_agents_reboot(reboot_operation_input=reboot_operation_input) + print("The response of AgentsApi->start_agents_reboot:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->get_controllers: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_reboot: %s\n" % e) ``` @@ -814,13 +1625,11 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **take** | **int**| The number of search results to return | [optional] - **skip** | **int**| The number of search results to skip | [optional] - **include** | **str**| Specifies if the sub-fields that are objects should be included. | [optional] + **reboot_operation_input** | [**RebootOperationInput**](RebootOperationInput.md)| | [optional] ### Return type -[**GetControllers200Response**](GetControllers200Response.md) +[**AsyncContext**](AsyncContext.md) ### Authorization @@ -828,24 +1637,23 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/json ### HTTP response details | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The list of controllers. | - | -**500** | Unexpected error | - | +**202** | Details about the operation that just started | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **patch_agent** -> patch_agent(agent_id, agent=agent) +# **start_agents_release** +> AsyncContext start_agents_release(release_operation_input=release_operation_input) -Update a particular agent. Only non-null fields are updated. +Releases all the agents from the given session. ### Example @@ -854,7 +1662,8 @@ Update a particular agent. Only non-null fields are updated. ```python import cyperf -from cyperf.models.agent import Agent +from cyperf.models.async_context import AsyncContext +from cyperf.models.release_operation_input import ReleaseOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -877,13 +1686,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - agent_id = 'agent_id_example' # str | The ID of the agent. - agent = cyperf.Agent() # Agent | (optional) + release_operation_input = cyperf.ReleaseOperationInput() # ReleaseOperationInput | (optional) try: - api_instance.patch_agent(agent_id, agent=agent) + api_response = api_instance.start_agents_release(release_operation_input=release_operation_input) + print("The response of AgentsApi->start_agents_release:\n") + pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->patch_agent: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_release: %s\n" % e) ``` @@ -893,12 +1703,11 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **agent_id** | **str**| The ID of the agent. | - **agent** | [**Agent**](Agent.md)| | [optional] + **release_operation_input** | [**ReleaseOperationInput**](ReleaseOperationInput.md)| | [optional] ### Return type -void (empty response body) +[**AsyncContext**](AsyncContext.md) ### Authorization @@ -913,18 +1722,16 @@ void (empty response body) | Status code | Description | Response headers | |-------------|-------------|------------------| -**204** | The agent was successfully updated. | - | -**404** | An agent with the specified ID was not found. | - | -**500** | Unexpected error | - | +**202** | Details about the operation that just started | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_batch_delete** -> AsyncContext start_agents_batch_delete(start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner) +# **start_agents_reserve** +> AsyncContext start_agents_reserve(reserve_operation_input=reserve_operation_input) -Remove multiple agents. +Reserves all the agents from the given session. ### Example @@ -934,7 +1741,7 @@ Remove multiple agents. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner +from cyperf.models.reserve_operation_input import ReserveOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -957,14 +1764,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - start_agents_batch_delete_request_inner = [cyperf.StartAgentsBatchDeleteRequestInner()] # List[StartAgentsBatchDeleteRequestInner] | (optional) + reserve_operation_input = cyperf.ReserveOperationInput() # ReserveOperationInput | (optional) try: - api_response = api_instance.start_agents_batch_delete(start_agents_batch_delete_request_inner=start_agents_batch_delete_request_inner) - print("The response of AgentsApi->start_agents_batch_delete:\n") + api_response = api_instance.start_agents_reserve(reserve_operation_input=reserve_operation_input) + print("The response of AgentsApi->start_agents_reserve:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_batch_delete: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_reserve: %s\n" % e) ``` @@ -974,7 +1781,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **start_agents_batch_delete_request_inner** | [**List[StartAgentsBatchDeleteRequestInner]**](StartAgentsBatchDeleteRequestInner.md)| | [optional] + **reserve_operation_input** | [**ReserveOperationInput**](ReserveOperationInput.md)| | [optional] ### Return type @@ -997,12 +1804,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_export_files** -> AsyncContext start_agents_export_files(export_files_operation_input=export_files_operation_input) +# **start_agents_set_dpdk_mode** +> AsyncContext start_agents_set_dpdk_mode(set_dpdk_mode_operation_input=set_dpdk_mode_operation_input) -Sends export files requests to a list of agents. +Enable/disable DPDK for a list of agents. ### Example @@ -1012,7 +1819,7 @@ Sends export files requests to a list of agents. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.export_files_operation_input import ExportFilesOperationInput +from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -1035,14 +1842,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - export_files_operation_input = cyperf.ExportFilesOperationInput() # ExportFilesOperationInput | (optional) + set_dpdk_mode_operation_input = cyperf.SetDpdkModeOperationInput() # SetDpdkModeOperationInput | (optional) try: - api_response = api_instance.start_agents_export_files(export_files_operation_input=export_files_operation_input) - print("The response of AgentsApi->start_agents_export_files:\n") + api_response = api_instance.start_agents_set_dpdk_mode(set_dpdk_mode_operation_input=set_dpdk_mode_operation_input) + print("The response of AgentsApi->start_agents_set_dpdk_mode:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_export_files: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_set_dpdk_mode: %s\n" % e) ``` @@ -1052,7 +1859,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **export_files_operation_input** | [**ExportFilesOperationInput**](ExportFilesOperationInput.md)| | [optional] + **set_dpdk_mode_operation_input** | [**SetDpdkModeOperationInput**](SetDpdkModeOperationInput.md)| | [optional] ### Return type @@ -1075,12 +1882,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_reboot** -> AsyncContext start_agents_reboot(reboot_operation_input=reboot_operation_input) +# **start_agents_set_ntp** +> AsyncContext start_agents_set_ntp(set_ntp_operation_input=set_ntp_operation_input) -Reboot the agents specified in the request. +Set the NTP servers for a list of agents. ### Example @@ -1090,7 +1897,7 @@ Reboot the agents specified in the request. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.reboot_operation_input import RebootOperationInput +from cyperf.models.set_ntp_operation_input import SetNtpOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -1113,14 +1920,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - reboot_operation_input = cyperf.RebootOperationInput() # RebootOperationInput | (optional) + set_ntp_operation_input = cyperf.SetNtpOperationInput() # SetNtpOperationInput | (optional) try: - api_response = api_instance.start_agents_reboot(reboot_operation_input=reboot_operation_input) - print("The response of AgentsApi->start_agents_reboot:\n") + api_response = api_instance.start_agents_set_ntp(set_ntp_operation_input=set_ntp_operation_input) + print("The response of AgentsApi->start_agents_set_ntp:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_reboot: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_set_ntp: %s\n" % e) ``` @@ -1130,7 +1937,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **reboot_operation_input** | [**RebootOperationInput**](RebootOperationInput.md)| | [optional] + **set_ntp_operation_input** | [**SetNtpOperationInput**](SetNtpOperationInput.md)| | [optional] ### Return type @@ -1153,12 +1960,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_release** -> AsyncContext start_agents_release(release_operation_input=release_operation_input) +# **start_agents_update** +> AsyncContext start_agents_update() -Releases all the agents from the given session. +Update agents to the recommended version. ### Example @@ -1168,7 +1975,6 @@ Releases all the agents from the given session. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.release_operation_input import ReleaseOperationInput from cyperf.rest import ApiException from pprint import pprint @@ -1191,24 +1997,20 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - release_operation_input = cyperf.ReleaseOperationInput() # ReleaseOperationInput | (optional) try: - api_response = api_instance.start_agents_release(release_operation_input=release_operation_input) - print("The response of AgentsApi->start_agents_release:\n") + api_response = api_instance.start_agents_update() + print("The response of AgentsApi->start_agents_update:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_release: %s\n" % e) + print("Exception when calling AgentsApi->start_agents_update: %s\n" % e) ``` ### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **release_operation_input** | [**ReleaseOperationInput**](ReleaseOperationInput.md)| | [optional] +This endpoint does not need any parameter. ### Return type @@ -1220,7 +2022,7 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: Not defined - **Accept**: application/json ### HTTP response details @@ -1231,12 +2033,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_reserve** -> AsyncContext start_agents_reserve(reserve_operation_input=reserve_operation_input) +# **start_controllers_clear_compute_resource_ownership** +> AsyncContext start_controllers_clear_compute_resource_ownership(clear_compute_resources_ownership_operation=clear_compute_resources_ownership_operation) -Reserves all the agents from the given session. +Clear the ownership of the compute resources. ### Example @@ -1246,7 +2048,7 @@ Reserves all the agents from the given session. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.reserve_operation_input import ReserveOperationInput +from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation from cyperf.rest import ApiException from pprint import pprint @@ -1269,14 +2071,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - reserve_operation_input = cyperf.ReserveOperationInput() # ReserveOperationInput | (optional) + clear_compute_resources_ownership_operation = cyperf.ClearComputeResourcesOwnershipOperation() # ClearComputeResourcesOwnershipOperation | (optional) try: - api_response = api_instance.start_agents_reserve(reserve_operation_input=reserve_operation_input) - print("The response of AgentsApi->start_agents_reserve:\n") + api_response = api_instance.start_controllers_clear_compute_resource_ownership(clear_compute_resources_ownership_operation=clear_compute_resources_ownership_operation) + print("The response of AgentsApi->start_controllers_clear_compute_resource_ownership:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_reserve: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_clear_compute_resource_ownership: %s\n" % e) ``` @@ -1286,7 +2088,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **reserve_operation_input** | [**ReserveOperationInput**](ReserveOperationInput.md)| | [optional] + **clear_compute_resources_ownership_operation** | [**ClearComputeResourcesOwnershipOperation**](ClearComputeResourcesOwnershipOperation.md)| | [optional] ### Return type @@ -1309,12 +2111,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_set_dpdk_mode** -> AsyncContext start_agents_set_dpdk_mode(set_dpdk_mode_operation_input=set_dpdk_mode_operation_input) +# **start_controllers_clear_front_panel_port_ownership** +> AsyncContext start_controllers_clear_front_panel_port_ownership(clear_front_panel_ports_ownership_operation=clear_front_panel_ports_ownership_operation) -Enable/disable DPDK for a list of agents. +Clear the ownership of the front panel ports. ### Example @@ -1324,7 +2126,7 @@ Enable/disable DPDK for a list of agents. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput +from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.rest import ApiException from pprint import pprint @@ -1347,14 +2149,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - set_dpdk_mode_operation_input = cyperf.SetDpdkModeOperationInput() # SetDpdkModeOperationInput | (optional) + clear_front_panel_ports_ownership_operation = cyperf.ClearFrontPanelPortsOwnershipOperation() # ClearFrontPanelPortsOwnershipOperation | (optional) try: - api_response = api_instance.start_agents_set_dpdk_mode(set_dpdk_mode_operation_input=set_dpdk_mode_operation_input) - print("The response of AgentsApi->start_agents_set_dpdk_mode:\n") + api_response = api_instance.start_controllers_clear_front_panel_port_ownership(clear_front_panel_ports_ownership_operation=clear_front_panel_ports_ownership_operation) + print("The response of AgentsApi->start_controllers_clear_front_panel_port_ownership:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_set_dpdk_mode: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_clear_front_panel_port_ownership: %s\n" % e) ``` @@ -1364,7 +2166,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **set_dpdk_mode_operation_input** | [**SetDpdkModeOperationInput**](SetDpdkModeOperationInput.md)| | [optional] + **clear_front_panel_ports_ownership_operation** | [**ClearFrontPanelPortsOwnershipOperation**](ClearFrontPanelPortsOwnershipOperation.md)| | [optional] ### Return type @@ -1387,12 +2189,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_set_ntp** -> AsyncContext start_agents_set_ntp(set_ntp_operation_input=set_ntp_operation_input) +# **start_controllers_clear_port_ownership** +> AsyncContext start_controllers_clear_port_ownership(clear_ports_ownership_operation=clear_ports_ownership_operation) -Set the NTP servers for a list of agents. +Clear the ownership of the ports. ### Example @@ -1402,7 +2204,7 @@ Set the NTP servers for a list of agents. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.set_ntp_operation_input import SetNtpOperationInput +from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.rest import ApiException from pprint import pprint @@ -1425,14 +2227,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - set_ntp_operation_input = cyperf.SetNtpOperationInput() # SetNtpOperationInput | (optional) + clear_ports_ownership_operation = cyperf.ClearPortsOwnershipOperation() # ClearPortsOwnershipOperation | (optional) try: - api_response = api_instance.start_agents_set_ntp(set_ntp_operation_input=set_ntp_operation_input) - print("The response of AgentsApi->start_agents_set_ntp:\n") + api_response = api_instance.start_controllers_clear_port_ownership(clear_ports_ownership_operation=clear_ports_ownership_operation) + print("The response of AgentsApi->start_controllers_clear_port_ownership:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_set_ntp: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_clear_port_ownership: %s\n" % e) ``` @@ -1442,7 +2244,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **set_ntp_operation_input** | [**SetNtpOperationInput**](SetNtpOperationInput.md)| | [optional] + **clear_ports_ownership_operation** | [**ClearPortsOwnershipOperation**](ClearPortsOwnershipOperation.md)| | [optional] ### Return type @@ -1465,12 +2267,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_agents_update** -> AsyncContext start_agents_update() +# **start_controllers_power_cycle_nodes** +> AsyncContext start_controllers_power_cycle_nodes(nodes_power_cycle_operation=nodes_power_cycle_operation) -Update agents to the recommended version. +Power cycle the compute nodes. ### Example @@ -1480,6 +2282,7 @@ Update agents to the recommended version. ```python import cyperf from cyperf.models.async_context import AsyncContext +from cyperf.models.nodes_power_cycle_operation import NodesPowerCycleOperation from cyperf.rest import ApiException from pprint import pprint @@ -1502,20 +2305,24 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) + nodes_power_cycle_operation = cyperf.NodesPowerCycleOperation() # NodesPowerCycleOperation | (optional) try: - api_response = api_instance.start_agents_update() - print("The response of AgentsApi->start_agents_update:\n") + api_response = api_instance.start_controllers_power_cycle_nodes(nodes_power_cycle_operation=nodes_power_cycle_operation) + print("The response of AgentsApi->start_controllers_power_cycle_nodes:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_agents_update: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_power_cycle_nodes: %s\n" % e) ``` ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **nodes_power_cycle_operation** | [**NodesPowerCycleOperation**](NodesPowerCycleOperation.md)| | [optional] ### Return type @@ -1527,7 +2334,7 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/json ### HTTP response details @@ -1538,12 +2345,12 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_controllers_clear_port_ownership** -> AsyncContext start_controllers_clear_port_ownership(clear_ports_ownership_operation=clear_ports_ownership_operation) +# **start_controllers_reboot_compute_resource** +> AsyncContext start_controllers_reboot_compute_resource(reboot_compute_resources_operation=reboot_compute_resources_operation) -Clear the ownership of the ports. +Reboot compute resources. ### Example @@ -1553,7 +2360,7 @@ Clear the ownership of the ports. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation +from cyperf.models.reboot_compute_resources_operation import RebootComputeResourcesOperation from cyperf.rest import ApiException from pprint import pprint @@ -1576,14 +2383,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - clear_ports_ownership_operation = cyperf.ClearPortsOwnershipOperation() # ClearPortsOwnershipOperation | (optional) + reboot_compute_resources_operation = cyperf.RebootComputeResourcesOperation() # RebootComputeResourcesOperation | (optional) try: - api_response = api_instance.start_controllers_clear_port_ownership(clear_ports_ownership_operation=clear_ports_ownership_operation) - print("The response of AgentsApi->start_controllers_clear_port_ownership:\n") + api_response = api_instance.start_controllers_reboot_compute_resource(reboot_compute_resources_operation=reboot_compute_resources_operation) + print("The response of AgentsApi->start_controllers_reboot_compute_resource:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_controllers_clear_port_ownership: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_reboot_compute_resource: %s\n" % e) ``` @@ -1593,7 +2400,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **clear_ports_ownership_operation** | [**ClearPortsOwnershipOperation**](ClearPortsOwnershipOperation.md)| | [optional] + **reboot_compute_resources_operation** | [**RebootComputeResourcesOperation**](RebootComputeResourcesOperation.md)| | [optional] ### Return type @@ -1616,12 +2423,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_controllers_power_cycle_nodes** -> AsyncContext start_controllers_power_cycle_nodes(nodes_power_cycle_operation=nodes_power_cycle_operation) +# **start_controllers_reboot_port** +> AsyncContext start_controllers_reboot_port(reboot_ports_operation=reboot_ports_operation) -Power cycle the compute nodes. +Reboot ports. ### Example @@ -1631,7 +2438,7 @@ Power cycle the compute nodes. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.nodes_power_cycle_operation import NodesPowerCycleOperation +from cyperf.models.reboot_ports_operation import RebootPortsOperation from cyperf.rest import ApiException from pprint import pprint @@ -1654,14 +2461,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - nodes_power_cycle_operation = cyperf.NodesPowerCycleOperation() # NodesPowerCycleOperation | (optional) + reboot_ports_operation = cyperf.RebootPortsOperation() # RebootPortsOperation | (optional) try: - api_response = api_instance.start_controllers_power_cycle_nodes(nodes_power_cycle_operation=nodes_power_cycle_operation) - print("The response of AgentsApi->start_controllers_power_cycle_nodes:\n") + api_response = api_instance.start_controllers_reboot_port(reboot_ports_operation=reboot_ports_operation) + print("The response of AgentsApi->start_controllers_reboot_port:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_controllers_power_cycle_nodes: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_reboot_port: %s\n" % e) ``` @@ -1671,7 +2478,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **nodes_power_cycle_operation** | [**NodesPowerCycleOperation**](NodesPowerCycleOperation.md)| | [optional] + **reboot_ports_operation** | [**RebootPortsOperation**](RebootPortsOperation.md)| | [optional] ### Return type @@ -1694,12 +2501,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_controllers_reboot_port** -> AsyncContext start_controllers_reboot_port(reboot_ports_operation=reboot_ports_operation) +# **start_controllers_set_app** +> AsyncContext start_controllers_set_app(set_controller_app_operation=set_controller_app_operation) -Reboot ports. +Set the active app of the controllers. ### Example @@ -1709,7 +2516,7 @@ Reboot ports. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.reboot_ports_operation import RebootPortsOperation +from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.rest import ApiException from pprint import pprint @@ -1732,14 +2539,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - reboot_ports_operation = cyperf.RebootPortsOperation() # RebootPortsOperation | (optional) + set_controller_app_operation = cyperf.SetControllerAppOperation() # SetControllerAppOperation | (optional) try: - api_response = api_instance.start_controllers_reboot_port(reboot_ports_operation=reboot_ports_operation) - print("The response of AgentsApi->start_controllers_reboot_port:\n") + api_response = api_instance.start_controllers_set_app(set_controller_app_operation=set_controller_app_operation) + print("The response of AgentsApi->start_controllers_set_app:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_controllers_reboot_port: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_set_app: %s\n" % e) ``` @@ -1749,7 +2556,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **reboot_ports_operation** | [**RebootPortsOperation**](RebootPortsOperation.md)| | [optional] + **set_controller_app_operation** | [**SetControllerAppOperation**](SetControllerAppOperation.md)| | [optional] ### Return type @@ -1772,12 +2579,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_controllers_set_app** -> AsyncContext start_controllers_set_app(set_controller_app_operation=set_controller_app_operation) +# **start_controllers_set_front_panel_port_link_state** +> AsyncContext start_controllers_set_front_panel_port_link_state(set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation) -Set the active app of the controllers. +Set the link state of the front panel ports. ### Example @@ -1787,7 +2594,7 @@ Set the active app of the controllers. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.set_controller_app_operation import SetControllerAppOperation +from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.rest import ApiException from pprint import pprint @@ -1810,14 +2617,14 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - set_controller_app_operation = cyperf.SetControllerAppOperation() # SetControllerAppOperation | (optional) + set_front_panel_ports_link_state_operation = cyperf.SetFrontPanelPortsLinkStateOperation() # SetFrontPanelPortsLinkStateOperation | (optional) try: - api_response = api_instance.start_controllers_set_app(set_controller_app_operation=set_controller_app_operation) - print("The response of AgentsApi->start_controllers_set_app:\n") + api_response = api_instance.start_controllers_set_front_panel_port_link_state(set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation) + print("The response of AgentsApi->start_controllers_set_front_panel_port_link_state:\n") pprint(api_response) except Exception as e: - print("Exception when calling AgentsApi->start_controllers_set_app: %s\n" % e) + print("Exception when calling AgentsApi->start_controllers_set_front_panel_port_link_state: %s\n" % e) ``` @@ -1827,7 +2634,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **set_controller_app_operation** | [**SetControllerAppOperation**](SetControllerAppOperation.md)| | [optional] + **set_front_panel_ports_link_state_operation** | [**SetFrontPanelPortsLinkStateOperation**](SetFrontPanelPortsLinkStateOperation.md)| | [optional] ### Return type @@ -2007,7 +2814,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_controllers_set_port_link_state** -> AsyncContext start_controllers_set_port_link_state(set_link_state_operation=set_link_state_operation) +> AsyncContext start_controllers_set_port_link_state(set_ports_link_state_operation=set_ports_link_state_operation) @@ -2021,7 +2828,7 @@ Set the link state of the ports. ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.set_link_state_operation import SetLinkStateOperation +from cyperf.models.set_ports_link_state_operation import SetPortsLinkStateOperation from cyperf.rest import ApiException from pprint import pprint @@ -2044,10 +2851,10 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.AgentsApi(api_client) - set_link_state_operation = cyperf.SetLinkStateOperation() # SetLinkStateOperation | (optional) + set_ports_link_state_operation = cyperf.SetPortsLinkStateOperation() # SetPortsLinkStateOperation | (optional) try: - api_response = api_instance.start_controllers_set_port_link_state(set_link_state_operation=set_link_state_operation) + api_response = api_instance.start_controllers_set_port_link_state(set_ports_link_state_operation=set_ports_link_state_operation) print("The response of AgentsApi->start_controllers_set_port_link_state:\n") pprint(api_response) except Exception as e: @@ -2061,7 +2868,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **set_link_state_operation** | [**SetLinkStateOperation**](SetLinkStateOperation.md)| | [optional] + **set_ports_link_state_operation** | [**SetPortsLinkStateOperation**](SetPortsLinkStateOperation.md)| | [optional] ### Return type diff --git a/docs/ApplicationProfile.md b/docs/ApplicationProfile.md index 6cde695..c2fac4f 100644 --- a/docs/ApplicationProfile.md +++ b/docs/ApplicationProfile.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/AttackAction.md b/docs/AttackAction.md index cf9e1dd..75b7c94 100644 --- a/docs/AttackAction.md +++ b/docs/AttackAction.md @@ -18,6 +18,7 @@ Name | Type | Description | Notes **port** | **int** | The port of the destination host. | [optional] **protocol_id** | **str** | | [optional] **requires_uniqueness** | **bool** | If true, for applications with the same protocol id, application/attack must have been uniquely identified in previous commands. | [optional] +**supported_http_versions** | [**List[HTTPVersion]**](HTTPVersion.md) | The HTTP versions supported by the action. | [optional] **id** | **str** | | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/AttackProfile.md b/docs/AttackProfile.md index 4d64831..0c42c28 100644 --- a/docs/AttackProfile.md +++ b/docs/AttackProfile.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] diff --git a/docs/ChassisInfo.md b/docs/ChassisInfo.md index 5cc85f3..5655c76 100644 --- a/docs/ChassisInfo.md +++ b/docs/ChassisInfo.md @@ -5,10 +5,12 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**aggregated_mode** | **bool** | Whether the ports of this compute node are aggregated | [optional] [readonly] **checkout_id** | **int** | The id of the compute node used for checkout licenses | [optional] [readonly] **compute_node_id** | **str** | The id of the compute node where the agent is running | [optional] [readonly] -**hw_platform** | **str** | | [optional] -**hw_revision** | **str** | | [optional] +**front_panel_port_id** | **str** | The ID of the Front Panel Port | [optional] [readonly] +**hw_platform** | **str** | The hardware platform the corresponding port is running on | [optional] [readonly] +**hw_revision** | **str** | The hardware revision of the underlying platform | [optional] [readonly] **port_id** | **str** | The id of the corresponding port | [optional] [readonly] ## Example diff --git a/docs/ClearComputeResourcesOwnershipOperation.md b/docs/ClearComputeResourcesOwnershipOperation.md new file mode 100644 index 0000000..8cf0b78 --- /dev/null +++ b/docs/ClearComputeResourcesOwnershipOperation.md @@ -0,0 +1,29 @@ +# ClearComputeResourcesOwnershipOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controllers** | [**List[ComputeResourcesByController]**](ComputeResourcesByController.md) | The controllers that the compute resources are part of. | [optional] + +## Example + +```python +from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of ClearComputeResourcesOwnershipOperation from a JSON string +clear_compute_resources_ownership_operation_instance = ClearComputeResourcesOwnershipOperation.from_json(json) +# print the JSON string representation of the object +print(ClearComputeResourcesOwnershipOperation.to_json()) + +# convert the object into a dict +clear_compute_resources_ownership_operation_dict = clear_compute_resources_ownership_operation_instance.to_dict() +# create an instance of ClearComputeResourcesOwnershipOperation from a dict +clear_compute_resources_ownership_operation_from_dict = ClearComputeResourcesOwnershipOperation.from_dict(clear_compute_resources_ownership_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ClearFrontPanelPortsOwnershipOperation.md b/docs/ClearFrontPanelPortsOwnershipOperation.md new file mode 100644 index 0000000..d49e2c3 --- /dev/null +++ b/docs/ClearFrontPanelPortsOwnershipOperation.md @@ -0,0 +1,29 @@ +# ClearFrontPanelPortsOwnershipOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controllers** | [**List[FrontPanelPortsByController]**](FrontPanelPortsByController.md) | The controllers that the front panel ports are part of. | [optional] + +## Example + +```python +from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of ClearFrontPanelPortsOwnershipOperation from a JSON string +clear_front_panel_ports_ownership_operation_instance = ClearFrontPanelPortsOwnershipOperation.from_json(json) +# print the JSON string representation of the object +print(ClearFrontPanelPortsOwnershipOperation.to_json()) + +# convert the object into a dict +clear_front_panel_ports_ownership_operation_dict = clear_front_panel_ports_ownership_operation_instance.to_dict() +# create an instance of ClearFrontPanelPortsOwnershipOperation from a dict +clear_front_panel_ports_ownership_operation_from_dict = ClearFrontPanelPortsOwnershipOperation.from_dict(clear_front_panel_ports_ownership_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ComputeNode.md b/docs/ComputeNode.md index 2f93893..9a45359 100644 --- a/docs/ComputeNode.md +++ b/docs/ComputeNode.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **aggregated_mode** | **bool** | Whether the ports of the compute node are aggregated or not | [optional] **app_mode** | [**AppMode**](AppMode.md) | | [optional] +**compute_resources** | [**List[ComputeResource]**](ComputeResource.md) | The compute Resources of the compute node | [optional] **health_details** | [**List[HealthIssue]**](HealthIssue.md) | A list with more details regarding the health of the compute node | [optional] **healthy** | **bool** | Whether the compute node has any health issue or not | [optional] **id** | **str** | The unique identifier of the compute node | [optional] @@ -17,6 +18,7 @@ Name | Type | Description | Notes **slot_number** | **int** | The slot number of the compute node | [optional] **status** | **str** | The current status of the compute node: ready or not ready | [optional] **type** | **str** | The type of the compute node | [optional] +**type_display_name** | **str** | The display type name of the compute node | [optional] ## Example diff --git a/docs/ComputeResource.md b/docs/ComputeResource.md new file mode 100644 index 0000000..cafb67a --- /dev/null +++ b/docs/ComputeResource.md @@ -0,0 +1,36 @@ +# ComputeResource + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**disabled** | **bool** | Whether the compute resource is disabled or not | [optional] +**id** | **str** | The compute resource's unique identifier | [optional] +**link** | **str** | The link state of the compute resource: up or down | [optional] +**name** | **str** | A user-friendly display name for the compute resource | [optional] +**reserved_by** | **str** | The owner of the compute resource | [optional] +**speed** | **str** | The compute resource's speed | [optional] +**status** | **str** | The current status of the compute resource: ready or not ready | [optional] +**traffic_status** | **str** | The traffic status of the compute resource | [optional] + +## Example + +```python +from cyperf.models.compute_resource import ComputeResource + +# TODO update the JSON string below +json = "{}" +# create an instance of ComputeResource from a JSON string +compute_resource_instance = ComputeResource.from_json(json) +# print the JSON string representation of the object +print(ComputeResource.to_json()) + +# convert the object into a dict +compute_resource_dict = compute_resource_instance.to_dict() +# create an instance of ComputeResource from a dict +compute_resource_from_dict = ComputeResource.from_dict(compute_resource_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ComputeResourcesByController.md b/docs/ComputeResourcesByController.md new file mode 100644 index 0000000..9c14221 --- /dev/null +++ b/docs/ComputeResourcesByController.md @@ -0,0 +1,30 @@ +# ComputeResourcesByController + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**compute_nodes** | [**List[ComputeResourcesByNode]**](ComputeResourcesByNode.md) | The compute nodes that the compute resources are part of. | [optional] +**controller_id** | **str** | The id of the controller that the compute resources are part of. | [optional] + +## Example + +```python +from cyperf.models.compute_resources_by_controller import ComputeResourcesByController + +# TODO update the JSON string below +json = "{}" +# create an instance of ComputeResourcesByController from a JSON string +compute_resources_by_controller_instance = ComputeResourcesByController.from_json(json) +# print the JSON string representation of the object +print(ComputeResourcesByController.to_json()) + +# convert the object into a dict +compute_resources_by_controller_dict = compute_resources_by_controller_instance.to_dict() +# create an instance of ComputeResourcesByController from a dict +compute_resources_by_controller_from_dict = ComputeResourcesByController.from_dict(compute_resources_by_controller_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ComputeResourcesByNode.md b/docs/ComputeResourcesByNode.md new file mode 100644 index 0000000..429a63f --- /dev/null +++ b/docs/ComputeResourcesByNode.md @@ -0,0 +1,30 @@ +# ComputeResourcesByNode + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**compute_node_id** | **str** | The id of the compute node that the compute resources are part of. | [optional] +**compute_resources** | **List[str]** | The compute resource ids. | [optional] + +## Example + +```python +from cyperf.models.compute_resources_by_node import ComputeResourcesByNode + +# TODO update the JSON string below +json = "{}" +# create an instance of ComputeResourcesByNode from a JSON string +compute_resources_by_node_instance = ComputeResourcesByNode.from_json(json) +# print the JSON string representation of the object +print(ComputeResourcesByNode.to_json()) + +# convert the object into a dict +compute_resources_by_node_dict = compute_resources_by_node_instance.to_dict() +# create an instance of ComputeResourcesByNode from a dict +compute_resources_by_node_from_dict = ComputeResourcesByNode.from_dict(compute_resources_by_node_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Controller.md b/docs/Controller.md index 07f53cc..ebd86e6 100644 --- a/docs/Controller.md +++ b/docs/Controller.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **compute_nodes** | [**List[ComputeNode]**](ComputeNode.md) | The compute nodes of the controller | [optional] +**front_panels** | [**List[FrontPanel]**](FrontPanel.md) | The front panels of the controller | [optional] **health_details** | [**List[HealthIssue]**](HealthIssue.md) | Details regarding any health issue of the controller | [optional] **healthy** | **bool** | Whether the controller has any health issue or not | [optional] **id** | **str** | The unique identifier of the controller | [optional] @@ -13,6 +14,7 @@ Name | Type | Description | Notes **name** | **str** | A user-friendly display name for the controller | [optional] **serial** | **str** | The serial of the controller | [optional] **type** | **str** | The type of the controller | [optional] +**type_display_name** | **str** | The display type name of the controller | [optional] ## Example diff --git a/docs/DUTNetwork.md b/docs/DUTNetwork.md index d44a65c..94b8c76 100644 --- a/docs/DUTNetwork.md +++ b/docs/DUTNetwork.md @@ -26,6 +26,7 @@ Name | Type | Description | Notes **reverse_proxy_pep_dut** | [**PepDUT**](PepDUT.md) | | [optional] **reverse_proxy_pep_dut_active** | **bool** | A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false) | [optional] **server_dut_active** | **bool** | A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the server DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false) | [optional] +**server_dut_address** | [**Address**](Address.md) | | [optional] **server_dut_host** | **str** | The hostname where the traffic goes if server DUT is active. | [optional] **server_dut_port** | **int** | The listen port for server-side DUT | [optional] **tcp_health_check** | [**HealthCheckConfig**](HealthCheckConfig.md) | The TCP HealthCheck configuration for DUT | [optional] diff --git a/docs/EmulatedRouterRange.md b/docs/EmulatedRouterRange.md index 98757c0..35e5fba 100644 --- a/docs/EmulatedRouterRange.md +++ b/docs/EmulatedRouterRange.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] +**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/EthRange.md b/docs/EthRange.md index 58f4130..c4a2467 100644 --- a/docs/EthRange.md +++ b/docs/EthRange.md @@ -7,6 +7,7 @@ The Ethernet Ranges assigned to the current test configuration Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **count** | **int** | | [optional] +**mac_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **mac_auto** | **bool** | A flag indicating if the MAC address for the EthRange should be determined automatically (default: true). | **mac_incr** | **str** | The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01). | [optional] **mac_start** | **str** | The MAC start address for the EthRange (default: 00:11:01:00:00:01). | [optional] diff --git a/docs/FrontPanel.md b/docs/FrontPanel.md new file mode 100644 index 0000000..5e275fa --- /dev/null +++ b/docs/FrontPanel.md @@ -0,0 +1,36 @@ +# FrontPanel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**fan_out_mode** | **str** | The current fanOut mode of the front panel | [optional] +**health_details** | [**List[HealthIssue]**](HealthIssue.md) | A list with more details regarding the health of the front panel | [optional] +**healthy** | **bool** | Whether the front panel has any health issue or not | [optional] +**id** | **str** | The unique identifier of the front panel | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] +**name** | **str** | A user-friendly display name for the front panel | [optional] +**ports** | [**List[Port]**](Port.md) | The front panel ports of the front panel | [optional] +**status** | **str** | The current status of the front panel: ready or not ready | [optional] + +## Example + +```python +from cyperf.models.front_panel import FrontPanel + +# TODO update the JSON string below +json = "{}" +# create an instance of FrontPanel from a JSON string +front_panel_instance = FrontPanel.from_json(json) +# print the JSON string representation of the object +print(FrontPanel.to_json()) + +# convert the object into a dict +front_panel_dict = front_panel_instance.to_dict() +# create an instance of FrontPanel from a dict +front_panel_from_dict = FrontPanel.from_dict(front_panel_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/FrontPanelPortsByController.md b/docs/FrontPanelPortsByController.md new file mode 100644 index 0000000..6239924 --- /dev/null +++ b/docs/FrontPanelPortsByController.md @@ -0,0 +1,30 @@ +# FrontPanelPortsByController + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controller_id** | **str** | The id of the controller that the front panel ports are part of. | [optional] +**front_panels** | [**List[PortsByPanel]**](PortsByPanel.md) | The front panels that the ports are part of. | [optional] + +## Example + +```python +from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController + +# TODO update the JSON string below +json = "{}" +# create an instance of FrontPanelPortsByController from a JSON string +front_panel_ports_by_controller_instance = FrontPanelPortsByController.from_json(json) +# print the JSON string representation of the object +print(FrontPanelPortsByController.to_json()) + +# convert the object into a dict +front_panel_ports_by_controller_dict = front_panel_ports_by_controller_instance.to_dict() +# create an instance of FrontPanelPortsByController from a dict +front_panel_ports_by_controller_from_dict = FrontPanelPortsByController.from_dict(front_panel_ports_by_controller_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/IPRange.md b/docs/IPRange.md index 22b27ee..1ef5e34 100644 --- a/docs/IPRange.md +++ b/docs/IPRange.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] +**ip_address** | [**SequenceValue**](SequenceValue.md) | | [optional] **ip_auto** | **bool** | A flag indicating if IP settings for the IPRange should be determined automatically (default: true). | **ip_incr** | **str** | The IP incrementation rule (default: 0.0.0.1). | [optional] **ip_range_name** | **str** | | diff --git a/docs/LocalSubnetConfig.md b/docs/LocalSubnetConfig.md index 52dc57e..2132b36 100644 --- a/docs/LocalSubnetConfig.md +++ b/docs/LocalSubnetConfig.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **prefix** | **int** | The network mask of the IP Range (default: 16). | **start** | **str** | The start IP for the IPRange (default: 10.0.0.10). | **total_host_count** | **str** | | +**wildcard_initiator_traffic** | **bool** | | **network_tags** | **List[str]** | A list of tags. | ## Example diff --git a/docs/Metadata.md b/docs/Metadata.md index fbe520a..eb74216 100644 --- a/docs/Metadata.md +++ b/docs/Metadata.md @@ -21,6 +21,7 @@ Name | Type | Description | Notes **sort_severity** | **str** | The field by which the severity is sorted | [optional] **static** | **bool** | If true, the application/strike is managed directly by the controller | [optional] **supported_apps** | **List[str]** | The apps that this strike can be used with | [optional] +**supported_http_versions** | **List[str]** | The HTTP versions supported by the application | [optional] **supports_http2** | **bool** | Indicates if the application supports HTTP2 multi-stream | [optional] **year** | **str** | The year of the strike | [optional] diff --git a/docs/PANGPEncapsulation.md b/docs/PANGPEncapsulation.md index 5c6a530..54e807c 100644 --- a/docs/PANGPEncapsulation.md +++ b/docs/PANGPEncapsulation.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **esp_over_udp_enabled** | **bool** | | **esp_over_udp_settings** | [**ESPOverUDPSettings**](ESPOverUDPSettings.md) | | [optional] +**enable_ikev2** | **bool** | | **encapsulation_mode** | **str** | The encapsulation mode for inner traffic. | **udp_port** | **int** | | **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/PortsByPanel.md b/docs/PortsByPanel.md new file mode 100644 index 0000000..d68b554 --- /dev/null +++ b/docs/PortsByPanel.md @@ -0,0 +1,30 @@ +# PortsByPanel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**front_panel_id** | **str** | The id of the front panel that the ports are part of. | [optional] +**ports** | **List[str]** | The port ids. | [optional] + +## Example + +```python +from cyperf.models.ports_by_panel import PortsByPanel + +# TODO update the JSON string below +json = "{}" +# create an instance of PortsByPanel from a JSON string +ports_by_panel_instance = PortsByPanel.from_json(json) +# print the JSON string representation of the object +print(PortsByPanel.to_json()) + +# convert the object into a dict +ports_by_panel_dict = ports_by_panel_instance.to_dict() +# create an instance of PortsByPanel from a dict +ports_by_panel_from_dict = PortsByPanel.from_dict(ports_by_panel_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RebootComputeResourcesOperation.md b/docs/RebootComputeResourcesOperation.md new file mode 100644 index 0000000..1ece768 --- /dev/null +++ b/docs/RebootComputeResourcesOperation.md @@ -0,0 +1,29 @@ +# RebootComputeResourcesOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controllers** | [**List[ComputeResourcesByController]**](ComputeResourcesByController.md) | The controllers that the compute resources are part of. | [optional] + +## Example + +```python +from cyperf.models.reboot_compute_resources_operation import RebootComputeResourcesOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of RebootComputeResourcesOperation from a JSON string +reboot_compute_resources_operation_instance = RebootComputeResourcesOperation.from_json(json) +# print the JSON string representation of the object +print(RebootComputeResourcesOperation.to_json()) + +# convert the object into a dict +reboot_compute_resources_operation_dict = reboot_compute_resources_operation_instance.to_dict() +# create an instance of RebootComputeResourcesOperation from a dict +reboot_compute_resources_operation_from_dict = RebootComputeResourcesOperation.from_dict(reboot_compute_resources_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/RemoteSubnetConfig.md b/docs/RemoteSubnetConfig.md index d21f07b..85b1aaa 100644 --- a/docs/RemoteSubnetConfig.md +++ b/docs/RemoteSubnetConfig.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **prefix** | **int** | The length (in bits) of the subnet mask to be applied to all the addresses created in the range. | **single_remote_subnet** | **bool** | | **start** | **str** | The base address for enumerating all the local subnets in the range | +**wildcard_responder_traffic** | **bool** | | ## Example diff --git a/docs/SetFrontPanelPortsLinkStateOperation.md b/docs/SetFrontPanelPortsLinkStateOperation.md new file mode 100644 index 0000000..add8ff7 --- /dev/null +++ b/docs/SetFrontPanelPortsLinkStateOperation.md @@ -0,0 +1,30 @@ +# SetFrontPanelPortsLinkStateOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controllers** | [**List[FrontPanelPortsByController]**](FrontPanelPortsByController.md) | The controllers that the front panel ports are part of. | [optional] +**link** | **str** | The desired link state. | [optional] + +## Example + +```python +from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of SetFrontPanelPortsLinkStateOperation from a JSON string +set_front_panel_ports_link_state_operation_instance = SetFrontPanelPortsLinkStateOperation.from_json(json) +# print the JSON string representation of the object +print(SetFrontPanelPortsLinkStateOperation.to_json()) + +# convert the object into a dict +set_front_panel_ports_link_state_operation_dict = set_front_panel_ports_link_state_operation_instance.to_dict() +# create an instance of SetFrontPanelPortsLinkStateOperation from a dict +set_front_panel_ports_link_state_operation_from_dict = SetFrontPanelPortsLinkStateOperation.from_dict(set_front_panel_ports_link_state_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SetLinkStateOperation.md b/docs/SetPortsLinkStateOperation.md similarity index 51% rename from docs/SetLinkStateOperation.md rename to docs/SetPortsLinkStateOperation.md index 0a001b1..6354fc5 100644 --- a/docs/SetLinkStateOperation.md +++ b/docs/SetPortsLinkStateOperation.md @@ -1,4 +1,4 @@ -# SetLinkStateOperation +# SetPortsLinkStateOperation ## Properties @@ -11,19 +11,19 @@ Name | Type | Description | Notes ## Example ```python -from cyperf.models.set_link_state_operation import SetLinkStateOperation +from cyperf.models.set_ports_link_state_operation import SetPortsLinkStateOperation # TODO update the JSON string below json = "{}" -# create an instance of SetLinkStateOperation from a JSON string -set_link_state_operation_instance = SetLinkStateOperation.from_json(json) +# create an instance of SetPortsLinkStateOperation from a JSON string +set_ports_link_state_operation_instance = SetPortsLinkStateOperation.from_json(json) # print the JSON string representation of the object -print(SetLinkStateOperation.to_json()) +print(SetPortsLinkStateOperation.to_json()) # convert the object into a dict -set_link_state_operation_dict = set_link_state_operation_instance.to_dict() -# create an instance of SetLinkStateOperation from a dict -set_link_state_operation_from_dict = SetLinkStateOperation.from_dict(set_link_state_operation_dict) +set_ports_link_state_operation_dict = set_ports_link_state_operation_instance.to_dict() +# create an instance of SetPortsLinkStateOperation from a dict +set_ports_link_state_operation_from_dict = SetPortsLinkStateOperation.from_dict(set_ports_link_state_operation_dict) ``` [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/StreamProfile.md b/docs/StreamProfile.md index 189344f..0281ab9 100644 --- a/docs/StreamProfile.md +++ b/docs/StreamProfile.md @@ -11,6 +11,7 @@ Name | Type | Description | Notes **total_estimated_throughput** | **str** | | [optional] **total_estimated_throughput_per_simulated_user** | **str** | | [optional] **unique_pool_size** | **int** | | [optional] +**unrestricted_packet_rate** | **bool** | | [optional] ## Example diff --git a/docs/TrafficProfileBase.md b/docs/TrafficProfileBase.md index 31f48b9..a8e538a 100644 --- a/docs/TrafficProfileBase.md +++ b/docs/TrafficProfileBase.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **active** | **bool** | Indicates whether the profile is enabled or not. | [optional] +**playlist_sequencing_method** | [**PlaylistSequencingMethod**](PlaylistSequencingMethod.md) | | [optional] **traffic_settings** | [**TrafficSettings**](TrafficSettings.md) | | [optional] **use_all_source_ips_per_user** | **bool** | Indicates whether one or all source IPs are used for each simulated user. | [optional] **id** | **str** | | [optional] From b9302de789b3022c5658b8ae2dd5b5d1cc366dd8 Mon Sep 17 00:00:00 2001 From: Marian-Madalin Stanciu Date: Tue, 14 Jul 2026 07:47:36 -0600 Subject: [PATCH 13/26] Pull request #77: ISGAPPSEC2-38156 sample script for appbuilder Merge in ISGAPPSEC/cyperf-api-wrapper from add_sample_script_for_appbuilder to main Squashed commit of the following: commit 24415d238aeca8372d72f3f021c4059860a10f6f Author: Marian-Madalin Stanciu Date: Tue Jul 14 13:36:03 2026 +0300 update comment commit fe330a4a607a64ccf6075fb9f63f03c434adc092 Author: Marian-Madalin Stanciu Date: Tue Jul 7 17:28:59 2026 +0300 sample script for appbuilder --- samples/appbuilder/claude.pcap | Bin 0 -> 9308 bytes .../appbuilder/sample_appbuilder_examples.py | 163 ++++++++++++++++++ samples/appbuilder/tls_key.log | 5 + 3 files changed, 168 insertions(+) create mode 100644 samples/appbuilder/claude.pcap create mode 100644 samples/appbuilder/sample_appbuilder_examples.py create mode 100644 samples/appbuilder/tls_key.log diff --git a/samples/appbuilder/claude.pcap b/samples/appbuilder/claude.pcap new file mode 100644 index 0000000000000000000000000000000000000000..e4b0f42a4110564a1c57909b5968fa5b12b9906e GIT binary patch literal 9308 zcmb_?1yEc|yX_trV36SM8r%s4f@^RBK>`6na0u@14go@fyA#~qU4y#@cY+h_4JY@% z_dn;|XH{=keO*m^C$mQ{+}3s zkp84kSb_f^v9h69l2GU;`@`T*?GQi$0A2!sFdz&M08j0CVs-%mHI@=ukY_Ke>X0{})_up~!^Z_{d66-2U(kIt8GpxUe7)0tf)X!oqG# z@c~FkARx>068H#953Dj{0K_9C0J%5=AHW+%0HF921FqxLfO|Xx5KGDp z>gK>#BF z3j^(2W&j2R0yqIF=qTX@j|co9+{9_|vg` zd&iWCa9MK{ei4IEUvbd7?|kPtnY=Dh(AyNNkBI)%yKdxQAPqX!Pxi+L{%g$OqyO}7 z#l}CzjIfNr58vIQYj|JZE`%oQ~qUotmCr|)v;#* z@5nQk9n**U108E%-#F8iTH7H;$zdpd>RR~KKzc5b$gW0o#-(144dn*{;XzZP(isdM znK(7Xo6p%|AQIKjGRijL>juuZr_dA8O$$YpL@%lO1?`y zVcs>3ycCiE6N>eu%Zd2FcOWB*yD?+LBMr9kP_XS-dyO-iXMeum$?)jKGqBKRbYGTj zcKP&r1N+PyiI3+*Rtp!cC#Z*vE^h3+`W9_eppNBSZCH6#R|!MwL$lm_!_3hGTBLf6 z6($r>)8mjzl@Nt>MyecTn>Bm5w{JYe&(aD{zrV&tsuJ3KAHr3Nk zypqbdRFiwARF}mISc5diispHS=0c&w<9zjoq^~ud#dyta#;;=9H|yDP^~$VU32 zH(IZS<$S$;&(V>BmOb^=R9b^M>T;jt2_cnGyo}gqI^AX}1{n#q2Sb$#&9=5SuyUu6VE-;Z+iARjj&D;}L3bHpjvHGVa0B6NYsdVoAo6{9AclQxEAfWl0MxegQA! z>?}u#5#{#Q%X^U_s?U13=)#dn6PWBsg+w^?2#qvS@4bwOx(Xh=ixo#1hRsYMWpUEE4HXM)K zwI^{M>2!G;BZH_aubV!YbDoAH*{s{ql+gYB5P{1gg+mTl`d6)>TE6d83au6~b%3i8 z%D$XvSI2}cEqbUFBnbh-c$#LdyXqZBk)>WX??(bs->wS#oMWNi9Y{U-zE5FU*wTf3UB{js)L z*WpZHUAoM!B*Js0I~^VUbrH0&IzB z40e@Gzb_4HOz{b#aD^T)WsI}$v9T(ILH8N2W z6zIIj+&l4}X-wa|c-G4P?F@zsE{R3w;Myzvt(HL*vd_`eWGkV`>p45kfST1JsG^!1 z$2*!#a?;!A#@+?)$P_1DI#u$Y4pH4(#-x_{kaFaWiBhPhw!}zZV032-I=cPJb5z1GWHk$@;J5Kw=DedL1~hfUPsq zBdcw%R)mYxFx1S1l6qx|xNDv$oJRO&b9;-jinljM;wWx?@B{HunZnxW3x|~&L06)X z%{5ygw7Vxy&<=KV#oQG(X7f-~O~+c0mW_$-j1Ibxk5@_bGMuORokUvfOqz~!-W|od z?yRp6r$<>SseWWfb-xtV(x)*`&?8nGJc}{vE_ESP5Rgp4S`is&hM(WDkLEvyeV&%2 zhLj*6O5k&cx=H?do%Q1{V=4Uduqj#opYPIB41O4A?GVBHaK29^Djk2=N(9yC} z7SqWrXU2aVX^55twXHMurSyEEpma$rP8(x>Yb(6}i6a)WC@IMdwXFMhvA2-3yRU`= zzwVD4r)#wFa~kvnqvs-O>qzMM4PBSZt^7l7l*!KCcm&h3#jF`TW+JlnJ6{!$%+ zpDCeN3*uq}h2(NQ$0IxeM-`_OkXDo&M;Oo5v5+yHEMh8txO;SI2>wb@*rhH0;>ia* z8NdJn1o+GTDOnJ1{`f$-``;zYwNn{^fBlmW2=o0*vM34w@&mTeF+*ru8u|I~X?FgB z*@7Ep^6V>fz^qJie^v>^Dl=*gY zr{eqa4{LDixoUjjrK(G*C70VCW-l1xU0^$|{Jcs%X|5eivicgPL@>i~q|p(uD(>LB zh6-X$bgLg*s;P1);zm^XS-9bDLI=mgA^)AvZ}2A*Gf^nsJr zF1C~PGUADPPHs{h!a_glgV38YmX^|*({MiWaGfUVpl`3%E0DUE?}0jb${*p$b(eo6 zdiK~Zv4@mDZ&4fKzOw?jreV`3`aI)k_xRKn}xJ0lv8U^Ry{P0%2nJQhhKzLvGaB)@}=ar zj6oj_j4sCg@56Z)(a8=QJE@E}?_&E@2rwoQgt@sYhw6q7l2J5#rO8N&)d&>gn7@Yo zu2$!D$!W2P@uVU&z(@csG~QVXW2XAFR%lR=+qUpmUkf%M_WDtLeh5?Uc@e5-VEEl& zfV~?0?ttBC@}SP)`DQiTZEHG>!8VA!7wP#a)5SY&bJdC7jxmds{Y)x4_*y-nKW&G5 zsIeO72BGb^59?>#P2NY`!Rz>VF6Cs#xFcSz*-4}KWC##C&mVYK-j=~c+E(ldFe_tm zJ4ntt`O*(RG#aLB?fEi?kO-Oa4^EK!>8Glau4?YFjQ8tek$x4vMDTF;GP05W7#l%d zAE?WVu+I>97L`CjeW^+3rKhGkYe>(k@ygRW`x5~m(i4w0`~9M8V%Q}b#r>Cy0%&zw#FHo zJN=4!9)XWUDtIV2GY%R%4>XI{OTtoqyD<7QQN5d>J{IB>)Uy(d-Up?})`5M6g z74^5u)lxwMV}b&p-(OL8>Ff5UKT4U-+{4^2;ddv#wkHu&KUE;0+U+mf7mH@F*3KnT z{^)kl&Z;AjwUuy9j?hTa3Adu)xS-I=;Y>dISu^9Ip6p?J*dc~@vut^hVBmVg%+FU! z(w3&rV9R(+0-h4zqHIfy#1oe~uc_nv=00#MpAdWe+B%c_;53;pYe7s>jGRZnKI5LC z_A@c~rJUbmKf;#!K;i zn8w}p6Z~Z_smuimC;5ttpgeYq{CcPH+^K6r;}{o8v*0MF3pTnSJvby@aBtlZZ4UC$-W+~5cvr)fx1 zThm81JbuOY`f~D{5!hfRiUEdZ^su0H-#XB(G(+qKNUao4K6|%T3(@IyaZG7@e~+|i zon4gNNOke2ss;LKG0YTsMnJT}C7X@hPti(}t6vH!R()E7zeJ~pnuVy_v|*%8!R6a~ z4`XYBcNV(+RCXgGdZi`3_!qfEpC%g8JX82L4}!eBkmEnSrZsu8@RAESze8@V8-3k_^C-qjJvhU$7z`?WBdCV>f7Z)x$gfr&L1X`Ks{X%piw zE04U-G1uGGcCr#eP2m^36H9Zg4X-E9uk2_IMTXO^s!pi=n2o6yeAv7W4Oe{jr^G(H zU7$MCZ2skBjVFy=GW+w)pjApcw#p+|MjxN+Ks*tky&lbBgyadJZ^C}${) z%~hOrA4m9%tdRR8neaNN>a5>BguZ6!swp9ebPu&Bem`ew*jx6U535uPs&G6ZM24O# zuKH5n8zKCM6omdqna+rXE?sOw04|TBYy7pf@%_*>o{v^A+3L`@@+)r(&Sc&fBwm;& zZ(LtHnDx&!A$f+?sh5QVD3C;O)~1i1ctY3N^19S`t(qyPIp(I_LJswnV;_y|Qb zf^G>u**_7%8vk3wzwJDYdORUQg$9_cAH+JlVuV?Ga1?5H6`Uw@RP2vweuWm@WG`&^ zV&PlMuOdXZEbSy07>r+c>KEy94TQv??#&%f_$E+Mgm+`wHszz~VMin{a$K7NB%0k! zF10?bE%CJHqGP3|eW+Xa^g9+PrKN1fah-!f-s~l0r7}+V7+7EFE{<~b+M{IrAUY=2 zbUVCJ%W1XzTyaQ0A?f8i;*js@Iyvg$6wbe)oMaRI=0QB{nqwxxPnQ#NT7WzxPZJ?tATa1gINd}3o z&2#N}6f31ZSmf}ftv*WZ@CU__Ub;(<5_GgYYA2L)n^6Z@G8s-!wq-^IRv%B54n6ZX zCQ|R1K>n8)`KD?Z0%HlKx8#7&T%XMMFZ?I<_CG%}im3OeVk#zrtz@nqL?*QJJ5*2A z!O0`B*r45w=2SW#iJ&UQ+&bIuhr95cMx-_)BB#^xA_JEpIbOtvYHR!AO8yTK@qD`q zA3a9|9;k0Pow1tEN@c-mQvMDqE>1B!h*zQ0aSc8koW90Q1LtHRytRi32e0yUh4ivi z<7riGnGSR}hg!NEri$;QBIG{MXnV`WI#!=V8SI(4P1M(_MYSThkFiF)vLA3_$8(F6 zDpJol)xQhvA2uPKExYRe6o1;x+y0U9cIjO1wi{A`@H}0CCBWs@P=U2JGv4UtR4CB* z%683Y$)HIhaVHj)x--7qv%WscZ!voQ-Y{Hs>lz<|FG~_1YwbK-+(9fs95^C|MQfR- z_yNP4=};uE(tlD%?rlu?%I_b@cK$!ZV^=2y(D-MZ% zzs)9*vxe;H3u3I29PDg=H5i!LPE9;cakA9LzI&P62`53JL#Qg&J0BRO%ZsApPu6QS z+cw9qh3OnD*rt@7_zdi!Gqj&3;=BphX-i`~HsVx-KjiV3^s42* zbx|Ox%3Cr_f5p^fNAIWCLBidTCBuNs?_F#&NYAllTAYGw7+OT4fqWy$XdeQGtMNC4v?TOf#rAAEOTv*7XH(LJXR_Kp7hssUmNYB7YT-=GY%|adx(LrnxDPK>k(Yn*6 zH=9X}SSF$+E~0-vFGb!Nld3xZa|R)g9iPeXi`IP0<7%WShhSTyqhpv3l8236DNWz5 z*iSq7F*<^Z4K&48y~16Zi)OLdz+gYzv|p>qm}R+PKbp_!YelYm1*l})$Fc0NuQCUI z(Ucx!qPV=4On6Hak%aT54tJ|(&4bHSSx1g-T#P#dsLKB_CmJ*4aQVveY1Y|c1OwR6 zbA%`RXLy4I-K7QbE+HOWsb<~MgyoPT27jzZ$CldOPDZvw z`l5PKt`Ju#&>dg9wJNH88CYDw5~4$d6BIwR%poL|vht?r%|s@sDNM)3-L1gEllhuQ zUx}}djxX2I?UINmnF!J-%EzF9<)NZo-k7DuSBcvv9Tdd65s*SyToDl3Vp!1biyR@~ z@n}p+6>?AiW~at=etx#kQq!?D##wc?}!rtMP1A zcD3A5%C4d|V4!t}L{v5gD{YI&B$4d&<>QAeKlLf&B=IK5l@;Tb1SPr{OWAMJsi_c+v zD)^(ktYmd=b1MX$->nBEc^bVM($=WQIxP;=%v!WpFwmNPA7DYdDcF`aJ}`b;JLoG1 zAtCwRhKEK3JKL%k@pS7|3x={YgV_sJtFzy!3p0N|n)qxJatcVO-5d=P3BL+5y_@T} z9$GNelY52(yKhw-H5Bn8W3JKdaEWV!TTPNyIBEG{M7^CaM5ZHPr!#bh(mkXCmQY)! zXhxZ6VmB+DR|5TgLMt|2!H`{RGq#g5!B*k3IbOk?*wy`h>&{d+f`mMq?uE75&*ce} zT|a~^F@!S6>=A84?n%#<6)XqGzvRJPK58lF-v7R6AipfF`r@7M2m2#&6pydA)I$5h zgqoaFdU)0XE<@Q>Qr|t-!Rye;7Z*=F!!MNJjc}7e3b>|!4k$8A4r1&aU$WZk9%~*x z0nrs`p$B<7j9umKS0?XuSsgqt8He4UV3emY3P=^VBe)ME)50bsc(B6H@Eg#ZYpO;U zKslJtGKtvy2@F;_OpQ}w5uViOC5~bU`)8}C$g5P#%!+=so^bajZr=pot30gP&mYvJO&r(vzo(RoBzw}UiB1uYPcc}As=q&P+Do1O zC^x~0CZ;c2pw3&9q(9gfHed^;#5l;%ZNH`kGhJC5m9|yENp2Yg`gFfC=93X)%Vbj3 z6%^rYSyJTPB3p-dx-Pevb-;61O@biZPKA;6)iDyBIw86=SIJWiatlsZmSbkO4tLo- zdl8o7#ZXanXvEYqYSlp4e0``W+rr&Nh@v5lI?qI}QO0H|VEguGXtR3Q6(Ol~h7RwU z@XnnDu14{V=!E*`W>#u&sBa>TEPG>lM`C}dCvP`aM1Z2dbZb})3X#t;*b6Q}Y~f45 z?GGXF#2%0tP{^rgS-H?y>+CCl-0$-%^O9^?Dmx^&u=q`v%z2AA_-gall6~o+Jf`VU zAGyEMA~Sgsag%YEpOulvV}vHP3(P9~>%!8+r3n`|d>H7dF8?GR#+=D_b*!Zn?wgN^ zDVoB#7NDCKNM{x;Alht4HKSe)2?C~>q|WNpbDWD&?Sc`>G9{KO=K(nK+cEi_@GnZg z`W2$ZVmUEFUdM6@4OHIseYsIU#SlEo6>~N>d90BYJSgsoS|*g12>vQ-5Lx+3qA2nv zPx{EO1>Tis`jME)bEUzlbzYo?mFo5G9^p&TIIg&aIC#cnK`OL$2ix`-#41C|b_`?} z49C+3PdJwI7_M{Qboi!Ko6bzJ0JhZilqx6lmECysA%ymY4sM+;>2amnxM$ybd)wI^ zo|#z~lt#}Yitv~!eg0C!UlGlA;d0&hCA|H|il{;dV^8o=(l~=&c*b?%?H#T2YLk5B zK|La76YtFlgLU@mNPBq5qWN1Z9~Pvt3Nq>pOc3r>3w8y6P{{qz(V;_LF2`?gcqVcG zVs#qP)Kx`$k9q$vfFcQHsa}01!2>z^tvDUC1TOj5Nu;9?HjGMSW{-5Uk&4Qr+Sh6+ z2S2>y*KZh6m(VyQPrF`hs)nt;-IMt^(k)ve&IbgJQqYZ)PEPVaZv`TK4o~=a-8z*{pwF!dJ zPf-!lM_)2qN7O~s0E%HGs~4pFycSuc=5f`I%ZFv-_ZSE~jIc^8Yt`3=gG7MKy9?IO zgBX&SnqDVf3|=G4Ay=BHpYU5Q+#7raW)Yn{ipf-}@|*2LIe&%^L+bqd1%)VBod}6= z_mxm)m$}*xl(PWH5zg7t1x#+k4R?ll8lxdF$fo$e>USoB~#063H z9_zvly--A#{$=}tgz&hM;bGs@f@)y5X<72+n2;BV2nyD(-p^R!HQShJhv)h3hyl)@ z`VCl&K3UK(@luKmrJSo(9?q%v6=y_kuF<(`V9t`%wSE?&ptY5jK|mq3{l;$*8oe_K z?}ldr;~E&aq^W}Hk8e8JmyEJ)>a#~2w)DeBy+u@AzETq5oEw>`OO#=7{R>)dVdS@Y zcL@VUgHhv6X)O9y+;!r{iNHJl_cyK>Op!@Vmf=_%*M-R=4Tqqa}MVJGhRp8)s zxF4r(-6)qFAO6OHX}C!{(~nDLnR@NMnftsWX?aMg0*ZjqRIf1B*XehlUG+=tSK6fB5dcxA0z3-|U&44e2_3 z;?=q9{Wav&aw;#pb1N=g!Qq>*Qy(%w)wEq!S-nbPv3&3mcNWnrdE0x~=1GmJL2LSdjjDq${;CP%-=pdYqNkdk5SRas z`1e~P{}HFxi~L>RBB4U{?S(fKQ6KYP`t~jK#=!*k6XMUmBSP=j{L#&S-8=bTME=2- kP>yJSkNhW@|HX0h?}-0*9MPa0FP{+gk^hrp@e{}Y0idO7;{X5v literal 0 HcmV?d00001 diff --git a/samples/appbuilder/sample_appbuilder_examples.py b/samples/appbuilder/sample_appbuilder_examples.py new file mode 100644 index 0000000..42c1bfd --- /dev/null +++ b/samples/appbuilder/sample_appbuilder_examples.py @@ -0,0 +1,163 @@ +import cyperf, random, string +from cyperf import CreateAppOperation, ParameterMeta, ParameterMatch, RegexMatch, ActionInput, CaptureInput, \ + AppFlowInput +from cyperf.utils import parse_cli_options + + +def _create_api_client_from_cli(): + args, offline_token = parse_cli_options() + + configuration = cyperf.Configuration( + host=f"https://{args.controller}", + refresh_token=offline_token, + username=args.user, + password=args.password, + ) + configuration.verify_ssl = False + api_client = cyperf.ApiClient(configuration) + + return api_client + +def random_string(length=8): + letters = string.ascii_lowercase + return ''.join(random.choice(letters) for i in range(length)) + +def get_capture_id(capture_upload_result): + return capture_upload_result['resourceURL'].split('/')[-1] + +def app_params(param_name: str, patterns: list[str], match_location: list[str]): + regex_match = RegexMatch( + Patterns=patterns + ) + param_match = ParameterMatch( + MatchLocation=match_location, # URL, REQ_HEADERS, RES_HEADERS, REQ_BODY, RES_BODY + MatchType="REGEX", + RegexMatch=regex_match + ) + param_anthropic_version = ParameterMeta( + Name=param_name, + Matches=[param_match] + ) + return [param_anthropic_version] + +def action_get_models(capture_id): + get_models_flow = AppFlowInput( + AppFlowId="2", + Exchanges=["1"] + ) + get_models_content = CaptureInput( + CaptureId=capture_id, + Flows=[get_models_flow] + ) + return ActionInput( + Name="Get Models", + Captures=[get_models_content], + Parameters=app_params("Claude Model", ["claude-opus-4-6|claude-sonnet-5"], ["REQ_BODY", "RES_BODY"]) + ) + +def action_ask_claude(capture_id): + get_models_flow = AppFlowInput( + AppFlowId="2", + Exchanges=["2"] + ) + get_models_content = CaptureInput( + CaptureId=capture_id, + Flows=[get_models_flow] + ) + return ActionInput( + Name="Ask Claude", + Captures=[get_models_content], + Parameters=app_params("Claude Model", ["claude-opus-4-6|claude-sonnet-5"], ["REQ_BODY", "RES_BODY"]) + ) + +def actions(capture_id): + return [action_get_models(capture_id), action_ask_claude(capture_id)] + +def new_action(action_name: str, capture_id: str, flow_id: str, exchanges: list[str]): + return ActionInput( + Name=action_name, + Captures=[CaptureInput( + CaptureId=capture_id, + Flows=[AppFlowInput( + AppFlowId=flow_id, + Exchanges=exchanges + )] + )] + ) + +def one_action_per_exchange(client, capture_id): + flows = client.get_capture_flows(capture_id=capture_id) + actions = [] + for flow in flows: + exchanges = client.get_flow_exchanges(capture_id=capture_id, flow_id=flow.id) + for exchange in exchanges: + actions.append(new_action(exchange.name, capture_id, flow.id, [exchange.id])) + + return actions + +def one_action_all_exchanges(client, action_name, capture_id): + flows = client.get_capture_flows(capture_id=capture_id) + actions = [] + for flow in flows: + actions.append(new_action(action_name, capture_id, flow.id, ["all"])) + + return actions + + +def create_claude_app(client): + new_claude_app = CreateAppOperation( + AppName=f"Anthropic Claude ({random_string(8)})", + Description="This is a dummy implementation of Anthropic Claude Application", + Actions=actions(capture_id), + Parameters=app_params("Anthropic Version", ["Anthropic-Version.*"], ["REQ_HEADERS"]) + ) + + create_app_op = client.start_resources_create_app(new_claude_app) + create_app_op.await_completion() + +def create_app_with_one_action_for_each_exch(client, capture_id): + new_action_per_exch_app = CreateAppOperation( + AppName=f"Generic app ({random_string(8)})", + Description="This is a sample application generated from a capture, there is one action for each exchange in the original capture", + Actions=one_action_per_exchange(client, capture_id), + ) + + create_app_op = client.start_resources_create_app(new_action_per_exch_app) + create_app_op.await_completion() + +def create_app_with_one_action_all_exchanges(client, capture_id): + new_action_per_exch_app = CreateAppOperation( + AppName=f"Generic app ({random_string(8)})", + Description="This is a sample application generated from a capture, there is one action for each exchange in the original capture", + Actions=one_action_all_exchanges(client, "Generic Action", capture_id), + ) + + create_app_op = client.start_resources_create_app(new_action_per_exch_app) + create_app_op.await_completion() + + +if __name__ == "__main__": + import urllib3 + + urllib3.disable_warnings() + + api_client = _create_api_client_from_cli() + + with api_client: + resource_api = cyperf.ApplicationResourcesApi(api_client) + upload_op = resource_api.start_resources_captures_encrypted_upload_file(file="claude.pcap", ssl_key_log_file="tls_key.log") + + #use this method instead if the capture is not encrypted or you do not have the decryption keys(TCP flows will be parsed instead) + #upload_op = resource_api.start_resources_captures_upload_file(file="claude.pcap") + + capture_upload_result = upload_op.await_completion() + capture_id = get_capture_id(capture_upload_result) + + # creates one application, starting from the uploaded capture, creates a single action with all the exchanges from all the flows + create_app_with_one_action_all_exchanges(resource_api, capture_id) + + # creates one application, starting from the uploaded capture, creates a single action for each exchange in each flow + create_app_with_one_action_for_each_exch(resource_api, capture_id) + + # creates one application with some specific logic(choose specific exchanges from specific flows) and add parameters to the application + create_claude_app(resource_api) diff --git a/samples/appbuilder/tls_key.log b/samples/appbuilder/tls_key.log new file mode 100644 index 0000000..12d7323 --- /dev/null +++ b/samples/appbuilder/tls_key.log @@ -0,0 +1,5 @@ +SERVER_HANDSHAKE_TRAFFIC_SECRET e7473a000a0a200073602900bd923e004b37380062032900e02d11001cce1d00 43aabac76ed9db15178c5b9c2f33bcccf1fefc11915d76e32fbfb4cb0b11b4f5cd4e28e57d24cf40c209d9d7640d5db6 +EXPORTER_SECRET e7473a000a0a200073602900bd923e004b37380062032900e02d11001cce1d00 6a2a60c3d0ff18a0bbef088d4173bb33b134437446434f6d168f55eddb63607065a96468a5a796186e2cf80b02e342ad +SERVER_TRAFFIC_SECRET_0 e7473a000a0a200073602900bd923e004b37380062032900e02d11001cce1d00 fa0a3629a6e1dfa3551cb2a0e09e1922192d319011065d1f726bc9f185a3247e8d65f82028bff02557f3be65a6e4ac64 +CLIENT_HANDSHAKE_TRAFFIC_SECRET e7473a000a0a200073602900bd923e004b37380062032900e02d11001cce1d00 a544da63a713d4393506fe7138fbc9204356efcd81c69b7f2c4a37a9459b3ae034c69a0e193cc36072515badb8173a8c +CLIENT_TRAFFIC_SECRET_0 e7473a000a0a200073602900bd923e004b37380062032900e02d11001cce1d00 8ecdbcb8e7d7faf9e090bae36ca745509a1089fc76cc1b42fa44ff41fbe0caeec030c8e35e58241bdd31dfaee961858b From 02e3db5be31637cc8f7f64212ae5ac819af1f73d Mon Sep 17 00:00:00 2001 From: Stingescu Andrei Petrut Date: Mon, 27 Jul 2026 07:23:45 -0600 Subject: [PATCH 14/26] Pull request #81: Regenerate Cyperf Python Wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from ISGAPPSEC2-37153-update-cyperf-python-wrapper to main Squashed commit of the following: commit 083542b9db90a53e829416b0beed8d585f4e5545 Author: stinandr Date: Fri Jul 24 18:21:21 2026 +0300 Remove another deprecated python files commit f8b4fa3c98f2eff5e3caf220f55ba7153448320c Author: stinandr Date: Fri Jul 24 16:18:59 2026 +0300 Regenerate python wrapper commit 803ff054cdd0a06c8b4cde3e9fd2d8c2674e1eee Author: stinandr Date: Fri Jul 17 14:30:41 2026 +0300 Remove deprecated generated python files --- README.md | 22 +- cyperf/__init__.py | 17 +- cyperf/api/application_resources_api.py | 165 +++++++--- cyperf/api/data_migration_api.py | 32 +- cyperf/api/sessions_api.py | 292 ------------------ cyperf/api/utils_api.py | 34 +- cyperf/dynamic_models/__init__.py | 17 +- cyperf/models/__init__.py | 17 +- cyperf/models/agent.py | 4 +- .../models/attack_metadata_keywords_inner.py | 208 ------------- ...l_openid_connect_token_post200_response.py | 99 ------ ...sponse_one_of.py => basic_auth_profile.py} | 44 ++- cyperf/models/broker.py | 30 +- .../change_aggregation_mode_operation.py | 97 ------ cyperf/models/change_link_state_operation.py | 106 ------- .../classical_signature_algorithm_tls13.py | 53 ++++ ...composite_pqc_signature_algorithm_tls13.py | 40 +++ .../config_metadata_config_data_value.py | 208 ------------- .../models/{capture.py => content_block.py} | 40 ++- cyperf/models/dut_network.py | 12 +- cyperf/models/eth_range.py | 2 +- ...nse_one_of.py => formatted_description.py} | 43 ++- cyperf/models/get_agent_tags200_response.py | 143 --------- .../get_application_types200_response.py | 143 --------- cyperf/models/get_apps200_response.py | 143 --------- cyperf/models/get_attacks200_response.py | 143 --------- .../models/get_attacks200_response_one_of.py | 103 ------ cyperf/models/get_attacks_operation.py | 121 -------- .../models/get_auth_profiles200_response.py | 143 --------- .../get_auth_profiles200_response_one_of.py | 103 ------ cyperf/models/get_certificates200_response.py | 143 --------- .../get_certificates200_response_one_of.py | 103 ------ cyperf/models/get_consumers200_response.py | 143 --------- .../get_consumers200_response_one_of.py | 103 ------ ...et_custom_import_operations200_response.py | 143 --------- ...om_import_operations200_response_one_of.py | 103 ------ cyperf/models/get_files200_response.py | 143 --------- cyperf/models/get_files200_response_one_of.py | 103 ------ .../models/get_http_profiles200_response.py | 143 --------- .../get_http_profiles200_response_one_of.py | 103 ------ cyperf/models/get_meta200_response.py | 143 --------- cyperf/models/get_meta200_response_one_of.py | 103 ------ cyperf/models/get_plugins200_response.py | 143 --------- .../models/get_plugins200_response_one_of.py | 103 ------ cyperf/models/get_result_tags200_response.py | 143 --------- .../get_result_tags200_response_one_of.py | 103 ------ ...peration.py => get_scenarios_operation.py} | 8 +- cyperf/models/get_stats200_response.py | 143 --------- cyperf/models/get_stats200_response_one_of.py | 103 ------ cyperf/models/ip_range.py | 4 +- cyperf/models/{test_usage.py => keyword.py} | 20 +- ...lete_request_inner.py => layout_config.py} | 20 +- cyperf/models/license_server_metadata.py | 30 +- cyperf/models/llmapi_profile.py | 8 +- .../models/pqc_signature_algorithm_tls13.py | 39 +++ cyperf/models/prepared_test_options.py | 103 ------ .../{prepare_test_operation.py => profile.py} | 56 ++-- ...types200_response_one_of.py => section.py} | 42 ++- cyperf/models/session_reuse_method_tls12.py | 2 +- cyperf/models/session_reuse_method_tls13.py | 3 +- .../start_batch_delete_request_inner.py | 93 ------ cyperf/models/switch_app_operation.py | 93 ------ cyperf/models/test_info.py | 10 +- .../{set_app_operation.py => text_segment.py} | 26 +- cyperf/models/tls_profile.py | 21 +- docs/Agent.md | 1 + docs/ApplicationResourcesApi.md | 73 +++-- docs/AttackMetadataKeywordsInner.md | 28 -- ...otocolOpenidConnectTokenPost200Response.md | 32 -- docs/BasicAuthProfile.md | 31 ++ docs/Broker.md | 22 +- docs/Capture.md | 30 -- docs/ChangeAggregationModeOperation.md | 31 -- docs/ChangeLinkStateOperation.md | 30 -- docs/ClassicalSignatureAlgorithmTLS13.md | 43 +++ docs/CompositePqcSignatureAlgorithmTLS13.md | 17 + docs/ConfigMetadataConfigDataValue.md | 28 -- docs/ContentBlock.md | 33 ++ docs/DUTNetwork.md | 3 +- docs/DataMigrationApi.md | 12 +- docs/EthRange.md | 2 +- docs/FormattedDescription.md | 31 ++ docs/GetAgentTags200Response.md | 30 -- docs/GetAgentTags200ResponseOneOf.md | 30 -- docs/GetApplicationTypes200Response.md | 30 -- docs/GetApplicationTypes200ResponseOneOf.md | 30 -- docs/GetApps200Response.md | 30 -- docs/GetApps200ResponseOneOf.md | 30 -- docs/GetAttacks200Response.md | 30 -- docs/GetAttacks200ResponseOneOf.md | 30 -- docs/GetAttacksOperation.md | 35 --- docs/GetAuthProfiles200Response.md | 30 -- docs/GetAuthProfiles200ResponseOneOf.md | 30 -- docs/GetCertificates200Response.md | 30 -- docs/GetCertificates200ResponseOneOf.md | 30 -- docs/GetConsumers200Response.md | 30 -- docs/GetConsumers200ResponseOneOf.md | 30 -- docs/GetCustomImportOperations200Response.md | 30 -- ...tCustomImportOperations200ResponseOneOf.md | 30 -- docs/GetFiles200Response.md | 30 -- docs/GetFiles200ResponseOneOf.md | 30 -- docs/GetHttpProfiles200Response.md | 30 -- docs/GetHttpProfiles200ResponseOneOf.md | 30 -- docs/GetMeta200Response.md | 30 -- docs/GetMeta200ResponseOneOf.md | 30 -- docs/GetPlugins200Response.md | 30 -- docs/GetPlugins200ResponseOneOf.md | 30 -- docs/GetResultTags200Response.md | 30 -- docs/GetResultTags200ResponseOneOf.md | 30 -- ...sOperation.md => GetScenariosOperation.md} | 16 +- docs/GetStats200Response.md | 30 -- docs/GetStats200ResponseOneOf.md | 30 -- docs/IPRange.md | 4 +- docs/Keyword.md | 31 ++ docs/LLMAPIProfile.md | 1 + docs/LayoutConfig.md | 29 ++ docs/LicenseServerMetadata.md | 22 +- docs/PqcSignatureAlgorithmTLS13.md | 15 + docs/PrepareTestOperation.md | 37 --- docs/PreparedTestOptions.md | 34 -- docs/Profile.md | 39 +++ docs/Section.md | 30 ++ docs/SessionReuseMethodTLS12.md | 2 +- docs/SessionReuseMethodTLS13.md | 4 +- docs/SessionsApi.md | 81 ----- docs/SetAppOperation.md | 31 -- docs/StartBatchDeleteRequestInner.md | 29 -- docs/StartRootBatchDeleteRequestInner.md | 29 -- docs/SwitchAppOperation.md | 29 -- docs/TLSProfile.md | 9 +- docs/TestInfo.md | 2 +- docs/TestUsage.md | 30 -- docs/TextSegment.md | 33 ++ docs/UtilsApi.md | 20 +- 134 files changed, 1049 insertions(+), 6246 deletions(-) delete mode 100644 cyperf/models/attack_metadata_keywords_inner.py delete mode 100644 cyperf/models/auth_realms_keysight_protocol_openid_connect_token_post200_response.py rename cyperf/models/{get_apps200_response_one_of.py => basic_auth_profile.py} (61%) delete mode 100644 cyperf/models/change_aggregation_mode_operation.py delete mode 100644 cyperf/models/change_link_state_operation.py create mode 100644 cyperf/models/classical_signature_algorithm_tls13.py create mode 100644 cyperf/models/composite_pqc_signature_algorithm_tls13.py delete mode 100644 cyperf/models/config_metadata_config_data_value.py rename cyperf/models/{capture.py => content_block.py} (58%) rename cyperf/models/{get_agent_tags200_response_one_of.py => formatted_description.py} (60%) delete mode 100644 cyperf/models/get_agent_tags200_response.py delete mode 100644 cyperf/models/get_application_types200_response.py delete mode 100644 cyperf/models/get_apps200_response.py delete mode 100644 cyperf/models/get_attacks200_response.py delete mode 100644 cyperf/models/get_attacks200_response_one_of.py delete mode 100644 cyperf/models/get_attacks_operation.py delete mode 100644 cyperf/models/get_auth_profiles200_response.py delete mode 100644 cyperf/models/get_auth_profiles200_response_one_of.py delete mode 100644 cyperf/models/get_certificates200_response.py delete mode 100644 cyperf/models/get_certificates200_response_one_of.py delete mode 100644 cyperf/models/get_consumers200_response.py delete mode 100644 cyperf/models/get_consumers200_response_one_of.py delete mode 100644 cyperf/models/get_custom_import_operations200_response.py delete mode 100644 cyperf/models/get_custom_import_operations200_response_one_of.py delete mode 100644 cyperf/models/get_files200_response.py delete mode 100644 cyperf/models/get_files200_response_one_of.py delete mode 100644 cyperf/models/get_http_profiles200_response.py delete mode 100644 cyperf/models/get_http_profiles200_response_one_of.py delete mode 100644 cyperf/models/get_meta200_response.py delete mode 100644 cyperf/models/get_meta200_response_one_of.py delete mode 100644 cyperf/models/get_plugins200_response.py delete mode 100644 cyperf/models/get_plugins200_response_one_of.py delete mode 100644 cyperf/models/get_result_tags200_response.py delete mode 100644 cyperf/models/get_result_tags200_response_one_of.py rename cyperf/models/{get_apps_operation.py => get_scenarios_operation.py} (95%) delete mode 100644 cyperf/models/get_stats200_response.py delete mode 100644 cyperf/models/get_stats200_response_one_of.py rename cyperf/models/{test_usage.py => keyword.py} (76%) rename cyperf/models/{start_root_batch_delete_request_inner.py => layout_config.py} (80%) create mode 100644 cyperf/models/pqc_signature_algorithm_tls13.py delete mode 100644 cyperf/models/prepared_test_options.py rename cyperf/models/{prepare_test_operation.py => profile.py} (53%) rename cyperf/models/{get_application_types200_response_one_of.py => section.py} (62%) delete mode 100644 cyperf/models/start_batch_delete_request_inner.py delete mode 100644 cyperf/models/switch_app_operation.py rename cyperf/models/{set_app_operation.py => text_segment.py} (69%) delete mode 100644 docs/AttackMetadataKeywordsInner.md delete mode 100644 docs/AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.md create mode 100644 docs/BasicAuthProfile.md delete mode 100644 docs/Capture.md delete mode 100644 docs/ChangeAggregationModeOperation.md delete mode 100644 docs/ChangeLinkStateOperation.md create mode 100644 docs/ClassicalSignatureAlgorithmTLS13.md create mode 100644 docs/CompositePqcSignatureAlgorithmTLS13.md delete mode 100644 docs/ConfigMetadataConfigDataValue.md create mode 100644 docs/ContentBlock.md create mode 100644 docs/FormattedDescription.md delete mode 100644 docs/GetAgentTags200Response.md delete mode 100644 docs/GetAgentTags200ResponseOneOf.md delete mode 100644 docs/GetApplicationTypes200Response.md delete mode 100644 docs/GetApplicationTypes200ResponseOneOf.md delete mode 100644 docs/GetApps200Response.md delete mode 100644 docs/GetApps200ResponseOneOf.md delete mode 100644 docs/GetAttacks200Response.md delete mode 100644 docs/GetAttacks200ResponseOneOf.md delete mode 100644 docs/GetAttacksOperation.md delete mode 100644 docs/GetAuthProfiles200Response.md delete mode 100644 docs/GetAuthProfiles200ResponseOneOf.md delete mode 100644 docs/GetCertificates200Response.md delete mode 100644 docs/GetCertificates200ResponseOneOf.md delete mode 100644 docs/GetConsumers200Response.md delete mode 100644 docs/GetConsumers200ResponseOneOf.md delete mode 100644 docs/GetCustomImportOperations200Response.md delete mode 100644 docs/GetCustomImportOperations200ResponseOneOf.md delete mode 100644 docs/GetFiles200Response.md delete mode 100644 docs/GetFiles200ResponseOneOf.md delete mode 100644 docs/GetHttpProfiles200Response.md delete mode 100644 docs/GetHttpProfiles200ResponseOneOf.md delete mode 100644 docs/GetMeta200Response.md delete mode 100644 docs/GetMeta200ResponseOneOf.md delete mode 100644 docs/GetPlugins200Response.md delete mode 100644 docs/GetPlugins200ResponseOneOf.md delete mode 100644 docs/GetResultTags200Response.md delete mode 100644 docs/GetResultTags200ResponseOneOf.md rename docs/{GetAppsOperation.md => GetScenariosOperation.md} (61%) delete mode 100644 docs/GetStats200Response.md delete mode 100644 docs/GetStats200ResponseOneOf.md create mode 100644 docs/Keyword.md create mode 100644 docs/LayoutConfig.md create mode 100644 docs/PqcSignatureAlgorithmTLS13.md delete mode 100644 docs/PrepareTestOperation.md delete mode 100644 docs/PreparedTestOptions.md create mode 100644 docs/Profile.md create mode 100644 docs/Section.md delete mode 100644 docs/SetAppOperation.md delete mode 100644 docs/StartBatchDeleteRequestInner.md delete mode 100644 docs/StartRootBatchDeleteRequestInner.md delete mode 100644 docs/SwitchAppOperation.md delete mode 100644 docs/TestUsage.md create mode 100644 docs/TextSegment.md diff --git a/README.md b/README.md index 635aa8d..b38644b 100644 --- a/README.md +++ b/README.md @@ -337,7 +337,6 @@ Class | Method | HTTP request | Description *SessionsApi* | [**start_session_config_granular_stats_default_dashboards**](docs/SessionsApi.md#start_session_config_granular_stats_default_dashboards) | **POST** /api/v2/sessions/{sessionId}/config/operations/granular-stats-default-dashboards | *SessionsApi* | [**start_session_config_save**](docs/SessionsApi.md#start_session_config_save) | **POST** /api/v2/sessions/{sessionId}/config/operations/save | *SessionsApi* | [**start_session_load_config**](docs/SessionsApi.md#start_session_load_config) | **POST** /api/v2/sessions/{sessionId}/operations/loadConfig | -*SessionsApi* | [**start_session_prepare_test**](docs/SessionsApi.md#start_session_prepare_test) | **POST** /api/v2/sessions/{sessionId}/operations/prepareTest | *SessionsApi* | [**start_session_test_end**](docs/SessionsApi.md#start_session_test_end) | **POST** /api/v2/sessions/{sessionId}/operations/testEnd | *SessionsApi* | [**start_session_test_init**](docs/SessionsApi.md#start_session_test_init) | **POST** /api/v2/sessions/{sessionId}/operations/testInit | *SessionsApi* | [**start_session_touch**](docs/SessionsApi.md#start_session_touch) | **POST** /api/v2/sessions/{sessionId}/operations/touch | @@ -380,11 +379,11 @@ Class | Method | HTTP request | Description *UtilsApi* | [**get_docs**](docs/UtilsApi.md#get_docs) | **GET** /api/v2/docs | *UtilsApi* | [**get_docs_json**](docs/UtilsApi.md#get_docs_json) | **GET** /api/v2/docs.json | *UtilsApi* | [**get_docs_yaml**](docs/UtilsApi.md#get_docs_yaml) | **GET** /api/v2/docs.yaml | -*UtilsApi* | [**get_eula**](docs/UtilsApi.md#get_eula) | **GET** /eula/v1/eula/CyPerf | Retrieve EULA detail +*UtilsApi* | [**get_eula**](docs/UtilsApi.md#get_eula) | **GET** /eula/v1/eula/{id} | Retrieve EULA detail *UtilsApi* | [**get_log_config**](docs/UtilsApi.md#get_log_config) | **GET** /api/v2/log-config | *UtilsApi* | [**get_time**](docs/UtilsApi.md#get_time) | **GET** /api/v2/time | *UtilsApi* | [**list_eulas**](docs/UtilsApi.md#list_eulas) | **GET** /eula/v1/eula | list of EULAs -*UtilsApi* | [**post_eula**](docs/UtilsApi.md#post_eula) | **POST** /eula/v1/eula/CyPerf | Update properties an EULA +*UtilsApi* | [**post_eula**](docs/UtilsApi.md#post_eula) | **POST** /eula/v1/eula/{id} | Update properties an EULA *UtilsApi* | [**start_cert_manager_generate**](docs/UtilsApi.md#start_cert_manager_generate) | **POST** /api/v2/cert-manager/operations/generate | *UtilsApi* | [**start_cert_manager_upload**](docs/UtilsApi.md#start_cert_manager_upload) | **POST** /api/v2/cert-manager/operations/upload | *UtilsApi* | [**start_disk_usage_cleanup_diagnostics**](docs/UtilsApi.md#start_disk_usage_cleanup_diagnostics) | **POST** /api/v2/disk-usage/operations/cleanup-diagnostics | @@ -455,6 +454,7 @@ Class | Method | HTTP request | Description - [Authenticate200Response](docs/Authenticate200Response.md) - [AuthenticationSettings](docs/AuthenticationSettings.md) - [AutomaticIpType](docs/AutomaticIpType.md) + - [BasicAuthProfile](docs/BasicAuthProfile.md) - [Broker](docs/Broker.md) - [CaptureInput](docs/CaptureInput.md) - [CaptureInputFindParam](docs/CaptureInputFindParam.md) @@ -470,11 +470,13 @@ Class | Method | HTTP request | Description - [CipherTLS13](docs/CipherTLS13.md) - [CiscoAnyConnectSettings](docs/CiscoAnyConnectSettings.md) - [CiscoEncapsulation](docs/CiscoEncapsulation.md) + - [ClassicalSignatureAlgorithmTLS13](docs/ClassicalSignatureAlgorithmTLS13.md) - [ClearComputeResourcesOwnershipOperation](docs/ClearComputeResourcesOwnershipOperation.md) - [ClearFrontPanelPortsOwnershipOperation](docs/ClearFrontPanelPortsOwnershipOperation.md) - [ClearPortsOwnershipOperation](docs/ClearPortsOwnershipOperation.md) - [Command](docs/Command.md) - [CommandMetadata](docs/CommandMetadata.md) + - [CompositePqcSignatureAlgorithmTLS13](docs/CompositePqcSignatureAlgorithmTLS13.md) - [ComputeNode](docs/ComputeNode.md) - [ComputeResource](docs/ComputeResource.md) - [ComputeResourcesByController](docs/ComputeResourcesByController.md) @@ -489,6 +491,7 @@ Class | Method | HTTP request | Description - [Connection](docs/Connection.md) - [ConnectionPersistence](docs/ConnectionPersistence.md) - [Consumer](docs/Consumer.md) + - [ContentBlock](docs/ContentBlock.md) - [Controller](docs/Controller.md) - [CountedFeatureConsumer](docs/CountedFeatureConsumer.md) - [CountedFeatureStats](docs/CountedFeatureStats.md) @@ -555,6 +558,7 @@ Class | Method | HTTP request | Description - [Filter](docs/Filter.md) - [FilteredStat](docs/FilteredStat.md) - [FindParamMatchesOperation](docs/FindParamMatchesOperation.md) + - [FormattedDescription](docs/FormattedDescription.md) - [FortinetEncapsulation](docs/FortinetEncapsulation.md) - [FortinetSettings](docs/FortinetSettings.md) - [FrontPanel](docs/FrontPanel.md) @@ -568,9 +572,7 @@ Class | Method | HTTP request | Description - [GetAgents200ResponseOneOf](docs/GetAgents200ResponseOneOf.md) - [GetAgentsTags200Response](docs/GetAgentsTags200Response.md) - [GetAgentsTags200ResponseOneOf](docs/GetAgentsTags200ResponseOneOf.md) - - [GetAppsOperation](docs/GetAppsOperation.md) - [GetAsyncOperationResult200Response](docs/GetAsyncOperationResult200Response.md) - - [GetAttacksOperation](docs/GetAttacksOperation.md) - [GetBrokers200Response](docs/GetBrokers200Response.md) - [GetBrokers200ResponseOneOf](docs/GetBrokers200ResponseOneOf.md) - [GetCategoriesOperation](docs/GetCategoriesOperation.md) @@ -613,6 +615,7 @@ Class | Method | HTTP request | Description - [GetResults200ResponseOneOf](docs/GetResults200ResponseOneOf.md) - [GetResultsTags200Response](docs/GetResultsTags200Response.md) - [GetResultsTags200ResponseOneOf](docs/GetResultsTags200ResponseOneOf.md) + - [GetScenariosOperation](docs/GetScenariosOperation.md) - [GetSessionMeta200Response](docs/GetSessionMeta200Response.md) - [GetSessionMeta200ResponseOneOf](docs/GetSessionMeta200ResponseOneOf.md) - [GetSessions200Response](docs/GetSessions200Response.md) @@ -645,7 +648,9 @@ Class | Method | HTTP request | Description - [IpMask](docs/IpMask.md) - [IpPreference](docs/IpPreference.md) - [IpVer](docs/IpVer.md) + - [Keyword](docs/Keyword.md) - [LLMAPIProfile](docs/LLMAPIProfile.md) + - [LayoutConfig](docs/LayoutConfig.md) - [License](docs/License.md) - [LicenseReceipt](docs/LicenseReceipt.md) - [LicenseServerMetadata](docs/LicenseServerMetadata.md) @@ -714,9 +719,9 @@ Class | Method | HTTP request | Description - [PortsByController](docs/PortsByController.md) - [PortsByNode](docs/PortsByNode.md) - [PortsByPanel](docs/PortsByPanel.md) - - [PrepareTestOperation](docs/PrepareTestOperation.md) - - [PreparedTestOptions](docs/PreparedTestOptions.md) + - [PqcSignatureAlgorithmTLS13](docs/PqcSignatureAlgorithmTLS13.md) - [PrfP1Algorithm](docs/PrfP1Algorithm.md) + - [Profile](docs/Profile.md) - [ProtectedSubnetConfig](docs/ProtectedSubnetConfig.md) - [QUICProfile](docs/QUICProfile.md) - [QUICVersion](docs/QUICVersion.md) @@ -743,6 +748,7 @@ Class | Method | HTTP request | Description - [SaveConfigOperation](docs/SaveConfigOperation.md) - [Scenario](docs/Scenario.md) - [SecondaryObjective](docs/SecondaryObjective.md) + - [Section](docs/Section.md) - [SegmentType](docs/SegmentType.md) - [SelectedEnv](docs/SelectedEnv.md) - [SequenceDataTypes](docs/SequenceDataTypes.md) @@ -781,7 +787,7 @@ Class | Method | HTTP request | Description - [TcpProfile](docs/TcpProfile.md) - [TestInfo](docs/TestInfo.md) - [TestStateChangedOperation](docs/TestStateChangedOperation.md) - - [TestUsage](docs/TestUsage.md) + - [TextSegment](docs/TextSegment.md) - [TimeValue](docs/TimeValue.md) - [TimelineSegment](docs/TimelineSegment.md) - [TimelineSegmentBase](docs/TimelineSegmentBase.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 089f072..d848912 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -110,6 +110,7 @@ from cyperf.models.authenticate200_response import Authenticate200Response from cyperf.models.authentication_settings import AuthenticationSettings from cyperf.models.automatic_ip_type import AutomaticIpType +from cyperf.models.basic_auth_profile import BasicAuthProfile from cyperf.models.broker import Broker from cyperf.models.capture_input import CaptureInput from cyperf.models.capture_input_find_param import CaptureInputFindParam @@ -125,11 +126,13 @@ from cyperf.models.cipher_tls13 import CipherTLS13 from cyperf.models.cisco_any_connect_settings import CiscoAnyConnectSettings from cyperf.models.cisco_encapsulation import CiscoEncapsulation +from cyperf.models.classical_signature_algorithm_tls13 import ClassicalSignatureAlgorithmTLS13 from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.models.command import Command from cyperf.models.command_metadata import CommandMetadata +from cyperf.models.composite_pqc_signature_algorithm_tls13 import CompositePqcSignatureAlgorithmTLS13 from cyperf.models.compute_node import ComputeNode from cyperf.models.compute_resource import ComputeResource from cyperf.models.compute_resources_by_controller import ComputeResourcesByController @@ -144,6 +147,7 @@ from cyperf.models.connection import Connection from cyperf.models.connection_persistence import ConnectionPersistence from cyperf.models.consumer import Consumer +from cyperf.models.content_block import ContentBlock from cyperf.models.controller import Controller from cyperf.models.counted_feature_consumer import CountedFeatureConsumer from cyperf.models.counted_feature_stats import CountedFeatureStats @@ -210,6 +214,7 @@ from cyperf.models.filter import Filter from cyperf.models.filtered_stat import FilteredStat from cyperf.models.find_param_matches_operation import FindParamMatchesOperation +from cyperf.models.formatted_description import FormattedDescription from cyperf.models.fortinet_encapsulation import FortinetEncapsulation from cyperf.models.fortinet_settings import FortinetSettings from cyperf.models.front_panel import FrontPanel @@ -223,9 +228,7 @@ from cyperf.models.get_agents200_response_one_of import GetAgents200ResponseOneOf from cyperf.models.get_agents_tags200_response import GetAgentsTags200Response from cyperf.models.get_agents_tags200_response_one_of import GetAgentsTags200ResponseOneOf -from cyperf.models.get_apps_operation import GetAppsOperation from cyperf.models.get_async_operation_result200_response import GetAsyncOperationResult200Response -from cyperf.models.get_attacks_operation import GetAttacksOperation from cyperf.models.get_brokers200_response import GetBrokers200Response from cyperf.models.get_brokers200_response_one_of import GetBrokers200ResponseOneOf from cyperf.models.get_categories_operation import GetCategoriesOperation @@ -268,6 +271,7 @@ from cyperf.models.get_results200_response_one_of import GetResults200ResponseOneOf from cyperf.models.get_results_tags200_response import GetResultsTags200Response from cyperf.models.get_results_tags200_response_one_of import GetResultsTags200ResponseOneOf +from cyperf.models.get_scenarios_operation import GetScenariosOperation from cyperf.models.get_session_meta200_response import GetSessionMeta200Response from cyperf.models.get_session_meta200_response_one_of import GetSessionMeta200ResponseOneOf from cyperf.models.get_sessions200_response import GetSessions200Response @@ -300,7 +304,9 @@ from cyperf.models.ip_mask import IpMask from cyperf.models.ip_preference import IpPreference from cyperf.models.ip_ver import IpVer +from cyperf.models.keyword import Keyword from cyperf.models.llmapi_profile import LLMAPIProfile +from cyperf.models.layout_config import LayoutConfig from cyperf.models.license import License from cyperf.models.license_receipt import LicenseReceipt from cyperf.models.license_server_metadata import LicenseServerMetadata @@ -369,9 +375,9 @@ from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode from cyperf.models.ports_by_panel import PortsByPanel -from cyperf.models.prepare_test_operation import PrepareTestOperation -from cyperf.models.prepared_test_options import PreparedTestOptions +from cyperf.models.pqc_signature_algorithm_tls13 import PqcSignatureAlgorithmTLS13 from cyperf.models.prf_p1_algorithm import PrfP1Algorithm +from cyperf.models.profile import Profile from cyperf.models.protected_subnet_config import ProtectedSubnetConfig from cyperf.models.quic_profile import QUICProfile from cyperf.models.quic_version import QUICVersion @@ -398,6 +404,7 @@ from cyperf.models.save_config_operation import SaveConfigOperation from cyperf.models.scenario import Scenario from cyperf.models.secondary_objective import SecondaryObjective +from cyperf.models.section import Section from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv from cyperf.models.sequence_data_types import SequenceDataTypes @@ -436,7 +443,7 @@ from cyperf.models.tcp_profile import TcpProfile from cyperf.models.test_info import TestInfo from cyperf.models.test_state_changed_operation import TestStateChangedOperation -from cyperf.models.test_usage import TestUsage +from cyperf.models.text_segment import TextSegment from cyperf.models.time_value import TimeValue from cyperf.models.timeline_segment import TimelineSegment from cyperf.models.timeline_segment_base import TimelineSegmentBase diff --git a/cyperf/api/application_resources_api.py b/cyperf/api/application_resources_api.py index aa42349..1755616 100644 --- a/cyperf/api/application_resources_api.py +++ b/cyperf/api/application_resources_api.py @@ -33,8 +33,6 @@ from cyperf.models.export_apps_operation_input import ExportAppsOperationInput from cyperf.models.find_param_matches_operation import FindParamMatchesOperation from cyperf.models.generic_file import GenericFile -from cyperf.models.get_apps_operation import GetAppsOperation -from cyperf.models.get_attacks_operation import GetAttacksOperation from cyperf.models.get_categories_operation import GetCategoriesOperation from cyperf.models.get_resources_application_types200_response import GetResourcesApplicationTypes200Response from cyperf.models.get_resources_apps200_response import GetResourcesApps200Response @@ -43,6 +41,7 @@ from cyperf.models.get_resources_certificates200_response import GetResourcesCertificates200Response from cyperf.models.get_resources_http_profiles200_response import GetResourcesHttpProfiles200Response from cyperf.models.get_resources_llm_api_profiles200_response import GetResourcesLlmApiProfiles200Response +from cyperf.models.get_scenarios_operation import GetScenariosOperation from cyperf.models.get_strikes_operation import GetStrikesOperation from cyperf.models.http_profile import HTTPProfile from cyperf.models.llmapi_profile import LLMAPIProfile @@ -86,6 +85,7 @@ def delete_resources_capture( ) -> None: """delete_resources_capture + Delete a capture that was loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -121,6 +121,9 @@ def delete_resources_capture( _response_types_map: Dict[str, Optional[str]] = { '204': None, + '401': "ErrorResponse", + '403': "ErrorResponse", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -149,6 +152,7 @@ def delete_resources_capture_with_http_info( ) -> ApiResponse[None]: """delete_resources_capture + Delete a capture that was loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -184,6 +188,9 @@ def delete_resources_capture_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '204': None, + '401': "ErrorResponse", + '403': "ErrorResponse", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -212,6 +219,7 @@ def delete_resources_capture_without_preload_content( ) -> RESTResponseType: """delete_resources_capture + Delete a capture that was loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -247,6 +255,9 @@ def delete_resources_capture_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '204': None, + '401': "ErrorResponse", + '403': "ErrorResponse", + '404': "ErrorResponse", '500': "ErrorResponse", } return self.api_client.call_api( @@ -4466,7 +4477,7 @@ def delete_resources_user_defined_app( ) -> None: """delete_resources_user_defined_app - Delete a CyPerf application that was created by the user. + Delete an application that was created by the user. :param user_defined_app_id: The ID of the user defined app. (required) :type user_defined_app_id: str @@ -4533,7 +4544,7 @@ def delete_resources_user_defined_app_with_http_info( ) -> ApiResponse[None]: """delete_resources_user_defined_app - Delete a CyPerf application that was created by the user. + Delete an application that was created by the user. :param user_defined_app_id: The ID of the user defined app. (required) :type user_defined_app_id: str @@ -4600,7 +4611,7 @@ def delete_resources_user_defined_app_without_preload_content( ) -> RESTResponseType: """delete_resources_user_defined_app - Delete a CyPerf application that was created by the user. + Delete an application that was created by the user. :param user_defined_app_id: The ID of the user defined app. (required) :type user_defined_app_id: str @@ -5575,7 +5586,7 @@ def get_resources_app_by_id( ) -> AppsecApp: """get_resources_app_by_id - Get a particular CyPerf application. + Get a particular application. :param app_id: The ID of the app. (required) :type app_id: str @@ -5641,7 +5652,7 @@ def get_resources_app_by_id_with_http_info( ) -> ApiResponse[AppsecApp]: """get_resources_app_by_id - Get a particular CyPerf application. + Get a particular application. :param app_id: The ID of the app. (required) :type app_id: str @@ -5707,7 +5718,7 @@ def get_resources_app_by_id_without_preload_content( ) -> RESTResponseType: """get_resources_app_by_id - Get a particular CyPerf application. + Get a particular application. :param app_id: The ID of the app. (required) :type app_id: str @@ -6642,7 +6653,7 @@ def get_resources_apps( ) -> GetResourcesApps200Response: """get_resources_apps - Get all the available CyPerf applications. + Get all the available applications. :param take: The number of search results to return :type take: int @@ -6732,7 +6743,7 @@ def get_resources_apps_with_http_info( ) -> ApiResponse[GetResourcesApps200Response]: """get_resources_apps - Get all the available CyPerf applications. + Get all the available applications. :param take: The number of search results to return :type take: int @@ -6822,7 +6833,7 @@ def get_resources_apps_without_preload_content( ) -> RESTResponseType: """get_resources_apps - Get all the available CyPerf applications. + Get all the available applications. :param take: The number of search results to return :type take: int @@ -7001,7 +7012,7 @@ def get_resources_attack_by_id( ) -> AppsecAttack: """get_resources_attack_by_id - Get a particular CyPerf attack. + Get a particular attack. :param attack_id: The ID of the attack. (required) :type attack_id: str @@ -7067,7 +7078,7 @@ def get_resources_attack_by_id_with_http_info( ) -> ApiResponse[AppsecAttack]: """get_resources_attack_by_id - Get a particular CyPerf attack. + Get a particular attack. :param attack_id: The ID of the attack. (required) :type attack_id: str @@ -7133,7 +7144,7 @@ def get_resources_attack_by_id_without_preload_content( ) -> RESTResponseType: """get_resources_attack_by_id - Get a particular CyPerf attack. + Get a particular attack. :param attack_id: The ID of the attack. (required) :type attack_id: str @@ -7539,7 +7550,7 @@ def get_resources_attacks( ) -> GetResourcesAttacks200Response: """get_resources_attacks - Get all the available CyPerf attacks. + Get all the available attacks. :param take: The number of search results to return :type take: int @@ -7629,7 +7640,7 @@ def get_resources_attacks_with_http_info( ) -> ApiResponse[GetResourcesAttacks200Response]: """get_resources_attacks - Get all the available CyPerf attacks. + Get all the available attacks. :param take: The number of search results to return :type take: int @@ -7719,7 +7730,7 @@ def get_resources_attacks_without_preload_content( ) -> RESTResponseType: """get_resources_attacks - Get all the available CyPerf attacks. + Get all the available attacks. :param take: The number of search results to return :type take: int @@ -8430,7 +8441,7 @@ def get_resources_capture_by_id( ) -> ReplayCapture: """get_resources_capture_by_id - Get a particular CyPerf capture loaded by the user. + Get a particular capture loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -8496,7 +8507,7 @@ def get_resources_capture_by_id_with_http_info( ) -> ApiResponse[ReplayCapture]: """get_resources_capture_by_id - Get a particular CyPerf capture loaded by the user. + Get a particular capture loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -8562,7 +8573,7 @@ def get_resources_capture_by_id_without_preload_content( ) -> RESTResponseType: """get_resources_capture_by_id - Get a particular CyPerf capture loaded by the user. + Get a particular capture loaded by the user. :param capture_id: The ID of the capture. (required) :type capture_id: str @@ -9775,6 +9786,7 @@ def get_resources_certificate_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -9839,6 +9851,7 @@ def get_resources_certificate_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -9903,6 +9916,7 @@ def get_resources_certificate_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -10827,6 +10841,7 @@ def get_resources_custom_fuzzing_script_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -10891,6 +10906,7 @@ def get_resources_custom_fuzzing_script_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -10955,6 +10971,7 @@ def get_resources_custom_fuzzing_script_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -12156,6 +12173,7 @@ def get_resources_flow_library_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -12220,6 +12238,7 @@ def get_resources_flow_library_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -12284,6 +12303,7 @@ def get_resources_flow_library_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -12931,6 +12951,7 @@ def get_resources_global_playlist_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -12995,6 +13016,7 @@ def get_resources_global_playlist_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -13059,6 +13081,7 @@ def get_resources_global_playlist_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -14260,6 +14283,7 @@ def get_resources_http_library_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -14324,6 +14348,7 @@ def get_resources_http_library_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -14388,6 +14413,7 @@ def get_resources_http_library_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -16099,6 +16125,7 @@ def get_resources_media_file_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -16163,6 +16190,7 @@ def get_resources_media_file_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -16227,6 +16255,7 @@ def get_resources_media_file_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -17428,6 +17457,7 @@ def get_resources_media_library_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -17492,6 +17522,7 @@ def get_resources_media_library_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -17556,6 +17587,7 @@ def get_resources_media_library_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -18480,6 +18512,7 @@ def get_resources_other_library_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -18544,6 +18577,7 @@ def get_resources_other_library_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -18608,6 +18642,7 @@ def get_resources_other_library_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -19255,6 +19290,7 @@ def get_resources_payload_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -19319,6 +19355,7 @@ def get_resources_payload_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -19383,6 +19420,7 @@ def get_resources_payload_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -20307,6 +20345,7 @@ def get_resources_pcap_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -20371,6 +20410,7 @@ def get_resources_pcap_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -20435,6 +20475,7 @@ def get_resources_pcap_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -21359,6 +21400,7 @@ def get_resources_playlist_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -21423,6 +21465,7 @@ def get_resources_playlist_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -21487,6 +21530,7 @@ def get_resources_playlist_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -21619,6 +21663,7 @@ def get_resources_playlist_values( _response_types_map: Dict[str, Optional[str]] = { '200': None, + '401': "ErrorResponse", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -21688,6 +21733,7 @@ def get_resources_playlist_values_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': None, + '401': "ErrorResponse", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -21757,6 +21803,7 @@ def get_resources_playlist_values_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': None, + '401': "ErrorResponse", '404': "ErrorResponse", '500': "ErrorResponse", } @@ -22963,6 +23010,7 @@ def get_resources_sip_library_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -23027,6 +23075,7 @@ def get_resources_sip_library_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -23091,6 +23140,7 @@ def get_resources_sip_library_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -24015,6 +24065,7 @@ def get_resources_stats_profile_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -24079,6 +24130,7 @@ def get_resources_stats_profile_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -24143,6 +24195,7 @@ def get_resources_stats_profile_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -25695,6 +25748,7 @@ def get_resources_tls_certificate_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -25759,6 +25813,7 @@ def get_resources_tls_certificate_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -25823,6 +25878,7 @@ def get_resources_tls_certificate_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -26747,6 +26803,7 @@ def get_resources_tls_dh_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -26811,6 +26868,7 @@ def get_resources_tls_dh_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -26875,6 +26933,7 @@ def get_resources_tls_dh_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -27799,6 +27858,7 @@ def get_resources_tls_key_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -27863,6 +27923,7 @@ def get_resources_tls_key_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -27927,6 +27988,7 @@ def get_resources_tls_key_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -29380,6 +29442,7 @@ def get_resources_voice_custom_flow_content_file( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -29444,6 +29507,7 @@ def get_resources_voice_custom_flow_content_file_with_http_info( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -29508,6 +29572,7 @@ def get_resources_voice_custom_flow_content_file_without_preload_content( _response_types_map: Dict[str, Optional[str]] = { '200': "bytearray", + '401': "ErrorResponse", '404': "ErrorResponse", } return self.api_client.call_api( @@ -33618,7 +33683,7 @@ def _start_resources_get_app_categories_serialize( @validate_call def start_resources_get_apps( self, - get_apps_operation: Optional[GetAppsOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -33636,8 +33701,8 @@ def start_resources_get_apps( Get the list of applications - :param get_apps_operation: - :type get_apps_operation: GetAppsOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -33661,7 +33726,7 @@ def start_resources_get_apps( """ # noqa: E501 _param = self._start_resources_get_apps_serialize( - get_apps_operation=get_apps_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -33681,7 +33746,7 @@ def start_resources_get_apps( @validate_call def start_resources_get_apps_with_http_info( self, - get_apps_operation: Optional[GetAppsOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -33699,8 +33764,8 @@ def start_resources_get_apps_with_http_info( Get the list of applications - :param get_apps_operation: - :type get_apps_operation: GetAppsOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -33724,7 +33789,7 @@ def start_resources_get_apps_with_http_info( """ # noqa: E501 _param = self._start_resources_get_apps_serialize( - get_apps_operation=get_apps_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -33744,7 +33809,7 @@ def start_resources_get_apps_with_http_info( @validate_call def start_resources_get_apps_without_preload_content( self, - get_apps_operation: Optional[GetAppsOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -33762,8 +33827,8 @@ def start_resources_get_apps_without_preload_content( Get the list of applications - :param get_apps_operation: - :type get_apps_operation: GetAppsOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -33787,7 +33852,7 @@ def start_resources_get_apps_without_preload_content( """ # noqa: E501 _param = self._start_resources_get_apps_serialize( - get_apps_operation=get_apps_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -33806,7 +33871,7 @@ def start_resources_get_apps_without_preload_content( def _start_resources_get_apps_serialize( self, - get_apps_operation, + get_scenarios_operation, _request_auth, _content_type, _headers, @@ -33830,8 +33895,8 @@ def _start_resources_get_apps_serialize( # process the header parameters # process the form parameters # process the body parameter - if get_apps_operation is not None: - _body_params = get_apps_operation + if get_scenarios_operation is not None: + _body_params = get_scenarios_operation # set the HTTP header `Accept` @@ -34148,7 +34213,7 @@ def _start_resources_get_attack_categories_serialize( @validate_call def start_resources_get_attacks( self, - get_attacks_operation: Optional[GetAttacksOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -34166,8 +34231,8 @@ def start_resources_get_attacks( Get the list of attacks - :param get_attacks_operation: - :type get_attacks_operation: GetAttacksOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -34191,7 +34256,7 @@ def start_resources_get_attacks( """ # noqa: E501 _param = self._start_resources_get_attacks_serialize( - get_attacks_operation=get_attacks_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -34211,7 +34276,7 @@ def start_resources_get_attacks( @validate_call def start_resources_get_attacks_with_http_info( self, - get_attacks_operation: Optional[GetAttacksOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -34229,8 +34294,8 @@ def start_resources_get_attacks_with_http_info( Get the list of attacks - :param get_attacks_operation: - :type get_attacks_operation: GetAttacksOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -34254,7 +34319,7 @@ def start_resources_get_attacks_with_http_info( """ # noqa: E501 _param = self._start_resources_get_attacks_serialize( - get_attacks_operation=get_attacks_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -34274,7 +34339,7 @@ def start_resources_get_attacks_with_http_info( @validate_call def start_resources_get_attacks_without_preload_content( self, - get_attacks_operation: Optional[GetAttacksOperation] = None, + get_scenarios_operation: Optional[GetScenariosOperation] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -34292,8 +34357,8 @@ def start_resources_get_attacks_without_preload_content( Get the list of attacks - :param get_attacks_operation: - :type get_attacks_operation: GetAttacksOperation + :param get_scenarios_operation: + :type get_scenarios_operation: GetScenariosOperation :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -34317,7 +34382,7 @@ def start_resources_get_attacks_without_preload_content( """ # noqa: E501 _param = self._start_resources_get_attacks_serialize( - get_attacks_operation=get_attacks_operation, + get_scenarios_operation=get_scenarios_operation, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -34336,7 +34401,7 @@ def start_resources_get_attacks_without_preload_content( def _start_resources_get_attacks_serialize( self, - get_attacks_operation, + get_scenarios_operation, _request_auth, _content_type, _headers, @@ -34360,8 +34425,8 @@ def _start_resources_get_attacks_serialize( # process the header parameters # process the form parameters # process the body parameter - if get_attacks_operation is not None: - _body_params = get_attacks_operation + if get_scenarios_operation is not None: + _body_params = get_scenarios_operation # set the HTTP header `Accept` diff --git a/cyperf/api/data_migration_api.py b/cyperf/api/data_migration_api.py index 674238c..0a62312 100644 --- a/cyperf/api/data_migration_api.py +++ b/cyperf/api/data_migration_api.py @@ -17,8 +17,8 @@ from typing import Any, Dict, List, Optional, Tuple, Union from typing_extensions import Annotated -from pydantic import Field, StrictInt -from typing import Optional +from pydantic import Field, StrictBytes, StrictInt, StrictStr +from typing import Optional, Union from typing_extensions import Annotated from cyperf.models.async_context import AsyncContext from cyperf.models.export_package_operation import ExportPackageOperation @@ -330,6 +330,7 @@ def _start_controller_migration_export_serialize( @validate_call def start_controller_migration_import( self, + file: Optional[Union[StrictBytes, StrictStr]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -347,6 +348,8 @@ def start_controller_migration_import( Import the data from the supplied package into the controller. + :param file: + :type file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -370,6 +373,7 @@ def start_controller_migration_import( """ # noqa: E501 _param = self._start_controller_migration_import_serialize( + file=file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -389,6 +393,7 @@ def start_controller_migration_import( @validate_call def start_controller_migration_import_with_http_info( self, + file: Optional[Union[StrictBytes, StrictStr]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -406,6 +411,8 @@ def start_controller_migration_import_with_http_info( Import the data from the supplied package into the controller. + :param file: + :type file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -429,6 +436,7 @@ def start_controller_migration_import_with_http_info( """ # noqa: E501 _param = self._start_controller_migration_import_serialize( + file=file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -448,6 +456,7 @@ def start_controller_migration_import_with_http_info( @validate_call def start_controller_migration_import_without_preload_content( self, + file: Optional[Union[StrictBytes, StrictStr]] = None, _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -465,6 +474,8 @@ def start_controller_migration_import_without_preload_content( Import the data from the supplied package into the controller. + :param file: + :type file: bytearray :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -488,6 +499,7 @@ def start_controller_migration_import_without_preload_content( """ # noqa: E501 _param = self._start_controller_migration_import_serialize( + file=file, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -506,6 +518,7 @@ def start_controller_migration_import_without_preload_content( def _start_controller_migration_import_serialize( self, + file, _request_auth, _content_type, _headers, @@ -528,6 +541,8 @@ def _start_controller_migration_import_serialize( # process the query parameters # process the header parameters # process the form parameters + if file is not None: + _files['file'] = file # process the body parameter @@ -539,6 +554,19 @@ def _start_controller_migration_import_serialize( ] ) + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'multipart/form-data' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type # authentication setting _auth_settings: List[str] = [ diff --git a/cyperf/api/sessions_api.py b/cyperf/api/sessions_api.py index 705e787..6cd1e66 100644 --- a/cyperf/api/sessions_api.py +++ b/cyperf/api/sessions_api.py @@ -28,7 +28,6 @@ from cyperf.models.load_config_operation import LoadConfigOperation from cyperf.models.open_api_definitions import OpenAPIDefinitions from cyperf.models.pair import Pair -from cyperf.models.prepare_test_operation import PrepareTestOperation from cyperf.models.save_config_operation import SaveConfigOperation from cyperf.models.session import Session from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner @@ -4562,16 +4561,6 @@ def _patch_session_test_serialize( - - - - - - - - - - @@ -5691,287 +5680,6 @@ def _start_session_load_config_serialize( - @validate_call - def start_session_prepare_test( - self, - session_id: Annotated[StrictStr, Field(description="The ID of the session.")], - prepare_test_operation: Optional[List[PrepareTestOperation]] = None, - _request_timeout: Union[ - None, - Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] - ] = None, - _request_auth: Optional[Dict[StrictStr, Any]] = None, - _content_type: Optional[StrictStr] = None, - _headers: Optional[Dict[StrictStr, Any]] = None, - _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> AsyncContext: - """start_session_prepare_test - - This operation returns the config processed as agent messages and any data necessary for UI and REST stats - - :param session_id: The ID of the session. (required) - :type session_id: str - :param prepare_test_operation: - :type prepare_test_operation: List[PrepareTestOperation] - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :type _request_timeout: int, tuple(int, int), optional - :param _request_auth: set to override the auth_settings for an a single - request; this effectively ignores the - authentication in the spec for a single request. - :type _request_auth: dict, optional - :param _content_type: force content-type for the request. - :type _content_type: str, Optional - :param _headers: set to override the headers for a single - request; this effectively ignores the headers - in the spec for a single request. - :type _headers: dict, optional - :param _host_index: set to override the host_index for a single - request; this effectively ignores the host_index - in the spec for a single request. - :type _host_index: int, optional - :return: Returns the result object. - """ # noqa: E501 - - _param = self._start_session_prepare_test_serialize( - session_id=session_id, - prepare_test_operation=prepare_test_operation, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index - ) - - _response_types_map: Dict[str, Optional[str]] = { - '202': "AsyncContext", - } - return self.api_client.call_api( - *_param, - _response_types_map=_response_types_map, - _request_timeout=_request_timeout - ) - - - @validate_call - def start_session_prepare_test_with_http_info( - self, - session_id: Annotated[StrictStr, Field(description="The ID of the session.")], - prepare_test_operation: Optional[List[PrepareTestOperation]] = None, - _request_timeout: Union[ - None, - Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] - ] = None, - _request_auth: Optional[Dict[StrictStr, Any]] = None, - _content_type: Optional[StrictStr] = None, - _headers: Optional[Dict[StrictStr, Any]] = None, - _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[AsyncContext]: - """start_session_prepare_test - - This operation returns the config processed as agent messages and any data necessary for UI and REST stats - - :param session_id: The ID of the session. (required) - :type session_id: str - :param prepare_test_operation: - :type prepare_test_operation: List[PrepareTestOperation] - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :type _request_timeout: int, tuple(int, int), optional - :param _request_auth: set to override the auth_settings for an a single - request; this effectively ignores the - authentication in the spec for a single request. - :type _request_auth: dict, optional - :param _content_type: force content-type for the request. - :type _content_type: str, Optional - :param _headers: set to override the headers for a single - request; this effectively ignores the headers - in the spec for a single request. - :type _headers: dict, optional - :param _host_index: set to override the host_index for a single - request; this effectively ignores the host_index - in the spec for a single request. - :type _host_index: int, optional - :return: Returns the result object. - """ # noqa: E501 - - _param = self._start_session_prepare_test_serialize( - session_id=session_id, - prepare_test_operation=prepare_test_operation, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index - ) - - _response_types_map: Dict[str, Optional[str]] = { - '202': "AsyncContext", - } - return self.api_client.call_api( - *_param, - _response_types_map=_response_types_map, - _request_timeout=_request_timeout - ) - - - @validate_call - def start_session_prepare_test_without_preload_content( - self, - session_id: Annotated[StrictStr, Field(description="The ID of the session.")], - prepare_test_operation: Optional[List[PrepareTestOperation]] = None, - _request_timeout: Union[ - None, - Annotated[StrictFloat, Field(gt=0)], - Tuple[ - Annotated[StrictFloat, Field(gt=0)], - Annotated[StrictFloat, Field(gt=0)] - ] - ] = None, - _request_auth: Optional[Dict[StrictStr, Any]] = None, - _content_type: Optional[StrictStr] = None, - _headers: Optional[Dict[StrictStr, Any]] = None, - _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> RESTResponseType: - """start_session_prepare_test - - This operation returns the config processed as agent messages and any data necessary for UI and REST stats - - :param session_id: The ID of the session. (required) - :type session_id: str - :param prepare_test_operation: - :type prepare_test_operation: List[PrepareTestOperation] - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :type _request_timeout: int, tuple(int, int), optional - :param _request_auth: set to override the auth_settings for an a single - request; this effectively ignores the - authentication in the spec for a single request. - :type _request_auth: dict, optional - :param _content_type: force content-type for the request. - :type _content_type: str, Optional - :param _headers: set to override the headers for a single - request; this effectively ignores the headers - in the spec for a single request. - :type _headers: dict, optional - :param _host_index: set to override the host_index for a single - request; this effectively ignores the host_index - in the spec for a single request. - :type _host_index: int, optional - :return: Returns the result object. - """ # noqa: E501 - - _param = self._start_session_prepare_test_serialize( - session_id=session_id, - prepare_test_operation=prepare_test_operation, - _request_auth=_request_auth, - _content_type=_content_type, - _headers=_headers, - _host_index=_host_index - ) - - _response_types_map: Dict[str, Optional[str]] = { - '202': "AsyncContext", - } - return self.api_client.call_api( - *_param, - _response_types_map=None, - _request_timeout=_request_timeout - ) - - - def _start_session_prepare_test_serialize( - self, - session_id, - prepare_test_operation, - _request_auth, - _content_type, - _headers, - _host_index, - ) -> RequestSerialized: - - _host = None - - _collection_formats: Dict[str, str] = { - 'PrepareTestOperation': '', - } - - _path_params: Dict[str, str] = {} - _query_params: List[Tuple[str, str]] = [] - _header_params: Dict[str, Optional[str]] = _headers or {} - _form_params: List[Tuple[str, str]] = [] - _files: Dict[str, Union[str, bytes]] = {} - _body_params: Optional[bytes] = None - - # process the path parameters - if session_id is not None: - _path_params['sessionId'] = session_id - # process the query parameters - # process the header parameters - # process the form parameters - # process the body parameter - if prepare_test_operation is not None: - _body_params = prepare_test_operation - - - # set the HTTP header `Accept` - if 'Accept' not in _header_params: - _header_params['Accept'] = self.api_client.select_header_accept( - [ - 'application/json' - ] - ) - - # set the HTTP header `Content-Type` - if _content_type: - _header_params['Content-Type'] = _content_type - else: - _default_content_type = ( - self.api_client.select_header_content_type( - [ - 'application/json' - ] - ) - ) - if _default_content_type is not None: - _header_params['Content-Type'] = _default_content_type - - # authentication setting - _auth_settings: List[str] = [ - 'OAuth2', - 'OAuth2' - ] - - return self.api_client.param_serialize( - method='POST', - resource_path='/api/v2/sessions/{sessionId}/operations/prepareTest', - path_params=_path_params, - query_params=_query_params, - header_params=_header_params, - body=_body_params, - post_params=_form_params, - files=_files, - auth_settings=_auth_settings, - collection_formats=_collection_formats, - _host=_host, - _request_auth=_request_auth - ) - - - - @validate_call def start_session_test_end( self, diff --git a/cyperf/api/utils_api.py b/cyperf/api/utils_api.py index b4eaf2f..0fa71ae 100644 --- a/cyperf/api/utils_api.py +++ b/cyperf/api/utils_api.py @@ -2030,6 +2030,7 @@ def _get_docs_yaml_serialize( @validate_call def get_eula( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2046,6 +2047,8 @@ def get_eula( """Retrieve EULA detail + :param id: The ID of the EULA. (required) + :type id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2069,6 +2072,7 @@ def get_eula( """ # noqa: E501 _param = self._get_eula_serialize( + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2089,6 +2093,7 @@ def get_eula( @validate_call def get_eula_with_http_info( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2105,6 +2110,8 @@ def get_eula_with_http_info( """Retrieve EULA detail + :param id: The ID of the EULA. (required) + :type id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2128,6 +2135,7 @@ def get_eula_with_http_info( """ # noqa: E501 _param = self._get_eula_serialize( + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2148,6 +2156,7 @@ def get_eula_with_http_info( @validate_call def get_eula_without_preload_content( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], _request_timeout: Union[ None, Annotated[StrictFloat, Field(gt=0)], @@ -2164,6 +2173,8 @@ def get_eula_without_preload_content( """Retrieve EULA detail + :param id: The ID of the EULA. (required) + :type id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request timeout. It can also be a pair (tuple) of @@ -2187,6 +2198,7 @@ def get_eula_without_preload_content( """ # noqa: E501 _param = self._get_eula_serialize( + id=id, _request_auth=_request_auth, _content_type=_content_type, _headers=_headers, @@ -2206,6 +2218,7 @@ def get_eula_without_preload_content( def _get_eula_serialize( self, + id, _request_auth, _content_type, _headers, @@ -2225,6 +2238,8 @@ def _get_eula_serialize( _body_params: Optional[bytes] = None # process the path parameters + if id is not None: + _path_params['id'] = id # process the query parameters # process the header parameters # process the form parameters @@ -2248,7 +2263,7 @@ def _get_eula_serialize( return self.api_client.param_serialize( method='GET', - resource_path='/eula/v1/eula/CyPerf', + resource_path='/eula/v1/eula/{id}', path_params=_path_params, query_params=_query_params, header_params=_header_params, @@ -3048,6 +3063,7 @@ def _list_eulas_serialize( @validate_call def post_eula( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], eula_summary: Optional[EulaSummary] = None, _request_timeout: Union[ None, @@ -3065,6 +3081,8 @@ def post_eula( """Update properties an EULA + :param id: The ID of the EULA. (required) + :type id: str :param eula_summary: :type eula_summary: EulaSummary :param _request_timeout: timeout setting for this request. If one @@ -3090,6 +3108,7 @@ def post_eula( """ # noqa: E501 _param = self._post_eula_serialize( + id=id, eula_summary=eula_summary, _request_auth=_request_auth, _content_type=_content_type, @@ -3111,6 +3130,7 @@ def post_eula( @validate_call def post_eula_with_http_info( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], eula_summary: Optional[EulaSummary] = None, _request_timeout: Union[ None, @@ -3128,6 +3148,8 @@ def post_eula_with_http_info( """Update properties an EULA + :param id: The ID of the EULA. (required) + :type id: str :param eula_summary: :type eula_summary: EulaSummary :param _request_timeout: timeout setting for this request. If one @@ -3153,6 +3175,7 @@ def post_eula_with_http_info( """ # noqa: E501 _param = self._post_eula_serialize( + id=id, eula_summary=eula_summary, _request_auth=_request_auth, _content_type=_content_type, @@ -3174,6 +3197,7 @@ def post_eula_with_http_info( @validate_call def post_eula_without_preload_content( self, + id: Annotated[StrictStr, Field(description="The ID of the EULA.")], eula_summary: Optional[EulaSummary] = None, _request_timeout: Union[ None, @@ -3191,6 +3215,8 @@ def post_eula_without_preload_content( """Update properties an EULA + :param id: The ID of the EULA. (required) + :type id: str :param eula_summary: :type eula_summary: EulaSummary :param _request_timeout: timeout setting for this request. If one @@ -3216,6 +3242,7 @@ def post_eula_without_preload_content( """ # noqa: E501 _param = self._post_eula_serialize( + id=id, eula_summary=eula_summary, _request_auth=_request_auth, _content_type=_content_type, @@ -3236,6 +3263,7 @@ def post_eula_without_preload_content( def _post_eula_serialize( self, + id, eula_summary, _request_auth, _content_type, @@ -3256,6 +3284,8 @@ def _post_eula_serialize( _body_params: Optional[bytes] = None # process the path parameters + if id is not None: + _path_params['id'] = id # process the query parameters # process the header parameters # process the form parameters @@ -3294,7 +3324,7 @@ def _post_eula_serialize( return self.api_client.param_serialize( method='POST', - resource_path='/eula/v1/eula/CyPerf', + resource_path='/eula/v1/eula/{id}', path_params=_path_params, query_params=_query_params, header_params=_header_params, diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 36df2ec..08c3cbf 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -76,6 +76,7 @@ Authenticate200Response = DynamicModel('Authenticate200Response', (), {} ) AuthenticationSettings = DynamicModel('AuthenticationSettings', (), {} ) AutomaticIpType = DynamicModel('AutomaticIpType', (), {} ) +BasicAuthProfile = DynamicModel('BasicAuthProfile', (), {} ) Broker = DynamicModel('Broker', (), {} ) CaptureInput = DynamicModel('CaptureInput', (), {} ) CaptureInputFindParam = DynamicModel('CaptureInputFindParam', (), {} ) @@ -91,11 +92,13 @@ CipherTLS13 = DynamicModel('CipherTLS13', (), {} ) CiscoAnyConnectSettings = DynamicModel('CiscoAnyConnectSettings', (), {} ) CiscoEncapsulation = DynamicModel('CiscoEncapsulation', (), {} ) +ClassicalSignatureAlgorithmTLS13 = DynamicModel('ClassicalSignatureAlgorithmTLS13', (), {} ) ClearComputeResourcesOwnershipOperation = DynamicModel('ClearComputeResourcesOwnershipOperation', (), {} ) ClearFrontPanelPortsOwnershipOperation = DynamicModel('ClearFrontPanelPortsOwnershipOperation', (), {} ) ClearPortsOwnershipOperation = DynamicModel('ClearPortsOwnershipOperation', (), {} ) Command = DynamicModel('Command', (), {} ) CommandMetadata = DynamicModel('CommandMetadata', (), {} ) +CompositePqcSignatureAlgorithmTLS13 = DynamicModel('CompositePqcSignatureAlgorithmTLS13', (), {} ) ComputeNode = DynamicModel('ComputeNode', (), {} ) ComputeResource = DynamicModel('ComputeResource', (), {} ) ComputeResourcesByController = DynamicModel('ComputeResourcesByController', (), {} ) @@ -110,6 +113,7 @@ Connection = DynamicModel('Connection', (), {} ) ConnectionPersistence = DynamicModel('ConnectionPersistence', (), {} ) Consumer = DynamicModel('Consumer', (), {} ) +ContentBlock = DynamicModel('ContentBlock', (), {} ) Controller = DynamicModel('Controller', (), {} ) CountedFeatureConsumer = DynamicModel('CountedFeatureConsumer', (), {} ) CountedFeatureStats = DynamicModel('CountedFeatureStats', (), {} ) @@ -176,6 +180,7 @@ Filter = DynamicModel('Filter', (), {} ) FilteredStat = DynamicModel('FilteredStat', (), {} ) FindParamMatchesOperation = DynamicModel('FindParamMatchesOperation', (), {} ) +FormattedDescription = DynamicModel('FormattedDescription', (), {} ) FortinetEncapsulation = DynamicModel('FortinetEncapsulation', (), {} ) FortinetSettings = DynamicModel('FortinetSettings', (), {} ) FrontPanel = DynamicModel('FrontPanel', (), {} ) @@ -189,9 +194,7 @@ GetAgents200ResponseOneOf = DynamicModel('GetAgents200ResponseOneOf', (), {} ) GetAgentsTags200Response = DynamicModel('GetAgentsTags200Response', (), {} ) GetAgentsTags200ResponseOneOf = DynamicModel('GetAgentsTags200ResponseOneOf', (), {} ) -GetAppsOperation = DynamicModel('GetAppsOperation', (), {} ) GetAsyncOperationResult200Response = DynamicModel('GetAsyncOperationResult200Response', (), {} ) -GetAttacksOperation = DynamicModel('GetAttacksOperation', (), {} ) GetBrokers200Response = DynamicModel('GetBrokers200Response', (), {} ) GetBrokers200ResponseOneOf = DynamicModel('GetBrokers200ResponseOneOf', (), {} ) GetCategoriesOperation = DynamicModel('GetCategoriesOperation', (), {} ) @@ -234,6 +237,7 @@ GetResults200ResponseOneOf = DynamicModel('GetResults200ResponseOneOf', (), {} ) GetResultsTags200Response = DynamicModel('GetResultsTags200Response', (), {} ) GetResultsTags200ResponseOneOf = DynamicModel('GetResultsTags200ResponseOneOf', (), {} ) +GetScenariosOperation = DynamicModel('GetScenariosOperation', (), {} ) GetSessionMeta200Response = DynamicModel('GetSessionMeta200Response', (), {} ) GetSessionMeta200ResponseOneOf = DynamicModel('GetSessionMeta200ResponseOneOf', (), {} ) GetSessions200Response = DynamicModel('GetSessions200Response', (), {} ) @@ -266,7 +270,9 @@ IpMask = DynamicModel('IpMask', (), {} ) IpPreference = DynamicModel('IpPreference', (), {} ) IpVer = DynamicModel('IpVer', (), {} ) +Keyword = DynamicModel('Keyword', (), {} ) LLMAPIProfile = DynamicModel('LLMAPIProfile', (), {} ) +LayoutConfig = DynamicModel('LayoutConfig', (), {} ) License = DynamicModel('License', (), {} ) LicenseReceipt = DynamicModel('LicenseReceipt', (), {} ) LicenseServerMetadata = DynamicModel('LicenseServerMetadata', (), {} ) @@ -335,9 +341,9 @@ PortsByController = DynamicModel('PortsByController', (), {} ) PortsByNode = DynamicModel('PortsByNode', (), {} ) PortsByPanel = DynamicModel('PortsByPanel', (), {} ) -PrepareTestOperation = DynamicModel('PrepareTestOperation', (), {} ) -PreparedTestOptions = DynamicModel('PreparedTestOptions', (), {} ) +PqcSignatureAlgorithmTLS13 = DynamicModel('PqcSignatureAlgorithmTLS13', (), {} ) PrfP1Algorithm = DynamicModel('PrfP1Algorithm', (), {} ) +Profile = DynamicModel('Profile', (), {} ) ProtectedSubnetConfig = DynamicModel('ProtectedSubnetConfig', (), {} ) QUICProfile = DynamicModel('QUICProfile', (), {} ) QUICVersion = DynamicModel('QUICVersion', (), {} ) @@ -364,6 +370,7 @@ SaveConfigOperation = DynamicModel('SaveConfigOperation', (), {} ) Scenario = DynamicModel('Scenario', (), {} ) SecondaryObjective = DynamicModel('SecondaryObjective', (), {} ) +Section = DynamicModel('Section', (), {} ) SegmentType = DynamicModel('SegmentType', (), {} ) SelectedEnv = DynamicModel('SelectedEnv', (), {} ) SequenceDataTypes = DynamicModel('SequenceDataTypes', (), {} ) @@ -402,7 +409,7 @@ TcpProfile = DynamicModel('TcpProfile', (), {} ) TestInfo = DynamicModel('TestInfo', (), {} ) TestStateChangedOperation = DynamicModel('TestStateChangedOperation', (), {} ) -TestUsage = DynamicModel('TestUsage', (), {} ) +TextSegment = DynamicModel('TextSegment', (), {} ) TimeValue = DynamicModel('TimeValue', (), {} ) TimelineSegment = DynamicModel('TimelineSegment', (), {} ) TimelineSegmentBase = DynamicModel('TimelineSegmentBase', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 57762b5..24b5a3f 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -76,6 +76,7 @@ class LinkNameException(Exception): from cyperf.models.authenticate200_response import Authenticate200Response from cyperf.models.authentication_settings import AuthenticationSettings from cyperf.models.automatic_ip_type import AutomaticIpType +from cyperf.models.basic_auth_profile import BasicAuthProfile from cyperf.models.broker import Broker from cyperf.models.capture_input import CaptureInput from cyperf.models.capture_input_find_param import CaptureInputFindParam @@ -91,11 +92,13 @@ class LinkNameException(Exception): from cyperf.models.cipher_tls13 import CipherTLS13 from cyperf.models.cisco_any_connect_settings import CiscoAnyConnectSettings from cyperf.models.cisco_encapsulation import CiscoEncapsulation +from cyperf.models.classical_signature_algorithm_tls13 import ClassicalSignatureAlgorithmTLS13 from cyperf.models.clear_compute_resources_ownership_operation import ClearComputeResourcesOwnershipOperation from cyperf.models.clear_front_panel_ports_ownership_operation import ClearFrontPanelPortsOwnershipOperation from cyperf.models.clear_ports_ownership_operation import ClearPortsOwnershipOperation from cyperf.models.command import Command from cyperf.models.command_metadata import CommandMetadata +from cyperf.models.composite_pqc_signature_algorithm_tls13 import CompositePqcSignatureAlgorithmTLS13 from cyperf.models.compute_node import ComputeNode from cyperf.models.compute_resource import ComputeResource from cyperf.models.compute_resources_by_controller import ComputeResourcesByController @@ -110,6 +113,7 @@ class LinkNameException(Exception): from cyperf.models.connection import Connection from cyperf.models.connection_persistence import ConnectionPersistence from cyperf.models.consumer import Consumer +from cyperf.models.content_block import ContentBlock from cyperf.models.controller import Controller from cyperf.models.counted_feature_consumer import CountedFeatureConsumer from cyperf.models.counted_feature_stats import CountedFeatureStats @@ -176,6 +180,7 @@ class LinkNameException(Exception): from cyperf.models.filter import Filter from cyperf.models.filtered_stat import FilteredStat from cyperf.models.find_param_matches_operation import FindParamMatchesOperation +from cyperf.models.formatted_description import FormattedDescription from cyperf.models.fortinet_encapsulation import FortinetEncapsulation from cyperf.models.fortinet_settings import FortinetSettings from cyperf.models.front_panel import FrontPanel @@ -189,9 +194,7 @@ class LinkNameException(Exception): from cyperf.models.get_agents200_response_one_of import GetAgents200ResponseOneOf from cyperf.models.get_agents_tags200_response import GetAgentsTags200Response from cyperf.models.get_agents_tags200_response_one_of import GetAgentsTags200ResponseOneOf -from cyperf.models.get_apps_operation import GetAppsOperation from cyperf.models.get_async_operation_result200_response import GetAsyncOperationResult200Response -from cyperf.models.get_attacks_operation import GetAttacksOperation from cyperf.models.get_brokers200_response import GetBrokers200Response from cyperf.models.get_brokers200_response_one_of import GetBrokers200ResponseOneOf from cyperf.models.get_categories_operation import GetCategoriesOperation @@ -234,6 +237,7 @@ class LinkNameException(Exception): from cyperf.models.get_results200_response_one_of import GetResults200ResponseOneOf from cyperf.models.get_results_tags200_response import GetResultsTags200Response from cyperf.models.get_results_tags200_response_one_of import GetResultsTags200ResponseOneOf +from cyperf.models.get_scenarios_operation import GetScenariosOperation from cyperf.models.get_session_meta200_response import GetSessionMeta200Response from cyperf.models.get_session_meta200_response_one_of import GetSessionMeta200ResponseOneOf from cyperf.models.get_sessions200_response import GetSessions200Response @@ -266,7 +270,9 @@ class LinkNameException(Exception): from cyperf.models.ip_mask import IpMask from cyperf.models.ip_preference import IpPreference from cyperf.models.ip_ver import IpVer +from cyperf.models.keyword import Keyword from cyperf.models.llmapi_profile import LLMAPIProfile +from cyperf.models.layout_config import LayoutConfig from cyperf.models.license import License from cyperf.models.license_receipt import LicenseReceipt from cyperf.models.license_server_metadata import LicenseServerMetadata @@ -335,9 +341,9 @@ class LinkNameException(Exception): from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode from cyperf.models.ports_by_panel import PortsByPanel -from cyperf.models.prepare_test_operation import PrepareTestOperation -from cyperf.models.prepared_test_options import PreparedTestOptions +from cyperf.models.pqc_signature_algorithm_tls13 import PqcSignatureAlgorithmTLS13 from cyperf.models.prf_p1_algorithm import PrfP1Algorithm +from cyperf.models.profile import Profile from cyperf.models.protected_subnet_config import ProtectedSubnetConfig from cyperf.models.quic_profile import QUICProfile from cyperf.models.quic_version import QUICVersion @@ -364,6 +370,7 @@ class LinkNameException(Exception): from cyperf.models.save_config_operation import SaveConfigOperation from cyperf.models.scenario import Scenario from cyperf.models.secondary_objective import SecondaryObjective +from cyperf.models.section import Section from cyperf.models.segment_type import SegmentType from cyperf.models.selected_env import SelectedEnv from cyperf.models.sequence_data_types import SequenceDataTypes @@ -402,7 +409,7 @@ class LinkNameException(Exception): from cyperf.models.tcp_profile import TcpProfile from cyperf.models.test_info import TestInfo from cyperf.models.test_state_changed_operation import TestStateChangedOperation -from cyperf.models.test_usage import TestUsage +from cyperf.models.text_segment import TextSegment from cyperf.models.time_value import TimeValue from cyperf.models.timeline_segment import TimelineSegment from cyperf.models.timeline_segment_base import TimelineSegmentBase diff --git a/cyperf/models/agent.py b/cyperf/models/agent.py index 60d8573..e88d757 100644 --- a/cyperf/models/agent.py +++ b/cyperf/models/agent.py @@ -42,6 +42,7 @@ class Agent(BaseModel): last_update: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the agent was last updated", alias="LastUpdate") port_id_format: Optional[StrictStr] = Field(default=None, description="port agent id format", alias="PortIDFormat") reservation_id: Optional[StrictStr] = Field(default=None, description="The ID of the reservation", alias="ReservationID") + resource_name_format: Optional[StrictStr] = Field(default=None, description="display agent resource name format", alias="ResourceNameFormat") selected_env: Optional[SelectedEnv] = Field(default=None, alias="SelectedEnv") selection_status: Optional[StrictStr] = Field(default=None, description="The current status of the selection operation", alias="SelectionStatus") session_name: Optional[StrictStr] = Field(default=None, description="The session's name where the agent is running", alias="SessionName") @@ -62,7 +63,7 @@ class Agent(BaseModel): requires_updating: Optional[StrictBool] = Field(default=None, description="A flag indicating whether the agent is not using the recommended version", alias="requiresUpdating") system_info: Optional[SystemInfo] = Field(default=None, alias="systemInfo") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AgentTags", "DisplayNameFormat", "IP", "Interfaces", "LastUpdate", "PortIDFormat", "ReservationID", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] + __properties: ClassVar[List[str]] = ["AgentTags", "DisplayNameFormat", "IP", "Interfaces", "LastUpdate", "PortIDFormat", "ReservationID", "ResourceNameFormat", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] model_config = ConfigDict( populate_by_name=True, @@ -190,6 +191,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "LastUpdate": obj.get("LastUpdate"), "PortIDFormat": obj.get("PortIDFormat"), "ReservationID": obj.get("ReservationID"), + "ResourceNameFormat": obj.get("ResourceNameFormat"), "SelectedEnv": SelectedEnv.from_dict(obj["SelectedEnv"]) if obj.get("SelectedEnv") is not None else None, "SelectionStatus": obj.get("SelectionStatus"), "SessionName": obj.get("SessionName"), diff --git a/cyperf/models/attack_metadata_keywords_inner.py b/cyperf/models/attack_metadata_keywords_inner.py deleted file mode 100644 index 43082b2..0000000 --- a/cyperf/models/attack_metadata_keywords_inner.py +++ /dev/null @@ -1,208 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -from inspect import getfullargspec -import json -import pprint -import re # noqa: F401 -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr, ValidationError, field_validator -from typing import Any, Dict, List, Optional, Union -from typing import Union, Any, List, Set, TYPE_CHECKING, Optional, Dict -from typing_extensions import Literal, Self -from pydantic import Field - -ATTACKMETADATAKEYWORDSINNER_ANY_OF_SCHEMAS = ["List[object]", "bool", "float", "int", "object", "str"] - -class AttackMetadataKeywordsInner(BaseModel): - """ - AttackMetadataKeywordsInner - """ - - # data type: str - anyof_schema_1_validator: Optional[StrictStr] = None - # data type: float - anyof_schema_2_validator: Optional[Union[StrictFloat, StrictInt]] = None - # data type: int - anyof_schema_3_validator: Optional[StrictInt] = None - # data type: bool - anyof_schema_4_validator: Optional[StrictBool] = None - # data type: List[object] - anyof_schema_5_validator: Optional[List[Any]] = None - # data type: object - anyof_schema_6_validator: Optional[Dict[str, Any]] = None - if TYPE_CHECKING: - actual_instance: Optional[Union[List[object], bool, float, int, object, str]] = None - else: - actual_instance: Any = None - any_of_schemas: Set[str] = { "List[object]", "bool", "float", "int", "object", "str" } - - model_config = { - "validate_assignment": True, - "protected_namespaces": (), - } - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_anyof(cls, v): - instance = AttackMetadataKeywordsInner.model_construct() - error_messages = [] - # validate data type: str - try: - instance.anyof_schema_1_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: float - try: - instance.anyof_schema_2_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: int - try: - instance.anyof_schema_3_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: bool - try: - instance.anyof_schema_4_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: List[object] - try: - instance.anyof_schema_5_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: object - try: - instance.anyof_schema_6_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - if error_messages: - # no match - raise ValueError("No match found when setting the actual_instance in AttackMetadataKeywordsInner with anyOf schemas: List[object], bool, float, int, object, str. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Dict[str, Any]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - # deserialize data into str - try: - # validation - instance.anyof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_1_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into float - try: - # validation - instance.anyof_schema_2_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_2_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into int - try: - # validation - instance.anyof_schema_3_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_3_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into bool - try: - # validation - instance.anyof_schema_4_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_4_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into List[object] - try: - # validation - instance.anyof_schema_5_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_5_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into object - try: - # validation - instance.anyof_schema_6_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_6_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if error_messages: - # no match - raise ValueError("No match found when deserializing the JSON string into AttackMetadataKeywordsInner with anyOf schemas: List[object], bool, float, int, object, str. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], List[object], bool, float, int, object, str]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/auth_realms_keysight_protocol_openid_connect_token_post200_response.py b/cyperf/models/auth_realms_keysight_protocol_openid_connect_token_post200_response.py deleted file mode 100644 index e89e3a2..0000000 --- a/cyperf/models/auth_realms_keysight_protocol_openid_connect_token_post200_response.py +++ /dev/null @@ -1,99 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr -from typing import Any, ClassVar, Dict, List, Optional, Union -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response(BaseModel): - """ - AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response - """ # noqa: E501 - access_token: Optional[StrictStr] = Field(default=None, description="The access token. Set this in the Authorization HTTP Header to authenticate requests.") - expires_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The access token lifetime.") - refresh_expires_in: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The refresh token lifetime.") - refresh_token: Optional[StrictStr] = Field(default=None, description="Token that can be used with this request and grant_type: refresh_token to get a new access_token if the current one expires.") - __properties: ClassVar[List[str]] = ["access_token", "expires_in", "refresh_expires_in", "refresh_token"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "access_token": obj.get("access_token"), - "expires_in": obj.get("expires_in"), - "refresh_expires_in": obj.get("refresh_expires_in"), - "refresh_token": obj.get("refresh_token") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_apps200_response_one_of.py b/cyperf/models/basic_auth_profile.py similarity index 61% rename from cyperf/models/get_apps200_response_one_of.py rename to cyperf/models/basic_auth_profile.py index b77db43..311e829 100644 --- a/cyperf/models/get_apps200_response_one_of.py +++ b/cyperf/models/basic_auth_profile.py @@ -18,20 +18,22 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt +from pydantic import BaseModel, ConfigDict, Field, StrictBool from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.appsec_app import AppsecApp -from typing import Optional, Set, Union, GenericAlias, get_args +from cyperf.models.api_link import APILink +from cyperf.models.params import Params +from typing import Optional, Set, Union from typing_extensions import Self -from pydantic import Field +from pydantic import Field, PrivateAttr -class GetApps200ResponseOneOf(BaseModel): +class BasicAuthProfile(BaseModel): """ - GetApps200ResponseOneOf + BasicAuthProfile """ # noqa: E501 - data: Optional[List[AppsecApp]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] + active: Optional[StrictBool] = Field(default=None, alias="Active") + params: Optional[List[Params]] = Field(default=None, alias="Params") + links: Optional[List[APILink]] = None + __properties: ClassVar[List[str]] = ["Active", "Params", "links"] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +53,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetApps200ResponseOneOf from a JSON string""" + """Create an instance of BasicAuthProfile from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -72,18 +74,25 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) + # override the default output from pydantic by calling `to_dict()` of each item in params (list) _items = [] - if self.data: - for _item in self.data: + if self.params: + for _item in self.params: if _item: _items.append(_item.to_dict()) - _dict['data'] = _items + _dict['Params'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetApps200ResponseOneOf from a dict""" + """Create an instance of BasicAuthProfile from a dict""" if obj is None: return None @@ -93,8 +102,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "data": [AppsecApp.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") + "Active": obj.get("Active"), + "Params": ( [Params.from_dict(_item) for _item in obj.get("Params", [])] if obj.get("Params") is not None else None), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None) , "links": obj.get("links") }) diff --git a/cyperf/models/broker.py b/cyperf/models/broker.py index ec2df0c..8c84a17 100644 --- a/cyperf/models/broker.py +++ b/cyperf/models/broker.py @@ -18,7 +18,7 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from typing import Optional, Set, Union from typing_extensions import Self @@ -28,18 +28,18 @@ class Broker(BaseModel): """ Broker """ # noqa: E501 - connection_status: Optional[StrictStr] = Field(default=None, description="The broker's connection status", alias="connectionStatus") - failure_reason: Optional[StrictStr] = Field(default=None, description="The broker's connection failure reason", alias="failureReason") - fingerprint: Optional[StrictStr] = Field(default=None, description="The broker's fingerprint") - host: Optional[StrictStr] = Field(default=None, description="The IP or hostname of the registered broker") - host_name: Optional[StrictStr] = Field(default=None, description="The IP or hostname of the registered broker", alias="hostName") - id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the broker") - interactive_fingerprint_verification: Optional[StrictBool] = Field(default=None, description="Validate the broker's fingerprint interactively", alias="interactiveFingerprintVerification") - password: Optional[StrictStr] = Field(default=None, description="The broker's authentication password") - pretty_conn_status: Optional[StrictStr] = Field(default=None, description="The broker's connection status in human readable format", alias="prettyConnStatus") - trust_new: Optional[StrictBool] = Field(default=None, description="The flag used to skip broker's identity verifications", alias="trustNew") - user: Optional[StrictStr] = Field(default=None, description="The broker's authentication user") - __properties: ClassVar[List[str]] = ["connectionStatus", "failureReason", "fingerprint", "host", "hostName", "id", "interactiveFingerprintVerification", "password", "prettyConnStatus", "trustNew", "user"] + connection_status: Optional[StrictStr] = Field(default=None, alias="connectionStatus") + failure_reason: Optional[StrictStr] = Field(default=None, alias="failureReason") + fingerprint: Optional[StrictStr] = None + host_name: Optional[StrictStr] = Field(default=None, alias="hostName") + id: Optional[StrictInt] = None + interactive_fingerprint_verification: Optional[StrictBool] = Field(default=None, alias="interactiveFingerprintVerification") + password: Optional[StrictStr] = None + pretty_conn_status: Optional[StrictStr] = Field(default=None, alias="prettyConnStatus") + trust_new: Optional[StrictBool] = Field(default=None, alias="trustNew") + tunnel_host_name: Optional[StrictStr] = Field(default=None, alias="tunnelHostName") + user: Optional[StrictStr] = None + __properties: ClassVar[List[str]] = ["connectionStatus", "failureReason", "fingerprint", "hostName", "id", "interactiveFingerprintVerification", "password", "prettyConnStatus", "trustNew", "tunnelHostName", "user"] model_config = ConfigDict( populate_by_name=True, @@ -71,10 +71,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set([ - "id", ]) _dict = self.model_dump( @@ -99,13 +97,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "connectionStatus": obj.get("connectionStatus"), "failureReason": obj.get("failureReason"), "fingerprint": obj.get("fingerprint"), - "host": obj.get("host"), "hostName": obj.get("hostName"), "id": obj.get("id"), "interactiveFingerprintVerification": obj.get("interactiveFingerprintVerification"), "password": obj.get("password"), "prettyConnStatus": obj.get("prettyConnStatus"), "trustNew": obj.get("trustNew"), + "tunnelHostName": obj.get("tunnelHostName"), "user": obj.get("user") , "links": obj.get("links") diff --git a/cyperf/models/change_aggregation_mode_operation.py b/cyperf/models/change_aggregation_mode_operation.py deleted file mode 100644 index 9a62ec8..0000000 --- a/cyperf/models/change_aggregation_mode_operation.py +++ /dev/null @@ -1,97 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr -from typing import Any, ClassVar, Dict, List, Optional -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class ChangeAggregationModeOperation(BaseModel): - """ - ChangeAggregationModeOperation - """ # noqa: E501 - aggregated: Optional[StrictBool] = Field(default=None, description="The desired aggregation mode.") - compute_nodes: Optional[List[StrictStr]] = Field(default=None, description="The compute-node ids for which to change the aggregation mode.", alias="compute-nodes") - controller: Optional[StrictStr] = Field(default=None, description="The id of the controller that is linked with the compute-nodes.") - __properties: ClassVar[List[str]] = ["aggregated", "compute-nodes", "controller"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of ChangeAggregationModeOperation from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of ChangeAggregationModeOperation from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "aggregated": obj.get("aggregated"), - "compute-nodes": obj.get("compute-nodes"), - "controller": obj.get("controller") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/change_link_state_operation.py b/cyperf/models/change_link_state_operation.py deleted file mode 100644 index 71ef69e..0000000 --- a/cyperf/models/change_link_state_operation.py +++ /dev/null @@ -1,106 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator -from typing import Any, ClassVar, Dict, List, Optional -from typing_extensions import Annotated -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class ChangeLinkStateOperation(BaseModel): - """ - ChangeLinkStateOperation - """ # noqa: E501 - link: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The desired link state.") - ports: Optional[List[StrictStr]] = Field(default=None, description="The port ids for which to change the link state.") - __properties: ClassVar[List[str]] = ["link", "ports"] - - @field_validator('link') - def link_validate_regular_expression(cls, value): - """Validates the regular expression""" - if value is None: - return value - - if not re.match(r"^(UP|DOWN)$", value): - raise ValueError(r"must validate the regular expression /^(UP|DOWN)$/") - return value - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of ChangeLinkStateOperation from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of ChangeLinkStateOperation from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "link": obj.get("link"), - "ports": obj.get("ports") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/classical_signature_algorithm_tls13.py b/cyperf/models/classical_signature_algorithm_tls13.py new file mode 100644 index 0000000..9ebe192 --- /dev/null +++ b/cyperf/models/classical_signature_algorithm_tls13.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class ClassicalSignatureAlgorithmTLS13(str, Enum): + """ + The TLS supported classical signature algorithms. + """ + + """ + allowed enum values + """ + RSA_PKCS1_SHA256 = 'rsa_pkcs1_sha256' + RSA_PKCS1_SHA384 = 'rsa_pkcs1_sha384' + RSA_PKCS1_SHA512 = 'rsa_pkcs1_sha512' + ECDSA_SECP256R1_SHA256 = 'ecdsa_secp256r1_sha256' + ECDSA_SECP384R1_SHA384 = 'ecdsa_secp384r1_sha384' + ECDSA_SECP521R1_SHA512 = 'ecdsa_secp521r1_sha512' + RSA_PSS_RSAE_SHA256 = 'rsa_pss_rsae_sha256' + RSA_PSS_RSAE_SHA384 = 'rsa_pss_rsae_sha384' + RSA_PSS_RSAE_SHA512 = 'rsa_pss_rsae_sha512' + RSA_PSS_PSS_SHA256 = 'rsa_pss_pss_sha256' + RSA_PSS_PSS_SHA384 = 'rsa_pss_pss_sha384' + RSA_PSS_PSS_SHA512 = 'rsa_pss_pss_sha512' + ED25519 = 'ed25519' + ED448 = 'ed448' + ECDSA_BRAINPOOLP256R1TLS13_SHA256 = 'ecdsa_brainpoolp256r1tls13_sha256' + ECDSA_BRAINPOOLP384R1TLS13_SHA384 = 'ecdsa_brainpoolp384r1tls13_sha384' + ECDSA_BRAINPOOLP512R1TLS13_SHA512 = 'ecdsa_brainpoolp512r1tls13_sha512' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of ClassicalSignatureAlgorithmTLS13 from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/composite_pqc_signature_algorithm_tls13.py b/cyperf/models/composite_pqc_signature_algorithm_tls13.py new file mode 100644 index 0000000..c69163f --- /dev/null +++ b/cyperf/models/composite_pqc_signature_algorithm_tls13.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class CompositePqcSignatureAlgorithmTLS13(str, Enum): + """ + The TLSv1.3 supported composite PQC signature algorithms. + """ + + """ + allowed enum values + """ + P256_MLDSA44 = 'p256_mldsa44' + P384_MLDSA65 = 'p384_mldsa65' + P521_MLDSA87 = 'p521_mldsa87' + RSA3072_MLDSA44 = 'rsa3072_mldsa44' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of CompositePqcSignatureAlgorithmTLS13 from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/config_metadata_config_data_value.py b/cyperf/models/config_metadata_config_data_value.py deleted file mode 100644 index 021627c..0000000 --- a/cyperf/models/config_metadata_config_data_value.py +++ /dev/null @@ -1,208 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -from inspect import getfullargspec -import json -import pprint -import re # noqa: F401 -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr, ValidationError, field_validator -from typing import Any, Dict, List, Optional, Union -from typing import Union, Any, List, Set, TYPE_CHECKING, Optional, Dict -from typing_extensions import Literal, Self -from pydantic import Field - -CONFIGMETADATACONFIGDATAVALUE_ANY_OF_SCHEMAS = ["List[object]", "bool", "float", "int", "object", "str"] - -class ConfigMetadataConfigDataValue(BaseModel): - """ - ConfigMetadataConfigDataValue - """ - - # data type: str - anyof_schema_1_validator: Optional[StrictStr] = None - # data type: float - anyof_schema_2_validator: Optional[Union[StrictFloat, StrictInt]] = None - # data type: int - anyof_schema_3_validator: Optional[StrictInt] = None - # data type: bool - anyof_schema_4_validator: Optional[StrictBool] = None - # data type: List[object] - anyof_schema_5_validator: Optional[List[Any]] = None - # data type: object - anyof_schema_6_validator: Optional[Dict[str, Any]] = None - if TYPE_CHECKING: - actual_instance: Optional[Union[List[object], bool, float, int, object, str]] = None - else: - actual_instance: Any = None - any_of_schemas: Set[str] = { "List[object]", "bool", "float", "int", "object", "str" } - - model_config = { - "validate_assignment": True, - "protected_namespaces": (), - } - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_anyof(cls, v): - instance = ConfigMetadataConfigDataValue.model_construct() - error_messages = [] - # validate data type: str - try: - instance.anyof_schema_1_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: float - try: - instance.anyof_schema_2_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: int - try: - instance.anyof_schema_3_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: bool - try: - instance.anyof_schema_4_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: List[object] - try: - instance.anyof_schema_5_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: object - try: - instance.anyof_schema_6_validator = v - return v - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - if error_messages: - # no match - raise ValueError("No match found when setting the actual_instance in ConfigMetadataConfigDataValue with anyOf schemas: List[object], bool, float, int, object, str. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Dict[str, Any]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - # deserialize data into str - try: - # validation - instance.anyof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_1_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into float - try: - # validation - instance.anyof_schema_2_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_2_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into int - try: - # validation - instance.anyof_schema_3_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_3_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into bool - try: - # validation - instance.anyof_schema_4_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_4_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into List[object] - try: - # validation - instance.anyof_schema_5_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_5_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into object - try: - # validation - instance.anyof_schema_6_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.anyof_schema_6_validator - return instance - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if error_messages: - # no match - raise ValueError("No match found when deserializing the JSON string into ConfigMetadataConfigDataValue with anyOf schemas: List[object], bool, float, int, object, str. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], List[object], bool, float, int, object, str]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/capture.py b/cyperf/models/content_block.py similarity index 58% rename from cyperf/models/capture.py rename to cyperf/models/content_block.py index b9cff67..3831fde 100644 --- a/cyperf/models/capture.py +++ b/cyperf/models/content_block.py @@ -18,20 +18,23 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.app_flow import AppFlow -from typing import Optional, Set, Union, GenericAlias, get_args +from cyperf.models.text_segment import TextSegment +from typing import Optional, Set, Union from typing_extensions import Self -from pydantic import Field +from pydantic import Field, PrivateAttr -class Capture(BaseModel): +class ContentBlock(BaseModel): """ - Capture + ContentBlock """ # noqa: E501 - capture_id: Optional[StrictStr] = Field(default=None, alias="CaptureId") - flows: Optional[List[AppFlow]] = Field(default=None, alias="Flows") - __properties: ClassVar[List[str]] = ["CaptureId", "Flows"] + content: Optional[List[TextSegment]] = Field(default=None, description="The content of the block, as a list of rich text segments.") + level: Optional[StrictInt] = Field(default=None, description="The heading level (1-6), used by heading blocks.") + list_style: Optional[StrictStr] = Field(default=None, description="The list style: ordered or unordered (used by list blocks).", alias="listStyle") + severity: Optional[StrictStr] = Field(default=None, description="The severity level of a note block: info, warning, error, or success.") + type: Optional[StrictStr] = Field(default=None, description="The type of content block (e.g. paragraph, list, note, heading, divider).") + __properties: ClassVar[List[str]] = ["content", "level", "listStyle", "severity", "type"] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +54,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of Capture from a JSON string""" + """Create an instance of ContentBlock from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -72,18 +75,18 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of each item in flows (list) + # override the default output from pydantic by calling `to_dict()` of each item in content (list) _items = [] - if self.flows: - for _item in self.flows: + if self.content: + for _item in self.content: if _item: _items.append(_item.to_dict()) - _dict['Flows'] = _items + _dict['content'] = _items return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of Capture from a dict""" + """Create an instance of ContentBlock from a dict""" if obj is None: return None @@ -93,8 +96,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "CaptureId": obj.get("CaptureId"), - "Flows": [AppFlow.from_dict(_item) for _item in obj["Flows"]] if obj.get("Flows") is not None else None + "content": ( [TextSegment.from_dict(_item) for _item in obj.get("content", [])] if obj.get("content") is not None else None), + "level": obj.get("level"), + "listStyle": obj.get("listStyle"), + "severity": obj.get("severity"), + "type": obj.get("type") , "links": obj.get("links") }) diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index 8d74b23..3e5ff3f 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -23,6 +23,7 @@ from typing_extensions import Annotated from cyperf.models.address import Address from cyperf.models.api_link import APILink +from cyperf.models.basic_auth_profile import BasicAuthProfile from cyperf.models.health_check_config import HealthCheckConfig from cyperf.models.params import Params from cyperf.models.pep_dut import PepDUT @@ -37,6 +38,7 @@ class DUTNetwork(BaseModel): name: Annotated[str, Field(strict=True)] = Field(alias="Name") id: StrictStr network_tags: Optional[List[StrictStr]] = Field(default=None, description="A list of tags.", alias="networkTags") + basic_auth_profile: Optional[BasicAuthProfile] = Field(default=None, alias="BasicAuthProfile") client_dut_active: Optional[StrictBool] = Field(default=None, alias="ClientDUTActive") client_dut_host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, alias="ClientDUTHost") client_dut_port: Optional[StrictInt] = Field(default=None, description="The listen port for client-side DUT (default: 80).", alias="ClientDUTPort") @@ -47,8 +49,6 @@ class DUTNetwork(BaseModel): https_health_check: Optional[HealthCheckConfig] = Field(default=None, description="The HTTPS HealthCheck configuration for DUT", alias="HTTPSHealthCheck") hostname_suffix: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A suffix to be added to the Host header of all Apps/Attacks running through the forward proxy DUT (default: empty string).", alias="HostnameSuffix") http_forward_proxy_mode: Optional[StrictStr] = Field(default=None, description="Deprecated. This is ignored and the proxy mode will be deduced from the connection type.", alias="HttpForwardProxyMode") - llm_model: Optional[StrictStr] = Field(default=None, description="The identifier of the LLM model to use for inference.", alias="LLMModel") - llm_request_url_path: Optional[StrictStr] = Field(default=None, description="The endpoint URL for the LLM chat completions API.", alias="LLMRequestURLPath") non_proxied_hosts: Optional[Params] = Field(default=None, alias="NonProxiedHosts") pep_dut: Optional[PepDUT] = Field(default=None, alias="PepDUT") pep_dut_active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false)", alias="PepDUTActive") @@ -63,7 +63,7 @@ class DUTNetwork(BaseModel): active: Optional[StrictBool] = Field(default=None, description="A flag indicating if the server DUT is an active device. If it is, the simulated clients or client DUT(if active) will send traffic to the DUT 'host'; and the simulated servers will use the healtcheck configurations. (default: false)") host: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The hostname where the traffic goes if server DUT is active.") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "LLMModel", "LLMRequestURLPath", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTAddress", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] + __properties: ClassVar[List[str]] = ["Name", "id", "networkTags", "BasicAuthProfile", "ClientDUTActive", "ClientDUTHost", "ClientDUTPort", "ConfigSettings", "ForwardProxyPepDUT", "ForwardProxyPepDUTActive", "HTTPHealthCheck", "HTTPSHealthCheck", "HostnameSuffix", "HttpForwardProxyMode", "NonProxiedHosts", "PepDUT", "PepDUTActive", "ReverseProxyPepDUT", "ReverseProxyPepDUTActive", "ServerDUTActive", "ServerDUTAddress", "ServerDUTHost", "ServerDUTPort", "TCPHealthCheck", "UseRealHost", "active", "host", "links"] @field_validator('name') def name_validate_regular_expression(cls, value): @@ -171,6 +171,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of basic_auth_profile + if self.basic_auth_profile: + _dict['BasicAuthProfile'] = self.basic_auth_profile.to_dict() # override the default output from pydantic by calling `to_dict()` of forward_proxy_pep_dut if self.forward_proxy_pep_dut: _dict['ForwardProxyPepDUT'] = self.forward_proxy_pep_dut.to_dict() @@ -219,6 +222,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Name": obj.get("Name"), "id": obj.get("id"), "networkTags": obj.get("networkTags") if obj.get("networkTags") is not None else [], + "BasicAuthProfile": BasicAuthProfile.from_dict(obj["BasicAuthProfile"]) if obj.get("BasicAuthProfile") is not None else None, "ClientDUTActive": obj.get("ClientDUTActive"), "ClientDUTHost": obj.get("ClientDUTHost"), "ClientDUTPort": obj.get("ClientDUTPort"), @@ -229,8 +233,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "HTTPSHealthCheck": HealthCheckConfig.from_dict(obj["HTTPSHealthCheck"]) if obj.get("HTTPSHealthCheck") is not None else None, "HostnameSuffix": obj.get("HostnameSuffix"), "HttpForwardProxyMode": obj.get("HttpForwardProxyMode"), - "LLMModel": obj.get("LLMModel"), - "LLMRequestURLPath": obj.get("LLMRequestURLPath"), "NonProxiedHosts": Params.from_dict(obj["NonProxiedHosts"]) if obj.get("NonProxiedHosts") is not None else None, "PepDUT": PepDUT.from_dict(obj["PepDUT"]) if obj.get("PepDUT") is not None else None, "PepDUTActive": obj.get("PepDUTActive"), diff --git a/cyperf/models/eth_range.py b/cyperf/models/eth_range.py index 0bf2674..8939eb3 100644 --- a/cyperf/models/eth_range.py +++ b/cyperf/models/eth_range.py @@ -34,7 +34,7 @@ class EthRange(BaseModel): """ # noqa: E501 count: Optional[StrictInt] = Field(default=None, alias="Count") mac_address: Optional[SequenceValue] = Field(default=None, alias="MacAddress") - mac_auto: StrictBool = Field(description="A flag indicating if the MAC address for the EthRange should be determined automatically (default: true).", alias="MacAuto") + mac_auto: Optional[StrictBool] = Field(default=None, description="A flag indicating if the MAC address for the EthRange should be determined automatically (default: true).", alias="MacAuto") mac_incr: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01).", alias="MacIncr") mac_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The MAC start address for the EthRange (default: 00:11:01:00:00:01).", alias="MacStart") one_mac_per_ip: Optional[StrictBool] = Field(default=None, description="A flag indicating if there is only one MAC address for the EthRange per IPRange (default: true).", alias="OneMacPerIP") diff --git a/cyperf/models/get_agent_tags200_response_one_of.py b/cyperf/models/formatted_description.py similarity index 60% rename from cyperf/models/get_agent_tags200_response_one_of.py rename to cyperf/models/formatted_description.py index e03d5f6..d6a7531 100644 --- a/cyperf/models/get_agent_tags200_response_one_of.py +++ b/cyperf/models/formatted_description.py @@ -18,20 +18,22 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt +from pydantic import BaseModel, ConfigDict, Field from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.agents_group import AgentsGroup -from typing import Optional, Set, Union, GenericAlias, get_args +from cyperf.models.layout_config import LayoutConfig +from cyperf.models.section import Section +from typing import Optional, Set, Union from typing_extensions import Self -from pydantic import Field +from pydantic import Field, PrivateAttr -class GetAgentTags200ResponseOneOf(BaseModel): +class FormattedDescription(BaseModel): """ - GetAgentTags200ResponseOneOf + FormattedDescription """ # noqa: E501 - data: Optional[List[AgentsGroup]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] + layout: Optional[LayoutConfig] = None + sections: Optional[List[Section]] = Field(default=None, description="The list of sections that make up the page.") + summary: Optional[Section] = None + __properties: ClassVar[List[str]] = ["layout", "sections", "summary"] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +53,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetAgentTags200ResponseOneOf from a JSON string""" + """Create an instance of FormattedDescription from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -72,18 +74,24 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) + # override the default output from pydantic by calling `to_dict()` of layout + if self.layout: + _dict['layout'] = self.layout.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in sections (list) _items = [] - if self.data: - for _item in self.data: + if self.sections: + for _item in self.sections: if _item: _items.append(_item.to_dict()) - _dict['data'] = _items + _dict['sections'] = _items + # override the default output from pydantic by calling `to_dict()` of summary + if self.summary: + _dict['summary'] = self.summary.to_dict() return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetAgentTags200ResponseOneOf from a dict""" + """Create an instance of FormattedDescription from a dict""" if obj is None: return None @@ -93,8 +101,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "data": [AgentsGroup.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") + "layout": LayoutConfig.from_dict(obj["layout"]) if obj.get("layout") is not None else None, + "sections": ( [Section.from_dict(_item) for _item in obj.get("sections", [])] if obj.get("sections") is not None else None), + "summary": Section.from_dict(obj["summary"]) if obj.get("summary") is not None else None , "links": obj.get("links") }) diff --git a/cyperf/models/get_agent_tags200_response.py b/cyperf/models/get_agent_tags200_response.py deleted file mode 100644 index 450b953..0000000 --- a/cyperf/models/get_agent_tags200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.agents_group import AgentsGroup -from cyperf.models.get_agent_tags200_response_one_of import GetAgentTags200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETAGENTTAGS200RESPONSE_ONE_OF_SCHEMAS = ["GetAgentTags200ResponseOneOf", "List[AgentsGroup]"] - -class GetAgentTags200Response(BaseModel): - """ - GetAgentTags200Response - """ - # data type: List[AgentsGroup] - oneof_schema_1_validator: Optional[List[AgentsGroup]] = None - # data type: GetAgentTags200ResponseOneOf - oneof_schema_2_validator: Optional[GetAgentTags200ResponseOneOf] = None - actual_instance: Optional[Union[GetAgentTags200ResponseOneOf, List[AgentsGroup]]] = None - one_of_schemas: Set[str] = { "GetAgentTags200ResponseOneOf", "List[AgentsGroup]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetAgentTags200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[AgentsGroup] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetAgentTags200ResponseOneOf - if not isinstance(v, GetAgentTags200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetAgentTags200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetAgentTags200Response with oneOf schemas: GetAgentTags200ResponseOneOf, List[AgentsGroup]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetAgentTags200Response with oneOf schemas: GetAgentTags200ResponseOneOf, List[AgentsGroup]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[AgentsGroup] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetAgentTags200ResponseOneOf - try: - instance.actual_instance = GetAgentTags200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetAgentTags200Response with oneOf schemas: GetAgentTags200ResponseOneOf, List[AgentsGroup]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetAgentTags200Response with oneOf schemas: GetAgentTags200ResponseOneOf, List[AgentsGroup]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetAgentTags200ResponseOneOf, List[AgentsGroup]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_application_types200_response.py b/cyperf/models/get_application_types200_response.py deleted file mode 100644 index 6f26155..0000000 --- a/cyperf/models/get_application_types200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.application_type import ApplicationType -from cyperf.models.get_application_types200_response_one_of import GetApplicationTypes200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETAPPLICATIONTYPES200RESPONSE_ONE_OF_SCHEMAS = ["GetApplicationTypes200ResponseOneOf", "List[ApplicationType]"] - -class GetApplicationTypes200Response(BaseModel): - """ - GetApplicationTypes200Response - """ - # data type: List[ApplicationType] - oneof_schema_1_validator: Optional[List[ApplicationType]] = None - # data type: GetApplicationTypes200ResponseOneOf - oneof_schema_2_validator: Optional[GetApplicationTypes200ResponseOneOf] = None - actual_instance: Optional[Union[GetApplicationTypes200ResponseOneOf, List[ApplicationType]]] = None - one_of_schemas: Set[str] = { "GetApplicationTypes200ResponseOneOf", "List[ApplicationType]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetApplicationTypes200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[ApplicationType] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetApplicationTypes200ResponseOneOf - if not isinstance(v, GetApplicationTypes200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetApplicationTypes200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetApplicationTypes200Response with oneOf schemas: GetApplicationTypes200ResponseOneOf, List[ApplicationType]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetApplicationTypes200Response with oneOf schemas: GetApplicationTypes200ResponseOneOf, List[ApplicationType]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[ApplicationType] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetApplicationTypes200ResponseOneOf - try: - instance.actual_instance = GetApplicationTypes200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetApplicationTypes200Response with oneOf schemas: GetApplicationTypes200ResponseOneOf, List[ApplicationType]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetApplicationTypes200Response with oneOf schemas: GetApplicationTypes200ResponseOneOf, List[ApplicationType]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetApplicationTypes200ResponseOneOf, List[ApplicationType]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_apps200_response.py b/cyperf/models/get_apps200_response.py deleted file mode 100644 index 9d1d4ac..0000000 --- a/cyperf/models/get_apps200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.appsec_app import AppsecApp -from cyperf.models.get_apps200_response_one_of import GetApps200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETAPPS200RESPONSE_ONE_OF_SCHEMAS = ["GetApps200ResponseOneOf", "List[AppsecApp]"] - -class GetApps200Response(BaseModel): - """ - GetApps200Response - """ - # data type: List[AppsecApp] - oneof_schema_1_validator: Optional[List[AppsecApp]] = None - # data type: GetApps200ResponseOneOf - oneof_schema_2_validator: Optional[GetApps200ResponseOneOf] = None - actual_instance: Optional[Union[GetApps200ResponseOneOf, List[AppsecApp]]] = None - one_of_schemas: Set[str] = { "GetApps200ResponseOneOf", "List[AppsecApp]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetApps200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[AppsecApp] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetApps200ResponseOneOf - if not isinstance(v, GetApps200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetApps200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetApps200Response with oneOf schemas: GetApps200ResponseOneOf, List[AppsecApp]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetApps200Response with oneOf schemas: GetApps200ResponseOneOf, List[AppsecApp]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[AppsecApp] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetApps200ResponseOneOf - try: - instance.actual_instance = GetApps200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetApps200Response with oneOf schemas: GetApps200ResponseOneOf, List[AppsecApp]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetApps200Response with oneOf schemas: GetApps200ResponseOneOf, List[AppsecApp]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetApps200ResponseOneOf, List[AppsecApp]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_attacks200_response.py b/cyperf/models/get_attacks200_response.py deleted file mode 100644 index e3d23a1..0000000 --- a/cyperf/models/get_attacks200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.appsec_attack import AppsecAttack -from cyperf.models.get_attacks200_response_one_of import GetAttacks200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETATTACKS200RESPONSE_ONE_OF_SCHEMAS = ["GetAttacks200ResponseOneOf", "List[AppsecAttack]"] - -class GetAttacks200Response(BaseModel): - """ - GetAttacks200Response - """ - # data type: List[AppsecAttack] - oneof_schema_1_validator: Optional[List[AppsecAttack]] = None - # data type: GetAttacks200ResponseOneOf - oneof_schema_2_validator: Optional[GetAttacks200ResponseOneOf] = None - actual_instance: Optional[Union[GetAttacks200ResponseOneOf, List[AppsecAttack]]] = None - one_of_schemas: Set[str] = { "GetAttacks200ResponseOneOf", "List[AppsecAttack]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetAttacks200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[AppsecAttack] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetAttacks200ResponseOneOf - if not isinstance(v, GetAttacks200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetAttacks200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetAttacks200Response with oneOf schemas: GetAttacks200ResponseOneOf, List[AppsecAttack]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetAttacks200Response with oneOf schemas: GetAttacks200ResponseOneOf, List[AppsecAttack]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[AppsecAttack] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetAttacks200ResponseOneOf - try: - instance.actual_instance = GetAttacks200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetAttacks200Response with oneOf schemas: GetAttacks200ResponseOneOf, List[AppsecAttack]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetAttacks200Response with oneOf schemas: GetAttacks200ResponseOneOf, List[AppsecAttack]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetAttacks200ResponseOneOf, List[AppsecAttack]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_attacks200_response_one_of.py b/cyperf/models/get_attacks200_response_one_of.py deleted file mode 100644 index 255e432..0000000 --- a/cyperf/models/get_attacks200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.appsec_attack import AppsecAttack -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetAttacks200ResponseOneOf(BaseModel): - """ - GetAttacks200ResponseOneOf - """ # noqa: E501 - data: Optional[List[AppsecAttack]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetAttacks200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetAttacks200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [AppsecAttack.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_attacks_operation.py b/cyperf/models/get_attacks_operation.py deleted file mode 100644 index 02528b7..0000000 --- a/cyperf/models/get_attacks_operation.py +++ /dev/null @@ -1,121 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.category_filter import CategoryFilter -from cyperf.models.sort_body_field import SortBodyField -from typing import Optional, Set, Union -from typing_extensions import Self -from pydantic import Field, PrivateAttr - -class GetAttacksOperation(BaseModel): - """ - GetAttacksOperation - """ # noqa: E501 - categories: Optional[List[CategoryFilter]] = None - filter_mode: Optional[StrictStr] = Field(default=None, alias="filterMode") - search_col: Optional[List[StrictStr]] = Field(default=None, alias="searchCol") - search_val: Optional[List[StrictStr]] = Field(default=None, alias="searchVal") - skip: Optional[StrictStr] = None - sort: Optional[List[SortBodyField]] = None - take: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["categories", "filterMode", "searchCol", "searchVal", "skip", "sort", "take"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetAttacksOperation from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in categories (list) - _items = [] - if self.categories: - for _item in self.categories: - if _item: - _items.append(_item.to_dict()) - _dict['categories'] = _items - # override the default output from pydantic by calling `to_dict()` of each item in sort (list) - _items = [] - if self.sort: - for _item in self.sort: - if _item: - _items.append(_item.to_dict()) - _dict['sort'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetAttacksOperation from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "categories": ( [CategoryFilter.from_dict(_item) for _item in obj.get("categories", [])] if obj.get("categories") is not None else None), - "filterMode": obj.get("filterMode"), - "searchCol": obj.get("searchCol") if obj.get("searchCol") is not None else [], - "searchVal": obj.get("searchVal") if obj.get("searchVal") is not None else [], - "skip": obj.get("skip"), - "sort": ( [SortBodyField.from_dict(_item) for _item in obj.get("sort", [])] if obj.get("sort") is not None else None), - "take": obj.get("take") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_auth_profiles200_response.py b/cyperf/models/get_auth_profiles200_response.py deleted file mode 100644 index 56d4e0e..0000000 --- a/cyperf/models/get_auth_profiles200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.auth_profile import AuthProfile -from cyperf.models.get_auth_profiles200_response_one_of import GetAuthProfiles200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETAUTHPROFILES200RESPONSE_ONE_OF_SCHEMAS = ["GetAuthProfiles200ResponseOneOf", "List[AuthProfile]"] - -class GetAuthProfiles200Response(BaseModel): - """ - GetAuthProfiles200Response - """ - # data type: List[AuthProfile] - oneof_schema_1_validator: Optional[List[AuthProfile]] = None - # data type: GetAuthProfiles200ResponseOneOf - oneof_schema_2_validator: Optional[GetAuthProfiles200ResponseOneOf] = None - actual_instance: Optional[Union[GetAuthProfiles200ResponseOneOf, List[AuthProfile]]] = None - one_of_schemas: Set[str] = { "GetAuthProfiles200ResponseOneOf", "List[AuthProfile]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetAuthProfiles200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[AuthProfile] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetAuthProfiles200ResponseOneOf - if not isinstance(v, GetAuthProfiles200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetAuthProfiles200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetAuthProfiles200Response with oneOf schemas: GetAuthProfiles200ResponseOneOf, List[AuthProfile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetAuthProfiles200Response with oneOf schemas: GetAuthProfiles200ResponseOneOf, List[AuthProfile]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[AuthProfile] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetAuthProfiles200ResponseOneOf - try: - instance.actual_instance = GetAuthProfiles200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetAuthProfiles200Response with oneOf schemas: GetAuthProfiles200ResponseOneOf, List[AuthProfile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetAuthProfiles200Response with oneOf schemas: GetAuthProfiles200ResponseOneOf, List[AuthProfile]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetAuthProfiles200ResponseOneOf, List[AuthProfile]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_auth_profiles200_response_one_of.py b/cyperf/models/get_auth_profiles200_response_one_of.py deleted file mode 100644 index db0f7e3..0000000 --- a/cyperf/models/get_auth_profiles200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.auth_profile import AuthProfile -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetAuthProfiles200ResponseOneOf(BaseModel): - """ - GetAuthProfiles200ResponseOneOf - """ # noqa: E501 - data: Optional[List[AuthProfile]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetAuthProfiles200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetAuthProfiles200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [AuthProfile.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_certificates200_response.py b/cyperf/models/get_certificates200_response.py deleted file mode 100644 index fcb4573..0000000 --- a/cyperf/models/get_certificates200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.generic_file import GenericFile -from cyperf.models.get_certificates200_response_one_of import GetCertificates200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETCERTIFICATES200RESPONSE_ONE_OF_SCHEMAS = ["GetCertificates200ResponseOneOf", "List[GenericFile]"] - -class GetCertificates200Response(BaseModel): - """ - GetCertificates200Response - """ - # data type: List[GenericFile] - oneof_schema_1_validator: Optional[List[GenericFile]] = None - # data type: GetCertificates200ResponseOneOf - oneof_schema_2_validator: Optional[GetCertificates200ResponseOneOf] = None - actual_instance: Optional[Union[GetCertificates200ResponseOneOf, List[GenericFile]]] = None - one_of_schemas: Set[str] = { "GetCertificates200ResponseOneOf", "List[GenericFile]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetCertificates200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[GenericFile] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetCertificates200ResponseOneOf - if not isinstance(v, GetCertificates200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetCertificates200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetCertificates200Response with oneOf schemas: GetCertificates200ResponseOneOf, List[GenericFile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetCertificates200Response with oneOf schemas: GetCertificates200ResponseOneOf, List[GenericFile]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[GenericFile] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetCertificates200ResponseOneOf - try: - instance.actual_instance = GetCertificates200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetCertificates200Response with oneOf schemas: GetCertificates200ResponseOneOf, List[GenericFile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetCertificates200Response with oneOf schemas: GetCertificates200ResponseOneOf, List[GenericFile]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetCertificates200ResponseOneOf, List[GenericFile]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_certificates200_response_one_of.py b/cyperf/models/get_certificates200_response_one_of.py deleted file mode 100644 index 20fc846..0000000 --- a/cyperf/models/get_certificates200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.generic_file import GenericFile -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetCertificates200ResponseOneOf(BaseModel): - """ - GetCertificates200ResponseOneOf - """ # noqa: E501 - data: Optional[List[GenericFile]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetCertificates200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetCertificates200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [GenericFile.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_consumers200_response.py b/cyperf/models/get_consumers200_response.py deleted file mode 100644 index cf071ef..0000000 --- a/cyperf/models/get_consumers200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.consumer import Consumer -from cyperf.models.get_consumers200_response_one_of import GetConsumers200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETCONSUMERS200RESPONSE_ONE_OF_SCHEMAS = ["GetConsumers200ResponseOneOf", "List[Consumer]"] - -class GetConsumers200Response(BaseModel): - """ - GetConsumers200Response - """ - # data type: List[Consumer] - oneof_schema_1_validator: Optional[List[Consumer]] = None - # data type: GetConsumers200ResponseOneOf - oneof_schema_2_validator: Optional[GetConsumers200ResponseOneOf] = None - actual_instance: Optional[Union[GetConsumers200ResponseOneOf, List[Consumer]]] = None - one_of_schemas: Set[str] = { "GetConsumers200ResponseOneOf", "List[Consumer]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetConsumers200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[Consumer] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetConsumers200ResponseOneOf - if not isinstance(v, GetConsumers200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetConsumers200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetConsumers200Response with oneOf schemas: GetConsumers200ResponseOneOf, List[Consumer]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetConsumers200Response with oneOf schemas: GetConsumers200ResponseOneOf, List[Consumer]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[Consumer] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetConsumers200ResponseOneOf - try: - instance.actual_instance = GetConsumers200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetConsumers200Response with oneOf schemas: GetConsumers200ResponseOneOf, List[Consumer]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetConsumers200Response with oneOf schemas: GetConsumers200ResponseOneOf, List[Consumer]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetConsumers200ResponseOneOf, List[Consumer]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_consumers200_response_one_of.py b/cyperf/models/get_consumers200_response_one_of.py deleted file mode 100644 index cac4604..0000000 --- a/cyperf/models/get_consumers200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.consumer import Consumer -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetConsumers200ResponseOneOf(BaseModel): - """ - GetConsumers200ResponseOneOf - """ # noqa: E501 - data: Optional[List[Consumer]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetConsumers200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetConsumers200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [Consumer.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_custom_import_operations200_response.py b/cyperf/models/get_custom_import_operations200_response.py deleted file mode 100644 index 3a9d0a5..0000000 --- a/cyperf/models/get_custom_import_operations200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.custom_import_handler import CustomImportHandler -from cyperf.models.get_custom_import_operations200_response_one_of import GetCustomImportOperations200ResponseOneOf -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETCUSTOMIMPORTOPERATIONS200RESPONSE_ONE_OF_SCHEMAS = ["GetCustomImportOperations200ResponseOneOf", "List[CustomImportHandler]"] - -class GetCustomImportOperations200Response(BaseModel): - """ - GetCustomImportOperations200Response - """ - # data type: List[CustomImportHandler] - oneof_schema_1_validator: Optional[List[CustomImportHandler]] = None - # data type: GetCustomImportOperations200ResponseOneOf - oneof_schema_2_validator: Optional[GetCustomImportOperations200ResponseOneOf] = None - actual_instance: Optional[Union[GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]]] = None - one_of_schemas: Set[str] = { "GetCustomImportOperations200ResponseOneOf", "List[CustomImportHandler]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetCustomImportOperations200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[CustomImportHandler] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetCustomImportOperations200ResponseOneOf - if not isinstance(v, GetCustomImportOperations200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetCustomImportOperations200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetCustomImportOperations200Response with oneOf schemas: GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetCustomImportOperations200Response with oneOf schemas: GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[CustomImportHandler] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetCustomImportOperations200ResponseOneOf - try: - instance.actual_instance = GetCustomImportOperations200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetCustomImportOperations200Response with oneOf schemas: GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetCustomImportOperations200Response with oneOf schemas: GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetCustomImportOperations200ResponseOneOf, List[CustomImportHandler]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_custom_import_operations200_response_one_of.py b/cyperf/models/get_custom_import_operations200_response_one_of.py deleted file mode 100644 index 4d20050..0000000 --- a/cyperf/models/get_custom_import_operations200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.custom_import_handler import CustomImportHandler -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetCustomImportOperations200ResponseOneOf(BaseModel): - """ - GetCustomImportOperations200ResponseOneOf - """ # noqa: E501 - data: Optional[List[CustomImportHandler]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetCustomImportOperations200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetCustomImportOperations200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [CustomImportHandler.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_files200_response.py b/cyperf/models/get_files200_response.py deleted file mode 100644 index bf44eb6..0000000 --- a/cyperf/models/get_files200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_files200_response_one_of import GetFiles200ResponseOneOf -from cyperf.models.result_file_metadata import ResultFileMetadata -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETFILES200RESPONSE_ONE_OF_SCHEMAS = ["GetFiles200ResponseOneOf", "List[ResultFileMetadata]"] - -class GetFiles200Response(BaseModel): - """ - GetFiles200Response - """ - # data type: List[ResultFileMetadata] - oneof_schema_1_validator: Optional[List[ResultFileMetadata]] = None - # data type: GetFiles200ResponseOneOf - oneof_schema_2_validator: Optional[GetFiles200ResponseOneOf] = None - actual_instance: Optional[Union[GetFiles200ResponseOneOf, List[ResultFileMetadata]]] = None - one_of_schemas: Set[str] = { "GetFiles200ResponseOneOf", "List[ResultFileMetadata]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetFiles200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[ResultFileMetadata] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetFiles200ResponseOneOf - if not isinstance(v, GetFiles200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetFiles200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetFiles200Response with oneOf schemas: GetFiles200ResponseOneOf, List[ResultFileMetadata]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetFiles200Response with oneOf schemas: GetFiles200ResponseOneOf, List[ResultFileMetadata]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[ResultFileMetadata] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetFiles200ResponseOneOf - try: - instance.actual_instance = GetFiles200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetFiles200Response with oneOf schemas: GetFiles200ResponseOneOf, List[ResultFileMetadata]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetFiles200Response with oneOf schemas: GetFiles200ResponseOneOf, List[ResultFileMetadata]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetFiles200ResponseOneOf, List[ResultFileMetadata]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_files200_response_one_of.py b/cyperf/models/get_files200_response_one_of.py deleted file mode 100644 index 2713068..0000000 --- a/cyperf/models/get_files200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.result_file_metadata import ResultFileMetadata -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetFiles200ResponseOneOf(BaseModel): - """ - GetFiles200ResponseOneOf - """ # noqa: E501 - data: Optional[List[ResultFileMetadata]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetFiles200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetFiles200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [ResultFileMetadata.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_http_profiles200_response.py b/cyperf/models/get_http_profiles200_response.py deleted file mode 100644 index 85d853f..0000000 --- a/cyperf/models/get_http_profiles200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_http_profiles200_response_one_of import GetHttpProfiles200ResponseOneOf -from cyperf.models.http_profile import HTTPProfile -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETHTTPPROFILES200RESPONSE_ONE_OF_SCHEMAS = ["GetHttpProfiles200ResponseOneOf", "List[HTTPProfile]"] - -class GetHttpProfiles200Response(BaseModel): - """ - GetHttpProfiles200Response - """ - # data type: List[HTTPProfile] - oneof_schema_1_validator: Optional[List[HTTPProfile]] = None - # data type: GetHttpProfiles200ResponseOneOf - oneof_schema_2_validator: Optional[GetHttpProfiles200ResponseOneOf] = None - actual_instance: Optional[Union[GetHttpProfiles200ResponseOneOf, List[HTTPProfile]]] = None - one_of_schemas: Set[str] = { "GetHttpProfiles200ResponseOneOf", "List[HTTPProfile]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetHttpProfiles200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[HTTPProfile] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetHttpProfiles200ResponseOneOf - if not isinstance(v, GetHttpProfiles200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetHttpProfiles200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetHttpProfiles200Response with oneOf schemas: GetHttpProfiles200ResponseOneOf, List[HTTPProfile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetHttpProfiles200Response with oneOf schemas: GetHttpProfiles200ResponseOneOf, List[HTTPProfile]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[HTTPProfile] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetHttpProfiles200ResponseOneOf - try: - instance.actual_instance = GetHttpProfiles200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetHttpProfiles200Response with oneOf schemas: GetHttpProfiles200ResponseOneOf, List[HTTPProfile]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetHttpProfiles200Response with oneOf schemas: GetHttpProfiles200ResponseOneOf, List[HTTPProfile]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetHttpProfiles200ResponseOneOf, List[HTTPProfile]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_http_profiles200_response_one_of.py b/cyperf/models/get_http_profiles200_response_one_of.py deleted file mode 100644 index 309c61f..0000000 --- a/cyperf/models/get_http_profiles200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.http_profile import HTTPProfile -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetHttpProfiles200ResponseOneOf(BaseModel): - """ - GetHttpProfiles200ResponseOneOf - """ # noqa: E501 - data: Optional[List[HTTPProfile]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetHttpProfiles200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetHttpProfiles200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [HTTPProfile.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_meta200_response.py b/cyperf/models/get_meta200_response.py deleted file mode 100644 index 3e65f25..0000000 --- a/cyperf/models/get_meta200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_meta200_response_one_of import GetMeta200ResponseOneOf -from cyperf.models.pair import Pair -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETMETA200RESPONSE_ONE_OF_SCHEMAS = ["GetMeta200ResponseOneOf", "List[Pair]"] - -class GetMeta200Response(BaseModel): - """ - GetMeta200Response - """ - # data type: List[Pair] - oneof_schema_1_validator: Optional[List[Pair]] = None - # data type: GetMeta200ResponseOneOf - oneof_schema_2_validator: Optional[GetMeta200ResponseOneOf] = None - actual_instance: Optional[Union[GetMeta200ResponseOneOf, List[Pair]]] = None - one_of_schemas: Set[str] = { "GetMeta200ResponseOneOf", "List[Pair]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetMeta200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[Pair] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetMeta200ResponseOneOf - if not isinstance(v, GetMeta200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetMeta200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetMeta200Response with oneOf schemas: GetMeta200ResponseOneOf, List[Pair]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetMeta200Response with oneOf schemas: GetMeta200ResponseOneOf, List[Pair]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[Pair] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetMeta200ResponseOneOf - try: - instance.actual_instance = GetMeta200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetMeta200Response with oneOf schemas: GetMeta200ResponseOneOf, List[Pair]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetMeta200Response with oneOf schemas: GetMeta200ResponseOneOf, List[Pair]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetMeta200ResponseOneOf, List[Pair]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_meta200_response_one_of.py b/cyperf/models/get_meta200_response_one_of.py deleted file mode 100644 index 0cbd4dc..0000000 --- a/cyperf/models/get_meta200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.pair import Pair -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetMeta200ResponseOneOf(BaseModel): - """ - GetMeta200ResponseOneOf - """ # noqa: E501 - data: Optional[List[Pair]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetMeta200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetMeta200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [Pair.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_plugins200_response.py b/cyperf/models/get_plugins200_response.py deleted file mode 100644 index d088e62..0000000 --- a/cyperf/models/get_plugins200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_plugins200_response_one_of import GetPlugins200ResponseOneOf -from cyperf.models.plugin import Plugin -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETPLUGINS200RESPONSE_ONE_OF_SCHEMAS = ["GetPlugins200ResponseOneOf", "List[Plugin]"] - -class GetPlugins200Response(BaseModel): - """ - GetPlugins200Response - """ - # data type: List[Plugin] - oneof_schema_1_validator: Optional[List[Plugin]] = None - # data type: GetPlugins200ResponseOneOf - oneof_schema_2_validator: Optional[GetPlugins200ResponseOneOf] = None - actual_instance: Optional[Union[GetPlugins200ResponseOneOf, List[Plugin]]] = None - one_of_schemas: Set[str] = { "GetPlugins200ResponseOneOf", "List[Plugin]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetPlugins200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[Plugin] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetPlugins200ResponseOneOf - if not isinstance(v, GetPlugins200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetPlugins200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetPlugins200Response with oneOf schemas: GetPlugins200ResponseOneOf, List[Plugin]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetPlugins200Response with oneOf schemas: GetPlugins200ResponseOneOf, List[Plugin]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[Plugin] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetPlugins200ResponseOneOf - try: - instance.actual_instance = GetPlugins200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetPlugins200Response with oneOf schemas: GetPlugins200ResponseOneOf, List[Plugin]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetPlugins200Response with oneOf schemas: GetPlugins200ResponseOneOf, List[Plugin]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetPlugins200ResponseOneOf, List[Plugin]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_plugins200_response_one_of.py b/cyperf/models/get_plugins200_response_one_of.py deleted file mode 100644 index 9528f19..0000000 --- a/cyperf/models/get_plugins200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.plugin import Plugin -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetPlugins200ResponseOneOf(BaseModel): - """ - GetPlugins200ResponseOneOf - """ # noqa: E501 - data: Optional[List[Plugin]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetPlugins200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetPlugins200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [Plugin.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_result_tags200_response.py b/cyperf/models/get_result_tags200_response.py deleted file mode 100644 index 587cc7b..0000000 --- a/cyperf/models/get_result_tags200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_result_tags200_response_one_of import GetResultTags200ResponseOneOf -from cyperf.models.results_group import ResultsGroup -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETRESULTTAGS200RESPONSE_ONE_OF_SCHEMAS = ["GetResultTags200ResponseOneOf", "List[ResultsGroup]"] - -class GetResultTags200Response(BaseModel): - """ - GetResultTags200Response - """ - # data type: List[ResultsGroup] - oneof_schema_1_validator: Optional[List[ResultsGroup]] = None - # data type: GetResultTags200ResponseOneOf - oneof_schema_2_validator: Optional[GetResultTags200ResponseOneOf] = None - actual_instance: Optional[Union[GetResultTags200ResponseOneOf, List[ResultsGroup]]] = None - one_of_schemas: Set[str] = { "GetResultTags200ResponseOneOf", "List[ResultsGroup]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetResultTags200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[ResultsGroup] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetResultTags200ResponseOneOf - if not isinstance(v, GetResultTags200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetResultTags200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetResultTags200Response with oneOf schemas: GetResultTags200ResponseOneOf, List[ResultsGroup]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetResultTags200Response with oneOf schemas: GetResultTags200ResponseOneOf, List[ResultsGroup]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[ResultsGroup] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetResultTags200ResponseOneOf - try: - instance.actual_instance = GetResultTags200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetResultTags200Response with oneOf schemas: GetResultTags200ResponseOneOf, List[ResultsGroup]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetResultTags200Response with oneOf schemas: GetResultTags200ResponseOneOf, List[ResultsGroup]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetResultTags200ResponseOneOf, List[ResultsGroup]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_result_tags200_response_one_of.py b/cyperf/models/get_result_tags200_response_one_of.py deleted file mode 100644 index 8c1eed1..0000000 --- a/cyperf/models/get_result_tags200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.results_group import ResultsGroup -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetResultTags200ResponseOneOf(BaseModel): - """ - GetResultTags200ResponseOneOf - """ # noqa: E501 - data: Optional[List[ResultsGroup]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetResultTags200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetResultTags200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [ResultsGroup.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/get_apps_operation.py b/cyperf/models/get_scenarios_operation.py similarity index 95% rename from cyperf/models/get_apps_operation.py rename to cyperf/models/get_scenarios_operation.py index 1da38fe..b849232 100644 --- a/cyperf/models/get_apps_operation.py +++ b/cyperf/models/get_scenarios_operation.py @@ -26,9 +26,9 @@ from typing_extensions import Self from pydantic import Field, PrivateAttr -class GetAppsOperation(BaseModel): +class GetScenariosOperation(BaseModel): """ - GetAppsOperation + GetScenariosOperation """ # noqa: E501 categories: Optional[List[CategoryFilter]] = None filter_mode: Optional[StrictStr] = Field(default=None, alias="filterMode") @@ -57,7 +57,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetAppsOperation from a JSON string""" + """Create an instance of GetScenariosOperation from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -96,7 +96,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetAppsOperation from a dict""" + """Create an instance of GetScenariosOperation from a dict""" if obj is None: return None diff --git a/cyperf/models/get_stats200_response.py b/cyperf/models/get_stats200_response.py deleted file mode 100644 index 8d1f764..0000000 --- a/cyperf/models/get_stats200_response.py +++ /dev/null @@ -1,143 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import json -import pprint -from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator -from typing import Any, List, Optional -from cyperf.models.get_stats200_response_one_of import GetStats200ResponseOneOf -from cyperf.models.stats_result import StatsResult -from pydantic import StrictStr, Field -from typing import Union, List, Set, Optional, Dict -from typing_extensions import Literal, Self - -GETSTATS200RESPONSE_ONE_OF_SCHEMAS = ["GetStats200ResponseOneOf", "List[StatsResult]"] - -class GetStats200Response(BaseModel): - """ - GetStats200Response - """ - # data type: List[StatsResult] - oneof_schema_1_validator: Optional[List[StatsResult]] = None - # data type: GetStats200ResponseOneOf - oneof_schema_2_validator: Optional[GetStats200ResponseOneOf] = None - actual_instance: Optional[Union[GetStats200ResponseOneOf, List[StatsResult]]] = None - one_of_schemas: Set[str] = { "GetStats200ResponseOneOf", "List[StatsResult]" } - - model_config = ConfigDict( - validate_assignment=True, - protected_namespaces=(), - ) - - - def __init__(self, *args, **kwargs) -> None: - if args: - if len(args) > 1: - raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") - if kwargs: - raise ValueError("If a position argument is used, keyword arguments cannot be used.") - super().__init__(actual_instance=args[0]) - else: - super().__init__(**kwargs) - - @field_validator('actual_instance') - def actual_instance_must_validate_oneof(cls, v): - instance = GetStats200Response.model_construct() - error_messages = [] - match = 0 - # validate data type: List[StatsResult] - try: - instance.oneof_schema_1_validator = v - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # validate data type: GetStats200ResponseOneOf - if not isinstance(v, GetStats200ResponseOneOf): - error_messages.append(f"Error! Input type `{type(v)}` is not `GetStats200ResponseOneOf`") - else: - match += 1 - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when setting `actual_instance` in GetStats200Response with oneOf schemas: GetStats200ResponseOneOf, List[StatsResult]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when setting `actual_instance` in GetStats200Response with oneOf schemas: GetStats200ResponseOneOf, List[StatsResult]. Details: " + ", ".join(error_messages)) - else: - return v - - @classmethod - def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: - return cls.from_json(json.dumps(obj)) - - @classmethod - def from_json(cls, json_str: str) -> Self: - """Returns the object represented by the json string""" - instance = cls.model_construct() -# instance.api_client = client - error_messages = [] - match = 0 - - # deserialize data into List[StatsResult] - try: - # validation - instance.oneof_schema_1_validator = json.loads(json_str) - # assign value to actual_instance - instance.actual_instance = instance.oneof_schema_1_validator - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - # deserialize data into GetStats200ResponseOneOf - try: - instance.actual_instance = GetStats200ResponseOneOf.from_json(json_str) - match += 1 - except (ValidationError, ValueError) as e: - error_messages.append(str(e)) - - if match > 1: - # more than 1 match - raise ValueError("Multiple matches found when deserializing the JSON string into GetStats200Response with oneOf schemas: GetStats200ResponseOneOf, List[StatsResult]. Details: " + ", ".join(error_messages)) - elif match == 0: - # no match - raise ValueError("No match found when deserializing the JSON string into GetStats200Response with oneOf schemas: GetStats200ResponseOneOf, List[StatsResult]. Details: " + ", ".join(error_messages)) - else: - return instance - - def to_json(self) -> str: - """Returns the JSON representation of the actual instance""" - if self.actual_instance is None: - return "null" - - if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): - return self.actual_instance.to_json() - else: - return json.dumps(self.actual_instance) - - def to_dict(self) -> Optional[Union[Dict[str, Any], GetStats200ResponseOneOf, List[StatsResult]]]: - """Returns the dict representation of the actual instance""" - if self.actual_instance is None: - return None - - if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): - return self.actual_instance.to_dict() - else: - # primitive type - return self.actual_instance - - def to_str(self) -> str: - """Returns the string representation of the actual instance""" - return pprint.pformat(self.model_dump()) - - diff --git a/cyperf/models/get_stats200_response_one_of.py b/cyperf/models/get_stats200_response_one_of.py deleted file mode 100644 index 3ec57df..0000000 --- a/cyperf/models/get_stats200_response_one_of.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictInt -from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.stats_result import StatsResult -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class GetStats200ResponseOneOf(BaseModel): - """ - GetStats200ResponseOneOf - """ # noqa: E501 - data: Optional[List[StatsResult]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetStats200ResponseOneOf from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) - _items = [] - if self.data: - for _item in self.data: - if _item: - _items.append(_item.to_dict()) - _dict['data'] = _items - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetStats200ResponseOneOf from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "data": [StatsResult.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index 58897c8..d29d5f0 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -37,7 +37,7 @@ class IPRange(BaseModel): """ # noqa: E501 automatic_ip_type: Optional[AutomaticIpType] = Field(default=None, description="The automatic IP types, either 'ONLY_IPV4', 'ONLY_IPV6' or 'BOTH_IPV4_IPV6'.", alias="AutomaticIpType") count: Optional[StrictInt] = Field(default=None, description="The number of IPs generated (default: 1).", alias="Count") - gw_auto: StrictBool = Field(description="A flag indicating if the gateway settings for the IPRange should be determined automatically (default: true).", alias="GwAuto") + gw_auto: Optional[StrictBool] = Field(default=None, description="A flag indicating if the gateway settings for the IPRange should be determined automatically (default: true).", alias="GwAuto") gw_start: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="The gateway start IP for the IPRange (default: 10.0.0.1).", alias="GwStart") host_count: Optional[StrictInt] = Field(default=None, description="The number of Host IPs generated (default: 1).", alias="HostCount") inner_vlan_range: Optional[VLANRange] = Field(default=None, description="The inner VLAN range assigned to the current IP range configuration", alias="InnerVlanRange") @@ -51,7 +51,7 @@ class IPRange(BaseModel): mss: Optional[StrictInt] = Field(default=None, description="The maximum segment size of the TCP header.", alias="Mss") mss_auto: Optional[StrictBool] = Field(default=None, description="A flag indicating if Mss settings for the IPRange should be determined automatically (default: false).", alias="MssAuto") net_mask: Optional[StrictInt] = Field(default=None, description="The network mask of the IP Range (default: 16).", alias="NetMask") - net_mask_auto: StrictBool = Field(description="A flag indicating if the network mask of the IPRange should be determined automatically (default: true).", alias="NetMaskAuto") + net_mask_auto: Optional[StrictBool] = Field(default=None, description="A flag indicating if the network mask of the IPRange should be determined automatically (default: true).", alias="NetMaskAuto") outer_vlan_range: Optional[VLANRange] = Field(default=None, description="The outer VLAN range assigned to the current IP range configuration", alias="OuterVlanRange") vlan_type: Optional[VLANType] = Field(default=None, description="The type of VLAN used", alias="VLANType") id: Optional[StrictStr] = None diff --git a/cyperf/models/test_usage.py b/cyperf/models/keyword.py similarity index 76% rename from cyperf/models/test_usage.py rename to cyperf/models/keyword.py index 79a4446..e4999eb 100644 --- a/cyperf/models/test_usage.py +++ b/cyperf/models/keyword.py @@ -24,13 +24,14 @@ from typing_extensions import Self from pydantic import Field, PrivateAttr -class TestUsage(BaseModel): +class Keyword(BaseModel): """ - TestUsage + Keyword """ # noqa: E501 - used_agents: Optional[List[StrictStr]] = Field(default=None, description="The agents used by the current test", alias="usedAgents") - used_licenses: Optional[Dict[str, StrictInt]] = Field(default=None, description="Feature types used by the current test and their respective counts", alias="usedLicenses") - __properties: ClassVar[List[str]] = ["usedAgents", "usedLicenses"] + category: Optional[StrictStr] = Field(default=None, description="The keyword category", alias="Category") + value: Optional[StrictStr] = Field(default=None, description="The keyword value", alias="Value") + index: Optional[StrictInt] = Field(default=None, description="The index of the category") + __properties: ClassVar[List[str]] = ["Category", "Value", "index"] model_config = ConfigDict( populate_by_name=True, @@ -50,7 +51,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of TestUsage from a JSON string""" + """Create an instance of Keyword from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -75,7 +76,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of TestUsage from a dict""" + """Create an instance of Keyword from a dict""" if obj is None: return None @@ -85,8 +86,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "usedAgents": obj.get("usedAgents") if obj.get("usedAgents") is not None else [], - "usedLicenses": obj.get("usedLicenses") + "Category": obj.get("Category"), + "Value": obj.get("Value"), + "index": obj.get("index") , "links": obj.get("links") }) diff --git a/cyperf/models/start_root_batch_delete_request_inner.py b/cyperf/models/layout_config.py similarity index 80% rename from cyperf/models/start_root_batch_delete_request_inner.py rename to cyperf/models/layout_config.py index 55c9623..9820871 100644 --- a/cyperf/models/start_root_batch_delete_request_inner.py +++ b/cyperf/models/layout_config.py @@ -18,18 +18,18 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, StrictStr +from pydantic import BaseModel, ConfigDict, Field, StrictInt from typing import Any, ClassVar, Dict, List, Optional -from typing import Optional, Set, Union, GenericAlias, get_args +from typing import Optional, Set, Union from typing_extensions import Self -from pydantic import Field +from pydantic import Field, PrivateAttr -class StartRootBatchDeleteRequestInner(BaseModel): +class LayoutConfig(BaseModel): """ - StartRootBatchDeleteRequestInner + LayoutConfig """ # noqa: E501 - id: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["id"] + columns: Optional[StrictInt] = Field(default=None, description="The number of columns in the layout grid.") + __properties: ClassVar[List[str]] = ["columns"] model_config = ConfigDict( populate_by_name=True, @@ -49,7 +49,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of StartRootBatchDeleteRequestInner from a JSON string""" + """Create an instance of LayoutConfig from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -74,7 +74,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of StartRootBatchDeleteRequestInner from a dict""" + """Create an instance of LayoutConfig from a dict""" if obj is None: return None @@ -84,7 +84,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "id": obj.get("id") + "columns": obj.get("columns") , "links": obj.get("links") }) diff --git a/cyperf/models/license_server_metadata.py b/cyperf/models/license_server_metadata.py index c3f0cb6..9f78ef9 100644 --- a/cyperf/models/license_server_metadata.py +++ b/cyperf/models/license_server_metadata.py @@ -28,17 +28,17 @@ class LicenseServerMetadata(BaseModel): """ LicenseServerMetadata """ # noqa: E501 - connection_status: Optional[StrictStr] = Field(default=None, description="The license server's connection status", alias="connectionStatus") - failure_reason: Optional[StrictStr] = Field(default=None, description="The license server's connection failure reason", alias="failureReason") - fingerprint: Optional[StrictStr] = Field(default=None, description="The license server's fingerprint") - host_name: Optional[StrictStr] = Field(default=None, description="The hostname/IP of the server", alias="hostName") - id: Optional[StrictInt] = Field(default=None, description="The unique identifier of the license server") - interactive_fingerprint_verification: Optional[StrictBool] = Field(default=None, description="Validate the license's server fingerprint interactively", alias="interactiveFingerprintVerification") - password: Optional[StrictStr] = Field(default=None, description="The license server's authentication password") - pretty_conn_status: Optional[StrictStr] = Field(default=None, description="The license server's connection status in a human-readable format", alias="prettyConnStatus") - trust_new: Optional[StrictBool] = Field(default=None, description="The flag used to skip license server's identity verifications", alias="trustNew") - tunnel_host_name: Optional[StrictStr] = Field(default=None, description="The hostname/IP of the license server tunnel", alias="tunnelHostName") - user: Optional[StrictStr] = Field(default=None, description="The license server's authentication user") + connection_status: Optional[StrictStr] = Field(default=None, alias="connectionStatus") + failure_reason: Optional[StrictStr] = Field(default=None, alias="failureReason") + fingerprint: Optional[StrictStr] = None + host_name: Optional[StrictStr] = Field(default=None, alias="hostName") + id: Optional[StrictInt] = None + interactive_fingerprint_verification: Optional[StrictBool] = Field(default=None, alias="interactiveFingerprintVerification") + password: Optional[StrictStr] = None + pretty_conn_status: Optional[StrictStr] = Field(default=None, alias="prettyConnStatus") + trust_new: Optional[StrictBool] = Field(default=None, alias="trustNew") + tunnel_host_name: Optional[StrictStr] = Field(default=None, alias="tunnelHostName") + user: Optional[StrictStr] = None __properties: ClassVar[List[str]] = ["connectionStatus", "failureReason", "fingerprint", "hostName", "id", "interactiveFingerprintVerification", "password", "prettyConnStatus", "trustNew", "tunnelHostName", "user"] model_config = ConfigDict( @@ -71,16 +71,8 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. - * OpenAPI `readOnly` fields are excluded. - * OpenAPI `readOnly` fields are excluded. - * OpenAPI `readOnly` fields are excluded. - * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set([ - "connection_status", - "id", - "pretty_conn_status", - "tunnel_host_name", ]) _dict = self.model_dump( diff --git a/cyperf/models/llmapi_profile.py b/cyperf/models/llmapi_profile.py index 163ce6e..3b5fe79 100644 --- a/cyperf/models/llmapi_profile.py +++ b/cyperf/models/llmapi_profile.py @@ -34,16 +34,17 @@ class LLMAPIProfile(BaseModel): connections: Optional[List[Connection]] = Field(default=None, alias="Connections") id: StrictStr is_enabled: StrictBool = Field(alias="isEnabled") + is_one_arm: StrictBool = Field(description="Indicates whether the LLM API profile is one-arm", alias="isOneArm") links: Optional[List[APILink]] = None model_name: StrictStr = Field(alias="modelName") params: Optional[List[Params]] = None - __properties: ClassVar[List[str]] = ["Connections", "id", "isEnabled", "links", "modelName", "params"] + __properties: ClassVar[List[str]] = ["Connections", "id", "isEnabled", "isOneArm", "links", "modelName", "params"] @field_validator('model_name') def model_name_validate_enum(cls, value): """Validates the enum""" - if value not in set(['OpenAI', 'Gemini', 'Grok']): - raise ValueError("must be one of enum values ('OpenAI', 'Gemini', 'Grok')") + if value not in set(['OpenAI', 'Gemini', 'Grok', 'Azure Content Safety Prompt Shield API Interceptor', 'Model Armor API Interceptor', 'Prisma AIRS API Interceptor']): + raise ValueError("must be one of enum values ('OpenAI', 'Gemini', 'Grok', 'Azure Content Safety Prompt Shield API Interceptor', 'Model Armor API Interceptor', 'Prisma AIRS API Interceptor')") return value model_config = ConfigDict( @@ -123,6 +124,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "Connections": ( [Connection.from_dict(_item) for _item in obj.get("Connections", [])] if obj.get("Connections") is not None else None), "id": obj.get("id"), "isEnabled": obj.get("isEnabled"), + "isOneArm": obj.get("isOneArm"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "modelName": obj.get("modelName"), "params": ( [Params.from_dict(_item) for _item in obj.get("params", [])] if obj.get("params") is not None else None) diff --git a/cyperf/models/pqc_signature_algorithm_tls13.py b/cyperf/models/pqc_signature_algorithm_tls13.py new file mode 100644 index 0000000..34d6b8a --- /dev/null +++ b/cyperf/models/pqc_signature_algorithm_tls13.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + CyPerf Application API + + CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class PqcSignatureAlgorithmTLS13(str, Enum): + """ + The TLSv1.3 supported PQC signature algorithms. + """ + + """ + allowed enum values + """ + MLDSA44 = 'mldsa44' + MLDSA65 = 'mldsa65' + MLDSA87 = 'mldsa87' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of PqcSignatureAlgorithmTLS13 from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/prepared_test_options.py b/cyperf/models/prepared_test_options.py deleted file mode 100644 index e6704ce..0000000 --- a/cyperf/models/prepared_test_options.py +++ /dev/null @@ -1,103 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr -from typing import Any, ClassVar, Dict, List, Optional -from typing import Optional, Set, Union -from typing_extensions import Self -from pydantic import Field, PrivateAttr - -class PreparedTestOptions(BaseModel): - """ - PreparedTestOptions - """ # noqa: E501 - add_activity_meta: Optional[StrictBool] = Field(default=None, alias="AddActivityMeta") - datasource_for_ui_views: Optional[StrictStr] = Field(default=None, alias="DatasourceForUIViews") - extra_tags: Optional[Dict[str, List[StrictStr]]] = Field(default=None, alias="ExtraTags") - filter_by_properties: Optional[Dict[str, StrictStr]] = Field(default=None, alias="FilterByProperties") - format_protocol_name: Optional[StrictBool] = Field(default=None, alias="FormatProtocolName") - override_properties: Optional[Dict[str, StrictStr]] = Field(default=None, alias="OverrideProperties") - __properties: ClassVar[List[str]] = ["AddActivityMeta", "DatasourceForUIViews", "ExtraTags", "FilterByProperties", "FormatProtocolName", "OverrideProperties"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of PreparedTestOptions from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of PreparedTestOptions from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "AddActivityMeta": obj.get("AddActivityMeta"), - "DatasourceForUIViews": obj.get("DatasourceForUIViews"), - "ExtraTags": obj.get("ExtraTags"), - "FilterByProperties": obj.get("FilterByProperties"), - "FormatProtocolName": obj.get("FormatProtocolName"), - "OverrideProperties": obj.get("OverrideProperties") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/prepare_test_operation.py b/cyperf/models/profile.py similarity index 53% rename from cyperf/models/prepare_test_operation.py rename to cyperf/models/profile.py index d9f44e9..814b593 100644 --- a/cyperf/models/prepare_test_operation.py +++ b/cyperf/models/profile.py @@ -20,25 +20,26 @@ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.prepared_test_options import PreparedTestOptions from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr -class PrepareTestOperation(BaseModel): +class Profile(BaseModel): """ - PrepareTestOperation + Profile """ # noqa: E501 - options: Optional[PreparedTestOptions] = Field(default=None, alias="Options") - message: Optional[StrictStr] = Field(default=None, description="An optional message that describes the reason the test ended") - new_state: Optional[StrictStr] = Field(default=None, description="An optional enum that identifies the current state of the test", alias="newState") - old_state: Optional[StrictStr] = Field(default=None, description="An optional enum that identifies the previous state of the test", alias="oldState") - owner: Optional[StrictStr] = Field(default=None, description="An optional friendly display name for the user which initiated the operation") - owner_id: Optional[StrictStr] = Field(default=None, description="An optional identifier that uniquely identifies the user which initiated the operation", alias="ownerId") - reason: Optional[StrictStr] = Field(default=None, description="An optional enum that identifies the underlying reason for the test's end") - test_id: Optional[StrictStr] = Field(default=None, description="The test to which the state change refers", alias="testId") - timestamp: Optional[StrictInt] = Field(default=None, description="An optional Unix timestamp that indicates when the test state was changed") - __properties: ClassVar[List[str]] = ["Options", "message", "newState", "oldState", "owner", "ownerId", "reason", "testId", "timestamp"] + category: Optional[StrictStr] = Field(default=None, description="Category of the profile") + config_id: Optional[StrictStr] = Field(default=None, description="The config ID associated with this profile", alias="configId") + description: Optional[StrictStr] = Field(default=None, description="Description of the profile") + display_name: Optional[StrictStr] = Field(default=None, description="Display name of the profile", alias="displayName") + icon: Optional[StrictStr] = Field(default=None, description="Profile icon (base64 encoded)") + id: Optional[StrictStr] = None + index: Optional[StrictInt] = Field(default=None, description="The index of the profile in the list of profiles. This is used for ordering profiles.") + owner: Optional[StrictStr] = Field(default=None, description="The friendly display name of the profile's owner") + owner_id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the profile's owner", alias="ownerId") + topology_img_dark: Optional[StrictStr] = Field(default=None, description="Topology image (dark theme, base64 encoded)", alias="topologyImgDark") + topology_img_light: Optional[StrictStr] = Field(default=None, description="Topology image (light theme, base64 encoded)", alias="topologyImgLight") + __properties: ClassVar[List[str]] = ["category", "configId", "description", "displayName", "icon", "id", "index", "owner", "ownerId", "topologyImgDark", "topologyImgLight"] model_config = ConfigDict( populate_by_name=True, @@ -58,7 +59,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of PrepareTestOperation from a JSON string""" + """Create an instance of Profile from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -70,8 +71,14 @@ def to_dict(self) -> Dict[str, Any]: * `None` is only added to the output dict for nullable fields that were set at model initialization. Other fields with value `None` are ignored. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set([ + "index", + "owner", + "owner_id", ]) _dict = self.model_dump( @@ -79,14 +86,11 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of options - if self.options: - _dict['Options'] = self.options.to_dict() return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of PrepareTestOperation from a dict""" + """Create an instance of Profile from a dict""" if obj is None: return None @@ -96,15 +100,17 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "Options": PreparedTestOptions.from_dict(obj["Options"]) if obj.get("Options") is not None else None, - "message": obj.get("message"), - "newState": obj.get("newState"), - "oldState": obj.get("oldState"), + "category": obj.get("category"), + "configId": obj.get("configId"), + "description": obj.get("description"), + "displayName": obj.get("displayName"), + "icon": obj.get("icon"), + "id": obj.get("id"), + "index": obj.get("index"), "owner": obj.get("owner"), "ownerId": obj.get("ownerId"), - "reason": obj.get("reason"), - "testId": obj.get("testId"), - "timestamp": obj.get("timestamp") + "topologyImgDark": obj.get("topologyImgDark"), + "topologyImgLight": obj.get("topologyImgLight") , "links": obj.get("links") }) diff --git a/cyperf/models/get_application_types200_response_one_of.py b/cyperf/models/section.py similarity index 62% rename from cyperf/models/get_application_types200_response_one_of.py rename to cyperf/models/section.py index c5eb652..3e4fc2c 100644 --- a/cyperf/models/get_application_types200_response_one_of.py +++ b/cyperf/models/section.py @@ -18,20 +18,21 @@ import re # noqa: F401 import json -from pydantic import BaseModel, ConfigDict, Field, StrictInt +from pydantic import BaseModel, ConfigDict, Field from typing import Any, ClassVar, Dict, List, Optional -from cyperf.models.application_type import ApplicationType -from typing import Optional, Set, Union, GenericAlias, get_args +from cyperf.models.content_block import ContentBlock +from cyperf.models.text_segment import TextSegment +from typing import Optional, Set, Union from typing_extensions import Self -from pydantic import Field +from pydantic import Field, PrivateAttr -class GetApplicationTypes200ResponseOneOf(BaseModel): +class Section(BaseModel): """ - GetApplicationTypes200ResponseOneOf + Section """ # noqa: E501 - data: Optional[List[ApplicationType]] = None - total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") - __properties: ClassVar[List[str]] = ["data", "totalCount"] + content: Optional[List[ContentBlock]] = Field(default=None, description="The content blocks that belong to this section.") + title: Optional[List[TextSegment]] = Field(default=None, description="The title of the section, as a rich text.") + __properties: ClassVar[List[str]] = ["content", "title"] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +52,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of GetApplicationTypes200ResponseOneOf from a JSON string""" + """Create an instance of Section from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -72,18 +73,25 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) - # override the default output from pydantic by calling `to_dict()` of each item in data (list) + # override the default output from pydantic by calling `to_dict()` of each item in content (list) _items = [] - if self.data: - for _item in self.data: + if self.content: + for _item in self.content: if _item: _items.append(_item.to_dict()) - _dict['data'] = _items + _dict['content'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in title (list) + _items = [] + if self.title: + for _item in self.title: + if _item: + _items.append(_item.to_dict()) + _dict['title'] = _items return _dict @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of GetApplicationTypes200ResponseOneOf from a dict""" + """Create an instance of Section from a dict""" if obj is None: return None @@ -93,8 +101,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "data": [ApplicationType.from_dict(_item) for _item in obj["data"]] if obj.get("data") is not None else None, - "totalCount": obj.get("totalCount") + "content": ( [ContentBlock.from_dict(_item) for _item in obj.get("content", [])] if obj.get("content") is not None else None), + "title": ( [TextSegment.from_dict(_item) for _item in obj.get("title", [])] if obj.get("title") is not None else None) , "links": obj.get("links") }) diff --git a/cyperf/models/session_reuse_method_tls12.py b/cyperf/models/session_reuse_method_tls12.py index 910f53f..0ad5c51 100644 --- a/cyperf/models/session_reuse_method_tls12.py +++ b/cyperf/models/session_reuse_method_tls12.py @@ -21,7 +21,7 @@ class SessionReuseMethodTLS12(str, Enum): """ - The session reuse method. Must be one of: DISABLE, SESSION-TICKET or SESSION-ID (default: DISABLE). + TLS 1.2 session reuse method. Must be one of: DISABLE, SESSION-TICKET, SESSION-ID (default: DISABLE). """ """ diff --git a/cyperf/models/session_reuse_method_tls13.py b/cyperf/models/session_reuse_method_tls13.py index aea72e3..350a7c5 100644 --- a/cyperf/models/session_reuse_method_tls13.py +++ b/cyperf/models/session_reuse_method_tls13.py @@ -21,13 +21,14 @@ class SessionReuseMethodTLS13(str, Enum): """ - The session reuse method. Must be DISABLE (default: DISABLE). + TLS 1.3 session reuse method. Must be one of: DISABLE, PSK_ECDHE_REUSE (default: DISABLE). """ """ allowed enum values """ DISABLE = 'DISABLE' + PSK_ECDHE_REUSE = 'PSK_ECDHE_REUSE' @classmethod def from_json(cls, json_str: str) -> Self: diff --git a/cyperf/models/start_batch_delete_request_inner.py b/cyperf/models/start_batch_delete_request_inner.py deleted file mode 100644 index abc0571..0000000 --- a/cyperf/models/start_batch_delete_request_inner.py +++ /dev/null @@ -1,93 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, StrictStr -from typing import Any, ClassVar, Dict, List, Optional -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class StartBatchDeleteRequestInner(BaseModel): - """ - StartBatchDeleteRequestInner - """ # noqa: E501 - id: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["id"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of StartBatchDeleteRequestInner from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of StartBatchDeleteRequestInner from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "id": obj.get("id") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/switch_app_operation.py b/cyperf/models/switch_app_operation.py deleted file mode 100644 index 1a9b95b..0000000 --- a/cyperf/models/switch_app_operation.py +++ /dev/null @@ -1,93 +0,0 @@ -# coding: utf-8 - -""" - CyPerf Application API - - CyPerf REST API - - The version of the OpenAPI document: 1.0.0 - Contact: support@keysight.com - Generated by OpenAPI Generator (https://openapi-generator.tech) - - Do not edit the class manually. -""" # noqa: E501 - - -from __future__ import annotations -import pprint -import re # noqa: F401 -import json - -from pydantic import BaseModel, ConfigDict, Field, StrictStr -from typing import Any, ClassVar, Dict, List, Optional -from typing import Optional, Set, Union, GenericAlias, get_args -from typing_extensions import Self -from pydantic import Field - -class SwitchAppOperation(BaseModel): - """ - SwitchAppOperation - """ # noqa: E501 - app_id: Optional[StrictStr] = Field(default=None, description="The id of the app to activate on the controller.", alias="appID") - __properties: ClassVar[List[str]] = ["appID"] - - model_config = ConfigDict( - populate_by_name=True, - validate_assignment=True, - protected_namespaces=(), - ) - - - def to_str(self) -> str: - """Returns the string representation of the model using alias""" - return pprint.pformat(self.model_dump(by_alias=True)) - - def to_json(self) -> str: - """Returns the JSON representation of the model using alias""" - # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead - return json.dumps(self.to_dict()) - - @classmethod - def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of SwitchAppOperation from a JSON string""" - return cls.from_dict(json.loads(json_str)) - - def to_dict(self) -> Dict[str, Any]: - """Return the dictionary representation of the model using alias. - - This has the following differences from calling pydantic's - `self.model_dump(by_alias=True)`: - - * `None` is only added to the output dict for nullable fields that - were set at model initialization. Other fields with value `None` - are ignored. - """ - excluded_fields: Set[str] = set([ - ]) - - _dict = self.model_dump( - by_alias=True, - exclude=excluded_fields, - exclude_none=True, - ) - return _dict - - @classmethod - def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of SwitchAppOperation from a dict""" - if obj is None: - return None - - if not isinstance(obj, dict): - _obj = cls.model_validate(obj) -# _obj.api_client = client - return _obj - - _obj = cls.model_validate({ - "appID": obj.get("appID") - , - "links": obj.get("links") - }) - return _obj - - diff --git a/cyperf/models/test_info.py b/cyperf/models/test_info.py index 0a05bfd..5a2ddf6 100644 --- a/cyperf/models/test_info.py +++ b/cyperf/models/test_info.py @@ -21,7 +21,6 @@ from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr from typing import Any, ClassVar, Dict, List, Optional from cyperf.models.dashboard import Dashboard -from cyperf.models.test_usage import TestUsage from typing import Optional, Set, Union from typing_extensions import Self from pydantic import Field, PrivateAttr @@ -41,8 +40,8 @@ class TestInfo(BaseModel): test_initialized: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the last test was initialized", alias="testInitialized") test_started: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the test was started", alias="testStarted") test_stopped: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the test was stopped. May be null if the test is still running.", alias="testStopped") - test_usage: Optional[TestUsage] = Field(default=None, alias="testUsage") - __properties: ClassVar[List[str]] = ["dashboards", "defaultDashboardIndex", "defaultPollingInterval", "status", "testDetails", "testDuration", "testElapsed", "testId", "testInitialized", "testStarted", "testStopped", "testUsage"] + used_licenses: Optional[Dict[str, StrictInt]] = Field(default=None, description="Feature types used by the current test and their respective counts", alias="usedLicenses") + __properties: ClassVar[List[str]] = ["dashboards", "defaultDashboardIndex", "defaultPollingInterval", "status", "testDetails", "testDuration", "testElapsed", "testId", "testInitialized", "testStarted", "testStopped", "usedLicenses"] model_config = ConfigDict( populate_by_name=True, @@ -92,9 +91,6 @@ def to_dict(self) -> Dict[str, Any]: if _item: _items.append(_item.to_dict()) _dict['dashboards'] = _items - # override the default output from pydantic by calling `to_dict()` of test_usage - if self.test_usage: - _dict['testUsage'] = self.test_usage.to_dict() return _dict @classmethod @@ -120,7 +116,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "testInitialized": obj.get("testInitialized"), "testStarted": obj.get("testStarted"), "testStopped": obj.get("testStopped"), - "testUsage": TestUsage.from_dict(obj["testUsage"]) if obj.get("testUsage") is not None else None + "usedLicenses": obj.get("usedLicenses") , "links": obj.get("links") }) diff --git a/cyperf/models/set_app_operation.py b/cyperf/models/text_segment.py similarity index 69% rename from cyperf/models/set_app_operation.py rename to cyperf/models/text_segment.py index 134363b..5f1c8d9 100644 --- a/cyperf/models/set_app_operation.py +++ b/cyperf/models/text_segment.py @@ -24,14 +24,16 @@ from typing_extensions import Self from pydantic import Field, PrivateAttr -class SetAppOperation(BaseModel): +class TextSegment(BaseModel): """ - SetAppOperation + TextSegment """ # noqa: E501 - app_id: Optional[StrictStr] = Field(default=None, description="The id of the app to activate on the controllers.", alias="appId") - controllers: Optional[List[StrictStr]] = Field(default=None, description="The controller ids for which to activate the app.") - force: Optional[StrictBool] = Field(default=None, description="Whether the ownership information will be cleared or not.") - __properties: ClassVar[List[str]] = ["appId", "controllers", "force"] + bold: Optional[StrictBool] = Field(default=None, description="Whether the text is bold.") + color: Optional[StrictStr] = Field(default=None, description="The color of the text.") + css_class: Optional[StrictStr] = Field(default=None, description="A CSS class to apply to the text segment.", alias="cssClass") + italic: Optional[StrictBool] = Field(default=None, description="Whether the text is italic.") + text: Optional[StrictStr] = Field(default=None, description="The text content of the segment.") + __properties: ClassVar[List[str]] = ["bold", "color", "cssClass", "italic", "text"] model_config = ConfigDict( populate_by_name=True, @@ -51,7 +53,7 @@ def to_json(self) -> str: @classmethod def from_json(cls, json_str: str) -> Optional[Self]: - """Create an instance of SetAppOperation from a JSON string""" + """Create an instance of TextSegment from a JSON string""" return cls.from_dict(json.loads(json_str)) def to_dict(self) -> Dict[str, Any]: @@ -76,7 +78,7 @@ def to_dict(self) -> Dict[str, Any]: @classmethod def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: - """Create an instance of SetAppOperation from a dict""" + """Create an instance of TextSegment from a dict""" if obj is None: return None @@ -86,9 +88,11 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "appId": obj.get("appId"), - "controllers": obj.get("controllers") if obj.get("controllers") is not None else [], - "force": obj.get("force") + "bold": obj.get("bold"), + "color": obj.get("color"), + "cssClass": obj.get("cssClass"), + "italic": obj.get("italic"), + "text": obj.get("text") , "links": obj.get("links") }) diff --git a/cyperf/models/tls_profile.py b/cyperf/models/tls_profile.py index 7e16c99..cfe841f 100644 --- a/cyperf/models/tls_profile.py +++ b/cyperf/models/tls_profile.py @@ -24,9 +24,12 @@ from cyperf.models.cert_config import CertConfig from cyperf.models.cipher_tls12 import CipherTLS12 from cyperf.models.cipher_tls13 import CipherTLS13 +from cyperf.models.classical_signature_algorithm_tls13 import ClassicalSignatureAlgorithmTLS13 +from cyperf.models.composite_pqc_signature_algorithm_tls13 import CompositePqcSignatureAlgorithmTLS13 from cyperf.models.conflict import Conflict from cyperf.models.group_tls13 import GroupTLS13 from cyperf.models.params import Params +from cyperf.models.pqc_signature_algorithm_tls13 import PqcSignatureAlgorithmTLS13 from cyperf.models.session_reuse_method_tls12 import SessionReuseMethodTLS12 from cyperf.models.session_reuse_method_tls13 import SessionReuseMethodTLS13 from cyperf.models.supported_group_tls13 import SupportedGroupTLS13 @@ -44,7 +47,10 @@ class TLSProfile(BaseModel): cipher13: Optional[CipherTLS13] = None ciphers12: Optional[List[CipherTLS12]] = None ciphers13: Optional[List[CipherTLS13]] = None + classical_signature_algorithms13: Optional[List[ClassicalSignatureAlgorithmTLS13]] = Field(default=None, alias="classicalSignatureAlgorithms13") + composite_pqc_signature_algorithms13: Optional[List[CompositePqcSignatureAlgorithmTLS13]] = Field(default=None, alias="compositePqcSignatureAlgorithms13") dh_file: Optional[Params] = Field(default=None, alias="dhFile") + early_data_enabled: Optional[StrictBool] = Field(default=None, description="If true, TLS 1.3 early data will be enabled.", alias="earlyDataEnabled") get_tls_conflicts: Optional[List[Union[StrictBytes, StrictStr]]] = Field(default=None, alias="get-tls-conflicts") _get_tls_conflicts_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,GetTLSConflicts" }) groups13: Optional[List[GroupTLS13]] = None @@ -53,11 +59,14 @@ class TLSProfile(BaseModel): key_file_password: Optional[StrictStr] = Field(default=None, description="The key file password of the TLS profile.", alias="keyFilePassword") links: Optional[List[APILink]] = None middle_box_enabled: Optional[StrictBool] = Field(default=None, description="If true, the middle box compatibility will be enabled", alias="middleBoxEnabled") + pqc_signature_algorithms13: Optional[List[PqcSignatureAlgorithmTLS13]] = Field(default=None, alias="pqcSignatureAlgorithms13") profile_id: StrictStr = Field(description="The ID of the TLS profile (default: TLSProfile).", alias="profileId") resolve_tls_conflicts: Optional[List[Conflict]] = Field(default=None, alias="resolve-tls-conflicts") _resolve_tls_conflicts_json_schema_extra: dict = PrivateAttr(default={"x-operation": "-,ResolveTLSConflicts" }) send_close_notify: Optional[StrictBool] = Field(default=None, description="If true, a TLS close-notify alert will be sent while closing the TLS session", alias="sendCloseNotify") - session_reuse_count: Optional[StrictInt] = Field(default=None, alias="sessionReuseCount") + session_reuse_count: Optional[StrictInt] = Field(default=None, description="Deprecated: retained for backward compatibility. Represents the TLS 1.2 session reuse count - the number of times a TLS 1.2 client can reuse a previously established session before performing a full handshake (a value of 0 disables session reuse). Use sessionReuseCount12 instead.", alias="sessionReuseCount") + session_reuse_count12: Optional[StrictInt] = Field(default=None, description="The number of times a TLS 1.2 client can reuse a previously established session before performing a full handshake ( a value of 0 disables session reuse).", alias="sessionReuseCount12") + session_reuse_count13: Optional[StrictInt] = Field(default=None, description="The number of times a TLS 1.3 client can reuse a previously established session before performing a full handshake ( a value of 0 disables session reuse).", alias="sessionReuseCount13") session_reuse_method: Optional[SessionReuseMethodTLS12] = Field(default=None, alias="sessionReuseMethod") session_reuse_method12: Optional[SessionReuseMethodTLS12] = Field(default=None, alias="sessionReuseMethod12") session_reuse_method13: Optional[SessionReuseMethodTLS13] = Field(default=None, alias="sessionReuseMethod13") @@ -66,9 +75,10 @@ class TLSProfile(BaseModel): supported_groups13: Optional[List[SupportedGroupTLS13]] = Field(default=None, alias="supportedGroups13") tls12_enabled: StrictBool = Field(alias="tls12Enabled") tls13_enabled: Optional[StrictBool] = Field(default=None, alias="tls13Enabled") + use_default_signature_algorithms: Optional[StrictBool] = Field(default=None, description="If true, default signature algorithms will be used.", alias="useDefaultSignatureAlgorithms") use_tls_profile: Optional[StrictBool] = Field(default=None, description="When disabled, the connection is not TLS secured (default: true).", alias="useTlsProfile") version: StrictStr = Field(description="The version of the TLS profile (default: NONE). Must be one of: NONE or TLSv1.2 or TLSv1.3.") - __properties: ClassVar[List[str]] = ["certificateFile", "cipher", "cipher12", "cipher13", "ciphers12", "ciphers13", "dhFile", "get-tls-conflicts", "groups13", "immediateClose", "keyFile", "keyFilePassword", "links", "middleBoxEnabled", "profileId", "resolve-tls-conflicts", "sendCloseNotify", "sessionReuseCount", "sessionReuseMethod", "sessionReuseMethod12", "sessionReuseMethod13", "sniCertConfigs", "sniEnabled", "supportedGroups13", "tls12Enabled", "tls13Enabled", "useTlsProfile", "version"] + __properties: ClassVar[List[str]] = ["certificateFile", "cipher", "cipher12", "cipher13", "ciphers12", "ciphers13", "classicalSignatureAlgorithms13", "compositePqcSignatureAlgorithms13", "dhFile", "earlyDataEnabled", "get-tls-conflicts", "groups13", "immediateClose", "keyFile", "keyFilePassword", "links", "middleBoxEnabled", "pqcSignatureAlgorithms13", "profileId", "resolve-tls-conflicts", "sendCloseNotify", "sessionReuseCount", "sessionReuseCount12", "sessionReuseCount13", "sessionReuseMethod", "sessionReuseMethod12", "sessionReuseMethod13", "sniCertConfigs", "sniEnabled", "supportedGroups13", "tls12Enabled", "tls13Enabled", "useDefaultSignatureAlgorithms", "useTlsProfile", "version"] @field_validator('version') def version_validate_enum(cls, value): @@ -173,7 +183,10 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "cipher13": obj.get("cipher13"), "ciphers12": obj.get("ciphers12"), "ciphers13": obj.get("ciphers13"), + "classicalSignatureAlgorithms13": obj.get("classicalSignatureAlgorithms13"), + "compositePqcSignatureAlgorithms13": obj.get("compositePqcSignatureAlgorithms13"), "dhFile": Params.from_dict(obj["dhFile"]) if obj.get("dhFile") is not None else None, + "earlyDataEnabled": obj.get("earlyDataEnabled"), "get-tls-conflicts": obj.get("get-tls-conflicts") if obj.get("get-tls-conflicts") is not None else [], "groups13": ( [GroupTLS13.from_dict(_item) for _item in obj.get("groups13", [])] if obj.get("groups13") is not None else None), "immediateClose": obj.get("immediateClose"), @@ -181,10 +194,13 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "keyFilePassword": obj.get("keyFilePassword"), "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), "middleBoxEnabled": obj.get("middleBoxEnabled"), + "pqcSignatureAlgorithms13": obj.get("pqcSignatureAlgorithms13"), "profileId": obj.get("profileId"), "resolve-tls-conflicts": ( [Conflict.from_dict(_item) for _item in obj.get("resolve-tls-conflicts", [])] if obj.get("resolve-tls-conflicts") is not None else None), "sendCloseNotify": obj.get("sendCloseNotify"), "sessionReuseCount": obj.get("sessionReuseCount"), + "sessionReuseCount12": obj.get("sessionReuseCount12"), + "sessionReuseCount13": obj.get("sessionReuseCount13"), "sessionReuseMethod": obj.get("sessionReuseMethod"), "sessionReuseMethod12": obj.get("sessionReuseMethod12"), "sessionReuseMethod13": obj.get("sessionReuseMethod13"), @@ -193,6 +209,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "supportedGroups13": obj.get("supportedGroups13"), "tls12Enabled": obj.get("tls12Enabled"), "tls13Enabled": obj.get("tls13Enabled"), + "useDefaultSignatureAlgorithms": obj.get("useDefaultSignatureAlgorithms"), "useTlsProfile": obj.get("useTlsProfile"), "version": obj.get("version") , diff --git a/docs/Agent.md b/docs/Agent.md index 97c003b..f06fdf5 100644 --- a/docs/Agent.md +++ b/docs/Agent.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **last_update** | **int** | A Unix timestamp that indicates when the agent was last updated | [optional] [readonly] **port_id_format** | **str** | port agent id format | [optional] **reservation_id** | **str** | The ID of the reservation | [optional] [readonly] +**resource_name_format** | **str** | display agent resource name format | [optional] **selected_env** | [**SelectedEnv**](SelectedEnv.md) | | [optional] **selection_status** | **str** | The current status of the selection operation | [optional] **session_name** | **str** | The session's name where the agent is running | [optional] [readonly] diff --git a/docs/ApplicationResourcesApi.md b/docs/ApplicationResourcesApi.md index e5c2971..841aa2c 100644 --- a/docs/ApplicationResourcesApi.md +++ b/docs/ApplicationResourcesApi.md @@ -157,6 +157,8 @@ Method | HTTP request | Description +Delete a capture that was loaded by the user. + ### Example * OAuth Authentication (OAuth2): @@ -220,7 +222,10 @@ void (empty response body) | Status code | Description | Response headers | |-------------|-------------|------------------| -**204** | The request was completed successfully. | - | +**204** | The capture was deleted. | - | +**401** | The user is not authorized to delete resources. | - | +**403** | The user is not allowed to delete a capture not owned by them. | - | +**404** | A resource with the specified ID was not found. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -1446,7 +1451,7 @@ void (empty response body) -Delete a CyPerf application that was created by the user. +Delete an application that was created by the user. ### Example @@ -1762,7 +1767,7 @@ Name | Type | Description | Notes -Get a particular CyPerf application. +Get a particular application. ### Example @@ -1830,9 +1835,9 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The requested CyPerf application | - | +**200** | The requested application | - | **401** | Authorization information is missing or invalid. | - | -**404** | A CyPerf application with the specified ID was not found. | - | +**404** | An application with the specified ID was not found. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -2078,7 +2083,7 @@ Name | Type | Description | Notes -Get all the available CyPerf applications. +Get all the available applications. ### Example @@ -2158,7 +2163,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The list of CyPerf applications | - | +**200** | The list of applications | - | **400** | Bad request | - | **401** | Authorization information is missing or invalid. | - | **500** | Unexpected error | - | @@ -2170,7 +2175,7 @@ Name | Type | Description | Notes -Get a particular CyPerf attack. +Get a particular attack. ### Example @@ -2238,9 +2243,9 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The requested CyPerf attack | - | +**200** | The requested attack | - | **401** | Authorization information is missing or invalid. | - | -**404** | A CyPerf attack with the specified ID was not found. | - | +**404** | An attack with the specified ID was not found. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -2328,7 +2333,7 @@ Name | Type | Description | Notes -Get all the available CyPerf attacks. +Get all the available attacks. ### Example @@ -2408,7 +2413,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The list of CyPerf attacks | - | +**200** | The list of attacks | - | **400** | Bad request | - | **401** | Authorization information is missing or invalid. | - | **500** | Unexpected error | - | @@ -2579,7 +2584,7 @@ Name | Type | Description | Notes -Get a particular CyPerf capture loaded by the user. +Get a particular capture loaded by the user. ### Example @@ -2647,9 +2652,9 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | The requested CyPerf application | - | +**200** | The requested capture | - | **401** | Authorization information is missing or invalid. | - | -**404** | A CyPerf capture with the specified ID was not found. | - | +**404** | A capture with the specified ID was not found. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3037,6 +3042,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the certificate archive file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A certificate file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3351,6 +3357,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the custom fuzzing script file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A custom fuzzing script file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3746,6 +3753,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the flow library file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A flow library file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -3979,6 +3987,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the global playlists archive file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A global playlists file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -4374,6 +4383,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the http library file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A http library file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -4925,6 +4935,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the media file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A media file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -5320,6 +5331,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the media library file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A media library file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -5634,6 +5646,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the other library file | - | +**401** | Authorization information is missing or invalid. | - | **404** | An other library file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -5867,6 +5880,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the payload file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A payload file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -6181,6 +6195,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the pcap file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A pcap file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -6495,6 +6510,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the playlist file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A playlist file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -6572,6 +6588,7 @@ void (empty response body) | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The requested values from the playlist file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A playlist file with the specified ID was not found. | - | **500** | Unexpected error | - | @@ -6968,6 +6985,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the sip library file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A sip library file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -7282,6 +7300,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the stats profile file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A stats profile file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -7764,6 +7783,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the TLS certificate file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A TLS certificate file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -8078,6 +8098,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the TLS DH file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A TLS DH file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -8392,6 +8413,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the TLS key file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A TLS key file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -8860,6 +8882,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| **200** | The content of the voice custom flow file | - | +**401** | Authorization information is missing or invalid. | - | **404** | A voice custom flow file with the specified ID was not found. | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -9945,7 +9968,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_resources_get_apps** -> AsyncContext start_resources_get_apps(get_apps_operation=get_apps_operation) +> AsyncContext start_resources_get_apps(get_scenarios_operation=get_scenarios_operation) @@ -9959,7 +9982,7 @@ Get the list of applications ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.get_apps_operation import GetAppsOperation +from cyperf.models.get_scenarios_operation import GetScenariosOperation from cyperf.rest import ApiException from pprint import pprint @@ -9982,10 +10005,10 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.ApplicationResourcesApi(api_client) - get_apps_operation = cyperf.GetAppsOperation() # GetAppsOperation | (optional) + get_scenarios_operation = cyperf.GetScenariosOperation() # GetScenariosOperation | (optional) try: - api_response = api_instance.start_resources_get_apps(get_apps_operation=get_apps_operation) + api_response = api_instance.start_resources_get_apps(get_scenarios_operation=get_scenarios_operation) print("The response of ApplicationResourcesApi->start_resources_get_apps:\n") pprint(api_response) except Exception as e: @@ -9999,7 +10022,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **get_apps_operation** | [**GetAppsOperation**](GetAppsOperation.md)| | [optional] + **get_scenarios_operation** | [**GetScenariosOperation**](GetScenariosOperation.md)| | [optional] ### Return type @@ -10101,7 +10124,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_resources_get_attacks** -> AsyncContext start_resources_get_attacks(get_attacks_operation=get_attacks_operation) +> AsyncContext start_resources_get_attacks(get_scenarios_operation=get_scenarios_operation) @@ -10115,7 +10138,7 @@ Get the list of attacks ```python import cyperf from cyperf.models.async_context import AsyncContext -from cyperf.models.get_attacks_operation import GetAttacksOperation +from cyperf.models.get_scenarios_operation import GetScenariosOperation from cyperf.rest import ApiException from pprint import pprint @@ -10138,10 +10161,10 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.ApplicationResourcesApi(api_client) - get_attacks_operation = cyperf.GetAttacksOperation() # GetAttacksOperation | (optional) + get_scenarios_operation = cyperf.GetScenariosOperation() # GetScenariosOperation | (optional) try: - api_response = api_instance.start_resources_get_attacks(get_attacks_operation=get_attacks_operation) + api_response = api_instance.start_resources_get_attacks(get_scenarios_operation=get_scenarios_operation) print("The response of ApplicationResourcesApi->start_resources_get_attacks:\n") pprint(api_response) except Exception as e: @@ -10155,7 +10178,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **get_attacks_operation** | [**GetAttacksOperation**](GetAttacksOperation.md)| | [optional] + **get_scenarios_operation** | [**GetScenariosOperation**](GetScenariosOperation.md)| | [optional] ### Return type diff --git a/docs/AttackMetadataKeywordsInner.md b/docs/AttackMetadataKeywordsInner.md deleted file mode 100644 index 1ffb2a0..0000000 --- a/docs/AttackMetadataKeywordsInner.md +++ /dev/null @@ -1,28 +0,0 @@ -# AttackMetadataKeywordsInner - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -## Example - -```python -from cyperf.models.attack_metadata_keywords_inner import AttackMetadataKeywordsInner - -# TODO update the JSON string below -json = "{}" -# create an instance of AttackMetadataKeywordsInner from a JSON string -attack_metadata_keywords_inner_instance = AttackMetadataKeywordsInner.from_json(json) -# print the JSON string representation of the object -print(AttackMetadataKeywordsInner.to_json()) - -# convert the object into a dict -attack_metadata_keywords_inner_dict = attack_metadata_keywords_inner_instance.to_dict() -# create an instance of AttackMetadataKeywordsInner from a dict -attack_metadata_keywords_inner_from_dict = AttackMetadataKeywordsInner.from_dict(attack_metadata_keywords_inner_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.md b/docs/AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.md deleted file mode 100644 index e1dbc6b..0000000 --- a/docs/AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.md +++ /dev/null @@ -1,32 +0,0 @@ -# AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**access_token** | **str** | The access token. Set this in the Authorization HTTP Header to authenticate requests. | [optional] -**expires_in** | **float** | The access token lifetime. | [optional] -**refresh_expires_in** | **float** | The refresh token lifetime. | [optional] -**refresh_token** | **str** | Token that can be used with this request and grant_type: refresh_token to get a new access_token if the current one expires. | [optional] - -## Example - -```python -from cyperf.models.auth_realms_keysight_protocol_openid_connect_token_post200_response import AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response from a JSON string -auth_realms_keysight_protocol_openid_connect_token_post200_response_instance = AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.from_json(json) -# print the JSON string representation of the object -print(AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.to_json()) - -# convert the object into a dict -auth_realms_keysight_protocol_openid_connect_token_post200_response_dict = auth_realms_keysight_protocol_openid_connect_token_post200_response_instance.to_dict() -# create an instance of AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response from a dict -auth_realms_keysight_protocol_openid_connect_token_post200_response_from_dict = AuthRealmsKeysightProtocolOpenidConnectTokenPost200Response.from_dict(auth_realms_keysight_protocol_openid_connect_token_post200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/BasicAuthProfile.md b/docs/BasicAuthProfile.md new file mode 100644 index 0000000..22cde00 --- /dev/null +++ b/docs/BasicAuthProfile.md @@ -0,0 +1,31 @@ +# BasicAuthProfile + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**active** | **bool** | | [optional] +**params** | [**List[Params]**](Params.md) | | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] + +## Example + +```python +from cyperf.models.basic_auth_profile import BasicAuthProfile + +# TODO update the JSON string below +json = "{}" +# create an instance of BasicAuthProfile from a JSON string +basic_auth_profile_instance = BasicAuthProfile.from_json(json) +# print the JSON string representation of the object +print(BasicAuthProfile.to_json()) + +# convert the object into a dict +basic_auth_profile_dict = basic_auth_profile_instance.to_dict() +# create an instance of BasicAuthProfile from a dict +basic_auth_profile_from_dict = BasicAuthProfile.from_dict(basic_auth_profile_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Broker.md b/docs/Broker.md index 281a6b7..51dfc05 100644 --- a/docs/Broker.md +++ b/docs/Broker.md @@ -5,17 +5,17 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**connection_status** | **str** | The broker's connection status | [optional] -**failure_reason** | **str** | The broker's connection failure reason | [optional] -**fingerprint** | **str** | The broker's fingerprint | [optional] -**host** | **str** | The IP or hostname of the registered broker | [optional] -**host_name** | **str** | The IP or hostname of the registered broker | [optional] -**id** | **str** | The unique identifier of the broker | [optional] [readonly] -**interactive_fingerprint_verification** | **bool** | Validate the broker's fingerprint interactively | [optional] -**password** | **str** | The broker's authentication password | [optional] -**pretty_conn_status** | **str** | The broker's connection status in human readable format | [optional] -**trust_new** | **bool** | The flag used to skip broker's identity verifications | [optional] -**user** | **str** | The broker's authentication user | [optional] +**connection_status** | **str** | | [optional] +**failure_reason** | **str** | | [optional] +**fingerprint** | **str** | | [optional] +**host_name** | **str** | | [optional] +**id** | **int** | | [optional] +**interactive_fingerprint_verification** | **bool** | | [optional] +**password** | **str** | | [optional] +**pretty_conn_status** | **str** | | [optional] +**trust_new** | **bool** | | [optional] +**tunnel_host_name** | **str** | | [optional] +**user** | **str** | | [optional] ## Example diff --git a/docs/Capture.md b/docs/Capture.md deleted file mode 100644 index cf15bf9..0000000 --- a/docs/Capture.md +++ /dev/null @@ -1,30 +0,0 @@ -# Capture - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**capture_id** | **str** | | [optional] -**flows** | [**List[AppFlow]**](AppFlow.md) | | [optional] - -## Example - -```python -from cyperf.models.capture import Capture - -# TODO update the JSON string below -json = "{}" -# create an instance of Capture from a JSON string -capture_instance = Capture.from_json(json) -# print the JSON string representation of the object -print(Capture.to_json()) - -# convert the object into a dict -capture_dict = capture_instance.to_dict() -# create an instance of Capture from a dict -capture_from_dict = Capture.from_dict(capture_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/ChangeAggregationModeOperation.md b/docs/ChangeAggregationModeOperation.md deleted file mode 100644 index 6d1e6c1..0000000 --- a/docs/ChangeAggregationModeOperation.md +++ /dev/null @@ -1,31 +0,0 @@ -# ChangeAggregationModeOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**aggregated** | **bool** | The desired aggregation mode. | [optional] -**compute_nodes** | **List[str]** | The compute-node ids for which to change the aggregation mode. | [optional] -**controller** | **str** | The id of the controller that is linked with the compute-nodes. | [optional] - -## Example - -```python -from cyperf.models.change_aggregation_mode_operation import ChangeAggregationModeOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of ChangeAggregationModeOperation from a JSON string -change_aggregation_mode_operation_instance = ChangeAggregationModeOperation.from_json(json) -# print the JSON string representation of the object -print(ChangeAggregationModeOperation.to_json()) - -# convert the object into a dict -change_aggregation_mode_operation_dict = change_aggregation_mode_operation_instance.to_dict() -# create an instance of ChangeAggregationModeOperation from a dict -change_aggregation_mode_operation_from_dict = ChangeAggregationModeOperation.from_dict(change_aggregation_mode_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/ChangeLinkStateOperation.md b/docs/ChangeLinkStateOperation.md deleted file mode 100644 index 977e6f6..0000000 --- a/docs/ChangeLinkStateOperation.md +++ /dev/null @@ -1,30 +0,0 @@ -# ChangeLinkStateOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**link** | **str** | The desired link state. | [optional] -**ports** | **List[str]** | The port ids for which to change the link state. | [optional] - -## Example - -```python -from cyperf.models.change_link_state_operation import ChangeLinkStateOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of ChangeLinkStateOperation from a JSON string -change_link_state_operation_instance = ChangeLinkStateOperation.from_json(json) -# print the JSON string representation of the object -print(ChangeLinkStateOperation.to_json()) - -# convert the object into a dict -change_link_state_operation_dict = change_link_state_operation_instance.to_dict() -# create an instance of ChangeLinkStateOperation from a dict -change_link_state_operation_from_dict = ChangeLinkStateOperation.from_dict(change_link_state_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/ClassicalSignatureAlgorithmTLS13.md b/docs/ClassicalSignatureAlgorithmTLS13.md new file mode 100644 index 0000000..17e2b4b --- /dev/null +++ b/docs/ClassicalSignatureAlgorithmTLS13.md @@ -0,0 +1,43 @@ +# ClassicalSignatureAlgorithmTLS13 + +The TLS supported classical signature algorithms. + +## Enum + +* `RSA_PKCS1_SHA256` (value: `'rsa_pkcs1_sha256'`) + +* `RSA_PKCS1_SHA384` (value: `'rsa_pkcs1_sha384'`) + +* `RSA_PKCS1_SHA512` (value: `'rsa_pkcs1_sha512'`) + +* `ECDSA_SECP256R1_SHA256` (value: `'ecdsa_secp256r1_sha256'`) + +* `ECDSA_SECP384R1_SHA384` (value: `'ecdsa_secp384r1_sha384'`) + +* `ECDSA_SECP521R1_SHA512` (value: `'ecdsa_secp521r1_sha512'`) + +* `RSA_PSS_RSAE_SHA256` (value: `'rsa_pss_rsae_sha256'`) + +* `RSA_PSS_RSAE_SHA384` (value: `'rsa_pss_rsae_sha384'`) + +* `RSA_PSS_RSAE_SHA512` (value: `'rsa_pss_rsae_sha512'`) + +* `RSA_PSS_PSS_SHA256` (value: `'rsa_pss_pss_sha256'`) + +* `RSA_PSS_PSS_SHA384` (value: `'rsa_pss_pss_sha384'`) + +* `RSA_PSS_PSS_SHA512` (value: `'rsa_pss_pss_sha512'`) + +* `ED25519` (value: `'ed25519'`) + +* `ED448` (value: `'ed448'`) + +* `ECDSA_BRAINPOOLP256R1TLS13_SHA256` (value: `'ecdsa_brainpoolp256r1tls13_sha256'`) + +* `ECDSA_BRAINPOOLP384R1TLS13_SHA384` (value: `'ecdsa_brainpoolp384r1tls13_sha384'`) + +* `ECDSA_BRAINPOOLP512R1TLS13_SHA512` (value: `'ecdsa_brainpoolp512r1tls13_sha512'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/CompositePqcSignatureAlgorithmTLS13.md b/docs/CompositePqcSignatureAlgorithmTLS13.md new file mode 100644 index 0000000..f56b062 --- /dev/null +++ b/docs/CompositePqcSignatureAlgorithmTLS13.md @@ -0,0 +1,17 @@ +# CompositePqcSignatureAlgorithmTLS13 + +The TLSv1.3 supported composite PQC signature algorithms. + +## Enum + +* `P256_MLDSA44` (value: `'p256_mldsa44'`) + +* `P384_MLDSA65` (value: `'p384_mldsa65'`) + +* `P521_MLDSA87` (value: `'p521_mldsa87'`) + +* `RSA3072_MLDSA44` (value: `'rsa3072_mldsa44'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ConfigMetadataConfigDataValue.md b/docs/ConfigMetadataConfigDataValue.md deleted file mode 100644 index 4785116..0000000 --- a/docs/ConfigMetadataConfigDataValue.md +++ /dev/null @@ -1,28 +0,0 @@ -# ConfigMetadataConfigDataValue - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -## Example - -```python -from cyperf.models.config_metadata_config_data_value import ConfigMetadataConfigDataValue - -# TODO update the JSON string below -json = "{}" -# create an instance of ConfigMetadataConfigDataValue from a JSON string -config_metadata_config_data_value_instance = ConfigMetadataConfigDataValue.from_json(json) -# print the JSON string representation of the object -print(ConfigMetadataConfigDataValue.to_json()) - -# convert the object into a dict -config_metadata_config_data_value_dict = config_metadata_config_data_value_instance.to_dict() -# create an instance of ConfigMetadataConfigDataValue from a dict -config_metadata_config_data_value_from_dict = ConfigMetadataConfigDataValue.from_dict(config_metadata_config_data_value_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/ContentBlock.md b/docs/ContentBlock.md new file mode 100644 index 0000000..00ebe4c --- /dev/null +++ b/docs/ContentBlock.md @@ -0,0 +1,33 @@ +# ContentBlock + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**content** | [**List[TextSegment]**](TextSegment.md) | The content of the block, as a list of rich text segments. | [optional] +**level** | **int** | The heading level (1-6), used by heading blocks. | [optional] +**list_style** | **str** | The list style: ordered or unordered (used by list blocks). | [optional] +**severity** | **str** | The severity level of a note block: info, warning, error, or success. | [optional] +**type** | **str** | The type of content block (e.g. paragraph, list, note, heading, divider). | [optional] + +## Example + +```python +from cyperf.models.content_block import ContentBlock + +# TODO update the JSON string below +json = "{}" +# create an instance of ContentBlock from a JSON string +content_block_instance = ContentBlock.from_json(json) +# print the JSON string representation of the object +print(ContentBlock.to_json()) + +# convert the object into a dict +content_block_dict = content_block_instance.to_dict() +# create an instance of ContentBlock from a dict +content_block_from_dict = ContentBlock.from_dict(content_block_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DUTNetwork.md b/docs/DUTNetwork.md index 94b8c76..562f9dc 100644 --- a/docs/DUTNetwork.md +++ b/docs/DUTNetwork.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **name** | **str** | | **id** | **str** | | **network_tags** | **List[str]** | A list of tags. | [optional] +**basic_auth_profile** | [**BasicAuthProfile**](BasicAuthProfile.md) | | [optional] **client_dut_active** | **bool** | | [optional] **client_dut_host** | **str** | | [optional] **client_dut_port** | **int** | The listen port for client-side DUT (default: 80). | [optional] @@ -18,8 +19,6 @@ Name | Type | Description | Notes **https_health_check** | [**HealthCheckConfig**](HealthCheckConfig.md) | The HTTPS HealthCheck configuration for DUT | [optional] **hostname_suffix** | **str** | A suffix to be added to the Host header of all Apps/Attacks running through the forward proxy DUT (default: empty string). | [optional] **http_forward_proxy_mode** | **str** | Deprecated. This is ignored and the proxy mode will be deduced from the connection type. | [optional] -**llm_model** | **str** | The identifier of the LLM model to use for inference. | [optional] -**llm_request_url_path** | **str** | The endpoint URL for the LLM chat completions API. | [optional] **non_proxied_hosts** | [**Params**](Params.md) | | [optional] **pep_dut** | [**PepDUT**](PepDUT.md) | | [optional] **pep_dut_active** | **bool** | A flag indicating if the PEP device is an active device. If active, the simulated clients will send traffic to the PEP device host. (default: false) | [optional] diff --git a/docs/DataMigrationApi.md b/docs/DataMigrationApi.md index cb37771..9c8d569 100644 --- a/docs/DataMigrationApi.md +++ b/docs/DataMigrationApi.md @@ -87,7 +87,7 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **start_controller_migration_import** -> AsyncContext start_controller_migration_import() +> AsyncContext start_controller_migration_import(file=file) @@ -123,9 +123,10 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.DataMigrationApi(api_client) + file = None # bytearray | (optional) try: - api_response = api_instance.start_controller_migration_import() + api_response = api_instance.start_controller_migration_import(file=file) print("The response of DataMigrationApi->start_controller_migration_import:\n") pprint(api_response) except Exception as e: @@ -136,7 +137,10 @@ with cyperf.ApiClient(configuration) as api_client: ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **file** | **bytearray**| | [optional] ### Return type @@ -148,7 +152,7 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: multipart/form-data - **Accept**: application/json ### HTTP response details diff --git a/docs/EthRange.md b/docs/EthRange.md index c4a2467..082f2e5 100644 --- a/docs/EthRange.md +++ b/docs/EthRange.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **count** | **int** | | [optional] **mac_address** | [**SequenceValue**](SequenceValue.md) | | [optional] -**mac_auto** | **bool** | A flag indicating if the MAC address for the EthRange should be determined automatically (default: true). | +**mac_auto** | **bool** | A flag indicating if the MAC address for the EthRange should be determined automatically (default: true). | [optional] **mac_incr** | **str** | The MAC address increment rule for the EthRange (default: 00:00:00:00:00:01). | [optional] **mac_start** | **str** | The MAC start address for the EthRange (default: 00:11:01:00:00:01). | [optional] **one_mac_per_ip** | **bool** | A flag indicating if there is only one MAC address for the EthRange per IPRange (default: true). | [optional] diff --git a/docs/FormattedDescription.md b/docs/FormattedDescription.md new file mode 100644 index 0000000..f588c0f --- /dev/null +++ b/docs/FormattedDescription.md @@ -0,0 +1,31 @@ +# FormattedDescription + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**layout** | [**LayoutConfig**](LayoutConfig.md) | | [optional] +**sections** | [**List[Section]**](Section.md) | The list of sections that make up the page. | [optional] +**summary** | [**Section**](Section.md) | | [optional] + +## Example + +```python +from cyperf.models.formatted_description import FormattedDescription + +# TODO update the JSON string below +json = "{}" +# create an instance of FormattedDescription from a JSON string +formatted_description_instance = FormattedDescription.from_json(json) +# print the JSON string representation of the object +print(FormattedDescription.to_json()) + +# convert the object into a dict +formatted_description_dict = formatted_description_instance.to_dict() +# create an instance of FormattedDescription from a dict +formatted_description_from_dict = FormattedDescription.from_dict(formatted_description_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetAgentTags200Response.md b/docs/GetAgentTags200Response.md deleted file mode 100644 index 96a6bb2..0000000 --- a/docs/GetAgentTags200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAgentTags200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AgentsGroup]**](AgentsGroup.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_agent_tags200_response import GetAgentTags200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAgentTags200Response from a JSON string -get_agent_tags200_response_instance = GetAgentTags200Response.from_json(json) -# print the JSON string representation of the object -print(GetAgentTags200Response.to_json()) - -# convert the object into a dict -get_agent_tags200_response_dict = get_agent_tags200_response_instance.to_dict() -# create an instance of GetAgentTags200Response from a dict -get_agent_tags200_response_from_dict = GetAgentTags200Response.from_dict(get_agent_tags200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAgentTags200ResponseOneOf.md b/docs/GetAgentTags200ResponseOneOf.md deleted file mode 100644 index da2638d..0000000 --- a/docs/GetAgentTags200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAgentTags200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AgentsGroup]**](AgentsGroup.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_agent_tags200_response_one_of import GetAgentTags200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAgentTags200ResponseOneOf from a JSON string -get_agent_tags200_response_one_of_instance = GetAgentTags200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetAgentTags200ResponseOneOf.to_json()) - -# convert the object into a dict -get_agent_tags200_response_one_of_dict = get_agent_tags200_response_one_of_instance.to_dict() -# create an instance of GetAgentTags200ResponseOneOf from a dict -get_agent_tags200_response_one_of_from_dict = GetAgentTags200ResponseOneOf.from_dict(get_agent_tags200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetApplicationTypes200Response.md b/docs/GetApplicationTypes200Response.md deleted file mode 100644 index cf052d1..0000000 --- a/docs/GetApplicationTypes200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetApplicationTypes200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ApplicationType]**](ApplicationType.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_application_types200_response import GetApplicationTypes200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetApplicationTypes200Response from a JSON string -get_application_types200_response_instance = GetApplicationTypes200Response.from_json(json) -# print the JSON string representation of the object -print(GetApplicationTypes200Response.to_json()) - -# convert the object into a dict -get_application_types200_response_dict = get_application_types200_response_instance.to_dict() -# create an instance of GetApplicationTypes200Response from a dict -get_application_types200_response_from_dict = GetApplicationTypes200Response.from_dict(get_application_types200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetApplicationTypes200ResponseOneOf.md b/docs/GetApplicationTypes200ResponseOneOf.md deleted file mode 100644 index ee08d2b..0000000 --- a/docs/GetApplicationTypes200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetApplicationTypes200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ApplicationType]**](ApplicationType.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_application_types200_response_one_of import GetApplicationTypes200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetApplicationTypes200ResponseOneOf from a JSON string -get_application_types200_response_one_of_instance = GetApplicationTypes200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetApplicationTypes200ResponseOneOf.to_json()) - -# convert the object into a dict -get_application_types200_response_one_of_dict = get_application_types200_response_one_of_instance.to_dict() -# create an instance of GetApplicationTypes200ResponseOneOf from a dict -get_application_types200_response_one_of_from_dict = GetApplicationTypes200ResponseOneOf.from_dict(get_application_types200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetApps200Response.md b/docs/GetApps200Response.md deleted file mode 100644 index f86194c..0000000 --- a/docs/GetApps200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetApps200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AppsecApp]**](AppsecApp.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_apps200_response import GetApps200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetApps200Response from a JSON string -get_apps200_response_instance = GetApps200Response.from_json(json) -# print the JSON string representation of the object -print(GetApps200Response.to_json()) - -# convert the object into a dict -get_apps200_response_dict = get_apps200_response_instance.to_dict() -# create an instance of GetApps200Response from a dict -get_apps200_response_from_dict = GetApps200Response.from_dict(get_apps200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetApps200ResponseOneOf.md b/docs/GetApps200ResponseOneOf.md deleted file mode 100644 index 7831c53..0000000 --- a/docs/GetApps200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetApps200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AppsecApp]**](AppsecApp.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_apps200_response_one_of import GetApps200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetApps200ResponseOneOf from a JSON string -get_apps200_response_one_of_instance = GetApps200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetApps200ResponseOneOf.to_json()) - -# convert the object into a dict -get_apps200_response_one_of_dict = get_apps200_response_one_of_instance.to_dict() -# create an instance of GetApps200ResponseOneOf from a dict -get_apps200_response_one_of_from_dict = GetApps200ResponseOneOf.from_dict(get_apps200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAttacks200Response.md b/docs/GetAttacks200Response.md deleted file mode 100644 index c3952a6..0000000 --- a/docs/GetAttacks200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAttacks200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AppsecAttack]**](AppsecAttack.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_attacks200_response import GetAttacks200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAttacks200Response from a JSON string -get_attacks200_response_instance = GetAttacks200Response.from_json(json) -# print the JSON string representation of the object -print(GetAttacks200Response.to_json()) - -# convert the object into a dict -get_attacks200_response_dict = get_attacks200_response_instance.to_dict() -# create an instance of GetAttacks200Response from a dict -get_attacks200_response_from_dict = GetAttacks200Response.from_dict(get_attacks200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAttacks200ResponseOneOf.md b/docs/GetAttacks200ResponseOneOf.md deleted file mode 100644 index 56de8af..0000000 --- a/docs/GetAttacks200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAttacks200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AppsecAttack]**](AppsecAttack.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_attacks200_response_one_of import GetAttacks200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAttacks200ResponseOneOf from a JSON string -get_attacks200_response_one_of_instance = GetAttacks200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetAttacks200ResponseOneOf.to_json()) - -# convert the object into a dict -get_attacks200_response_one_of_dict = get_attacks200_response_one_of_instance.to_dict() -# create an instance of GetAttacks200ResponseOneOf from a dict -get_attacks200_response_one_of_from_dict = GetAttacks200ResponseOneOf.from_dict(get_attacks200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAttacksOperation.md b/docs/GetAttacksOperation.md deleted file mode 100644 index c6725a6..0000000 --- a/docs/GetAttacksOperation.md +++ /dev/null @@ -1,35 +0,0 @@ -# GetAttacksOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**categories** | [**List[CategoryFilter]**](CategoryFilter.md) | | [optional] -**filter_mode** | **str** | | [optional] -**search_col** | **List[str]** | | [optional] -**search_val** | **List[str]** | | [optional] -**skip** | **str** | | [optional] -**sort** | [**List[SortBodyField]**](SortBodyField.md) | | [optional] -**take** | **str** | | [optional] - -## Example - -```python -from cyperf.models.get_attacks_operation import GetAttacksOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAttacksOperation from a JSON string -get_attacks_operation_instance = GetAttacksOperation.from_json(json) -# print the JSON string representation of the object -print(GetAttacksOperation.to_json()) - -# convert the object into a dict -get_attacks_operation_dict = get_attacks_operation_instance.to_dict() -# create an instance of GetAttacksOperation from a dict -get_attacks_operation_from_dict = GetAttacksOperation.from_dict(get_attacks_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAuthProfiles200Response.md b/docs/GetAuthProfiles200Response.md deleted file mode 100644 index cd5d550..0000000 --- a/docs/GetAuthProfiles200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAuthProfiles200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AuthProfile]**](AuthProfile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_auth_profiles200_response import GetAuthProfiles200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAuthProfiles200Response from a JSON string -get_auth_profiles200_response_instance = GetAuthProfiles200Response.from_json(json) -# print the JSON string representation of the object -print(GetAuthProfiles200Response.to_json()) - -# convert the object into a dict -get_auth_profiles200_response_dict = get_auth_profiles200_response_instance.to_dict() -# create an instance of GetAuthProfiles200Response from a dict -get_auth_profiles200_response_from_dict = GetAuthProfiles200Response.from_dict(get_auth_profiles200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAuthProfiles200ResponseOneOf.md b/docs/GetAuthProfiles200ResponseOneOf.md deleted file mode 100644 index 90b8cfe..0000000 --- a/docs/GetAuthProfiles200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetAuthProfiles200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[AuthProfile]**](AuthProfile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_auth_profiles200_response_one_of import GetAuthProfiles200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetAuthProfiles200ResponseOneOf from a JSON string -get_auth_profiles200_response_one_of_instance = GetAuthProfiles200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetAuthProfiles200ResponseOneOf.to_json()) - -# convert the object into a dict -get_auth_profiles200_response_one_of_dict = get_auth_profiles200_response_one_of_instance.to_dict() -# create an instance of GetAuthProfiles200ResponseOneOf from a dict -get_auth_profiles200_response_one_of_from_dict = GetAuthProfiles200ResponseOneOf.from_dict(get_auth_profiles200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetCertificates200Response.md b/docs/GetCertificates200Response.md deleted file mode 100644 index aac9575..0000000 --- a/docs/GetCertificates200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetCertificates200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[GenericFile]**](GenericFile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_certificates200_response import GetCertificates200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetCertificates200Response from a JSON string -get_certificates200_response_instance = GetCertificates200Response.from_json(json) -# print the JSON string representation of the object -print(GetCertificates200Response.to_json()) - -# convert the object into a dict -get_certificates200_response_dict = get_certificates200_response_instance.to_dict() -# create an instance of GetCertificates200Response from a dict -get_certificates200_response_from_dict = GetCertificates200Response.from_dict(get_certificates200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetCertificates200ResponseOneOf.md b/docs/GetCertificates200ResponseOneOf.md deleted file mode 100644 index 4c471a7..0000000 --- a/docs/GetCertificates200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetCertificates200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[GenericFile]**](GenericFile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_certificates200_response_one_of import GetCertificates200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetCertificates200ResponseOneOf from a JSON string -get_certificates200_response_one_of_instance = GetCertificates200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetCertificates200ResponseOneOf.to_json()) - -# convert the object into a dict -get_certificates200_response_one_of_dict = get_certificates200_response_one_of_instance.to_dict() -# create an instance of GetCertificates200ResponseOneOf from a dict -get_certificates200_response_one_of_from_dict = GetCertificates200ResponseOneOf.from_dict(get_certificates200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetConsumers200Response.md b/docs/GetConsumers200Response.md deleted file mode 100644 index 07505ca..0000000 --- a/docs/GetConsumers200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetConsumers200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Consumer]**](Consumer.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_consumers200_response import GetConsumers200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetConsumers200Response from a JSON string -get_consumers200_response_instance = GetConsumers200Response.from_json(json) -# print the JSON string representation of the object -print(GetConsumers200Response.to_json()) - -# convert the object into a dict -get_consumers200_response_dict = get_consumers200_response_instance.to_dict() -# create an instance of GetConsumers200Response from a dict -get_consumers200_response_from_dict = GetConsumers200Response.from_dict(get_consumers200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetConsumers200ResponseOneOf.md b/docs/GetConsumers200ResponseOneOf.md deleted file mode 100644 index 34f34b8..0000000 --- a/docs/GetConsumers200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetConsumers200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Consumer]**](Consumer.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_consumers200_response_one_of import GetConsumers200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetConsumers200ResponseOneOf from a JSON string -get_consumers200_response_one_of_instance = GetConsumers200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetConsumers200ResponseOneOf.to_json()) - -# convert the object into a dict -get_consumers200_response_one_of_dict = get_consumers200_response_one_of_instance.to_dict() -# create an instance of GetConsumers200ResponseOneOf from a dict -get_consumers200_response_one_of_from_dict = GetConsumers200ResponseOneOf.from_dict(get_consumers200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetCustomImportOperations200Response.md b/docs/GetCustomImportOperations200Response.md deleted file mode 100644 index 2aa8381..0000000 --- a/docs/GetCustomImportOperations200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetCustomImportOperations200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[CustomImportHandler]**](CustomImportHandler.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_custom_import_operations200_response import GetCustomImportOperations200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetCustomImportOperations200Response from a JSON string -get_custom_import_operations200_response_instance = GetCustomImportOperations200Response.from_json(json) -# print the JSON string representation of the object -print(GetCustomImportOperations200Response.to_json()) - -# convert the object into a dict -get_custom_import_operations200_response_dict = get_custom_import_operations200_response_instance.to_dict() -# create an instance of GetCustomImportOperations200Response from a dict -get_custom_import_operations200_response_from_dict = GetCustomImportOperations200Response.from_dict(get_custom_import_operations200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetCustomImportOperations200ResponseOneOf.md b/docs/GetCustomImportOperations200ResponseOneOf.md deleted file mode 100644 index 0a461cc..0000000 --- a/docs/GetCustomImportOperations200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetCustomImportOperations200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[CustomImportHandler]**](CustomImportHandler.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_custom_import_operations200_response_one_of import GetCustomImportOperations200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetCustomImportOperations200ResponseOneOf from a JSON string -get_custom_import_operations200_response_one_of_instance = GetCustomImportOperations200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetCustomImportOperations200ResponseOneOf.to_json()) - -# convert the object into a dict -get_custom_import_operations200_response_one_of_dict = get_custom_import_operations200_response_one_of_instance.to_dict() -# create an instance of GetCustomImportOperations200ResponseOneOf from a dict -get_custom_import_operations200_response_one_of_from_dict = GetCustomImportOperations200ResponseOneOf.from_dict(get_custom_import_operations200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetFiles200Response.md b/docs/GetFiles200Response.md deleted file mode 100644 index 0172b72..0000000 --- a/docs/GetFiles200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetFiles200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ResultFileMetadata]**](ResultFileMetadata.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_files200_response import GetFiles200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetFiles200Response from a JSON string -get_files200_response_instance = GetFiles200Response.from_json(json) -# print the JSON string representation of the object -print(GetFiles200Response.to_json()) - -# convert the object into a dict -get_files200_response_dict = get_files200_response_instance.to_dict() -# create an instance of GetFiles200Response from a dict -get_files200_response_from_dict = GetFiles200Response.from_dict(get_files200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetFiles200ResponseOneOf.md b/docs/GetFiles200ResponseOneOf.md deleted file mode 100644 index e496180..0000000 --- a/docs/GetFiles200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetFiles200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ResultFileMetadata]**](ResultFileMetadata.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_files200_response_one_of import GetFiles200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetFiles200ResponseOneOf from a JSON string -get_files200_response_one_of_instance = GetFiles200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetFiles200ResponseOneOf.to_json()) - -# convert the object into a dict -get_files200_response_one_of_dict = get_files200_response_one_of_instance.to_dict() -# create an instance of GetFiles200ResponseOneOf from a dict -get_files200_response_one_of_from_dict = GetFiles200ResponseOneOf.from_dict(get_files200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetHttpProfiles200Response.md b/docs/GetHttpProfiles200Response.md deleted file mode 100644 index c7787e6..0000000 --- a/docs/GetHttpProfiles200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetHttpProfiles200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[HTTPProfile]**](HTTPProfile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_http_profiles200_response import GetHttpProfiles200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetHttpProfiles200Response from a JSON string -get_http_profiles200_response_instance = GetHttpProfiles200Response.from_json(json) -# print the JSON string representation of the object -print(GetHttpProfiles200Response.to_json()) - -# convert the object into a dict -get_http_profiles200_response_dict = get_http_profiles200_response_instance.to_dict() -# create an instance of GetHttpProfiles200Response from a dict -get_http_profiles200_response_from_dict = GetHttpProfiles200Response.from_dict(get_http_profiles200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetHttpProfiles200ResponseOneOf.md b/docs/GetHttpProfiles200ResponseOneOf.md deleted file mode 100644 index 7cbf9fa..0000000 --- a/docs/GetHttpProfiles200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetHttpProfiles200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[HTTPProfile]**](HTTPProfile.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_http_profiles200_response_one_of import GetHttpProfiles200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetHttpProfiles200ResponseOneOf from a JSON string -get_http_profiles200_response_one_of_instance = GetHttpProfiles200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetHttpProfiles200ResponseOneOf.to_json()) - -# convert the object into a dict -get_http_profiles200_response_one_of_dict = get_http_profiles200_response_one_of_instance.to_dict() -# create an instance of GetHttpProfiles200ResponseOneOf from a dict -get_http_profiles200_response_one_of_from_dict = GetHttpProfiles200ResponseOneOf.from_dict(get_http_profiles200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetMeta200Response.md b/docs/GetMeta200Response.md deleted file mode 100644 index fc6d7b1..0000000 --- a/docs/GetMeta200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetMeta200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Pair]**](Pair.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_meta200_response import GetMeta200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetMeta200Response from a JSON string -get_meta200_response_instance = GetMeta200Response.from_json(json) -# print the JSON string representation of the object -print(GetMeta200Response.to_json()) - -# convert the object into a dict -get_meta200_response_dict = get_meta200_response_instance.to_dict() -# create an instance of GetMeta200Response from a dict -get_meta200_response_from_dict = GetMeta200Response.from_dict(get_meta200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetMeta200ResponseOneOf.md b/docs/GetMeta200ResponseOneOf.md deleted file mode 100644 index 4299233..0000000 --- a/docs/GetMeta200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetMeta200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Pair]**](Pair.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_meta200_response_one_of import GetMeta200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetMeta200ResponseOneOf from a JSON string -get_meta200_response_one_of_instance = GetMeta200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetMeta200ResponseOneOf.to_json()) - -# convert the object into a dict -get_meta200_response_one_of_dict = get_meta200_response_one_of_instance.to_dict() -# create an instance of GetMeta200ResponseOneOf from a dict -get_meta200_response_one_of_from_dict = GetMeta200ResponseOneOf.from_dict(get_meta200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetPlugins200Response.md b/docs/GetPlugins200Response.md deleted file mode 100644 index 400f521..0000000 --- a/docs/GetPlugins200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetPlugins200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Plugin]**](Plugin.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_plugins200_response import GetPlugins200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetPlugins200Response from a JSON string -get_plugins200_response_instance = GetPlugins200Response.from_json(json) -# print the JSON string representation of the object -print(GetPlugins200Response.to_json()) - -# convert the object into a dict -get_plugins200_response_dict = get_plugins200_response_instance.to_dict() -# create an instance of GetPlugins200Response from a dict -get_plugins200_response_from_dict = GetPlugins200Response.from_dict(get_plugins200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetPlugins200ResponseOneOf.md b/docs/GetPlugins200ResponseOneOf.md deleted file mode 100644 index 7a778cc..0000000 --- a/docs/GetPlugins200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetPlugins200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[Plugin]**](Plugin.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_plugins200_response_one_of import GetPlugins200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetPlugins200ResponseOneOf from a JSON string -get_plugins200_response_one_of_instance = GetPlugins200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetPlugins200ResponseOneOf.to_json()) - -# convert the object into a dict -get_plugins200_response_one_of_dict = get_plugins200_response_one_of_instance.to_dict() -# create an instance of GetPlugins200ResponseOneOf from a dict -get_plugins200_response_one_of_from_dict = GetPlugins200ResponseOneOf.from_dict(get_plugins200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetResultTags200Response.md b/docs/GetResultTags200Response.md deleted file mode 100644 index 8938c86..0000000 --- a/docs/GetResultTags200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetResultTags200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ResultsGroup]**](ResultsGroup.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_result_tags200_response import GetResultTags200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetResultTags200Response from a JSON string -get_result_tags200_response_instance = GetResultTags200Response.from_json(json) -# print the JSON string representation of the object -print(GetResultTags200Response.to_json()) - -# convert the object into a dict -get_result_tags200_response_dict = get_result_tags200_response_instance.to_dict() -# create an instance of GetResultTags200Response from a dict -get_result_tags200_response_from_dict = GetResultTags200Response.from_dict(get_result_tags200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetResultTags200ResponseOneOf.md b/docs/GetResultTags200ResponseOneOf.md deleted file mode 100644 index 8efa3cf..0000000 --- a/docs/GetResultTags200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetResultTags200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[ResultsGroup]**](ResultsGroup.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_result_tags200_response_one_of import GetResultTags200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetResultTags200ResponseOneOf from a JSON string -get_result_tags200_response_one_of_instance = GetResultTags200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetResultTags200ResponseOneOf.to_json()) - -# convert the object into a dict -get_result_tags200_response_one_of_dict = get_result_tags200_response_one_of_instance.to_dict() -# create an instance of GetResultTags200ResponseOneOf from a dict -get_result_tags200_response_one_of_from_dict = GetResultTags200ResponseOneOf.from_dict(get_result_tags200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetAppsOperation.md b/docs/GetScenariosOperation.md similarity index 61% rename from docs/GetAppsOperation.md rename to docs/GetScenariosOperation.md index 8c8163f..65f7c5e 100644 --- a/docs/GetAppsOperation.md +++ b/docs/GetScenariosOperation.md @@ -1,4 +1,4 @@ -# GetAppsOperation +# GetScenariosOperation ## Properties @@ -16,19 +16,19 @@ Name | Type | Description | Notes ## Example ```python -from cyperf.models.get_apps_operation import GetAppsOperation +from cyperf.models.get_scenarios_operation import GetScenariosOperation # TODO update the JSON string below json = "{}" -# create an instance of GetAppsOperation from a JSON string -get_apps_operation_instance = GetAppsOperation.from_json(json) +# create an instance of GetScenariosOperation from a JSON string +get_scenarios_operation_instance = GetScenariosOperation.from_json(json) # print the JSON string representation of the object -print(GetAppsOperation.to_json()) +print(GetScenariosOperation.to_json()) # convert the object into a dict -get_apps_operation_dict = get_apps_operation_instance.to_dict() -# create an instance of GetAppsOperation from a dict -get_apps_operation_from_dict = GetAppsOperation.from_dict(get_apps_operation_dict) +get_scenarios_operation_dict = get_scenarios_operation_instance.to_dict() +# create an instance of GetScenariosOperation from a dict +get_scenarios_operation_from_dict = GetScenariosOperation.from_dict(get_scenarios_operation_dict) ``` [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/GetStats200Response.md b/docs/GetStats200Response.md deleted file mode 100644 index fb14927..0000000 --- a/docs/GetStats200Response.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetStats200Response - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[StatsResult]**](StatsResult.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_stats200_response import GetStats200Response - -# TODO update the JSON string below -json = "{}" -# create an instance of GetStats200Response from a JSON string -get_stats200_response_instance = GetStats200Response.from_json(json) -# print the JSON string representation of the object -print(GetStats200Response.to_json()) - -# convert the object into a dict -get_stats200_response_dict = get_stats200_response_instance.to_dict() -# create an instance of GetStats200Response from a dict -get_stats200_response_from_dict = GetStats200Response.from_dict(get_stats200_response_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/GetStats200ResponseOneOf.md b/docs/GetStats200ResponseOneOf.md deleted file mode 100644 index 0f63bea..0000000 --- a/docs/GetStats200ResponseOneOf.md +++ /dev/null @@ -1,30 +0,0 @@ -# GetStats200ResponseOneOf - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**data** | [**List[StatsResult]**](StatsResult.md) | | [optional] -**total_count** | **int** | | [optional] - -## Example - -```python -from cyperf.models.get_stats200_response_one_of import GetStats200ResponseOneOf - -# TODO update the JSON string below -json = "{}" -# create an instance of GetStats200ResponseOneOf from a JSON string -get_stats200_response_one_of_instance = GetStats200ResponseOneOf.from_json(json) -# print the JSON string representation of the object -print(GetStats200ResponseOneOf.to_json()) - -# convert the object into a dict -get_stats200_response_one_of_dict = get_stats200_response_one_of_instance.to_dict() -# create an instance of GetStats200ResponseOneOf from a dict -get_stats200_response_one_of_from_dict = GetStats200ResponseOneOf.from_dict(get_stats200_response_one_of_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/IPRange.md b/docs/IPRange.md index 1ef5e34..9247453 100644 --- a/docs/IPRange.md +++ b/docs/IPRange.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **automatic_ip_type** | [**AutomaticIpType**](AutomaticIpType.md) | The automatic IP types, either 'ONLY_IPV4', 'ONLY_IPV6' or 'BOTH_IPV4_IPV6'. | [optional] **count** | **int** | The number of IPs generated (default: 1). | [optional] -**gw_auto** | **bool** | A flag indicating if the gateway settings for the IPRange should be determined automatically (default: true). | +**gw_auto** | **bool** | A flag indicating if the gateway settings for the IPRange should be determined automatically (default: true). | [optional] **gw_start** | **str** | The gateway start IP for the IPRange (default: 10.0.0.1). | [optional] **host_count** | **int** | The number of Host IPs generated (default: 1). | [optional] **inner_vlan_range** | [**VLANRange**](VLANRange.md) | The inner VLAN range assigned to the current IP range configuration | [optional] @@ -22,7 +22,7 @@ Name | Type | Description | Notes **mss** | **int** | The maximum segment size of the TCP header. | [optional] **mss_auto** | **bool** | A flag indicating if Mss settings for the IPRange should be determined automatically (default: false). | [optional] **net_mask** | **int** | The network mask of the IP Range (default: 16). | [optional] -**net_mask_auto** | **bool** | A flag indicating if the network mask of the IPRange should be determined automatically (default: true). | +**net_mask_auto** | **bool** | A flag indicating if the network mask of the IPRange should be determined automatically (default: true). | [optional] **outer_vlan_range** | [**VLANRange**](VLANRange.md) | The outer VLAN range assigned to the current IP range configuration | [optional] **vlan_type** | [**VLANType**](VLANType.md) | The type of VLAN used | [optional] **id** | **str** | | [optional] diff --git a/docs/Keyword.md b/docs/Keyword.md new file mode 100644 index 0000000..4c27b09 --- /dev/null +++ b/docs/Keyword.md @@ -0,0 +1,31 @@ +# Keyword + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**category** | **str** | The keyword category | [optional] +**value** | **str** | The keyword value | [optional] +**index** | **int** | The index of the category | [optional] + +## Example + +```python +from cyperf.models.keyword import Keyword + +# TODO update the JSON string below +json = "{}" +# create an instance of Keyword from a JSON string +keyword_instance = Keyword.from_json(json) +# print the JSON string representation of the object +print(Keyword.to_json()) + +# convert the object into a dict +keyword_dict = keyword_instance.to_dict() +# create an instance of Keyword from a dict +keyword_from_dict = Keyword.from_dict(keyword_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LLMAPIProfile.md b/docs/LLMAPIProfile.md index f4072b4..4cd1566 100644 --- a/docs/LLMAPIProfile.md +++ b/docs/LLMAPIProfile.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **connections** | [**List[Connection]**](Connection.md) | | [optional] **id** | **str** | | **is_enabled** | **bool** | | +**is_one_arm** | **bool** | Indicates whether the LLM API profile is one-arm | **links** | [**List[APILink]**](APILink.md) | | [optional] **model_name** | **str** | | **params** | [**List[Params]**](Params.md) | | [optional] diff --git a/docs/LayoutConfig.md b/docs/LayoutConfig.md new file mode 100644 index 0000000..c183c41 --- /dev/null +++ b/docs/LayoutConfig.md @@ -0,0 +1,29 @@ +# LayoutConfig + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**columns** | **int** | The number of columns in the layout grid. | [optional] + +## Example + +```python +from cyperf.models.layout_config import LayoutConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of LayoutConfig from a JSON string +layout_config_instance = LayoutConfig.from_json(json) +# print the JSON string representation of the object +print(LayoutConfig.to_json()) + +# convert the object into a dict +layout_config_dict = layout_config_instance.to_dict() +# create an instance of LayoutConfig from a dict +layout_config_from_dict = LayoutConfig.from_dict(layout_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LicenseServerMetadata.md b/docs/LicenseServerMetadata.md index a57d326..c3bbeb3 100644 --- a/docs/LicenseServerMetadata.md +++ b/docs/LicenseServerMetadata.md @@ -5,17 +5,17 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**connection_status** | **str** | The license server's connection status | [optional] [readonly] -**failure_reason** | **str** | The license server's connection failure reason | [optional] -**fingerprint** | **str** | The license server's fingerprint | [optional] -**host_name** | **str** | The hostname/IP of the server | [optional] -**id** | **int** | The unique identifier of the license server | [optional] [readonly] -**interactive_fingerprint_verification** | **bool** | Validate the license's server fingerprint interactively | [optional] -**password** | **str** | The license server's authentication password | [optional] -**pretty_conn_status** | **str** | The license server's connection status in a human-readable format | [optional] [readonly] -**trust_new** | **bool** | The flag used to skip license server's identity verifications | [optional] -**tunnel_host_name** | **str** | The hostname/IP of the license server tunnel | [optional] [readonly] -**user** | **str** | The license server's authentication user | [optional] +**connection_status** | **str** | | [optional] +**failure_reason** | **str** | | [optional] +**fingerprint** | **str** | | [optional] +**host_name** | **str** | | [optional] +**id** | **int** | | [optional] +**interactive_fingerprint_verification** | **bool** | | [optional] +**password** | **str** | | [optional] +**pretty_conn_status** | **str** | | [optional] +**trust_new** | **bool** | | [optional] +**tunnel_host_name** | **str** | | [optional] +**user** | **str** | | [optional] ## Example diff --git a/docs/PqcSignatureAlgorithmTLS13.md b/docs/PqcSignatureAlgorithmTLS13.md new file mode 100644 index 0000000..e9b5bff --- /dev/null +++ b/docs/PqcSignatureAlgorithmTLS13.md @@ -0,0 +1,15 @@ +# PqcSignatureAlgorithmTLS13 + +The TLSv1.3 supported PQC signature algorithms. + +## Enum + +* `MLDSA44` (value: `'mldsa44'`) + +* `MLDSA65` (value: `'mldsa65'`) + +* `MLDSA87` (value: `'mldsa87'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/PrepareTestOperation.md b/docs/PrepareTestOperation.md deleted file mode 100644 index 06d87a6..0000000 --- a/docs/PrepareTestOperation.md +++ /dev/null @@ -1,37 +0,0 @@ -# PrepareTestOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**options** | [**PreparedTestOptions**](PreparedTestOptions.md) | | [optional] -**message** | **str** | An optional message that describes the reason the test ended | [optional] -**new_state** | **str** | An optional enum that identifies the current state of the test | [optional] -**old_state** | **str** | An optional enum that identifies the previous state of the test | [optional] -**owner** | **str** | An optional friendly display name for the user which initiated the operation | [optional] -**owner_id** | **str** | An optional identifier that uniquely identifies the user which initiated the operation | [optional] -**reason** | **str** | An optional enum that identifies the underlying reason for the test's end | [optional] -**test_id** | **str** | The test to which the state change refers | [optional] -**timestamp** | **int** | An optional Unix timestamp that indicates when the test state was changed | [optional] - -## Example - -```python -from cyperf.models.prepare_test_operation import PrepareTestOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of PrepareTestOperation from a JSON string -prepare_test_operation_instance = PrepareTestOperation.from_json(json) -# print the JSON string representation of the object -print(PrepareTestOperation.to_json()) - -# convert the object into a dict -prepare_test_operation_dict = prepare_test_operation_instance.to_dict() -# create an instance of PrepareTestOperation from a dict -prepare_test_operation_from_dict = PrepareTestOperation.from_dict(prepare_test_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/PreparedTestOptions.md b/docs/PreparedTestOptions.md deleted file mode 100644 index 358654a..0000000 --- a/docs/PreparedTestOptions.md +++ /dev/null @@ -1,34 +0,0 @@ -# PreparedTestOptions - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**add_activity_meta** | **bool** | | [optional] -**datasource_for_ui_views** | **str** | | [optional] -**extra_tags** | **Dict[str, List[str]]** | | [optional] -**filter_by_properties** | **Dict[str, str]** | | [optional] -**format_protocol_name** | **bool** | | [optional] -**override_properties** | **Dict[str, str]** | | [optional] - -## Example - -```python -from cyperf.models.prepared_test_options import PreparedTestOptions - -# TODO update the JSON string below -json = "{}" -# create an instance of PreparedTestOptions from a JSON string -prepared_test_options_instance = PreparedTestOptions.from_json(json) -# print the JSON string representation of the object -print(PreparedTestOptions.to_json()) - -# convert the object into a dict -prepared_test_options_dict = prepared_test_options_instance.to_dict() -# create an instance of PreparedTestOptions from a dict -prepared_test_options_from_dict = PreparedTestOptions.from_dict(prepared_test_options_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/Profile.md b/docs/Profile.md new file mode 100644 index 0000000..060f801 --- /dev/null +++ b/docs/Profile.md @@ -0,0 +1,39 @@ +# Profile + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**category** | **str** | Category of the profile | [optional] +**config_id** | **str** | The config ID associated with this profile | [optional] +**description** | **str** | Description of the profile | [optional] +**display_name** | **str** | Display name of the profile | [optional] +**icon** | **str** | Profile icon (base64 encoded) | [optional] +**id** | **str** | | [optional] +**index** | **int** | The index of the profile in the list of profiles. This is used for ordering profiles. | [optional] [readonly] +**owner** | **str** | The friendly display name of the profile's owner | [optional] [readonly] +**owner_id** | **str** | The unique identifier of the profile's owner | [optional] [readonly] +**topology_img_dark** | **str** | Topology image (dark theme, base64 encoded) | [optional] +**topology_img_light** | **str** | Topology image (light theme, base64 encoded) | [optional] + +## Example + +```python +from cyperf.models.profile import Profile + +# TODO update the JSON string below +json = "{}" +# create an instance of Profile from a JSON string +profile_instance = Profile.from_json(json) +# print the JSON string representation of the object +print(Profile.to_json()) + +# convert the object into a dict +profile_dict = profile_instance.to_dict() +# create an instance of Profile from a dict +profile_from_dict = Profile.from_dict(profile_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Section.md b/docs/Section.md new file mode 100644 index 0000000..141e324 --- /dev/null +++ b/docs/Section.md @@ -0,0 +1,30 @@ +# Section + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**content** | [**List[ContentBlock]**](ContentBlock.md) | The content blocks that belong to this section. | [optional] +**title** | [**List[TextSegment]**](TextSegment.md) | The title of the section, as a rich text. | [optional] + +## Example + +```python +from cyperf.models.section import Section + +# TODO update the JSON string below +json = "{}" +# create an instance of Section from a JSON string +section_instance = Section.from_json(json) +# print the JSON string representation of the object +print(Section.to_json()) + +# convert the object into a dict +section_dict = section_instance.to_dict() +# create an instance of Section from a dict +section_from_dict = Section.from_dict(section_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SessionReuseMethodTLS12.md b/docs/SessionReuseMethodTLS12.md index bf7b994..c29a12d 100644 --- a/docs/SessionReuseMethodTLS12.md +++ b/docs/SessionReuseMethodTLS12.md @@ -1,6 +1,6 @@ # SessionReuseMethodTLS12 -The session reuse method. Must be one of: DISABLE, SESSION-TICKET or SESSION-ID (default: DISABLE). +TLS 1.2 session reuse method. Must be one of: DISABLE, SESSION-TICKET, SESSION-ID (default: DISABLE). ## Enum diff --git a/docs/SessionReuseMethodTLS13.md b/docs/SessionReuseMethodTLS13.md index a7114c3..074c28c 100644 --- a/docs/SessionReuseMethodTLS13.md +++ b/docs/SessionReuseMethodTLS13.md @@ -1,11 +1,13 @@ # SessionReuseMethodTLS13 -The session reuse method. Must be DISABLE (default: DISABLE). +TLS 1.3 session reuse method. Must be one of: DISABLE, PSK_ECDHE_REUSE (default: DISABLE). ## Enum * `DISABLE` (value: `'DISABLE'`) +* `PSK_ECDHE_REUSE` (value: `'PSK_ECDHE_REUSE'`) + [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SessionsApi.md b/docs/SessionsApi.md index f34d6a3..b5378d4 100644 --- a/docs/SessionsApi.md +++ b/docs/SessionsApi.md @@ -24,7 +24,6 @@ Method | HTTP request | Description [**start_session_config_granular_stats_default_dashboards**](SessionsApi.md#start_session_config_granular_stats_default_dashboards) | **POST** /api/v2/sessions/{sessionId}/config/operations/granular-stats-default-dashboards | [**start_session_config_save**](SessionsApi.md#start_session_config_save) | **POST** /api/v2/sessions/{sessionId}/config/operations/save | [**start_session_load_config**](SessionsApi.md#start_session_load_config) | **POST** /api/v2/sessions/{sessionId}/operations/loadConfig | -[**start_session_prepare_test**](SessionsApi.md#start_session_prepare_test) | **POST** /api/v2/sessions/{sessionId}/operations/prepareTest | [**start_session_test_end**](SessionsApi.md#start_session_test_end) | **POST** /api/v2/sessions/{sessionId}/operations/testEnd | [**start_session_test_init**](SessionsApi.md#start_session_test_init) | **POST** /api/v2/sessions/{sessionId}/operations/testInit | [**start_session_touch**](SessionsApi.md#start_session_touch) | **POST** /api/v2/sessions/{sessionId}/operations/touch | @@ -1625,86 +1624,6 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) -# **start_session_prepare_test** -> AsyncContext start_session_prepare_test(session_id, prepare_test_operation=prepare_test_operation) - - - -This operation returns the config processed as agent messages and any data necessary for UI and REST stats - -### Example - -* OAuth Authentication (OAuth2): -* OAuth Authentication (OAuth2): - -```python -import cyperf -from cyperf.models.async_context import AsyncContext -from cyperf.models.prepare_test_operation import PrepareTestOperation -from cyperf.rest import ApiException -from pprint import pprint - -# Defining the host is optional and defaults to http://localhost -# See configuration.py for a list of all supported configuration parameters. -configuration = cyperf.Configuration( - host = "http://localhost" -) - -# The client must configure the authentication and authorization parameters -# in accordance with the API server security policy. -# Examples for each auth method are provided below, use the example that -# satisfies your auth use case. - -configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] - -configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] - -# Enter a context with an instance of the API client -with cyperf.ApiClient(configuration) as api_client: - # Create an instance of the API class - api_instance = cyperf.SessionsApi(api_client) - session_id = 'session_id_example' # str | The ID of the session. - prepare_test_operation = [cyperf.PrepareTestOperation()] # List[PrepareTestOperation] | (optional) - - try: - api_response = api_instance.start_session_prepare_test(session_id, prepare_test_operation=prepare_test_operation) - print("The response of SessionsApi->start_session_prepare_test:\n") - pprint(api_response) - except Exception as e: - print("Exception when calling SessionsApi->start_session_prepare_test: %s\n" % e) -``` - - - -### Parameters - - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **session_id** | **str**| The ID of the session. | - **prepare_test_operation** | [**List[PrepareTestOperation]**](PrepareTestOperation.md)| | [optional] - -### Return type - -[**AsyncContext**](AsyncContext.md) - -### Authorization - -[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -### HTTP response details - -| Status code | Description | Response headers | -|-------------|-------------|------------------| -**202** | Details about the operation that just started | - | - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - # **start_session_test_end** > AsyncContext start_session_test_end(session_id, test_state_changed_operation=test_state_changed_operation) diff --git a/docs/SetAppOperation.md b/docs/SetAppOperation.md deleted file mode 100644 index 52fd548..0000000 --- a/docs/SetAppOperation.md +++ /dev/null @@ -1,31 +0,0 @@ -# SetAppOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**app_id** | **str** | The id of the app to activate on the controllers. | [optional] -**controllers** | **List[str]** | The controller ids for which to activate the app. | [optional] -**force** | **bool** | Whether the ownership information will be cleared or not. | [optional] - -## Example - -```python -from cyperf.models.set_app_operation import SetAppOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of SetAppOperation from a JSON string -set_app_operation_instance = SetAppOperation.from_json(json) -# print the JSON string representation of the object -print(SetAppOperation.to_json()) - -# convert the object into a dict -set_app_operation_dict = set_app_operation_instance.to_dict() -# create an instance of SetAppOperation from a dict -set_app_operation_from_dict = SetAppOperation.from_dict(set_app_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/StartBatchDeleteRequestInner.md b/docs/StartBatchDeleteRequestInner.md deleted file mode 100644 index 4d74fef..0000000 --- a/docs/StartBatchDeleteRequestInner.md +++ /dev/null @@ -1,29 +0,0 @@ -# StartBatchDeleteRequestInner - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] - -## Example - -```python -from cyperf.models.start_batch_delete_request_inner import StartBatchDeleteRequestInner - -# TODO update the JSON string below -json = "{}" -# create an instance of StartBatchDeleteRequestInner from a JSON string -start_batch_delete_request_inner_instance = StartBatchDeleteRequestInner.from_json(json) -# print the JSON string representation of the object -print(StartBatchDeleteRequestInner.to_json()) - -# convert the object into a dict -start_batch_delete_request_inner_dict = start_batch_delete_request_inner_instance.to_dict() -# create an instance of StartBatchDeleteRequestInner from a dict -start_batch_delete_request_inner_from_dict = StartBatchDeleteRequestInner.from_dict(start_batch_delete_request_inner_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/StartRootBatchDeleteRequestInner.md b/docs/StartRootBatchDeleteRequestInner.md deleted file mode 100644 index b0f6a5e..0000000 --- a/docs/StartRootBatchDeleteRequestInner.md +++ /dev/null @@ -1,29 +0,0 @@ -# StartRootBatchDeleteRequestInner - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] - -## Example - -```python -from cyperf.models.start_root_batch_delete_request_inner import StartRootBatchDeleteRequestInner - -# TODO update the JSON string below -json = "{}" -# create an instance of StartRootBatchDeleteRequestInner from a JSON string -start_root_batch_delete_request_inner_instance = StartRootBatchDeleteRequestInner.from_json(json) -# print the JSON string representation of the object -print(StartRootBatchDeleteRequestInner.to_json()) - -# convert the object into a dict -start_root_batch_delete_request_inner_dict = start_root_batch_delete_request_inner_instance.to_dict() -# create an instance of StartRootBatchDeleteRequestInner from a dict -start_root_batch_delete_request_inner_from_dict = StartRootBatchDeleteRequestInner.from_dict(start_root_batch_delete_request_inner_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/SwitchAppOperation.md b/docs/SwitchAppOperation.md deleted file mode 100644 index a87d2fd..0000000 --- a/docs/SwitchAppOperation.md +++ /dev/null @@ -1,29 +0,0 @@ -# SwitchAppOperation - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**app_id** | **str** | The id of the app to activate on the controller. | [optional] - -## Example - -```python -from cyperf.models.switch_app_operation import SwitchAppOperation - -# TODO update the JSON string below -json = "{}" -# create an instance of SwitchAppOperation from a JSON string -switch_app_operation_instance = SwitchAppOperation.from_json(json) -# print the JSON string representation of the object -print(SwitchAppOperation.to_json()) - -# convert the object into a dict -switch_app_operation_dict = switch_app_operation_instance.to_dict() -# create an instance of SwitchAppOperation from a dict -switch_app_operation_from_dict = SwitchAppOperation.from_dict(switch_app_operation_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/TLSProfile.md b/docs/TLSProfile.md index 10f7701..2241ee4 100644 --- a/docs/TLSProfile.md +++ b/docs/TLSProfile.md @@ -11,7 +11,10 @@ Name | Type | Description | Notes **cipher13** | [**CipherTLS13**](CipherTLS13.md) | | [optional] **ciphers12** | [**List[CipherTLS12]**](CipherTLS12.md) | | [optional] **ciphers13** | [**List[CipherTLS13]**](CipherTLS13.md) | | [optional] +**classical_signature_algorithms13** | [**List[ClassicalSignatureAlgorithmTLS13]**](ClassicalSignatureAlgorithmTLS13.md) | | [optional] +**composite_pqc_signature_algorithms13** | [**List[CompositePqcSignatureAlgorithmTLS13]**](CompositePqcSignatureAlgorithmTLS13.md) | | [optional] **dh_file** | [**Params**](Params.md) | | [optional] +**early_data_enabled** | **bool** | If true, TLS 1.3 early data will be enabled. | [optional] **get_tls_conflicts** | **List[bytearray]** | | [optional] **groups13** | [**List[GroupTLS13]**](GroupTLS13.md) | | [optional] **immediate_close** | **bool** | The immediate FIN after close notify | [optional] @@ -19,10 +22,13 @@ Name | Type | Description | Notes **key_file_password** | **str** | The key file password of the TLS profile. | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] **middle_box_enabled** | **bool** | If true, the middle box compatibility will be enabled | [optional] +**pqc_signature_algorithms13** | [**List[PqcSignatureAlgorithmTLS13]**](PqcSignatureAlgorithmTLS13.md) | | [optional] **profile_id** | **str** | The ID of the TLS profile (default: TLSProfile). | **resolve_tls_conflicts** | [**List[Conflict]**](Conflict.md) | | [optional] **send_close_notify** | **bool** | If true, a TLS close-notify alert will be sent while closing the TLS session | [optional] -**session_reuse_count** | **int** | | [optional] +**session_reuse_count** | **int** | Deprecated: retained for backward compatibility. Represents the TLS 1.2 session reuse count - the number of times a TLS 1.2 client can reuse a previously established session before performing a full handshake (a value of 0 disables session reuse). Use sessionReuseCount12 instead. | [optional] +**session_reuse_count12** | **int** | The number of times a TLS 1.2 client can reuse a previously established session before performing a full handshake ( a value of 0 disables session reuse). | [optional] +**session_reuse_count13** | **int** | The number of times a TLS 1.3 client can reuse a previously established session before performing a full handshake ( a value of 0 disables session reuse). | [optional] **session_reuse_method** | [**SessionReuseMethodTLS12**](SessionReuseMethodTLS12.md) | | [optional] **session_reuse_method12** | [**SessionReuseMethodTLS12**](SessionReuseMethodTLS12.md) | | [optional] **session_reuse_method13** | [**SessionReuseMethodTLS13**](SessionReuseMethodTLS13.md) | | [optional] @@ -31,6 +37,7 @@ Name | Type | Description | Notes **supported_groups13** | [**List[SupportedGroupTLS13]**](SupportedGroupTLS13.md) | | [optional] **tls12_enabled** | **bool** | | **tls13_enabled** | **bool** | | [optional] +**use_default_signature_algorithms** | **bool** | If true, default signature algorithms will be used. | [optional] **use_tls_profile** | **bool** | When disabled, the connection is not TLS secured (default: true). | [optional] **version** | **str** | The version of the TLS profile (default: NONE). Must be one of: NONE or TLSv1.2 or TLSv1.3. | diff --git a/docs/TestInfo.md b/docs/TestInfo.md index 55b5c0e..36082a8 100644 --- a/docs/TestInfo.md +++ b/docs/TestInfo.md @@ -16,7 +16,7 @@ Name | Type | Description | Notes **test_initialized** | **int** | A Unix timestamp that indicates when the last test was initialized | [optional] **test_started** | **int** | A Unix timestamp that indicates when the test was started | [optional] **test_stopped** | **int** | A Unix timestamp that indicates when the test was stopped. May be null if the test is still running. | [optional] -**test_usage** | [**TestUsage**](TestUsage.md) | | [optional] +**used_licenses** | **Dict[str, int]** | Feature types used by the current test and their respective counts | [optional] ## Example diff --git a/docs/TestUsage.md b/docs/TestUsage.md deleted file mode 100644 index 332271a..0000000 --- a/docs/TestUsage.md +++ /dev/null @@ -1,30 +0,0 @@ -# TestUsage - - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**used_agents** | **List[str]** | The agents used by the current test | [optional] -**used_licenses** | **Dict[str, int]** | Feature types used by the current test and their respective counts | [optional] - -## Example - -```python -from cyperf.models.test_usage import TestUsage - -# TODO update the JSON string below -json = "{}" -# create an instance of TestUsage from a JSON string -test_usage_instance = TestUsage.from_json(json) -# print the JSON string representation of the object -print(TestUsage.to_json()) - -# convert the object into a dict -test_usage_dict = test_usage_instance.to_dict() -# create an instance of TestUsage from a dict -test_usage_from_dict = TestUsage.from_dict(test_usage_dict) -``` -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/docs/TextSegment.md b/docs/TextSegment.md new file mode 100644 index 0000000..d04b042 --- /dev/null +++ b/docs/TextSegment.md @@ -0,0 +1,33 @@ +# TextSegment + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**bold** | **bool** | Whether the text is bold. | [optional] +**color** | **str** | The color of the text. | [optional] +**css_class** | **str** | A CSS class to apply to the text segment. | [optional] +**italic** | **bool** | Whether the text is italic. | [optional] +**text** | **str** | The text content of the segment. | [optional] + +## Example + +```python +from cyperf.models.text_segment import TextSegment + +# TODO update the JSON string below +json = "{}" +# create an instance of TextSegment from a JSON string +text_segment_instance = TextSegment.from_json(json) +# print the JSON string representation of the object +print(TextSegment.to_json()) + +# convert the object into a dict +text_segment_dict = text_segment_instance.to_dict() +# create an instance of TextSegment from a dict +text_segment_from_dict = TextSegment.from_dict(text_segment_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/UtilsApi.md b/docs/UtilsApi.md index 22033a9..5aa4f88 100644 --- a/docs/UtilsApi.md +++ b/docs/UtilsApi.md @@ -12,11 +12,11 @@ Method | HTTP request | Description [**get_docs**](UtilsApi.md#get_docs) | **GET** /api/v2/docs | [**get_docs_json**](UtilsApi.md#get_docs_json) | **GET** /api/v2/docs.json | [**get_docs_yaml**](UtilsApi.md#get_docs_yaml) | **GET** /api/v2/docs.yaml | -[**get_eula**](UtilsApi.md#get_eula) | **GET** /eula/v1/eula/CyPerf | Retrieve EULA detail +[**get_eula**](UtilsApi.md#get_eula) | **GET** /eula/v1/eula/{id} | Retrieve EULA detail [**get_log_config**](UtilsApi.md#get_log_config) | **GET** /api/v2/log-config | [**get_time**](UtilsApi.md#get_time) | **GET** /api/v2/time | [**list_eulas**](UtilsApi.md#list_eulas) | **GET** /eula/v1/eula | list of EULAs -[**post_eula**](UtilsApi.md#post_eula) | **POST** /eula/v1/eula/CyPerf | Update properties an EULA +[**post_eula**](UtilsApi.md#post_eula) | **POST** /eula/v1/eula/{id} | Update properties an EULA [**start_cert_manager_generate**](UtilsApi.md#start_cert_manager_generate) | **POST** /api/v2/cert-manager/operations/generate | [**start_cert_manager_upload**](UtilsApi.md#start_cert_manager_upload) | **POST** /api/v2/cert-manager/operations/upload | [**start_disk_usage_cleanup_diagnostics**](UtilsApi.md#start_disk_usage_cleanup_diagnostics) | **POST** /api/v2/disk-usage/operations/cleanup-diagnostics | @@ -624,7 +624,7 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_eula** -> EulaDetails get_eula() +> EulaDetails get_eula(id) Retrieve EULA detail @@ -658,10 +658,11 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.UtilsApi(api_client) + id = 'id_example' # str | The ID of the EULA. try: # Retrieve EULA detail - api_response = api_instance.get_eula() + api_response = api_instance.get_eula(id) print("The response of UtilsApi->get_eula:\n") pprint(api_response) except Exception as e: @@ -672,7 +673,10 @@ with cyperf.ApiClient(configuration) as api_client: ### Parameters -This endpoint does not need any parameter. + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| The ID of the EULA. | ### Return type @@ -916,7 +920,7 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **post_eula** -> str post_eula(eula_summary=eula_summary) +> str post_eula(id, eula_summary=eula_summary) Update properties an EULA @@ -950,11 +954,12 @@ configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] with cyperf.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = cyperf.UtilsApi(api_client) + id = 'id_example' # str | The ID of the EULA. eula_summary = cyperf.EulaSummary() # EulaSummary | (optional) try: # Update properties an EULA - api_response = api_instance.post_eula(eula_summary=eula_summary) + api_response = api_instance.post_eula(id, eula_summary=eula_summary) print("The response of UtilsApi->post_eula:\n") pprint(api_response) except Exception as e: @@ -968,6 +973,7 @@ with cyperf.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- + **id** | **str**| The ID of the EULA. | **eula_summary** | [**EulaSummary**](EulaSummary.md)| | [optional] ### Return type From 39096b47e71a443bb86cbebe90cd0231a93aca8e Mon Sep 17 00:00:00 2001 From: Anuvab Chakravarty Date: Wed, 29 Jul 2026 04:02:54 -0600 Subject: [PATCH 15/26] Pull request #80: ISGAPPSEC2-38154: Existing Guardrail related utilities updated to accommodate unified strike format Merge in ISGAPPSEC/cyperf-api-wrapper from anuvab/guardrail-utils to main Squashed commit of the following: commit 26659d7cde9511b820a1cce5deeec4aeb10edb1f Author: anuvchak Date: Mon Jul 27 08:07:26 2026 +0000 Introduces error-free skipping in case we run into applications with No Connections Also removes the redundant alias 'label' commit a114dce54948865cf171e128bbbc22c0ecc1ae03 Author: anuvchak Date: Fri Jul 24 14:57:14 2026 +0000 Creates a separate function keeping the common portions for guardrail utils inside. Also handles absent profiles better. Enough to abort in one specific case (neither strike or app profile found). commit 71a2e79b38b10b4f29e357ff9138959c9f53ee7a Author: anuvchak Date: Thu Jul 23 07:40:10 2026 +0000 Working changes to Guardrail Utilities to accomodate unified strike format ISGAPPSEC2-38154: Supports the Google Model Armor and Prisma AIRS Guardrails only for now --- cyperf/utils.py | 209 +++++++++++++++++++++--------------------------- 1 file changed, 92 insertions(+), 117 deletions(-) diff --git a/cyperf/utils.py b/cyperf/utils.py index 9b00ec9..e519642 100644 --- a/cyperf/utils.py +++ b/cyperf/utils.py @@ -354,134 +354,109 @@ def format_stats_dict_as_table(self, stats_dict={}): lines = ['|'.join([f'{val:^{col_width}}' for val, col_width in zip(item, col_widths)]) for item in zip(*stats_dict.values())] return [line_delim, header, line_delim] + lines + [line_delim] - def set_prisma_airs_params(self, session, pan_auth_token, airs_profile_name = None, airs_profile_id = None): - # Update Attacks - prisma_airs_attacks_found = False - try: - attack_profiles = session.config.config.attack_profiles - if not attack_profiles: - raise ValueError("No attack profiles found in the session configuration.") - for attack in attack_profiles[0].attacks: - if "Prisma AIRS" not in attack.name: - continue - for track in attack.tracks: - for action in track.actions: - for param in action.params: - if param.name == "PAN auth token": - prisma_airs_attacks_found = True - param.value = pan_auth_token - print(f"Updated PAN auth token for attack: {attack.name}") - elif param.name == "AIRS Profile Name" and airs_profile_name: - param.value = airs_profile_name - print(f"Updated AIRS Profile Name for attack: {attack.name}") - elif param.name == "AIRS Profile ID" and airs_profile_id: - param.value = airs_profile_id - print(f"Updated AIRS Profile ID for attack: {attack.name}") - param.update() - except AttributeError as e: - print(f"Error while setting Prisma AIRS params: {e}") - except Exception as e: - print(f"Unexpected error while setting Prisma AIRS params: {e}") - if not prisma_airs_attacks_found: - print("No Prisma AIRS Attacks found in the provided session.") + def _set_llm_api_profile_params(self, session, profile_model_name, hostname, params, app_protocol_id): + strike_found = False + app_found = False - # Update Applications - prisma_airs_applications_found = False - try: - traffic_profiles = session.config.config.traffic_profiles - if not traffic_profiles: - raise ValueError("No application profiles found in the session configuration.") - for application in traffic_profiles[0].applications: - if "Prisma AIRS" not in application.name: - continue - for track in application.tracks: - for action in track.actions: - for param in action.params: - if param.name == "PAN Auth Token": - prisma_airs_applications_found = True - param.value = pan_auth_token - print(f"Updated PAN auth token for Application: {application.name}") - elif param.name == "AIRS Profile Name" and airs_profile_name: - param.value = airs_profile_name - print(f"Updated AIRS Profile Name for Application: {application.name}") - elif param.name == "AIRS Profile ID" and airs_profile_id: - param.value = airs_profile_id - print(f"Updated AIRS Profile ID for Application: {application.name}") - param.update() - except AttributeError as e: - print(f"Error while setting Prisma AIRS params: {e}") - except Exception as e: - print(f"Unexpected error while setting Prisma AIRS params: {e}") - if not prisma_airs_applications_found: - print("No Prisma AIRS Applications found in the provided session.") + # DUT Hostname + if hostname: + try: + dut = session.config.config.network_profiles[0].dut_network_segment[0] + dut.server_dut_host = hostname + dut.server_dut_active = True + dut.active = True + dut.update() + print(f"Server DUT hostname updated to {hostname}") + except Exception as e: + print(f"Warning: Could not set Server DUT host: {e}") - def set_model_armor_params(self, session, template_id, location, project_id, access_token): - # Update Attacks - model_armor_attacks_found = False try: - attack_profiles = session.config.config.attack_profiles - if not attack_profiles: - raise ValueError("No attack profiles found in the session configuration.") - for attack in attack_profiles[0].attacks: - if "Model Armor" not in attack.name: - continue - for track in attack.tracks: - for action in track.actions: - params = action.params - for param in params: - if param.name == "Template ID": - model_armor_attacks_found = True - param.value = template_id - print(f"Updated Template ID for attack: {attack.name}") - elif param.name == "Project ID": - param.value = project_id - print(f"Updated Project ID for attack: {attack.name}") - elif param.name == "Location": - param.value = location - print(f"Updated Location for attack: {attack.name}") - elif param.name == "Access Token": - param.value = access_token - print(f"Updated Access Token for attack: {attack.name}") - param.update() + # For Strikes: populate intended LLM API profile and disable other LLM API profiles. + profiles = session.config.config.attack_profiles[0].traffic_settings.default_transport_profile.llmapi_profiles + target = None + for p in profiles: + if p.model_name == profile_model_name: + target = p + break + + if target is None: + print(f"No {profile_model_name} API Profile found in the provided session.") + else: + strike_found = True + for p in profiles: + if p is not target and p.is_enabled: + p.is_enabled = False + p.update() + target.is_enabled = True + target.update() + print(f"Enabled {profile_model_name} and disabled other LLM API profiles") + + if hostname and target.connections and target.connections[0].hostname_param: + target.connections[0].hostname_param.value = hostname + target.connections[0].hostname_param.update() + + for param in target.params: + if param.param_id in params: + param.value = params[param.param_id] + param.update() except AttributeError as e: - print(f"Error while setting Model Armor params: {e}") + print(f"Error while setting {profile_model_name} strike params: {e}") except Exception as e: - print(f"Unexpected error while setting Model Armor params: {e}") - if not model_armor_attacks_found: - print("No Model Armor Attacks found in the provided session.") + print(f"Unexpected error while setting {profile_model_name} strike params: {e}") - # Update Applications - model_armor_applications_found = False + # For Applications: loop per app and set parameters one-by-one. try: traffic_profiles = session.config.config.traffic_profiles if not traffic_profiles: - raise ValueError("No application profiles found in the session configuration.") - for application in traffic_profiles[0].applications: - if "Model Armor" not in application.name: - continue - for track in application.tracks: - for action in track.actions: - for param in action.params: - if param.name == "Template ID": - model_armor_applications_found = True - param.value = template_id - print(f"Updated Template ID for Application: {application.name}") - elif param.name == "Project ID": - param.value = project_id - print(f"Updated Project ID for Application: {application.name}") - elif param.name == "Location": - param.value = location - print(f"Updated Location for Application: {application.name}") - elif param.name == "Access Token": - param.value = access_token - print(f"Updated Access Token for Application: {application.name}") - param.update() + print("No application profiles found in the session configuration.") + else: + for application in traffic_profiles[0].applications: + if app_protocol_id not in application.protocol_id: + continue + app_found = True + if hostname: + connections = getattr(application, 'connections', None) + # Skipping in case we run into applications with No Connections + if not connections: + print(f"Skipping connection-level hostname update for Application {application.name}: No connections found") + else: + connections[0].hostname_param.value = hostname + connections[0].hostname_param.update() + for track in application.tracks: + for action in track.actions: + for param in action.params: + if param.param_id in params: + param.value = params[param.param_id] + param.update() + print(f"Updated params for Application: {application.name}") except AttributeError as e: - print(f"Error while setting Model Armor params: {e}") + print(f"Error while setting {profile_model_name} application params: {e}") except Exception as e: - print(f"Unexpected error while setting Model Armor params: {e}") - if not model_armor_applications_found: - print("No Model Armor Applications found in the provided session.") + print(f"Unexpected error while setting {profile_model_name} application params: {e}") + + if not strike_found and not app_found: + raise ValueError(f"No matching {profile_model_name} API Profile strike or application found in the provided session.") + + if not app_found: + print(f"No {app_protocol_id} Applications found in the provided session.") + + def set_prisma_airs_params(self, session, pan_auth_token, airs_profile_name=None, airs_profile_id=None, hostname=None): + params = {"pan_auth_token": pan_auth_token} + if airs_profile_name: + params["airs_profile_name"] = airs_profile_name + if airs_profile_id: + params["airs_profile_id"] = airs_profile_id + self._set_llm_api_profile_params(session, "Prisma AIRS API Interceptor", hostname, params, "Prisma AIRS") + + def set_model_armor_params(self, session, template_id, location, project_id, access_token, hostname=None): + resolved_hostname = hostname or f"modelarmor.{location}.rep.googleapis.com" + params = { + "template_id": template_id, + "project_id": project_id, + "location": location, + "access_token": access_token, + } + self._set_llm_api_profile_params(session, "Model Armor API Interceptor", resolved_hostname, params, "Model Armor") def get_agent_ips(self): """Return the management IPs of all available agents.""" From ea4f3b07050cdc36e338fb948024d89a8d358101 Mon Sep 17 00:00:00 2001 From: Angela Grigoroaia Date: Thu, 9 Jul 2026 17:33:10 +0300 Subject: [PATCH 16/26] Add generated knowledge base (v3.5.0 sections layout) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Knowledge base was generated in an isolated worktree; relocating it into the main checkout's .claude/knowledge-base so it's available from main. Also migrates the KB from the legacy monolithic-README layout to the v3.5.0 index + sections layout: the slim README.md now holds only the Product Profile and a Sections index table, while each of the 10 canonical KB sections (architecture, file-index, surface-inventory, project-standards, internal-quality, external-quality, technical-debt, feature-registry, development-guide, tooling-requirements) lives in its own file under knowledge-base/sections/. This was a pure content carve of the existing monolith (which already used the exact canonical H2 section names) via the assembler — no discovery/IQ/EQ re-run, no new facts. The manifest is updated accordingly and gets a new Incremental Update Log entry describing the carve. Co-Authored-By: Claude Sonnet 5 --- .claude/knowledge-base/.generated-manifest.md | 88 ++++++++++++++++++ .claude/knowledge-base/README.md | 24 +++++ .claude/knowledge-base/USAGE.md | 92 +++++++++++++++++++ .../knowledge-base/sections/architecture.md | 17 ++++ .../sections/development-guide.md | 17 ++++ .../sections/external-quality.md | 4 + .../sections/feature-registry.md | 12 +++ .claude/knowledge-base/sections/file-index.md | 57 ++++++++++++ .../sections/internal-quality.md | 4 + .../sections/project-standards.md | 28 ++++++ .../sections/surface-inventory.md | 65 +++++++++++++ .../knowledge-base/sections/technical-debt.md | 4 + .../sections/tooling-requirements.md | 14 +++ 13 files changed, 426 insertions(+) create mode 100644 .claude/knowledge-base/.generated-manifest.md create mode 100644 .claude/knowledge-base/README.md create mode 100644 .claude/knowledge-base/USAGE.md create mode 100644 .claude/knowledge-base/sections/architecture.md create mode 100644 .claude/knowledge-base/sections/development-guide.md create mode 100644 .claude/knowledge-base/sections/external-quality.md create mode 100644 .claude/knowledge-base/sections/feature-registry.md create mode 100644 .claude/knowledge-base/sections/file-index.md create mode 100644 .claude/knowledge-base/sections/internal-quality.md create mode 100644 .claude/knowledge-base/sections/project-standards.md create mode 100644 .claude/knowledge-base/sections/surface-inventory.md create mode 100644 .claude/knowledge-base/sections/technical-debt.md create mode 100644 .claude/knowledge-base/sections/tooling-requirements.md diff --git a/.claude/knowledge-base/.generated-manifest.md b/.claude/knowledge-base/.generated-manifest.md new file mode 100644 index 0000000..e62869f --- /dev/null +++ b/.claude/knowledge-base/.generated-manifest.md @@ -0,0 +1,88 @@ +# Generated Artifacts Manifest +Plugin: knowledge-base v3.5.0 +Generated: 2026-07-09 + +| Path | Type | Name | Category | Version | +|------|------|------|----------|---------| +| .claude/knowledge-base/README.md | readme | knowledge-base | — | 3.5.0 | +| .claude/knowledge-base/sections/architecture.md | kb-section | architecture | — | 3.5.0 | +| .claude/knowledge-base/sections/file-index.md | kb-section | file-index | — | 3.5.0 | +| .claude/knowledge-base/sections/surface-inventory.md | kb-section | surface-inventory | — | 3.5.0 | +| .claude/knowledge-base/sections/project-standards.md | kb-section | project-standards | — | 3.5.0 | +| .claude/knowledge-base/sections/internal-quality.md | kb-section | internal-quality | — | 3.5.0 | +| .claude/knowledge-base/sections/external-quality.md | kb-section | external-quality | — | 3.5.0 | +| .claude/knowledge-base/sections/technical-debt.md | kb-section | technical-debt | — | 3.5.0 | +| .claude/knowledge-base/sections/feature-registry.md | kb-section | feature-registry | — | 3.5.0 | +| .claude/knowledge-base/sections/development-guide.md | kb-section | development-guide | — | 3.5.0 | +| .claude/knowledge-base/sections/tooling-requirements.md | kb-section | tooling-requirements | — | 3.5.0 | +| .claude/skills/explain/SKILL.md | skill | explain | understand | 3.4.0 | +| .claude/skills/document/SKILL.md | skill | document | understand | 3.4.0 | +| .claude/skills/review/SKILL.md | skill | review | operate | 3.4.0 | +| .claude/skills/exec-plan/SKILL.md | skill | exec-plan | operate | 3.4.0 | +| .claude/skills/deploy/SKILL.md | skill | deploy | operate | 3.4.0 | +| .claude/agents/scanner.md | agent | scanner | — | 3.4.0 | +| .claude/agents/analyzer.md | agent | analyzer | — | 3.4.0 | +| .claude/agents/reasoner.md | agent | reasoner | — | 3.4.0 | +| .claude/agents/reviewer.md | agent | reviewer | — | 3.4.0 | +| .claude/agents/exec-plan-author.md | agent | exec-plan-author | — | 3.4.0 | +| .claude/agents/exec-plan-implementer.md | agent | exec-plan-implementer | — | 3.4.0 | +| .claude/agents/exec-plan-discusser.md | agent | exec-plan-discusser | — | 3.4.0 | +| .claude/agents/exec-plan-researcher.md | agent | exec-plan-researcher | — | 3.4.0 | +| .claude/commands/explain.md | command | explain | — | 3.4.0 | +| .claude/commands/review.md | command | review | — | 3.4.0 | +| .claude/commands/exec-plan.md | command | exec-plan | — | 3.4.0 | +| .claude/commands/deploy.md | command | deploy | — | 3.4.0 | +| .claude/commands/incremental-discover.md | command | incremental-discover | — | 3.4.0 | +| .claude/settings.json | hook | block-sensitive, lint-on-save | — | 3.4.0 | +| .claude/hooks/block_sensitive.py | hook | block-sensitive (helper script) | — | 3.4.0 | +| .claude/hooks/lint_on_save.py | hook | lint-on-save (helper script) | — | 3.4.0 | +| CLAUDE.md | readme | claude-md | — | 3.4.0 | +| .claude/knowledge-base/USAGE.md | readme | usage | — | 3.4.0 | + +## Artifacts intentionally not generated + +| Artifact | Reason | +|----------|--------| +| MCP server configs (`.mcp.json`) | No qualifying stack signal: remote is internal Bitbucket (not GitHub), no database, no UI, no Slack/Stripe/Supabase integration. The project's `docker/Dockerfile` only packages the wheel for PyPI publish — not a local dev container workflow — so it doesn't justify a Docker MCP server either. | +| Improve skills (Tier A/B) | No IQ/EQ evaluation has run yet (this was a `discover`-only / base-mode run, not `discover-all`). Zero Improve skills is the correct base-mode outcome, not a gap. | +| `run-tests` hook | The project has no real test suite (`pytest --cov=cyperf` collects 0 tests) — wiring a hook to run non-existent tests on every save would be misleading. | +| `format-on-save` hook | No formatter is configured for this project (no black/ruff/autopep8) — only the `flake8` linter, which is covered by `lint-on-save`. | + +Validation: passed — all 16 mandatory artifacts + 1 conditional (`deploy`, justified by existing `docker/Dockerfile` + `jenkins/JenkinsFile` build/publish pipeline) verified present via Glob; frontmatter sanity (no `tools:` field, `name`/`description` present) and generation-marker presence verified across all skills/agents/commands/readmes; `.claude/settings.json` validated as parseable JSON; both hook helper scripts (`block_sensitive.py`, `lint_on_save.py`) validated via `py_compile` and exercised against representative stdin payloads (block / allow / skip-generated / skip-non-python cases all produced the expected exit codes). + +## Incremental Update Log + +### 2026-07-17 — Incremental content patch for 2 landed commits (no re-discovery/IQ/EQ) +Two commits landed on `main` since the 2026-07-09 generation baseline (`0affc87`), both after the KB commit was authored: `d8f08be` ("Regenerate Python API Wrapper", PR #78, 2026-07-10) and `d56047c` ("ISGAPPSEC2-38156 sample script for appbuilder", PR #77, 2026-07-14). This patch updates only the counts/facts touched by those two commits — no fresh discovery pass, no IQ/EQ re-run (both remain "not yet evaluated"). + +- **`d8f08be` (API regen)**: `cyperf/models/*.py` 443 → 454 (+11 new: `agent_assignment_by_front_panel_port`, `clear_compute_resources_ownership_operation`, `clear_front_panel_ports_ownership_operation`, `compute_resource`, `compute_resources_by_controller`, `compute_resources_by_node`, `front_panel`, `front_panel_ports_by_controller`, `ports_by_panel`, `reboot_compute_resources_operation`, `set_front_panel_ports_link_state_operation`; 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py`, not a net add). `docs/*.md` 458 → 469 (+11, 1:1 with the new models). `AgentsApi` operations grew from 27 to an estimated ~37 (verified by diffing unique method-base-names in `agents_api.py` before/after — a proxy count, not a line-by-line spec re-read); total operations therefore restated as "~322 (was 312)" everywhere it appears, flagged as approximate since only `AgentsApi` was re-counted precisely, not all 16 classes. The tracked `.openapi-generator/` directory was removed (now gitignored) — no KB fact referenced it, no change needed there. Total Python files 476 → 488. +- **`d56047c` (sample script)**: `samples/*.py` 6 → 7. Added `samples/appbuilder/sample_appbuilder_examples.py` (uploads an encrypted pcap via `ApplicationResourcesApi.start_resources_captures_encrypted_upload_file`, then builds AppBuilder apps/actions from the parsed capture flows/exchanges) plus `samples/appbuilder/claude.pcap` and `samples/appbuilder/tls_key.log` fixtures. Uses only the existing `ApplicationResourcesApi` surface (no new API class), so no surface-inventory API table change beyond the file-index row for the new sample. + +**Files patched**: `README.md` (Product Profile Scale/Architecture bullets), `sections/architecture.md` (layer 2/3 counts), `sections/file-index.md` (File Inventory table: api/models/docs/samples rows + new `samples/appbuilder/*` row), `sections/surface-inventory.md` (APIs intro total, `AgentsApi` row, auth-pattern enrichment row). + +**Not touched / not needed**: `sections/internal-quality.md`, `sections/external-quality.md`, `sections/technical-debt.md` (still gated on a real IQ/EQ run — this patch is facts-only), `sections/project-standards.md`, `sections/feature-registry.md`, `sections/development-guide.md`, `sections/tooling-requirements.md` (nothing in either commit touched standards, requirements, or tooling), Interaction Chains in `file-index.md` (the new appbuilder sample is a genuinely new workflow shape — capture-upload → AppBuilder app/action creation — that doesn't fit Chain A/B; documenting it properly would need a real interaction trace, which is out of scope for this lightweight patch and is called out here as a **fuller-analysis flag** for a future `discover`/`index-files` pass). + +**Git**: will be amended onto the existing unpushed local KB commit (currently `ea3e856` after rebasing twice across intervening `git pull`s), per this repo's explicit git-workflow instructions (never push this commit; `pull.rebase=true` keeps it replaying cleanly on top of new origin commits). Only `.claude/knowledge-base/**` is staged for the amend; the unrelated unstaged `.gitignore` working-tree change (adding `.claude/settings.local.json`) is left untouched. + +### 2026-07-09 — Migrate KB to v3.5.0 index + sections layout +Structural migration only — no discovery/IQ/EQ re-run, no new facts. The monolithic `.claude/knowledge-base/README.md` already used the exact 10 canonical v3.5.0 H2 section names, so this was a clean 1:1 carve with no renaming/remapping judgment required: + +- `## Product Profile` stayed in the new slim `README.md` (plus the new `## Sections` index table). +- `## External Quality Summary` → `sections/external-quality.md` (verbatim — still "not yet performed"). +- `## Internal Quality Summary` → `sections/internal-quality.md` (verbatim — still "not yet performed"). +- `## Project Standards` → `sections/project-standards.md` (verbatim, including its `### Coding & Quality Gates` / `### Testing` / `### Architectural Rules` subheadings, unchanged since they were already H3). +- `## Architecture Overview` → `sections/architecture.md` (verbatim). +- `## File Index` → `sections/file-index.md` (verbatim, including `### File Inventory` / `### Key File Details` / `### Interaction Chains` / `### Hub Files & Side Effect Map`). +- `## Surface Inventory` → `sections/surface-inventory.md` (verbatim, including `### APIs` / `### UIs` / `### CLIs` / `### Services` / `### Libraries` / `### AI Metadata`). +- `## Technical Debt Registry` → `sections/technical-debt.md` (verbatim — still "Requires IQ evaluation"). +- `## Feature Registry` → `sections/feature-registry.md` (verbatim, empty FR/NFR tables preserved as-is, not fabricated). +- `## Development Guide` → `sections/development-guide.md` (verbatim, `### For AI Agents` / `### For Human Developers`). +- `## Tooling Requirements` → `sections/tooling-requirements.md` (verbatim, `### Understand Skills` / `### Operate Skills` / `### Improve Skills`). + +No canonical section was missing content, so no `_Not yet populated..._` placeholder was needed anywhere. No heading-level bumping was needed either — every carved section's own subheadings were already H3, nesting correctly under the new top-level H2 in each section file. No content-drift fix was identified or applied for this repo (per repo-specific instructions, none was expected). + +**Tooling-file grep (step 3)**: `.claude/agents`, `.claude/skills`, `.claude/commands`, and `CLAUDE.md` do **not exist** in this checkout (they were generated in the isolated worktree `.claude/worktrees/elegant-wishing-tide/` during the original discover run and were never relocated into `main` — see `f59b111`'s commit message, "Knowledge base was generated in an isolated worktree; relocating it into the main checkout's .claude/knowledge-base..."). This manifest still lists them (unchanged, v3.4.0) because they are real generated artifacts that exist in that worktree / were intended to be relocated — they are simply outside the scope of this structural KB migration. No stale KB references were found or fixed because there was nothing on disk to grep in the main checkout. `.claude/knowledge-base/USAGE.md` mentions the KB generically (e.g. "run `/knowledge-base:incremental-discover`") but contains no reference to a specific `## Section Heading` that moved, so it required no edit and its marker was left at v3.4.0. + +**Legacy `.claude/kb/` directory**: none existed; nothing to remove. + +**Git**: amended onto the existing unpushed commit `f59b111` ("Add generated knowledge base") per this repo's explicit git-workflow instructions, since that commit had never been pushed to `origin/main`. Only `.claude/knowledge-base/**` was staged; the untracked `.claude/worktrees/elegant-wishing-tide/` and `pr-78.diff` were left untouched. diff --git a/.claude/knowledge-base/README.md b/.claude/knowledge-base/README.md new file mode 100644 index 0000000..fe06713 --- /dev/null +++ b/.claude/knowledge-base/README.md @@ -0,0 +1,24 @@ +# Knowledge Base: cyperf-api-wrapper +Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 + +## Product Profile +- **Purpose**: Python client SDK for the Keysight CyPerf network/security performance-test controller — a mostly OpenAPI-generated REST client (`pip install cyperf`) topped with a hand-written `TestRunner`/CLI helper layer and a HATEOAS "dynamic model" layer for writing test-automation scripts. +- **Stack**: Python 3.8–3.12, pydantic ≥2, urllib3 ≥2.2, python-dateutil, typing-extensions; generated by [OpenAPI Generator](https://openapi-generator.tech) (Python/pydantic template). No web framework — this is an SDK/library, not a service. +- **Scale**: 488 Python files / ~145k LOC total (as of the Jul-10/14 2026 regen + sample-script commits), but the overwhelming majority is generator output: 454 model files (`cyperf/models/`), 16 API classes / ~322 operations (`cyperf/api/`; grew from 312 when `AgentsApi` gained ~10 new compute-resource/front-panel-port ownership operations), 469 generated doc pages (`docs/`). Hand-written surface is small and concentrated: `cyperf/utils.py` (636 lines), `cyperf/dynamic_model_meta.py` (584 lines), plus targeted edits inside `api_client.py` / `configuration.py`, and 7 sample scripts (~60k combined incl. one config zip and one pcap fixture). +- **Architecture**: Generated OpenAPI SDK, layered: `Configuration`/`ApiClient`/`RESTClientObject` (HTTP+OAuth2) → 16 generated `*Api` classes (~322 operations) → 454 generated pydantic models → a hand-written `DynamicModel` metaclass that wraps every model with lazy HATEOAS link-following, `.update()`/`.delete()`/`.refresh()`, and async-operation polling → `utils.TestRunner` + CLI helpers for scripting on top. Distributed as a PyPI package (internal Keysight/Bitbucket, `bitbucket.it.keysight.com/scm/isgappsec/cyperf-api-wrapper`), consumed by internal regression suites (e.g. the "appsec-automation" repo, per commit history). + +## Sections +| File | Description | +|------|-------------| +| [sections/architecture.md](sections/architecture.md) | Layered architecture, auth flow, async operations, dependency graph, data architecture | +| [sections/file-index.md](sections/file-index.md) | File inventory, key file details, interaction chains, hub files & side effects | +| [sections/surface-inventory.md](sections/surface-inventory.md) | APIs, UIs, CLIs, Services, Libraries, and AI metadata surfaces | +| [sections/project-standards.md](sections/project-standards.md) | Coding & quality gates, testing conventions, architectural rules | +| [sections/internal-quality.md](sections/internal-quality.md) | Internal Quality (IQ) summary — not yet evaluated | +| [sections/external-quality.md](sections/external-quality.md) | External Quality (EQ) summary — not yet evaluated | +| [sections/technical-debt.md](sections/technical-debt.md) | Technical debt registry — requires IQ evaluation | +| [sections/feature-registry.md](sections/feature-registry.md) | Functional and non-functional requirements tracked from plans | +| [sections/development-guide.md](sections/development-guide.md) | Guidance for AI agents and human developers working in this repo | +| [sections/tooling-requirements.md](sections/tooling-requirements.md) | Understand/Operate/Improve skill tooling requirements | + +Load only the section(s) relevant to your task rather than all of them at once. diff --git a/.claude/knowledge-base/USAGE.md b/.claude/knowledge-base/USAGE.md new file mode 100644 index 0000000..3892e52 --- /dev/null +++ b/.claude/knowledge-base/USAGE.md @@ -0,0 +1,92 @@ + +# Usage Guide for cyperf-api-wrapper + +Generated: 2026-07-09 | Plugin: knowledge-base v3.4.0 + +--- + +## Quick Start + +| Command | What It Does | +|---------|-------------| +| `/explain {component}` | Explain any part of the `cyperf` SDK — a generated `*Api` operation (e.g. `SessionsApi.create_sessions`), a generated model, or one of the hand-written layers (`cyperf/utils.py` TestRunner, `cyperf/dynamic_model_meta.py` DynamicModel) — tracing what it actually does against the CyPerf controller | +| `/review` | Review staged changes against the project's conventions, scoped to the small hand-written surface (`cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches in `api_client.py`/`configuration.py`/`exceptions.py`, `samples/*.py`); generated files under `cyperf/api/`, `cyperf/models/`, and `docs/` are excluded by default | +| `/exec-plan {task}` | Create a step-by-step execution plan for changes such as adding a new sample script or extending `TestRunner`, flagging the scenario-zero test-framework gap (pytest collects 0 tests) along the way | + +--- + +## Scenario Examples + +### Understand a Component + +**Task**: You need to understand how an end-to-end test run is actually driven through the SDK, e.g. before adding a new convenience method to `TestRunner`. + +**Run**: `/explain TestRunner.wait_for_test_end` + +**What happens**: The explain skill locates `wait_for_test_end` in `cyperf/utils.py`, traces its 0.5s poll loop calling `SessionsApi.get_session_test(session_id=...)` (`GET /api/v2/sessions/{id}/test`) until `status=='STOPPED'`, and surfaces the wider chain it belongs to — `parse_cli_options()` → `TestRunner(...)` → `create_session_by_config_name()` → `start_test()` → `wait_for_test_end()` — as demonstrated end-to-end in `samples/sample_udp_streaming_run.py`. + +--- + +### Review Changes + +**Task**: You've modified `cyperf/utils.py` (e.g. touched `set_prisma_airs_params` or added a new `TestRunner` method) and want to catch issues before committing. + +**Run**: `/review` + +**What happens**: The review skill checks your staged diff against the project's actual conventions — the typed `ApiException` hierarchy in `cyperf/exceptions.py` as the dominant error-handling pattern (flagging any new broad `except Exception` swallows like the existing ones in `set_prisma_airs_params`/`set_model_armor_params`), the `flake8` lint rules (`--max-complexity=10 --max-line-length=127` in CI, `--max-line-length=150` locally per `setup.cfg`), and confirms you haven't hand-edited any file carrying the `"Generated by OpenAPI Generator... Do not edit the class manually"` header. + +--- + +### Plan a Feature + +**Task**: You need to add a new sample script demonstrating a raw-API-style attack test run against a precanned configuration. + +**Run**: `/exec-plan add a new sample script for attack test runs using the raw API style` + +**What happens**: The exec-plan skill creates a fully-scoped execution plan in `.claude/plans/`, modeled on the existing raw-API interaction chain used by `samples/sample_load_and_run_precanned_config.py` and `samples/sample_attack_based_script.py` (`create_api_client_cli()` → `ConfigurationsApi.get_configs` → `SessionsApi.create_sessions` → per-model `.update()` → `TestOperationsApi.start_test_run_start` + `.await_completion()`), and explicitly calls out that there is no automated test suite to validate against — `pytest --cov=cyperf` collects 0 tests today, so verification has to be manual/functional. You review and approve the plan before any code changes happen. After completion, run `/knowledge-base:incremental-discover` to update the KB. + +--- + +### Generate Documentation + +**Task**: You need an accurate, human-facing description of how the `TestRunner`-based workflow differs from the raw-API workflow, since the generated `README.md`/`docs/*.md` don't cover this. + +**Run**: `/document samples/` + +**What happens**: The document skill reads `samples/*.py` (the only hand-written usage examples in the repo — `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`, `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`), infers the two idiomatic call styles already used, and writes/updates guidance rather than touching the generator-owned `README.md`/`docs/*.md` (443 model docs + per-API-class docs), which would simply be clobbered on the next OpenAPI regeneration. + +--- + +### Deploy (Package & Publish) + +**Task**: Build the `cyperf` package and publish a new version to the internal PyPI index after re-syncing the wrapper against a newer CyPerf controller OpenAPI spec. + +**Run**: `/deploy pypi` + +**What happens**: The deploy skill runs the same flow as `jenkins/JenkinsFile`: build inside `docker/Dockerfile`, bump `VERSION` via `sed` (keeping `setup.py`/`pyproject.toml`'s hardcoded `1.0.0` base in sync with the Jenkins-assigned build version), and — on a `release/` branch with `publish_pypi=true` — publish via `twine` using the credentials in `.pypirc`. `publish.sh`/`git_push.sh` are the local convenience-script equivalents of the same publish flow. This is packaging/publishing only — there is no runtime service to deploy; the "deployment target" is the internal PyPI index, and consumers (e.g. the `appsec-automation` regression repo) pick up the new version via `pip install`. + +--- + +No quality gaps have been identified yet that would warrant dedicated Improve skills — IQ/EQ evaluation simply has not run on this project. Run `/knowledge-base:discover-all` to perform that evaluation and generate any Improve skills the findings justify. + +--- + +## When to Use Commands vs. Agents + +**Use commands** (e.g., `/explain`, `/review`) as your primary interface. They delegate to skills, which launch agents as needed. + +**Agents are internal** — you rarely invoke them directly. The skill decides which agent to use: + +- `scanner` (haiku) for fast file searches +- `analyzer` (sonnet) for deep code analysis +- `reasoner` (opus) for complex architecture decisions + +--- + +## Keeping Your Knowledge Base Current + +After completing a plan: +- Run `/knowledge-base:incremental-discover` to update the KB from the plan's outcomes (~2% cost of full discover) + +After updating the knowledge-base plugin: +- Run `/knowledge-base:upgrade` to regenerate tooling without re-running analysis diff --git a/.claude/knowledge-base/sections/architecture.md b/.claude/knowledge-base/sections/architecture.md new file mode 100644 index 0000000..d8339bf --- /dev/null +++ b/.claude/knowledge-base/sections/architecture.md @@ -0,0 +1,17 @@ + +## Architecture Overview + +**Style**: Generated OpenAPI client SDK ("Library" surface), not a monolith/microservice/UI. Four layers, bottom-up: + +1. **Transport/Auth** — `cyperf/configuration.py` (host, SSL/proxy/retry config, OAuth2 credential storage) + `cyperf/rest.py` (`RESTClientObject`, thin urllib3 wrapper: `PoolManager`/`ProxyManager`/SOCKS, `preload_content=False`) + `cyperf/api_client.py` (`ApiClient`: `param_serialize` → `call_api` → `response_deserialize`, plus a hand-written `__retry` loop layered on top of urllib3's own retries, and CyPerf-specific `accept_eula`/`wait_for_controller_up`/`refresh_authorization`). +2. **Generated REST surface** — `cyperf/api/*.py`, 16 classes / ~322 operations (grew from 312 via the Jul-10 2026 "Regenerate Python API Wrapper" commit, which added ~10 compute-resource/front-panel-port ownership operations to `AgentsApi`), each method built in triplicate (`op`, `op_with_http_info`, `op_without_preload_content`), all declaring `_auth_settings = ['OAuth2', 'OAuth2']`. +3. **Generated data models** — `cyperf/models/*.py`, 454 pydantic v2 models (was 443; +11 new models for the same regen, incl. `ComputeResource`, `FrontPanel`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation`), one per OpenAPI schema, re-exported flat from `cyperf/__init__.py`. +4. **Dynamic/HATEOAS overlay + scripting helpers** — `cyperf/dynamic_model_meta.py` (`DynamicModel` metaclass attaches `.update()/.delete()/.refresh()/.get_link()/.poll()` and lazy link-following properties to every generated model) and `cyperf/utils.py` (`TestRunner` class + `parse_cli_options`/`create_api_client_cli`) for end-to-end test-automation scripting. `samples/*.py` demonstrate both the raw-API style and the `TestRunner`-based style. + +**Auth flow**: `Configuration._get_access_token()` calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)` against the controller's Keycloak-style endpoint (`/auth/realms/keysight/protocol/openid-connect/token`), then every subsequent call attaches `Authorization: Bearer {access_token}` via `Configuration.auth_settings()`. + +**Async operations**: CyPerf operations that take time (start test, generate report, license activation) return an `AsyncContext`-like resource; `DynamicModel.poll()`/`.await_completion()` polls it via GET until `state != "IN_PROGRESS"`, raising `ApiException` on `state == "ERROR"`. + +**Dependency graph / hub files**: `api_client.py` ← used by all 16 `*Api` classes and by `dynamic_model_meta.py`. `dynamic_model_meta.py` ← used by `cyperf/__init__.py`, every `*_api.py`, and `cyperf/dynamic_models/__init__.py` (which mechanically instantiates one `DynamicModel`-built class per model name). `configuration.py` ← used by `ApiClient` and every sample script. `exceptions.py` ← imported everywhere `ApiException` handling occurs. No circular imports detected beyond the documented `dynamic_model_meta` ↔ `cyperf/__init__` load-order coupling noted above. + +**Data architecture**: No database — the controller (external system) is the data store; this package is purely a typed HTTP client. "Caching" is limited to in-memory model state kept in sync by `DynamicList`/`DynamicDict` wrappers between local mutation and server refresh. diff --git a/.claude/knowledge-base/sections/development-guide.md b/.claude/knowledge-base/sections/development-guide.md new file mode 100644 index 0000000..0e0324d --- /dev/null +++ b/.claude/knowledge-base/sections/development-guide.md @@ -0,0 +1,17 @@ + +## Development Guide + +### For AI Agents +- **Never hand-edit** files carrying the `"Generated by OpenAPI Generator... Do not edit"` header (all of `cyperf/api/`, `cyperf/models/`, `docs/`, and most of `cyperf/api_client.py`/`configuration.py`/`rest.py`/`exceptions.py`). The only files meant for direct edits are `cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches inside the "generated" core files (search for CyPerf-specific methods like `accept_eula`, `wait_for_controller_up`, `_get_access_token` to see the pattern), `samples/*.py`, `docker/Dockerfile`, `jenkins/JenkinsFile`. +- **There is no test suite to run.** `pytest --cov=cyperf` is wired into every CI config but collects zero tests — don't assume `pytest` output means anything passed/failed today. If asked to "run the tests," flag this gap rather than reporting a false green. +- Files named `test_*.py` under `cyperf/api/` and `cyperf/models/` are **not tests** — they're generated models/API classes for CyPerf domain objects literally named "Test..." (TestInfo, TestOperationsApi, TestUsage, etc.). +- Entry points for understanding real usage: read `samples/*.py` before `cyperf/api/*.py` — the samples show the two idiomatic call styles (raw `*Api` classes vs. `utils.TestRunner`). `cyperf/utils.py` and `cyperf/dynamic_model_meta.py` are the only two files with actual business logic to reason about; everything else is either generated plumbing or generated boilerplate. +- The `DynamicModel` layer is the trap most likely to confuse: a plain-looking attribute access on a model (e.g. `session.config`) can trigger a lazy **HTTP GET** under the hood if the field is link-backed and not yet loaded. `.update()` similarly can issue network calls. Don't assume model attribute access is side-effect-free. + +### For Human Developers +- **Setup**: `pip install -r requirements.txt` (runtime) + `pip install -r test-requirements.txt` (dev tools); Python ≥3.8 (setup.py says `>=3.11`, pyproject.toml says `^3.8` — inconsistent, prefer 3.11+ to match CI's newer matrix legs). +- **Build**: `python setup.py install` or via Poetry (`pyproject.toml` present, but `setup.py` is what CI/Jenkins actually use). +- **Test**: `pytest --cov=cyperf` runs but exercises nothing (no test files exist yet). +- **Lint**: `flake8 . --max-complexity=10 --max-line-length=127` (CI, advisory) or `--max-line-length=150` (local `setup.cfg`); `mypy` configured but not enforced in CI. +- **Publish**: `jenkins/JenkinsFile` builds inside `docker/Dockerfile`, bumps `VERSION` via `sed`, and (if `publish_pypi=true` on a `release/` branch) publishes via `twine` using `.pypirc`. `publish.sh`/`git_push.sh` are local convenience scripts for the same flow. +- **Regenerating the client**: this repo is periodically re-synced against a newer CyPerf controller OpenAPI spec ("Re-generate wrapper" commits). After regenerating, re-apply the hand patches called out above (auth flow, EULA/controller-readiness helpers, `LinkNameException`, retry loop) since the generator will overwrite them. diff --git a/.claude/knowledge-base/sections/external-quality.md b/.claude/knowledge-base/sections/external-quality.md new file mode 100644 index 0000000..fd1bc72 --- /dev/null +++ b/.claude/knowledge-base/sections/external-quality.md @@ -0,0 +1,4 @@ + +## External Quality Summary + +EQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. diff --git a/.claude/knowledge-base/sections/feature-registry.md b/.claude/knowledge-base/sections/feature-registry.md new file mode 100644 index 0000000..7ca3322 --- /dev/null +++ b/.claude/knowledge-base/sections/feature-registry.md @@ -0,0 +1,12 @@ + +## Feature Registry + +### Functional Requirements +| ID | Requirement | Source plan | Scenarios | +|----|-------------|-------------|-----------| +*(Empty at initial discover; grows as plans complete.)* + +### Non-Functional Requirements +| ID | Requirement | Source plan | Scenarios | +|----|-------------|-------------|-----------| +*(Empty at initial discover; grows as plans complete.)* diff --git a/.claude/knowledge-base/sections/file-index.md b/.claude/knowledge-base/sections/file-index.md new file mode 100644 index 0000000..d0ce584 --- /dev/null +++ b/.claude/knowledge-base/sections/file-index.md @@ -0,0 +1,57 @@ + +## File Index + +### File Inventory +| Path / Group | Count | Role | Generated? | +|---|---|---|---| +| `cyperf/api_client.py` | 1 | HTTP request/response pipeline, retry, dynamic-model wrapping | Generated + hand patches (`accept_eula`, `wait_for_controller_up`, `refresh_authorization`, `__retry`) | +| `cyperf/configuration.py` | 1 | Auth/host/SSL/proxy config, OAuth2 token fetch | Generated + hand patch (`_get_access_token`, `eula_accept_interactive`) | +| `cyperf/rest.py` | 1 | urllib3-based low-level HTTP client | Generated (standard) | +| `cyperf/exceptions.py` | 1 | Exception hierarchy, status→exception mapping | Generated + 1 hand addition (`LinkNameException`) | +| `cyperf/api_response.py` | 1 | Generic `ApiResponse[T]` pydantic wrapper | Generated (standard) | +| `cyperf/__init__.py` | 1 | Public namespace (re-exports ~460 names) | Generated (standard) | +| `cyperf/dynamic_model_meta.py` | 1 | `DynamicModel` metaclass — HATEOAS link-following, update/delete/refresh/poll | **Hand-written**, no generator header | +| `cyperf/dynamic_models/__init__.py` | 1 | Mechanically builds one `DynamicModel`-wrapped class per model name | Generated (custom template, not standard openapi-generator) | +| `cyperf/utils.py` | 1 | `TestRunner` convenience class + CLI arg parsing (`parse_cli_options`, `create_api_client_cli`) | **Hand-written**, no generator header | +| `cyperf/api/*.py` | 16 (+`__init__.py`) | Generated REST operation classes, ~322 operations total (was 312; `AgentsApi` gained ~10 compute-resource/front-panel-port ownership ops in the Jul-10 2026 regen) | Generated (standard) | +| `cyperf/models/*.py` | 454 | Generated pydantic model per OpenAPI schema (was 443; +11 new models for front-panel-port/compute-resource ownership, 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py`) | Generated (standard) | +| `docs/*.md` | 469 | Generated per-model/per-API-class reference docs (was 458; +11 for the same regen) | Generated (standard) | +| `samples/*.py` | 7 | End-to-end usage examples (attack tests, config CRUD, UDP streaming, sequences, appbuilder capture-to-app workflow) | Hand-written | +| `samples/appbuilder/*` | 3 | `sample_appbuilder_examples.py` (uploads an encrypted pcap capture via `ApplicationResourcesApi`, then builds AppBuilder apps/actions from the parsed flows) + `claude.pcap`/`tls_key.log` fixtures (added 2026-07-14, PR #77) | Hand-written script + data fixtures | +| `samples/cyperf-configurations/*.zip` | 1 | Sample pre-canned CyPerf config bundle | Data fixture | +| `docker/Dockerfile` | 1 | Builds/installs the package for publishing | Hand-written | +| `jenkins/JenkinsFile` | 1 | Internal Keysight build/publish pipeline (PyPI release) | Hand-written | +| `.github/workflows/python.yml`, `.gitlab-ci.yml`, `.travis.yml` | 3 | Lint/test CI (all generator-produced, unmodified) | Generated (standard) | + +### Key File Details + +- **`cyperf/api_client.py`** — `ApiClient.__init__(configuration, header_name, header_value, cookie)`. `param_serialize()` builds method/url/headers/body via `update_params_for_auth`/`_apply_auth_params`. `call_api()` is the public sync entry point, wrapping private `__call_api` in a hand-written `__retry(request_func, retries=3→5)` loop (catches `ServiceException`/`urllib3.exceptions.RequestError`, `time.sleep(5)` between attempts) — independent of urllib3's own retry config. `__call_api` calls `rest_client.request(...)` then wraps the result via `DynamicModel.dynamic_wrapper(...)` (lazy import from `dynamic_model_meta`). `response_deserialize()` maps status→declared type, raises `ApiException.from_response(...)` on non-2xx. CyPerf-specific: `accept_eula(eula_text)` (env var `CYPERF_EULA_ACCEPTED` or interactive prompt), `wait_for_controller_up(timeout_seconds=600)` (polls `UtilsApi.check_eulas`, `ApplicationResourcesApi`, `SessionsApi`, `ConfigurationsApi`, `AgentsApi`, `TestResultsApi`), `refresh_authorization()` (clears `configuration.access_token` to force re-auth). + +- **`cyperf/configuration.py`** — Supports API-key, HTTP basic (`username`/`password`), and OAuth2 (`access_token`/`refresh_token`). `_get_access_token()` (hand-written) calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)`. `auth_settings()` lazily fetches the token and builds `auth['OAuth2'] = {'type':'oauth2','in':'header','key':'Authorization','value':'Bearer '+access_token}`; contains a verbatim duplicated credential-check block (~lines 417–436), a manual-edit artifact, functionally harmless. Host/SSL/proxy fields: `host`, `verify_ssl`, `ssl_ca_cert`, `cert_file`/`key_file`, `proxy`, `retries`, `connection_pool_maxsize` (`cpu_count()*5`); CyPerf-specific `eula_accept_interactive`, `temp_folder_path`. + +- **`cyperf/rest.py`** — `RESTClientObject` built on raw `urllib3` (`PoolManager`/`ProxyManager`/SOCKS via `is_socks_proxy_url`), `preload_content=False` always, retries passed straight to urllib3 (`pool_args['retries']`), TLS via `ssl.CERT_REQUIRED`/`CERT_NONE`. Body building supports JSON/form/multipart/raw depending on `Content-Type`. + +- **`cyperf/exceptions.py`** — `OpenApiException` → `ApiTypeError`/`ApiValueError`/`ApiAttributeError`/`ApiKeyError`/`ApiException`. `ApiException.from_response()` maps 400→`BadRequestException`, 401→`UnauthorizedException`, 403→`ForbiddenException`, 404→`NotFoundException`, 5xx→`ServiceException`. Hand addition: `LinkNameException(Exception)` — raised by `DynamicModel.get_link()` when a HATEOAS link name isn't found. + +- **`cyperf/dynamic_model_meta.py`** — `DynamicList(UserList)`/`DynamicDict(UserDict)` keep raw vs. link-wrapped collection data in sync, diffing local vs. server state to POST new items / batch-DELETE (`operations/batch-delete`) removed ones on `.update()`. `DynamicModel(type)` metaclass inspects each model's pydantic fields (via `x-operation` schema extras) to attach either a bound "operation" method (e.g. a synthetic `start_test_run_start`-style method returning an `AsyncContext`) or a lazy link-following property. Key instance methods added to every model: `update()` (PATCH only-changed fields; falls back to full GET+PUT on HTTP 405), `delete()`, `refresh()`, `get_link()`/`get_self_link()`, `link_based_request()` (the actual `api_client.param_serialize`+`call_api` call), `poll()`/`await_completion()` (polls async ops, `time.sleep(poll_time)`, raises on `state=="ERROR"`). Known latent bug: `DynamicDict.__init__` iterates `for key,i in dct` over what is normally a plain dict — likely never exercised in practice, worth a defensive look before relying on dict-typed link fields. + +- **`cyperf/utils.py`** — `TestRunner.__init__(controller, username, password, refresh_token, license_server, license_user, license_password, verify_ssl)`: reads env var **`CYPERF_OFFLINE_TOKEN`** when no explicit credentials are given, builds `Configuration`+`ApiClient`, calls `update_license_server()`, fetches online agents. ~35 methods wrap the generated `*Api` classes for common workflows: `load_configuration_file(s)`, `create_session(_by_config_name)`, `delete_session`, `assign_agents` (raises `ValueError("Insufficient agents found on setup.")`), `wait_until_agents_released` (raises `TimeoutError` after 180s), `start_test`/`stop_test`/`wait_for_test_end(session, test_monitor)` (0.5s poll loop with optional callback), `collect_stats`, `get_csvs_for_result` (file I/O: `os.makedirs` + `ZipFile(...).extractall(...)`), `set_prisma_airs_params`/`set_model_armor_params` (broad except-and-print, no re-raise — the one clear error-swallowing spot in the codebase). Module functions: `parse_cli_options(extra_options=[])` (argparse: `--controller` required, `--user`/`--password`/`--license-server`/`--license-user`/`--license-password`, plus caller-supplied extra flags; falls back to `CYPERF_OFFLINE_TOKEN` env var), `create_api_client_cli(verify_ssl=True)`. `is_valid_ipv4`/`is_valid_ipv6` are defined without a `self` parameter — a bug if ever invoked as bound instance methods. + +- **`cyperf/__init__.py`** — Pure generated flat namespace: all 16 `*Api` classes, `ApiClient`, `ApiResponse`, `Configuration`, `DynamicModel`, all exception classes (incl. `LinkNameException`), and ~440 model classes. Notably **`utils` and `dynamic_model_meta` are not re-exported here** — accessed as `cyperf.utils`/`cyperf.dynamic_model_meta` submodules. + +### Interaction Chains + +**Chain A — `TestRunner`-based end-to-end test run** (used by `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`): +1. `utils.parse_cli_options()` → parses `--controller/--user/--password/--refresh-token`. +2. `utils.TestRunner(...)` constructor → builds `Configuration` + `ApiClient` (no HTTP yet unless `license_server` given). +3. `TestRunner.create_session_by_config_name(name)` → `ConfigurationsApi.get_configs(...)` (**GET** `/api/v2/configurations`) → `TestRunner.create_session(config_url)` → `SessionsApi.create_sessions([Session(config_url=...)])` (**POST** `/api/v2/sessions`). +4. `TestRunner.add_app/disable_automatic_network/assign_agents/set_objective_and_timeline(...)` → mutate in-memory config models → `.update()` (via `DynamicModel`) → **PATCH/PUT** to session config sub-resources. +5. `TestRunner.start_test(session)` → `TestOperationsApi.start_test_run_start(session_id=...)` (**POST** `/api/v2/sessions/{id}/test-operations/start`) → `.await_completion()` polls the async op (**GET**) until done. +6. `TestRunner.wait_for_test_end(session, test_monitor)` → loop calling `SessionsApi.get_session_test(session_id=...)` (**GET** `/api/v2/sessions/{id}/test`) every 0.5s until `status=='STOPPED'`; each tick optionally calls `TestRunner.collect_stats(...)` → `StatisticsApi.get_result_stats`/`get_result_stat_by_id` (**GET**). +7. Cleanup: `TestRunner.delete_session(session)` → `SessionsApi.delete_session(...)` (**DELETE** `/api/v2/sessions/{id}`). + +**Chain B — raw-API end-to-end run** (used by `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`): same shape but inlined without `TestRunner` — `create_api_client_cli()` → `ConfigurationsApi.get_configs` → `SessionsApi.create_sessions` → per-model `.update()` calls → `TestOperationsApi.start_test_run_start` + `.await_completion()` → hand-rolled `while session.test.status != 'STOPPED': sleep(5); session.refresh()` (bypasses `wait_for_test_end`) → `TestResultsApi.start_result_generate_all`/`ReportsApi.start_result_generate_csv` + `.await_completion()`. These three scripts never call `delete_session` — no cleanup. + +### Hub Files & Side Effect Map +- **Hub files** (imported by many): `cyperf/api_client.py` (all 16 `*Api` classes + `dynamic_model_meta.py`), `cyperf/dynamic_model_meta.py` (`__init__.py`, all `*_api.py`, `dynamic_models/__init__.py`), `cyperf/configuration.py` (`ApiClient` + every sample), `cyperf/exceptions.py` (used wherever `ApiException` is caught). +- **Side effects**: `api_client.py`/`rest.py` — all outbound HTTPS to the CyPerf controller. `utils.py` — file I/O (`get_csvs_for_result`: `os.makedirs`, `ZipFile.extractall`), env var reads (`CYPERF_OFFLINE_TOKEN`, license/EULA flows), `time.sleep` polling, `print`/`pprint` to stdout. `dynamic_model_meta.py` — HTTP via `api_client.call_api`/`param_serialize`, `time.sleep` in `poll()`. No database, no message queues, no background workers. diff --git a/.claude/knowledge-base/sections/internal-quality.md b/.claude/knowledge-base/sections/internal-quality.md new file mode 100644 index 0000000..a11e4b9 --- /dev/null +++ b/.claude/knowledge-base/sections/internal-quality.md @@ -0,0 +1,4 @@ + +## Internal Quality Summary + +IQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. diff --git a/.claude/knowledge-base/sections/project-standards.md b/.claude/knowledge-base/sections/project-standards.md new file mode 100644 index 0000000..786e514 --- /dev/null +++ b/.claude/knowledge-base/sections/project-standards.md @@ -0,0 +1,28 @@ + +## Project Standards + +Populated from discover Phase 2 (automated config search). No ADRs, design docs, SECURITY.md, or CONTRIBUTING.md were found — these categories are absent, not just undocumented; treat their absence as expected for a generated-SDK repo rather than a gap to fill blindly. + +### Coding & Quality Gates +| Standard | Value | Source | +|----------|-------|--------| +| Coverage threshold | None declared (pytest-cov run but no `--cov-fail-under` or codecov config) | `tox.ini`, `.gitlab-ci.yml`, `.travis.yml` (all: `pytest --cov=cyperf`) | +| Complexity limit | `max-complexity=10` (warning only, `--exit-zero`), `max-line-length=127` in CI; `max-line-length=150` locally | `.github/workflows/python.yml` vs `setup.cfg` `[flake8]` (inconsistent between the two) | +| Required CI checks | flake8 syntax-error gate (`E9,F63,F7,F82`) blocks; complexity/line-length lint is advisory only | `.github/workflows/python.yml` | +| Security requirements | None found (no SECURITY.md, no scanning config) | — | +| Coding standards | flake8 only; no `.editorconfig`, no black/ruff/isort config; `mypy` configured in `pyproject.toml` but explicitly **not** strict yet (`# TODO: enable "strict" once all these individual checks are passing`) | `setup.cfg`, `pyproject.toml [tool.mypy]` | +| Error patterns | Exceptions (typed `ApiException` hierarchy keyed by HTTP status) is the dominant pattern; hand-written `utils.py` mixes proper re-raise with a few broad `except Exception`/`except AttributeError: print(...)` swallows in `set_prisma_airs_params`/`set_model_armor_params` | `cyperf/exceptions.py`, `cyperf/utils.py` | + +### Testing +| Field | Value | Notes | +|-------|-------|-------| +| Test methodology | *(empty → TDD default; not actually applicable, see framework note)* | No evidence of a test-writing process either way. | +| Test framework | **Configured (`pytest`) but no test files exist.** `tox.ini`, `test-requirements.txt`, `test.sh`, `.gitlab-ci.yml`, `.travis.yml` all run `pytest --cov=cyperf`, yet there is not a single real test module in the repo. Files that *look* like tests by name — `cyperf/api/test_operations_api.py`, `cyperf/api/test_results_api.py`, `cyperf/models/test_info.py`, `cyperf/models/test_state_changed_operation.py`, `cyperf/models/test_usage.py` — are generated model/API classes named after CyPerf domain entities ("TestOperationsApi", "TestInfo", "TestUsage"), not unit tests. | **Scenario-zero candidate**: this project cannot do TDD or run automated tests today; CI's `pytest --cov=cyperf` step passes trivially (0 tests collected) rather than verifying anything. | +| Test runner command | `pytest --cov=cyperf` (declared, but collects 0 tests) | From CI configs. | +| Test file pattern | None established | No `tests/` directory exists. | +| Coverage command | `pytest --cov=cyperf` | Same caveat as above — no real coverage is being measured. | + +### Architectural Rules +- Every generated file carries a `"Generated by OpenAPI Generator... Do not edit the class manually"` header — the implicit rule is: **hand edits are confined to `cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches inside `api_client.py`/`configuration.py`/`exceptions.py`, and `samples/`.** Regenerating the client (`.openapi-generator/FILES`, `.openapi-generator-ignore`) risks clobbering those hand patches unless they're re-applied or the generator is configured to skip them. +- All HTTP traffic funnels through one hub, `ApiClient.call_api` (via `RESTClientObject`) — no `*Api` class or model talks to `urllib3`/sockets directly. +- The `DynamicModel` metaclass layer depends on `cyperf/__init__.py` already having model classes bound (`get_inner_model` does `getattr(cyperf, name)`), and `cyperf/dynamic_models/__init__.py` depends on `DynamicModel` — a load-order coupling: `dynamic_model_meta` → `cyperf/__init__` (models) → `dynamic_models`. diff --git a/.claude/knowledge-base/sections/surface-inventory.md b/.claude/knowledge-base/sections/surface-inventory.md new file mode 100644 index 0000000..5ceddfc --- /dev/null +++ b/.claude/knowledge-base/sections/surface-inventory.md @@ -0,0 +1,65 @@ + +## Surface Inventory + +### APIs +16 generated `*Api` classes / ~322 total operations against the CyPerf controller's REST API (was 312 as of 2026-07-09; the 2026-07-10 "Regenerate Python API Wrapper" commit added ~10 new `AgentsApi` operations for front-panel-port/compute-resource ownership — exact per-class count below is not re-verified for every class, only `AgentsApi`, so treat the total as approximate pending a fuller surface re-scan): + +| Class (file) | Ops | Purpose | +|---|---|---| +| `AuthorizationApi` | 1 | OAuth2/Keycloak login (password or refresh_token grant) | +| `SessionsApi` | 29 | Test-session lifecycle, session config, test init/prepare/end | +| `TestOperationsApi` | 5 | Start/stop/abort a test or calibration run | +| `TestResultsApi` | 15 | Result retrieval/export/delete, batch delete | +| `StatisticsApi` | 6 | Runtime/result statistics | +| `ReportsApi` | 4 | PDF/CSV report generation & download | +| `ConfigurationsApi` | 14 | Config CRUD, categories, import/export | +| `ApplicationResourcesApi` | 146 | Reusable resources: captures, certs, payloads, playlists, media, apps/attacks/strikes, fuzzing | +| `AgentsApi` | ~37 (was 27) | Test agents & compute nodes (reboot, reserve, tag, ports), now incl. front-panel-port and compute-resource ownership CRUD (`ClearFrontPanelPortsOwnershipOperation`, `ClearComputeResourcesOwnershipOperation`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation`, etc., added 2026-07-10 PR #78) | +| `BrokersApi` | 5 | Broker instance CRUD | +| `LicenseServersApi` | 5 | License server config CRUD | +| `LicensingApi` | 19 | License activation/entitlement/host-ID, async ops | +| `NotificationsApi` | 6 | System notifications | +| `DiagnosticsApi` | 7 | Diagnostic bundle export/status | +| `DataMigrationApi` | 2 | Controller data export/import for migration | +| `UtilsApi` | 21 | EULAs, disk usage, cert manager, server time, log config | + +**Enrichment**: +| Field | Value | +|-------|-------| +| Error envelope shape | HTTP status code → typed Python exception (`ApiException.from_response`: 400→`BadRequestException`, 401→`UnauthorizedException`, 403→`ForbiddenException`, 404→`NotFoundException`, 5xx→`ServiceException`); response body is the controller's raw JSON, deserialized per `response_types_map`, not a fixed `{code, message}` envelope. | +| Versioning strategy | Path-based, mostly `/api/v2/...`; two legacy outliers: `/auth/realms/keysight/protocol/openid-connect/token` (Keycloak) and `/eula/v1/check`. No `Accept-Version` header. | +| Auth pattern | OAuth2 bearer token (`Authorization: Bearer {access_token}`), obtained via password or refresh_token grant against the controller's Keycloak endpoint (`client_id='clt-wap'`). Every operation (~322, was 312) declares `_auth_settings = ['OAuth2', 'OAuth2']`. | +| Rate-limit strategy | None detected in generated code or docs. | +| Pagination style | Offset-style (`take`/`skip` query params) on list endpoints (e.g. `AgentsApi.get_agents`), plus `search_col`/`search_val`/`filter_mode`/`sort` query params for filtering/sorting. | + +### UIs +N/A — pure SDK/library, no UI code. + +### CLIs +No standalone CLI product; `cyperf/utils.py` exposes a minimal argparse-based helper (`parse_cli_options`) that sample scripts use for their own `--controller/--user/--password/...` flags — not a packaged/installed CLI entry point. + +**Enrichment**: +| Field | Value | +|-------|-------| +| Argument parser | `argparse` (`utils.parse_cli_options`) | +| Exit-code convention | `parser.error(...)` (argparse default: exits 2 on usage error); no other exit-code convention established | +| Config file format | None — credentials via CLI flags or `CYPERF_OFFLINE_TOKEN` env var | +| Stdout/stderr discipline | Mixed — `print`/`pprint` used for status/results in `TestRunner`; warnings routed through a custom `format_warning_cli_issues` formatter | + +### Services +N/A — this package is a client library, not a deployed service. (The Jenkins pipeline publishes the built package to PyPI; it does not deploy a running service.) + +### Libraries +| Name | Purpose | Distribution | Known consumers | +|---|---|---|---| +| `cyperf` | Typed Python client for the Keysight CyPerf REST API | Internal PyPI (`.pypirc`), built via `jenkins/JenkinsFile` (Docker + `setup.py`/`build`/`twine`) | Internal test-automation scripts (`samples/`); the "appsec-automation" regression repo (per commit `ce85bc3`) | + +**Enrichment**: +| Field | Value | +|-------|-------| +| API contract stability | Unversioned in the semver sense — version tracks the CyPerf controller's own API version; `setup.py`/`pyproject.toml` both hardcode `1.0.0`, bumped at build time by Jenkins (`sed -i 's/VERSION = "1.0.0"/.../ '`). Contract itself is regenerated from the controller's OpenAPI spec each time the wrapper is refreshed ("Re-generate wrapper" commits appear in history). | +| Error semantics | Exceptions — typed `ApiException` hierarchy keyed by HTTP status. | +| Doc convention | OpenAPI-Generator-produced `docs/*.md` (one file per model/API class) plus a large generated `README.md`; no docstring convention (PEP 257) is consistently applied in hand-written code. | + +### AI Metadata +None found — no `.mcp.json`, no pre-existing `.claude/` directory, no `SKILL.md`, no structured tool schemas prior to this discovery run. diff --git a/.claude/knowledge-base/sections/technical-debt.md b/.claude/knowledge-base/sections/technical-debt.md new file mode 100644 index 0000000..8b0a95d --- /dev/null +++ b/.claude/knowledge-base/sections/technical-debt.md @@ -0,0 +1,4 @@ + +## Technical Debt Registry + +Requires IQ evaluation. diff --git a/.claude/knowledge-base/sections/tooling-requirements.md b/.claude/knowledge-base/sections/tooling-requirements.md new file mode 100644 index 0000000..7a46888 --- /dev/null +++ b/.claude/knowledge-base/sections/tooling-requirements.md @@ -0,0 +1,14 @@ + +## Tooling Requirements + +### Understand Skills (always generated) +- `explain` — navigate the generated-vs-hand-written split; explain what a given `*Api` operation or model actually does against the CyPerf controller. +- `document` — keep `README.md`/`docs/*.md` in sync is generator-owned; human-facing docs work should target `samples/*.py` and this KB instead. + +### Operate Skills (always generated) +- `review` — code review, scoped to the small hand-written surface (`utils.py`, `dynamic_model_meta.py`, `samples/`, CI/build files); generated files should be excluded from review by default. +- `exec-plan` — flag the test-framework gap (scenario-zero) on first use per the Testing table above. +- No `deploy` skill — this project has no deployment target beyond a PyPI publish, already automated by Jenkins. + +### Improve Skills (gap-driven) +Requires IQ/EQ evaluation to identify gaps. From d69d581a2308164eb243acb9a472237c9a7c7e30 Mon Sep 17 00:00:00 2001 From: Angela Grigoroaia Date: Fri, 31 Jul 2026 19:53:11 +0300 Subject: [PATCH 17/26] ISGAPPSEC2-38741: WAP Newsletter What: Update knowledge base Include Clause local settings in .gitignore Why: Keep AI instrumentation up to date --- .claude/knowledge-base/README.md | 2 +- .claude/knowledge-base/sections/architecture.md | 4 ++-- .claude/knowledge-base/sections/external-quality.md | 6 ++++++ .claude/knowledge-base/sections/file-index.md | 10 +++++----- .claude/knowledge-base/sections/internal-quality.md | 4 ++++ .claude/knowledge-base/sections/technical-debt.md | 8 +++++++- .gitignore | 3 +++ 7 files changed, 28 insertions(+), 9 deletions(-) diff --git a/.claude/knowledge-base/README.md b/.claude/knowledge-base/README.md index fe06713..f224b01 100644 --- a/.claude/knowledge-base/README.md +++ b/.claude/knowledge-base/README.md @@ -1,5 +1,5 @@ # Knowledge Base: cyperf-api-wrapper -Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 +Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 | Last incremental refresh: 2026-07-31 (git-history patch covering commits through `835526c`, no re-discovery/IQ/EQ) ## Product Profile - **Purpose**: Python client SDK for the Keysight CyPerf network/security performance-test controller — a mostly OpenAPI-generated REST client (`pip install cyperf`) topped with a hand-written `TestRunner`/CLI helper layer and a HATEOAS "dynamic model" layer for writing test-automation scripts. diff --git a/.claude/knowledge-base/sections/architecture.md b/.claude/knowledge-base/sections/architecture.md index d8339bf..17d61ca 100644 --- a/.claude/knowledge-base/sections/architecture.md +++ b/.claude/knowledge-base/sections/architecture.md @@ -4,8 +4,8 @@ **Style**: Generated OpenAPI client SDK ("Library" surface), not a monolith/microservice/UI. Four layers, bottom-up: 1. **Transport/Auth** — `cyperf/configuration.py` (host, SSL/proxy/retry config, OAuth2 credential storage) + `cyperf/rest.py` (`RESTClientObject`, thin urllib3 wrapper: `PoolManager`/`ProxyManager`/SOCKS, `preload_content=False`) + `cyperf/api_client.py` (`ApiClient`: `param_serialize` → `call_api` → `response_deserialize`, plus a hand-written `__retry` loop layered on top of urllib3's own retries, and CyPerf-specific `accept_eula`/`wait_for_controller_up`/`refresh_authorization`). -2. **Generated REST surface** — `cyperf/api/*.py`, 16 classes / ~322 operations (grew from 312 via the Jul-10 2026 "Regenerate Python API Wrapper" commit, which added ~10 compute-resource/front-panel-port ownership operations to `AgentsApi`), each method built in triplicate (`op`, `op_with_http_info`, `op_without_preload_content`), all declaring `_auth_settings = ['OAuth2', 'OAuth2']`. -3. **Generated data models** — `cyperf/models/*.py`, 454 pydantic v2 models (was 443; +11 new models for the same regen, incl. `ComputeResource`, `FrontPanel`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation`), one per OpenAPI schema, re-exported flat from `cyperf/__init__.py`. +2. **Generated REST surface** — `cyperf/api/*.py`, 16 classes / 321 operations (grew from 312 to 322 via the Jul-10 2026 "Regenerate Python API Wrapper" commit, which added ~10 compute-resource/front-panel-port ownership operations to `AgentsApi`; PR #81's Jul-27 2026 "Regenerate Cyperf Python Wrapper" then removed `SessionsApi.start_session_prepare_test`, net 321 — a precise full-class recount), each method built in triplicate (`op`, `op_with_http_info`, `op_without_preload_content`), all declaring `_auth_settings = ['OAuth2', 'OAuth2']`. +3. **Generated data models** — `cyperf/models/*.py`, 422 pydantic v2 models (was 443; +11 new models for the Jul-10 2026 regen, incl. `ComputeResource`, `FrontPanel`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation` → 454; PR #81's Jul-27 2026 regen then removed ~34 legacy per-endpoint response-wrapper/prepare-test models, added 3 TLS-1.3 signature-algorithm models, and renamed 9 more into generic shared schema types — `ContentBlock`, `FormattedDescription`, `TextSegment`, `Section`, `Keyword`, `Profile`, `LayoutConfig`, `BasicAuthProfile`, `GetScenariosOperation` — net -31 → 422), one per OpenAPI schema, re-exported flat from `cyperf/__init__.py`. 4. **Dynamic/HATEOAS overlay + scripting helpers** — `cyperf/dynamic_model_meta.py` (`DynamicModel` metaclass attaches `.update()/.delete()/.refresh()/.get_link()/.poll()` and lazy link-following properties to every generated model) and `cyperf/utils.py` (`TestRunner` class + `parse_cli_options`/`create_api_client_cli`) for end-to-end test-automation scripting. `samples/*.py` demonstrate both the raw-API style and the `TestRunner`-based style. **Auth flow**: `Configuration._get_access_token()` calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)` against the controller's Keycloak-style endpoint (`/auth/realms/keysight/protocol/openid-connect/token`), then every subsequent call attaches `Authorization: Bearer {access_token}` via `Configuration.auth_settings()`. diff --git a/.claude/knowledge-base/sections/external-quality.md b/.claude/knowledge-base/sections/external-quality.md index fd1bc72..311f70d 100644 --- a/.claude/knowledge-base/sections/external-quality.md +++ b/.claude/knowledge-base/sections/external-quality.md @@ -2,3 +2,9 @@ ## External Quality Summary EQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. + +### Surface changes observed since last KB refresh (pre-EQ, from git history 2026-07-14 → 2026-07-29) +- **Breaking**: `SessionsApi.start_session_prepare_test` (plus its `_with_http_info`/`_without_preload_content` variants) and the `PrepareTestOperation`/`PreparedTestOptions` models it used were removed entirely (PR #81, Jul 27 2026 regen). +- **Breaking**: `UtilsApi.get_eula`/`post_eula` gained a new required positional `id` parameter; the resource path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}` (PR #81). The wrapper's own `wait_for_controller_up()` was not updated to match, so this is also an internal reliability bug — see `sections/technical-debt.md` (TD-1). +- **Non-breaking / additive**: `DataMigrationApi.start_controller_migration_import` gained an optional `file` upload parameter (multipart form); `ApplicationResourcesApi.delete_resources_capture` now documents `401`/`403`/`404` `ErrorResponse` returns in addition to `500`; several `ApplicationResourcesApi` docstrings had the word "CyPerf" genericized (e.g. "Get a particular CyPerf application" → "Get a particular application") — cosmetic only. +- **Behavioral change (hand-written helper API, not generated)**: `utils.TestRunner.set_prisma_airs_params`/`set_model_armor_params` both gained an optional `hostname=` keyword argument and now raise `ValueError` when no matching guardrail strike or application is found at all (previously only printed and returned) — PR #80, Jul 29 2026, ISGAPPSEC2-38154. diff --git a/.claude/knowledge-base/sections/file-index.md b/.claude/knowledge-base/sections/file-index.md index d0ce584..2fc1d27 100644 --- a/.claude/knowledge-base/sections/file-index.md +++ b/.claude/knowledge-base/sections/file-index.md @@ -13,9 +13,9 @@ | `cyperf/dynamic_model_meta.py` | 1 | `DynamicModel` metaclass — HATEOAS link-following, update/delete/refresh/poll | **Hand-written**, no generator header | | `cyperf/dynamic_models/__init__.py` | 1 | Mechanically builds one `DynamicModel`-wrapped class per model name | Generated (custom template, not standard openapi-generator) | | `cyperf/utils.py` | 1 | `TestRunner` convenience class + CLI arg parsing (`parse_cli_options`, `create_api_client_cli`) | **Hand-written**, no generator header | -| `cyperf/api/*.py` | 16 (+`__init__.py`) | Generated REST operation classes, ~322 operations total (was 312; `AgentsApi` gained ~10 compute-resource/front-panel-port ownership ops in the Jul-10 2026 regen) | Generated (standard) | -| `cyperf/models/*.py` | 454 | Generated pydantic model per OpenAPI schema (was 443; +11 new models for front-panel-port/compute-resource ownership, 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py`) | Generated (standard) | -| `docs/*.md` | 469 | Generated per-model/per-API-class reference docs (was 458; +11 for the same regen) | Generated (standard) | +| `cyperf/api/*.py` | 16 (+`__init__.py`) | Generated REST operation classes, 321 operations total (was 312; `AgentsApi` gained ~10 compute-resource/front-panel-port ownership ops in the Jul-10 2026 regen → 322; PR #81's Jul-27 2026 "Regenerate Cyperf Python Wrapper" then removed `SessionsApi.start_session_prepare_test`, net 321 — precise full-class recount, superseding the earlier "~322, approximate" caveat) | Generated (standard) | +| `cyperf/models/*.py` | 422 | Generated pydantic model per OpenAPI schema (was 443; +11 new models for front-panel-port/compute-resource ownership in the Jul-10 2026 regen, 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py` → 454; PR #81's Jul-27 2026 regen then removed ~34 legacy per-endpoint response-wrapper/prepare-test models, added 3 TLS-1.3 signature-algorithm models, and renamed 9 more into generic shared schema types — `ContentBlock`, `FormattedDescription`, `TextSegment`, `Section`, `Keyword`, `Profile`, `LayoutConfig`, `BasicAuthProfile`, `GetScenariosOperation` — net -31 → 422) | Generated (standard) | +| `docs/*.md` | 438 | Generated per-model/per-API-class reference docs (was 458; +11 for the Jul-10 2026 regen → 469; PR #81's Jul-27 2026 regen removed/renamed the same set of models, net -31 → 438) | Generated (standard) | | `samples/*.py` | 7 | End-to-end usage examples (attack tests, config CRUD, UDP streaming, sequences, appbuilder capture-to-app workflow) | Hand-written | | `samples/appbuilder/*` | 3 | `sample_appbuilder_examples.py` (uploads an encrypted pcap capture via `ApplicationResourcesApi`, then builds AppBuilder apps/actions from the parsed flows) + `claude.pcap`/`tls_key.log` fixtures (added 2026-07-14, PR #77) | Hand-written script + data fixtures | | `samples/cyperf-configurations/*.zip` | 1 | Sample pre-canned CyPerf config bundle | Data fixture | @@ -25,7 +25,7 @@ ### Key File Details -- **`cyperf/api_client.py`** — `ApiClient.__init__(configuration, header_name, header_value, cookie)`. `param_serialize()` builds method/url/headers/body via `update_params_for_auth`/`_apply_auth_params`. `call_api()` is the public sync entry point, wrapping private `__call_api` in a hand-written `__retry(request_func, retries=3→5)` loop (catches `ServiceException`/`urllib3.exceptions.RequestError`, `time.sleep(5)` between attempts) — independent of urllib3's own retry config. `__call_api` calls `rest_client.request(...)` then wraps the result via `DynamicModel.dynamic_wrapper(...)` (lazy import from `dynamic_model_meta`). `response_deserialize()` maps status→declared type, raises `ApiException.from_response(...)` on non-2xx. CyPerf-specific: `accept_eula(eula_text)` (env var `CYPERF_EULA_ACCEPTED` or interactive prompt), `wait_for_controller_up(timeout_seconds=600)` (polls `UtilsApi.check_eulas`, `ApplicationResourcesApi`, `SessionsApi`, `ConfigurationsApi`, `AgentsApi`, `TestResultsApi`), `refresh_authorization()` (clears `configuration.access_token` to force re-auth). +- **`cyperf/api_client.py`** — `ApiClient.__init__(configuration, header_name, header_value, cookie)`. `param_serialize()` builds method/url/headers/body via `update_params_for_auth`/`_apply_auth_params`. `call_api()` is the public sync entry point, wrapping private `__call_api` in a hand-written `__retry(request_func, retries=3→5)` loop (catches `ServiceException`/`urllib3.exceptions.RequestError`, `time.sleep(5)` between attempts) — independent of urllib3's own retry config. `__call_api` calls `rest_client.request(...)` then wraps the result via `DynamicModel.dynamic_wrapper(...)` (lazy import from `dynamic_model_meta`). `response_deserialize()` maps status→declared type, raises `ApiException.from_response(...)` on non-2xx. CyPerf-specific: `accept_eula(eula_text)` (env var `CYPERF_EULA_ACCEPTED` or interactive prompt), `wait_for_controller_up(timeout_seconds=600)` (polls `UtilsApi.check_eulas`, `ApplicationResourcesApi`, `SessionsApi`, `ConfigurationsApi`, `AgentsApi`, `TestResultsApi`), `refresh_authorization()` (clears `configuration.access_token` to force re-auth). **Flagged for human review (new, evidenced by PR #81, Jul 27 2026 regen)**: `UtilsApi.get_eula`/`post_eula` were regenerated to require a new positional `id` parameter (resource path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}`), but `wait_for_controller_up()`'s EULA-accept branch (lines ~166/172) still calls `eula_checker.get_eula()` and `eula_checker.post_eula(EulaSummary(accepted=True))` with no `id` — this now raises a pydantic `validate_call` error instead of completing EULA acceptance the first time a controller requires it. It isn't clear from the diff what `id` value is now expected (a literal `"CyPerf"`? one obtained from `list_eulas`?), so this needs a human fix, not a guess — see `sections/technical-debt.md`. - **`cyperf/configuration.py`** — Supports API-key, HTTP basic (`username`/`password`), and OAuth2 (`access_token`/`refresh_token`). `_get_access_token()` (hand-written) calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)`. `auth_settings()` lazily fetches the token and builds `auth['OAuth2'] = {'type':'oauth2','in':'header','key':'Authorization','value':'Bearer '+access_token}`; contains a verbatim duplicated credential-check block (~lines 417–436), a manual-edit artifact, functionally harmless. Host/SSL/proxy fields: `host`, `verify_ssl`, `ssl_ca_cert`, `cert_file`/`key_file`, `proxy`, `retries`, `connection_pool_maxsize` (`cpu_count()*5`); CyPerf-specific `eula_accept_interactive`, `temp_folder_path`. @@ -35,7 +35,7 @@ - **`cyperf/dynamic_model_meta.py`** — `DynamicList(UserList)`/`DynamicDict(UserDict)` keep raw vs. link-wrapped collection data in sync, diffing local vs. server state to POST new items / batch-DELETE (`operations/batch-delete`) removed ones on `.update()`. `DynamicModel(type)` metaclass inspects each model's pydantic fields (via `x-operation` schema extras) to attach either a bound "operation" method (e.g. a synthetic `start_test_run_start`-style method returning an `AsyncContext`) or a lazy link-following property. Key instance methods added to every model: `update()` (PATCH only-changed fields; falls back to full GET+PUT on HTTP 405), `delete()`, `refresh()`, `get_link()`/`get_self_link()`, `link_based_request()` (the actual `api_client.param_serialize`+`call_api` call), `poll()`/`await_completion()` (polls async ops, `time.sleep(poll_time)`, raises on `state=="ERROR"`). Known latent bug: `DynamicDict.__init__` iterates `for key,i in dct` over what is normally a plain dict — likely never exercised in practice, worth a defensive look before relying on dict-typed link fields. -- **`cyperf/utils.py`** — `TestRunner.__init__(controller, username, password, refresh_token, license_server, license_user, license_password, verify_ssl)`: reads env var **`CYPERF_OFFLINE_TOKEN`** when no explicit credentials are given, builds `Configuration`+`ApiClient`, calls `update_license_server()`, fetches online agents. ~35 methods wrap the generated `*Api` classes for common workflows: `load_configuration_file(s)`, `create_session(_by_config_name)`, `delete_session`, `assign_agents` (raises `ValueError("Insufficient agents found on setup.")`), `wait_until_agents_released` (raises `TimeoutError` after 180s), `start_test`/`stop_test`/`wait_for_test_end(session, test_monitor)` (0.5s poll loop with optional callback), `collect_stats`, `get_csvs_for_result` (file I/O: `os.makedirs` + `ZipFile(...).extractall(...)`), `set_prisma_airs_params`/`set_model_armor_params` (broad except-and-print, no re-raise — the one clear error-swallowing spot in the codebase). Module functions: `parse_cli_options(extra_options=[])` (argparse: `--controller` required, `--user`/`--password`/`--license-server`/`--license-user`/`--license-password`, plus caller-supplied extra flags; falls back to `CYPERF_OFFLINE_TOKEN` env var), `create_api_client_cli(verify_ssl=True)`. `is_valid_ipv4`/`is_valid_ipv6` are defined without a `self` parameter — a bug if ever invoked as bound instance methods. +- **`cyperf/utils.py`** — `TestRunner.__init__(controller, username, password, refresh_token, license_server, license_user, license_password, verify_ssl)`: reads env var **`CYPERF_OFFLINE_TOKEN`** when no explicit credentials are given, builds `Configuration`+`ApiClient`, calls `update_license_server()`, fetches online agents. ~35 methods wrap the generated `*Api` classes for common workflows: `load_configuration_file(s)`, `create_session(_by_config_name)`, `delete_session`, `assign_agents` (raises `ValueError("Insufficient agents found on setup.")`), `wait_until_agents_released` (raises `TimeoutError` after 180s), `start_test`/`stop_test`/`wait_for_test_end(session, test_monitor)` (0.5s poll loop with optional callback), `collect_stats`, `get_csvs_for_result` (file I/O: `os.makedirs` + `ZipFile(...).extractall(...)`), `set_prisma_airs_params`/`set_model_armor_params` — as of PR #80 (2026-07-29, ISGAPPSEC2-38154, "unified strike format" support) both now delegate to a new shared `_set_llm_api_profile_params(session, profile_model_name, hostname, params, app_protocol_id)` helper: matching is by `param_id`/`protocol_id` instead of by param/attack-name string, both gained an optional `hostname=` kwarg (`set_model_armor_params` defaults it to `modelarmor.{location}.rep.googleapis.com` when omitted), a per-application hostname update is now skipped gracefully (with a print) when an application has no `connections` instead of risking an index/attribute error, and a `ValueError` is now raised when neither a matching LLM-API-profile strike nor application is found at all (previously only printed and returned). Still broad except-and-print, no re-raise, on the per-branch `AttributeError`/`Exception` paths — the error-swallowing pattern is now consolidated into one function instead of four near-duplicate copies, but not resolved. Module functions: `parse_cli_options(extra_options=[])` (argparse: `--controller` required, `--user`/`--password`/`--license-server`/`--license-user`/`--license-password`, plus caller-supplied extra flags; falls back to `CYPERF_OFFLINE_TOKEN` env var), `create_api_client_cli(verify_ssl=True)`. `is_valid_ipv4`/`is_valid_ipv6` are defined without a `self` parameter — a bug if ever invoked as bound instance methods. - **`cyperf/__init__.py`** — Pure generated flat namespace: all 16 `*Api` classes, `ApiClient`, `ApiResponse`, `Configuration`, `DynamicModel`, all exception classes (incl. `LinkNameException`), and ~440 model classes. Notably **`utils` and `dynamic_model_meta` are not re-exported here** — accessed as `cyperf.utils`/`cyperf.dynamic_model_meta` submodules. diff --git a/.claude/knowledge-base/sections/internal-quality.md b/.claude/knowledge-base/sections/internal-quality.md index a11e4b9..b03e65c 100644 --- a/.claude/knowledge-base/sections/internal-quality.md +++ b/.claude/knowledge-base/sections/internal-quality.md @@ -2,3 +2,7 @@ ## Internal Quality Summary IQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. + +### Findings surfaced during incremental git-history review (pre-IQ, not a formal pass) +- **Reliability bug, newly introduced (PR #81, Jul 27 2026 "Regenerate Cyperf Python Wrapper")**: the regen changed `UtilsApi.get_eula`/`post_eula` to require a new positional `id` parameter (path `/eula/v1/eula/CyPerf` → `/eula/v1/eula/{id}`), but the hand-written `cyperf/api_client.py::wait_for_controller_up()` EULA-accept branch was not updated to pass `id` — it now raises a pydantic `validate_call` error instead of completing EULA acceptance. See `sections/file-index.md` (`cyperf/api_client.py`) and `sections/technical-debt.md`. Flagged for human review: the correct `id` value isn't evident from the diff alone. +- **Refactor, not a quality regression (PR #80, Jul 29 2026, ISGAPPSEC2-38154)**: `cyperf/utils.py`'s `set_prisma_airs_params`/`set_model_armor_params` were deduplicated into a shared `_set_llm_api_profile_params` helper, and a total-miss case (`ValueError`) is now raised instead of silently printing. The pre-existing broad except-and-print pattern (no re-raise) is preserved, just consolidated from four copies into one — not resolved. diff --git a/.claude/knowledge-base/sections/technical-debt.md b/.claude/knowledge-base/sections/technical-debt.md index 8b0a95d..3345eb9 100644 --- a/.claude/knowledge-base/sections/technical-debt.md +++ b/.claude/knowledge-base/sections/technical-debt.md @@ -1,4 +1,10 @@ ## Technical Debt Registry -Requires IQ evaluation. +Full registry requires IQ evaluation. One item below was surfaced during an incremental git-history review (not from a formal IQ pass) and is tracked here because it is a confirmed, evidenced bug. + +| ID | Title | Severity | Evidence | Status | +|----|-------|----------|----------|--------| +| TD-1 | `wait_for_controller_up()` EULA-accept path breaks after the PR #81 `UtilsApi` regen | Blocking (confirmed library bug) | `cyperf/api_client.py` lines ~166/172 call `eula_checker.get_eula()` / `eula_checker.post_eula(EulaSummary(accepted=True))` with no `id` argument; PR #81 (Jul 27 2026 "Regenerate Cyperf Python Wrapper") changed `UtilsApi.get_eula`/`post_eula` to require a positional `id` (path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}`) | Open — introduced 2026-07-27, not yet fixed as of 2026-07-31 | + +Open question for a human: what `id` should the wrapper now pass here (a literal `"CyPerf"`? one obtained from `list_eulas`?) — not inferable from the diff alone, so no fix was guessed. diff --git a/.gitignore b/.gitignore index 3edc819..322da87 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ target/ # OpenAPI Generator metadata .openapi-generator/ + +# Claude Code local settings +.claude/settings.local.json From 514fc0323722d7a2c3d151d7397ab3e8a6af9f90 Mon Sep 17 00:00:00 2001 From: Indradeep Moitra Date: Tue, 4 Aug 2026 03:08:36 -0600 Subject: [PATCH 18/26] Pull request #84: Regenerate openapi wrapper with PQC KEM changes for IPSec Merge in ISGAPPSEC/cyperf-api-wrapper from ISGAPPSEC2-38803/expose-ipsec-pqc-configuration to main Squashed commit of the following: commit 9f7818232632d07c4f429a89540592ec7726d44b Author: inmoitra Date: Mon Aug 3 14:27:51 2026 +0000 Regenerated wrapper with PQC KEM changes in IPSec --- README.md | 3 +- cyperf/__init__.py | 5 +- cyperf/api/agents_api.py | 4 +- cyperf/api/application_resources_api.py | 4 +- cyperf/api/authorization_api.py | 4 +- cyperf/api/brokers_api.py | 4 +- cyperf/api/configurations_api.py | 4 +- cyperf/api/data_migration_api.py | 4 +- cyperf/api/diagnostics_api.py | 4 +- cyperf/api/license_servers_api.py | 4 +- cyperf/api/licensing_api.py | 4 +- cyperf/api/notifications_api.py | 4 +- cyperf/api/reports_api.py | 4 +- cyperf/api/sessions_api.py | 4 +- cyperf/api/statistics_api.py | 4 +- cyperf/api/test_operations_api.py | 4 +- cyperf/api/test_results_api.py | 4 +- cyperf/api/utils_api.py | 4 +- cyperf/api_client.py | 4 +- cyperf/configuration.py | 4 +- cyperf/dynamic_models/__init__.py | 5 +- cyperf/exceptions.py | 4 +- cyperf/models/__init__.py | 5 +- cyperf/models/action.py | 4 +- cyperf/models/action_base.py | 4 +- cyperf/models/action_input.py | 4 +- cyperf/models/action_input_find_param.py | 4 +- cyperf/models/action_metadata.py | 4 +- cyperf/models/activation_code_info.py | 4 +- cyperf/models/activation_code_list_request.py | 4 +- cyperf/models/activation_code_request.py | 4 +- cyperf/models/add_action_info.py | 4 +- cyperf/models/add_input.py | 4 +- cyperf/models/address.py | 4 +- cyperf/models/advanced_settings.py | 4 +- cyperf/models/agent.py | 4 +- .../agent_assignment_by_front_panel_port.py | 4 +- cyperf/models/agent_assignment_by_port.py | 4 +- cyperf/models/agent_assignment_details.py | 4 +- cyperf/models/agent_assignments.py | 4 +- cyperf/models/agent_cpu_info.py | 4 +- cyperf/models/agent_features.py | 4 +- cyperf/models/agent_optimization_mode.py | 4 +- cyperf/models/agent_release.py | 4 +- cyperf/models/agent_reservation.py | 4 +- cyperf/models/agent_to_be_rebooted.py | 4 +- cyperf/models/agents_group.py | 4 +- cyperf/models/api_link.py | 4 +- cyperf/models/api_relationship.py | 4 +- cyperf/models/app_exchange.py | 4 +- cyperf/models/app_flow.py | 4 +- cyperf/models/app_flow_desc.py | 4 +- cyperf/models/app_flow_input.py | 4 +- cyperf/models/app_flow_input_find_param.py | 4 +- cyperf/models/app_id.py | 4 +- cyperf/models/app_mode.py | 4 +- cyperf/models/application.py | 4 +- cyperf/models/application_profile.py | 4 +- cyperf/models/application_type.py | 4 +- cyperf/models/appsec_app.py | 4 +- cyperf/models/appsec_app_metadata.py | 4 +- .../appsec_app_metadata_keywords_inner.py | 4 +- cyperf/models/appsec_attack.py | 4 +- cyperf/models/appsec_config.py | 4 +- cyperf/models/archive_info.py | 4 +- cyperf/models/array_v2_element_metadata.py | 4 +- cyperf/models/async_context.py | 4 +- cyperf/models/attack.py | 4 +- cyperf/models/attack_action.py | 4 +- cyperf/models/attack_metadata.py | 4 +- .../models/attack_objectives_and_timeline.py | 4 +- cyperf/models/attack_profile.py | 4 +- cyperf/models/attack_timeline_segment.py | 4 +- cyperf/models/attack_track.py | 4 +- cyperf/models/auth_method_type.py | 4 +- cyperf/models/auth_profile.py | 4 +- cyperf/models/auth_profile_metadata.py | 4 +- cyperf/models/auth_settings.py | 4 +- cyperf/models/authenticate200_response.py | 4 +- cyperf/models/authentication_settings.py | 4 +- cyperf/models/automatic_ip_type.py | 4 +- cyperf/models/basic_auth_profile.py | 4 +- cyperf/models/broker.py | 4 +- cyperf/models/capture_input.py | 4 +- cyperf/models/capture_input_find_param.py | 4 +- cyperf/models/capture_settings.py | 4 +- cyperf/models/category.py | 4 +- cyperf/models/category_filter.py | 4 +- cyperf/models/category_value.py | 4 +- cyperf/models/cert_config.py | 4 +- cyperf/models/certificate.py | 4 +- cyperf/models/chassis_info.py | 4 +- cyperf/models/choice.py | 4 +- cyperf/models/cipher_tls12.py | 4 +- cyperf/models/cipher_tls13.py | 4 +- cyperf/models/cisco_any_connect_settings.py | 4 +- cyperf/models/cisco_encapsulation.py | 4 +- .../classical_signature_algorithm_tls13.py | 4 +- ...r_compute_resources_ownership_operation.py | 4 +- ...r_front_panel_ports_ownership_operation.py | 4 +- .../models/clear_ports_ownership_operation.py | 4 +- cyperf/models/command.py | 4 +- cyperf/models/command_metadata.py | 4 +- ...composite_pqc_signature_algorithm_tls13.py | 4 +- cyperf/models/compute_node.py | 4 +- cyperf/models/compute_resource.py | 4 +- .../models/compute_resources_by_controller.py | 4 +- cyperf/models/compute_resources_by_node.py | 4 +- cyperf/models/config.py | 4 +- cyperf/models/config_category.py | 4 +- cyperf/models/config_id.py | 4 +- cyperf/models/config_metadata.py | 4 +- cyperf/models/config_sub_category.py | 4 +- cyperf/models/config_validation.py | 4 +- cyperf/models/conflict.py | 4 +- cyperf/models/connection.py | 4 +- cyperf/models/connection_persistence.py | 4 +- cyperf/models/consumer.py | 4 +- cyperf/models/content_block.py | 4 +- cyperf/models/controller.py | 4 +- cyperf/models/counted_feature_consumer.py | 4 +- cyperf/models/counted_feature_stats.py | 4 +- cyperf/models/create_app_operation.py | 4 +- .../create_app_or_attack_operation_input.py | 4 +- cyperf/models/custom_dashboards.py | 4 +- cyperf/models/custom_import_handler.py | 4 +- cyperf/models/custom_sequence.py | 4 +- cyperf/models/custom_stat.py | 4 +- cyperf/models/dashboard.py | 4 +- cyperf/models/data_type.py | 4 +- cyperf/models/data_type_values_inner.py | 4 +- cyperf/models/definition.py | 4 +- cyperf/models/delete_input.py | 4 +- cyperf/models/dh_p1_group.py | 4 +- cyperf/models/diagnostic_component.py | 4 +- cyperf/models/diagnostic_component_context.py | 4 +- cyperf/models/diagnostic_options.py | 4 +- cyperf/models/disk_usage.py | 4 +- cyperf/models/dismiss_operation.py | 4 +- cyperf/models/dns_resolver.py | 4 +- cyperf/models/dns_server.py | 4 +- cyperf/models/dtls_settings.py | 4 +- cyperf/models/dut_network.py | 4 +- cyperf/models/dut_range.py | 4 +- cyperf/models/edit_action_input.py | 4 +- cyperf/models/edit_app_operation.py | 4 +- cyperf/models/effective_ports.py | 4 +- cyperf/models/emulated_router.py | 4 +- cyperf/models/emulated_router_range.py | 4 +- cyperf/models/emulated_subnet_config.py | 4 +- cyperf/models/enc_p1_algorithm.py | 4 +- cyperf/models/enc_p2_algorithm.py | 4 +- cyperf/models/endpoint.py | 4 +- cyperf/models/entitlement_code_info.py | 4 +- cyperf/models/entitlement_code_request.py | 4 +- cyperf/models/enum.py | 4 +- cyperf/models/error_description.py | 4 +- cyperf/models/error_response.py | 4 +- cyperf/models/esp_over_udp_settings.py | 4 +- cyperf/models/eth_range.py | 4 +- cyperf/models/eula_details.py | 4 +- cyperf/models/eula_summary.py | 4 +- cyperf/models/exchange.py | 4 +- cyperf/models/exchange_order.py | 4 +- cyperf/models/exchange_payload.py | 4 +- cyperf/models/expected_disk_space.py | 4 +- cyperf/models/expected_disk_space_message.py | 4 +- .../models/expected_disk_space_pretty_size.py | 4 +- cyperf/models/expected_disk_space_size.py | 4 +- cyperf/models/export_all_operation.py | 4 +- cyperf/models/export_apps_operation_input.py | 4 +- cyperf/models/export_files_operation_input.py | 4 +- cyperf/models/export_files_request.py | 4 +- cyperf/models/export_package_operation.py | 4 +- cyperf/models/external_resource_info.py | 4 +- cyperf/models/f5_encapsulation.py | 4 +- cyperf/models/f5_settings.py | 4 +- cyperf/models/feature.py | 4 +- cyperf/models/feature_reservation.py | 4 +- cyperf/models/feature_reservation_reserve.py | 4 +- cyperf/models/file_metadata.py | 4 +- cyperf/models/file_value.py | 4 +- cyperf/models/filter.py | 4 +- cyperf/models/filtered_stat.py | 4 +- cyperf/models/find_param_matches_operation.py | 4 +- cyperf/models/formatted_description.py | 4 +- cyperf/models/fortinet_encapsulation.py | 4 +- cyperf/models/fortinet_settings.py | 4 +- cyperf/models/front_panel.py | 4 +- .../models/front_panel_ports_by_controller.py | 4 +- cyperf/models/fulfillment_request.py | 4 +- cyperf/models/generate_all_operation.py | 4 +- .../models/generate_csv_reports_operation.py | 4 +- .../models/generate_pdf_report_operation.py | 4 +- cyperf/models/generic_file.py | 4 +- cyperf/models/get_agents200_response.py | 4 +- .../models/get_agents200_response_one_of.py | 4 +- cyperf/models/get_agents_tags200_response.py | 4 +- .../get_agents_tags200_response_one_of.py | 4 +- .../get_async_operation_result200_response.py | 4 +- cyperf/models/get_brokers200_response.py | 4 +- .../models/get_brokers200_response_one_of.py | 4 +- cyperf/models/get_categories_operation.py | 4 +- ...fig_categorie_subcategories200_response.py | 4 +- ...egorie_subcategories200_response_one_of.py | 4 +- .../get_config_categories200_response.py | 4 +- ...et_config_categories200_response_one_of.py | 4 +- cyperf/models/get_configs200_response.py | 4 +- .../models/get_configs200_response_one_of.py | 4 +- cyperf/models/get_controllers200_response.py | 4 +- .../get_controllers200_response_one_of.py | 4 +- .../get_disk_usage_consumers200_response.py | 4 +- ...disk_usage_consumers200_response_one_of.py | 4 +- ...ense_async_operation_result200_response.py | 4 +- .../models/get_license_servers200_response.py | 4 +- .../get_license_servers200_response_one_of.py | 4 +- .../models/get_notifications200_response.py | 4 +- .../get_notifications200_response_one_of.py | 4 +- ...resources_application_types200_response.py | 4 +- ...es_application_types200_response_one_of.py | 4 +- .../models/get_resources_apps200_response.py | 4 +- .../get_resources_apps200_response_one_of.py | 4 +- .../get_resources_attacks200_response.py | 4 +- ...et_resources_attacks200_response_one_of.py | 4 +- ...get_resources_auth_profiles200_response.py | 4 +- ...ources_auth_profiles200_response_one_of.py | 4 +- .../get_resources_certificates200_response.py | 4 +- ...sources_certificates200_response_one_of.py | 4 +- ...es_custom_import_operations200_response.py | 4 +- ...om_import_operations200_response_one_of.py | 4 +- ...get_resources_http_profiles200_response.py | 4 +- ...ources_http_profiles200_response_one_of.py | 4 +- ..._resources_llm_api_profiles200_response.py | 4 +- ...ces_llm_api_profiles200_response_one_of.py | 4 +- cyperf/models/get_result_files200_response.py | 4 +- .../get_result_files200_response_one_of.py | 4 +- cyperf/models/get_result_stats200_response.py | 4 +- .../get_result_stats200_response_one_of.py | 4 +- cyperf/models/get_results200_response.py | 4 +- .../models/get_results200_response_one_of.py | 4 +- cyperf/models/get_results_tags200_response.py | 4 +- .../get_results_tags200_response_one_of.py | 4 +- cyperf/models/get_scenarios_operation.py | 4 +- cyperf/models/get_session_meta200_response.py | 4 +- .../get_session_meta200_response_one_of.py | 4 +- cyperf/models/get_sessions200_response.py | 4 +- .../models/get_sessions200_response_one_of.py | 4 +- .../models/get_stats_plugins200_response.py | 4 +- .../get_stats_plugins200_response_one_of.py | 4 +- cyperf/models/get_strikes_operation.py | 4 +- cyperf/models/group_tls13.py | 4 +- cyperf/models/hash_p1_algorithm.py | 4 +- cyperf/models/hash_p2_algorithm.py | 4 +- cyperf/models/health_check_config.py | 4 +- cyperf/models/health_issue.py | 4 +- cyperf/models/host_id.py | 4 +- cyperf/models/http_profile.py | 4 +- cyperf/models/http_req_meta.py | 4 +- cyperf/models/http_res_meta.py | 4 +- cyperf/models/http_version.py | 4 +- cyperf/models/id_p_signature_algo.py | 4 +- cyperf/models/identification_config.py | 4 +- cyperf/models/import_all_operation.py | 4 +- .../models/import_offline_license_result.py | 4 +- cyperf/models/ingest_operation.py | 4 +- cyperf/models/inner_ip_range.py | 4 +- cyperf/models/inner_ip_sec_range.py | 8 ++- cyperf/models/interface.py | 4 +- cyperf/models/ip_mask.py | 4 +- cyperf/models/ip_network.py | 4 +- cyperf/models/ip_preference.py | 4 +- cyperf/models/ip_range.py | 4 +- cyperf/models/ip_sec_range.py | 8 ++- cyperf/models/ip_sec_stack.py | 4 +- cyperf/models/ip_ver.py | 4 +- cyperf/models/keyword.py | 4 +- cyperf/models/layout_config.py | 4 +- cyperf/models/license.py | 4 +- cyperf/models/license_receipt.py | 4 +- cyperf/models/license_server_metadata.py | 4 +- cyperf/models/link.py | 4 +- cyperf/models/llmapi_profile.py | 4 +- cyperf/models/load_config_operation.py | 4 +- cyperf/models/local_subnet_config.py | 4 +- cyperf/models/log_config.py | 4 +- cyperf/models/log_level.py | 4 +- cyperf/models/mac_dtls_stack.py | 4 +- cyperf/models/mapping_type.py | 4 +- cyperf/models/marked_as_deleted.py | 4 +- cyperf/models/md2_tlv.py | 4 +- cyperf/models/media_file.py | 4 +- cyperf/models/media_track.py | 4 +- cyperf/models/metadata.py | 4 +- cyperf/models/mos_mode.py | 4 +- cyperf/models/name_id_format.py | 4 +- cyperf/models/name_server.py | 4 +- cyperf/models/network_mapping.py | 4 +- cyperf/models/network_meshing.py | 4 +- cyperf/models/network_profile.py | 4 +- cyperf/models/network_segment_base.py | 4 +- cyperf/models/nodes_by_controller.py | 4 +- cyperf/models/nodes_power_cycle_operation.py | 4 +- cyperf/models/notification.py | 4 +- cyperf/models/notification_counts.py | 4 +- cyperf/models/ntp_info.py | 4 +- cyperf/models/objective_type.py | 4 +- cyperf/models/objective_unit.py | 4 +- cyperf/models/objective_value_entry.py | 4 +- cyperf/models/objectives_and_timeline.py | 4 +- cyperf/models/open_api_definitions.py | 4 +- cyperf/models/p1_config.py | 9 ++- cyperf/models/p2_config.py | 4 +- cyperf/models/pair.py | 4 +- cyperf/models/pangp_encapsulation.py | 4 +- cyperf/models/pangp_settings.py | 4 +- cyperf/models/param_metadata.py | 4 +- cyperf/models/param_metadata_type_info.py | 4 +- .../param_metadata_type_info_array_v2.py | 4 +- ...adata_type_info_array_v2_elements_inner.py | 4 +- cyperf/models/param_metadata_type_info_int.py | 4 +- .../models/param_metadata_type_info_media.py | 4 +- .../models/param_metadata_type_info_string.py | 4 +- cyperf/models/param_source_type.py | 4 +- cyperf/models/param_type.py | 4 +- cyperf/models/parameter.py | 4 +- cyperf/models/parameter_match.py | 4 +- cyperf/models/parameter_meta.py | 4 +- cyperf/models/parameter_metadata.py | 4 +- cyperf/models/params.py | 4 +- cyperf/models/params_enum.py | 4 +- cyperf/models/payload_meta.py | 4 +- cyperf/models/payload_metadata.py | 4 +- cyperf/models/pep_dut.py | 4 +- cyperf/models/pfs_p2_group.py | 4 +- cyperf/models/playlist_metadata.py | 4 +- cyperf/models/playlist_sequencing_method.py | 4 +- cyperf/models/plugin.py | 4 +- cyperf/models/plugin_stats.py | 4 +- cyperf/models/port.py | 4 +- cyperf/models/port_settings.py | 4 +- cyperf/models/ports_by_controller.py | 4 +- cyperf/models/ports_by_node.py | 4 +- cyperf/models/ports_by_panel.py | 4 +- cyperf/models/ppk_pair.py | 4 +- cyperf/models/pqc_kem_group.py | 60 +++++++++++++++++++ .../models/pqc_signature_algorithm_tls13.py | 4 +- cyperf/models/prf_p1_algorithm.py | 4 +- cyperf/models/profile.py | 4 +- cyperf/models/protected_subnet_config.py | 4 +- cyperf/models/psp_range.py | 4 +- cyperf/models/psp_stack.py | 4 +- cyperf/models/quic_profile.py | 4 +- cyperf/models/quic_version.py | 4 +- .../reboot_compute_resources_operation.py | 4 +- cyperf/models/reboot_operation_input.py | 4 +- cyperf/models/reboot_ports_operation.py | 4 +- cyperf/models/reference.py | 4 +- cyperf/models/regex_match.py | 4 +- cyperf/models/release_operation_input.py | 4 +- cyperf/models/remote_access.py | 4 +- cyperf/models/remote_subnet_config.py | 4 +- cyperf/models/rename_input.py | 4 +- cyperf/models/reorder_action_input.py | 4 +- cyperf/models/reorder_exchanges_input.py | 4 +- cyperf/models/replay_capture.py | 4 +- cyperf/models/required_file_types.py | 4 +- cyperf/models/reserve_operation_input.py | 4 +- cyperf/models/result_file_metadata.py | 4 +- cyperf/models/result_metadata.py | 4 +- cyperf/models/results_group.py | 4 +- cyperf/models/rtp_encryption_mode.py | 4 +- cyperf/models/rtp_profile.py | 4 +- cyperf/models/rtp_profile_meta.py | 4 +- cyperf/models/save_config_operation.py | 4 +- cyperf/models/scenario.py | 4 +- cyperf/models/secondary_objective.py | 4 +- cyperf/models/section.py | 4 +- cyperf/models/segment_type.py | 4 +- cyperf/models/selected_env.py | 4 +- cyperf/models/sequence_data_types.py | 4 +- cyperf/models/sequence_value.py | 4 +- cyperf/models/sequence_value_types.py | 4 +- cyperf/models/session.py | 4 +- cyperf/models/session_reuse_method_tls12.py | 4 +- cyperf/models/session_reuse_method_tls13.py | 4 +- .../models/set_aggregation_mode_operation.py | 4 +- cyperf/models/set_controller_app_operation.py | 4 +- .../models/set_dpdk_mode_operation_input.py | 4 +- ..._front_panel_ports_link_state_operation.py | 4 +- cyperf/models/set_nodes_app_operation.py | 4 +- cyperf/models/set_ntp_operation_input.py | 4 +- .../models/set_ports_link_state_operation.py | 4 +- cyperf/models/simple_sequence_value.py | 4 +- cyperf/models/simulated_id_p.py | 4 +- cyperf/models/single_value.py | 4 +- cyperf/models/snapshot.py | 4 +- cyperf/models/snowflake_exporter.py | 4 +- cyperf/models/sort_body_field.py | 4 +- cyperf/models/specific_objective.py | 4 +- ...start_agents_batch_delete_request_inner.py | 4 +- cyperf/models/stateless_stream.py | 4 +- cyperf/models/static_arp_entry.py | 4 +- cyperf/models/stats_result.py | 4 +- cyperf/models/steady_segment.py | 4 +- cyperf/models/step_segment.py | 4 +- cyperf/models/stream_direction.py | 4 +- cyperf/models/stream_payload_type.py | 4 +- cyperf/models/stream_profile.py | 4 +- cyperf/models/sub_step.py | 4 +- cyperf/models/supported_group_tls13.py | 4 +- cyperf/models/system_info.py | 4 +- cyperf/models/tcp_profile.py | 4 +- cyperf/models/test_info.py | 4 +- cyperf/models/test_state_changed_operation.py | 4 +- cyperf/models/text_segment.py | 4 +- cyperf/models/time_value.py | 4 +- cyperf/models/timeline_segment.py | 4 +- cyperf/models/timeline_segment_base.py | 4 +- cyperf/models/timeline_segment_union.py | 4 +- cyperf/models/timers.py | 4 +- cyperf/models/tls_profile.py | 4 +- cyperf/models/track.py | 4 +- cyperf/models/track_type.py | 4 +- cyperf/models/traffic_agent_info.py | 4 +- cyperf/models/traffic_profile_base.py | 4 +- cyperf/models/traffic_settings.py | 4 +- cyperf/models/transport_profile.py | 4 +- cyperf/models/transport_profile_base.py | 4 +- cyperf/models/tunnel_range.py | 4 +- cyperf/models/tunnel_settings.py | 4 +- cyperf/models/tunnel_stack.py | 4 +- cyperf/models/type_array_v2_metadata.py | 4 +- cyperf/models/type_info_metadata.py | 4 +- cyperf/models/type_int_metadata.py | 4 +- cyperf/models/type_media_metadata.py | 4 +- cyperf/models/type_string_metadata.py | 4 +- cyperf/models/udp_profile.py | 4 +- cyperf/models/update_network_mapping.py | 4 +- cyperf/models/update_port_tags_operation.py | 4 +- cyperf/models/validation_message.py | 4 +- cyperf/models/version.py | 4 +- cyperf/models/vlan_range.py | 4 +- cyperf/models/vlan_type.py | 4 +- cyperf/models/vx_lan_range.py | 4 +- cyperf/models/vx_lan_stack.py | 4 +- cyperf/models/vx_lanid.py | 4 +- cyperf/rest.py | 4 +- docs/IPSecRange.md | 1 + docs/InnerIPSecRange.md | 1 + docs/P1Config.md | 1 + docs/PqcKemGroup.md | 56 +++++++++++++++++ pyproject.toml | 4 +- setup.py | 4 +- 453 files changed, 1028 insertions(+), 898 deletions(-) create mode 100644 cyperf/models/pqc_kem_group.py create mode 100644 docs/PqcKemGroup.md diff --git a/README.md b/README.md index b38644b..e9834c4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # cyperf -CyPerf REST API +Keysight CyPerf REST API This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: @@ -719,6 +719,7 @@ Class | Method | HTTP request | Description - [PortsByController](docs/PortsByController.md) - [PortsByNode](docs/PortsByNode.md) - [PortsByPanel](docs/PortsByPanel.md) + - [PqcKemGroup](docs/PqcKemGroup.md) - [PqcSignatureAlgorithmTLS13](docs/PqcSignatureAlgorithmTLS13.md) - [PrfP1Algorithm](docs/PrfP1Algorithm.md) - [Profile](docs/Profile.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index d848912..81eb30a 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -3,9 +3,9 @@ # flake8: noqa """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -375,6 +375,7 @@ from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode from cyperf.models.ports_by_panel import PortsByPanel +from cyperf.models.pqc_kem_group import PqcKemGroup from cyperf.models.pqc_signature_algorithm_tls13 import PqcSignatureAlgorithmTLS13 from cyperf.models.prf_p1_algorithm import PrfP1Algorithm from cyperf.models.profile import Profile diff --git a/cyperf/api/agents_api.py b/cyperf/api/agents_api.py index e805f8c..8a91fef 100644 --- a/cyperf/api/agents_api.py +++ b/cyperf/api/agents_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/application_resources_api.py b/cyperf/api/application_resources_api.py index 1755616..59fb934 100644 --- a/cyperf/api/application_resources_api.py +++ b/cyperf/api/application_resources_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/authorization_api.py b/cyperf/api/authorization_api.py index 37b7b39..a218b54 100644 --- a/cyperf/api/authorization_api.py +++ b/cyperf/api/authorization_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/brokers_api.py b/cyperf/api/brokers_api.py index 2c39111..f88ba43 100644 --- a/cyperf/api/brokers_api.py +++ b/cyperf/api/brokers_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/configurations_api.py b/cyperf/api/configurations_api.py index 62830e7..63b9afe 100644 --- a/cyperf/api/configurations_api.py +++ b/cyperf/api/configurations_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/data_migration_api.py b/cyperf/api/data_migration_api.py index 0a62312..e22dd09 100644 --- a/cyperf/api/data_migration_api.py +++ b/cyperf/api/data_migration_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/diagnostics_api.py b/cyperf/api/diagnostics_api.py index 5a59367..309dd92 100644 --- a/cyperf/api/diagnostics_api.py +++ b/cyperf/api/diagnostics_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/license_servers_api.py b/cyperf/api/license_servers_api.py index a45eb7a..d309cd0 100644 --- a/cyperf/api/license_servers_api.py +++ b/cyperf/api/license_servers_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/licensing_api.py b/cyperf/api/licensing_api.py index ba1a2c5..65ec6af 100644 --- a/cyperf/api/licensing_api.py +++ b/cyperf/api/licensing_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/notifications_api.py b/cyperf/api/notifications_api.py index 8331050..efd9d02 100644 --- a/cyperf/api/notifications_api.py +++ b/cyperf/api/notifications_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/reports_api.py b/cyperf/api/reports_api.py index 83ca1ef..3aeafce 100644 --- a/cyperf/api/reports_api.py +++ b/cyperf/api/reports_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/sessions_api.py b/cyperf/api/sessions_api.py index 6cd1e66..1a243b0 100644 --- a/cyperf/api/sessions_api.py +++ b/cyperf/api/sessions_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/statistics_api.py b/cyperf/api/statistics_api.py index 0a818ba..85282f4 100644 --- a/cyperf/api/statistics_api.py +++ b/cyperf/api/statistics_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/test_operations_api.py b/cyperf/api/test_operations_api.py index 1051319..7fb2628 100644 --- a/cyperf/api/test_operations_api.py +++ b/cyperf/api/test_operations_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/test_results_api.py b/cyperf/api/test_results_api.py index aed223e..1ca8cc9 100644 --- a/cyperf/api/test_results_api.py +++ b/cyperf/api/test_results_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api/utils_api.py b/cyperf/api/utils_api.py index 0fa71ae..76271b8 100644 --- a/cyperf/api/utils_api.py +++ b/cyperf/api/utils_api.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/api_client.py b/cyperf/api_client.py index 2df7bff..7c49b5c 100644 --- a/cyperf/api_client.py +++ b/cyperf/api_client.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/configuration.py b/cyperf/configuration.py index 4579df0..57a6121 100644 --- a/cyperf/configuration.py +++ b/cyperf/configuration.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 08c3cbf..40a2728 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -2,9 +2,9 @@ # flake8: noqa """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -341,6 +341,7 @@ PortsByController = DynamicModel('PortsByController', (), {} ) PortsByNode = DynamicModel('PortsByNode', (), {} ) PortsByPanel = DynamicModel('PortsByPanel', (), {} ) +PqcKemGroup = DynamicModel('PqcKemGroup', (), {} ) PqcSignatureAlgorithmTLS13 = DynamicModel('PqcSignatureAlgorithmTLS13', (), {} ) PrfP1Algorithm = DynamicModel('PrfP1Algorithm', (), {} ) Profile = DynamicModel('Profile', (), {} ) diff --git a/cyperf/exceptions.py b/cyperf/exceptions.py index cfb9e65..674969b 100644 --- a/cyperf/exceptions.py +++ b/cyperf/exceptions.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 24b5a3f..cfc93c2 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -2,9 +2,9 @@ # flake8: noqa """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -341,6 +341,7 @@ class LinkNameException(Exception): from cyperf.models.ports_by_controller import PortsByController from cyperf.models.ports_by_node import PortsByNode from cyperf.models.ports_by_panel import PortsByPanel +from cyperf.models.pqc_kem_group import PqcKemGroup from cyperf.models.pqc_signature_algorithm_tls13 import PqcSignatureAlgorithmTLS13 from cyperf.models.prf_p1_algorithm import PrfP1Algorithm from cyperf.models.profile import Profile diff --git a/cyperf/models/action.py b/cyperf/models/action.py index 6e029e0..a67c324 100644 --- a/cyperf/models/action.py +++ b/cyperf/models/action.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/action_base.py b/cyperf/models/action_base.py index 2465540..193de1e 100644 --- a/cyperf/models/action_base.py +++ b/cyperf/models/action_base.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/action_input.py b/cyperf/models/action_input.py index 20d1342..93c25f3 100644 --- a/cyperf/models/action_input.py +++ b/cyperf/models/action_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/action_input_find_param.py b/cyperf/models/action_input_find_param.py index b62a8c1..1f0d95c 100644 --- a/cyperf/models/action_input_find_param.py +++ b/cyperf/models/action_input_find_param.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/action_metadata.py b/cyperf/models/action_metadata.py index a1bcfe1..bb46292 100644 --- a/cyperf/models/action_metadata.py +++ b/cyperf/models/action_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/activation_code_info.py b/cyperf/models/activation_code_info.py index 9cc170b..1f1c41f 100644 --- a/cyperf/models/activation_code_info.py +++ b/cyperf/models/activation_code_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/activation_code_list_request.py b/cyperf/models/activation_code_list_request.py index ee7c0f7..def228f 100644 --- a/cyperf/models/activation_code_list_request.py +++ b/cyperf/models/activation_code_list_request.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/activation_code_request.py b/cyperf/models/activation_code_request.py index b0cc4da..e24d877 100644 --- a/cyperf/models/activation_code_request.py +++ b/cyperf/models/activation_code_request.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/add_action_info.py b/cyperf/models/add_action_info.py index a3b41d1..e063115 100644 --- a/cyperf/models/add_action_info.py +++ b/cyperf/models/add_action_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/add_input.py b/cyperf/models/add_input.py index 32916fa..2bb8cd7 100644 --- a/cyperf/models/add_input.py +++ b/cyperf/models/add_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/address.py b/cyperf/models/address.py index d6d4ee6..8b31ea3 100644 --- a/cyperf/models/address.py +++ b/cyperf/models/address.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/advanced_settings.py b/cyperf/models/advanced_settings.py index 2e4b124..126cce0 100644 --- a/cyperf/models/advanced_settings.py +++ b/cyperf/models/advanced_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent.py b/cyperf/models/agent.py index e88d757..319e667 100644 --- a/cyperf/models/agent.py +++ b/cyperf/models/agent.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_assignment_by_front_panel_port.py b/cyperf/models/agent_assignment_by_front_panel_port.py index 9f4dc70..4ed8dc3 100644 --- a/cyperf/models/agent_assignment_by_front_panel_port.py +++ b/cyperf/models/agent_assignment_by_front_panel_port.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_assignment_by_port.py b/cyperf/models/agent_assignment_by_port.py index 3142e3b..8986db2 100644 --- a/cyperf/models/agent_assignment_by_port.py +++ b/cyperf/models/agent_assignment_by_port.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_assignment_details.py b/cyperf/models/agent_assignment_details.py index fd2fccc..677fe54 100644 --- a/cyperf/models/agent_assignment_details.py +++ b/cyperf/models/agent_assignment_details.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_assignments.py b/cyperf/models/agent_assignments.py index ea9c9bf..7522e4f 100644 --- a/cyperf/models/agent_assignments.py +++ b/cyperf/models/agent_assignments.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_cpu_info.py b/cyperf/models/agent_cpu_info.py index ff56423..53c0680 100644 --- a/cyperf/models/agent_cpu_info.py +++ b/cyperf/models/agent_cpu_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_features.py b/cyperf/models/agent_features.py index 4631d9d..02e89b0 100644 --- a/cyperf/models/agent_features.py +++ b/cyperf/models/agent_features.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_optimization_mode.py b/cyperf/models/agent_optimization_mode.py index 26183c2..a30a1fe 100644 --- a/cyperf/models/agent_optimization_mode.py +++ b/cyperf/models/agent_optimization_mode.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_release.py b/cyperf/models/agent_release.py index 02852a3..3b209b6 100644 --- a/cyperf/models/agent_release.py +++ b/cyperf/models/agent_release.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_reservation.py b/cyperf/models/agent_reservation.py index 4cf6977..4a75a50 100644 --- a/cyperf/models/agent_reservation.py +++ b/cyperf/models/agent_reservation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agent_to_be_rebooted.py b/cyperf/models/agent_to_be_rebooted.py index 8d8fcf5..11c2361 100644 --- a/cyperf/models/agent_to_be_rebooted.py +++ b/cyperf/models/agent_to_be_rebooted.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/agents_group.py b/cyperf/models/agents_group.py index cce0959..b1d9e57 100644 --- a/cyperf/models/agents_group.py +++ b/cyperf/models/agents_group.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/api_link.py b/cyperf/models/api_link.py index ddf20df..dbebaac 100644 --- a/cyperf/models/api_link.py +++ b/cyperf/models/api_link.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/api_relationship.py b/cyperf/models/api_relationship.py index 8cc294f..7d967a5 100644 --- a/cyperf/models/api_relationship.py +++ b/cyperf/models/api_relationship.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_exchange.py b/cyperf/models/app_exchange.py index 79fb1fc..5c9b55d 100644 --- a/cyperf/models/app_exchange.py +++ b/cyperf/models/app_exchange.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_flow.py b/cyperf/models/app_flow.py index e0346b7..3f57168 100644 --- a/cyperf/models/app_flow.py +++ b/cyperf/models/app_flow.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_flow_desc.py b/cyperf/models/app_flow_desc.py index 42cf3cd..0f4f46a 100644 --- a/cyperf/models/app_flow_desc.py +++ b/cyperf/models/app_flow_desc.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_flow_input.py b/cyperf/models/app_flow_input.py index 01af86c..9ab63d3 100644 --- a/cyperf/models/app_flow_input.py +++ b/cyperf/models/app_flow_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_flow_input_find_param.py b/cyperf/models/app_flow_input_find_param.py index 13bd6f2..89348d4 100644 --- a/cyperf/models/app_flow_input_find_param.py +++ b/cyperf/models/app_flow_input_find_param.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_id.py b/cyperf/models/app_id.py index b40ddf7..ab46745 100644 --- a/cyperf/models/app_id.py +++ b/cyperf/models/app_id.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/app_mode.py b/cyperf/models/app_mode.py index 4dca4fc..07ab234 100644 --- a/cyperf/models/app_mode.py +++ b/cyperf/models/app_mode.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/application.py b/cyperf/models/application.py index 6779287..3891e24 100644 --- a/cyperf/models/application.py +++ b/cyperf/models/application.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/application_profile.py b/cyperf/models/application_profile.py index 2b90483..229efa0 100644 --- a/cyperf/models/application_profile.py +++ b/cyperf/models/application_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/application_type.py b/cyperf/models/application_type.py index b05b4e4..38e0565 100644 --- a/cyperf/models/application_type.py +++ b/cyperf/models/application_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/appsec_app.py b/cyperf/models/appsec_app.py index 48fa646..1d0f31a 100644 --- a/cyperf/models/appsec_app.py +++ b/cyperf/models/appsec_app.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/appsec_app_metadata.py b/cyperf/models/appsec_app_metadata.py index 907a4ae..a07e24a 100644 --- a/cyperf/models/appsec_app_metadata.py +++ b/cyperf/models/appsec_app_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/appsec_app_metadata_keywords_inner.py b/cyperf/models/appsec_app_metadata_keywords_inner.py index c8f39ce..eeeee36 100644 --- a/cyperf/models/appsec_app_metadata_keywords_inner.py +++ b/cyperf/models/appsec_app_metadata_keywords_inner.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/appsec_attack.py b/cyperf/models/appsec_attack.py index cbbd65a..e059cb2 100644 --- a/cyperf/models/appsec_attack.py +++ b/cyperf/models/appsec_attack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/appsec_config.py b/cyperf/models/appsec_config.py index f861a8a..53dcf64 100644 --- a/cyperf/models/appsec_config.py +++ b/cyperf/models/appsec_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/archive_info.py b/cyperf/models/archive_info.py index a8ebe18..4bfeba1 100644 --- a/cyperf/models/archive_info.py +++ b/cyperf/models/archive_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/array_v2_element_metadata.py b/cyperf/models/array_v2_element_metadata.py index b10aac2..07fdfef 100644 --- a/cyperf/models/array_v2_element_metadata.py +++ b/cyperf/models/array_v2_element_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/async_context.py b/cyperf/models/async_context.py index bd6749b..2c563b0 100644 --- a/cyperf/models/async_context.py +++ b/cyperf/models/async_context.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack.py b/cyperf/models/attack.py index 370b372..0438bf4 100644 --- a/cyperf/models/attack.py +++ b/cyperf/models/attack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_action.py b/cyperf/models/attack_action.py index f261776..0670016 100644 --- a/cyperf/models/attack_action.py +++ b/cyperf/models/attack_action.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_metadata.py b/cyperf/models/attack_metadata.py index d0306f8..6908e5e 100644 --- a/cyperf/models/attack_metadata.py +++ b/cyperf/models/attack_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_objectives_and_timeline.py b/cyperf/models/attack_objectives_and_timeline.py index 21bd090..e070c86 100644 --- a/cyperf/models/attack_objectives_and_timeline.py +++ b/cyperf/models/attack_objectives_and_timeline.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_profile.py b/cyperf/models/attack_profile.py index 7ac4116..b520747 100644 --- a/cyperf/models/attack_profile.py +++ b/cyperf/models/attack_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_timeline_segment.py b/cyperf/models/attack_timeline_segment.py index 1d83e28..2fce395 100644 --- a/cyperf/models/attack_timeline_segment.py +++ b/cyperf/models/attack_timeline_segment.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/attack_track.py b/cyperf/models/attack_track.py index 8a266c3..2e80c34 100644 --- a/cyperf/models/attack_track.py +++ b/cyperf/models/attack_track.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/auth_method_type.py b/cyperf/models/auth_method_type.py index a3ec0a0..a06cb7e 100644 --- a/cyperf/models/auth_method_type.py +++ b/cyperf/models/auth_method_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/auth_profile.py b/cyperf/models/auth_profile.py index 51584a5..1d549cb 100644 --- a/cyperf/models/auth_profile.py +++ b/cyperf/models/auth_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/auth_profile_metadata.py b/cyperf/models/auth_profile_metadata.py index 213454f..fe2fd75 100644 --- a/cyperf/models/auth_profile_metadata.py +++ b/cyperf/models/auth_profile_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/auth_settings.py b/cyperf/models/auth_settings.py index ccab464..4ee91c0 100644 --- a/cyperf/models/auth_settings.py +++ b/cyperf/models/auth_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/authenticate200_response.py b/cyperf/models/authenticate200_response.py index 14d2a9a..fc836e9 100644 --- a/cyperf/models/authenticate200_response.py +++ b/cyperf/models/authenticate200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/authentication_settings.py b/cyperf/models/authentication_settings.py index e7db0d2..05afd53 100644 --- a/cyperf/models/authentication_settings.py +++ b/cyperf/models/authentication_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/automatic_ip_type.py b/cyperf/models/automatic_ip_type.py index 763accd..6848eed 100644 --- a/cyperf/models/automatic_ip_type.py +++ b/cyperf/models/automatic_ip_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/basic_auth_profile.py b/cyperf/models/basic_auth_profile.py index 311e829..0c8d08d 100644 --- a/cyperf/models/basic_auth_profile.py +++ b/cyperf/models/basic_auth_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/broker.py b/cyperf/models/broker.py index 8c84a17..d42b9c1 100644 --- a/cyperf/models/broker.py +++ b/cyperf/models/broker.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/capture_input.py b/cyperf/models/capture_input.py index 4c3fd3e..34ec906 100644 --- a/cyperf/models/capture_input.py +++ b/cyperf/models/capture_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/capture_input_find_param.py b/cyperf/models/capture_input_find_param.py index e57949b..bb1c6b0 100644 --- a/cyperf/models/capture_input_find_param.py +++ b/cyperf/models/capture_input_find_param.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/capture_settings.py b/cyperf/models/capture_settings.py index 889a638..3890818 100644 --- a/cyperf/models/capture_settings.py +++ b/cyperf/models/capture_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/category.py b/cyperf/models/category.py index 6c7c153..f9c32c4 100644 --- a/cyperf/models/category.py +++ b/cyperf/models/category.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/category_filter.py b/cyperf/models/category_filter.py index 4a6025b..3ab5854 100644 --- a/cyperf/models/category_filter.py +++ b/cyperf/models/category_filter.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/category_value.py b/cyperf/models/category_value.py index ec9486b..45ec445 100644 --- a/cyperf/models/category_value.py +++ b/cyperf/models/category_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/cert_config.py b/cyperf/models/cert_config.py index b103db8..0472eeb 100644 --- a/cyperf/models/cert_config.py +++ b/cyperf/models/cert_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/certificate.py b/cyperf/models/certificate.py index e8a6868..4c04d06 100644 --- a/cyperf/models/certificate.py +++ b/cyperf/models/certificate.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/chassis_info.py b/cyperf/models/chassis_info.py index 330ab40..3a022b0 100644 --- a/cyperf/models/chassis_info.py +++ b/cyperf/models/chassis_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/choice.py b/cyperf/models/choice.py index 83aa523..f4eebfe 100644 --- a/cyperf/models/choice.py +++ b/cyperf/models/choice.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/cipher_tls12.py b/cyperf/models/cipher_tls12.py index 37a85c1..9a0d727 100644 --- a/cyperf/models/cipher_tls12.py +++ b/cyperf/models/cipher_tls12.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/cipher_tls13.py b/cyperf/models/cipher_tls13.py index 3327e12..c2a30c1 100644 --- a/cyperf/models/cipher_tls13.py +++ b/cyperf/models/cipher_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/cisco_any_connect_settings.py b/cyperf/models/cisco_any_connect_settings.py index 5808990..6584b92 100644 --- a/cyperf/models/cisco_any_connect_settings.py +++ b/cyperf/models/cisco_any_connect_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/cisco_encapsulation.py b/cyperf/models/cisco_encapsulation.py index 8917377..b6b6db5 100644 --- a/cyperf/models/cisco_encapsulation.py +++ b/cyperf/models/cisco_encapsulation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/classical_signature_algorithm_tls13.py b/cyperf/models/classical_signature_algorithm_tls13.py index 9ebe192..cb8ce0f 100644 --- a/cyperf/models/classical_signature_algorithm_tls13.py +++ b/cyperf/models/classical_signature_algorithm_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/clear_compute_resources_ownership_operation.py b/cyperf/models/clear_compute_resources_ownership_operation.py index 8523d78..73cce25 100644 --- a/cyperf/models/clear_compute_resources_ownership_operation.py +++ b/cyperf/models/clear_compute_resources_ownership_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/clear_front_panel_ports_ownership_operation.py b/cyperf/models/clear_front_panel_ports_ownership_operation.py index 4f4129f..247e3a5 100644 --- a/cyperf/models/clear_front_panel_ports_ownership_operation.py +++ b/cyperf/models/clear_front_panel_ports_ownership_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/clear_ports_ownership_operation.py b/cyperf/models/clear_ports_ownership_operation.py index 4083b60..44a20c9 100644 --- a/cyperf/models/clear_ports_ownership_operation.py +++ b/cyperf/models/clear_ports_ownership_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/command.py b/cyperf/models/command.py index a79cd07..02be5e4 100644 --- a/cyperf/models/command.py +++ b/cyperf/models/command.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/command_metadata.py b/cyperf/models/command_metadata.py index 12491a0..7e4c6f0 100644 --- a/cyperf/models/command_metadata.py +++ b/cyperf/models/command_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/composite_pqc_signature_algorithm_tls13.py b/cyperf/models/composite_pqc_signature_algorithm_tls13.py index c69163f..dd08f02 100644 --- a/cyperf/models/composite_pqc_signature_algorithm_tls13.py +++ b/cyperf/models/composite_pqc_signature_algorithm_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/compute_node.py b/cyperf/models/compute_node.py index ca2bd1d..0d0e4b9 100644 --- a/cyperf/models/compute_node.py +++ b/cyperf/models/compute_node.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/compute_resource.py b/cyperf/models/compute_resource.py index 8e5d924..0bf0f74 100644 --- a/cyperf/models/compute_resource.py +++ b/cyperf/models/compute_resource.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/compute_resources_by_controller.py b/cyperf/models/compute_resources_by_controller.py index 88408a5..1cc7701 100644 --- a/cyperf/models/compute_resources_by_controller.py +++ b/cyperf/models/compute_resources_by_controller.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/compute_resources_by_node.py b/cyperf/models/compute_resources_by_node.py index 7340aa4..b160839 100644 --- a/cyperf/models/compute_resources_by_node.py +++ b/cyperf/models/compute_resources_by_node.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config.py b/cyperf/models/config.py index 6cd7440..883177c 100644 --- a/cyperf/models/config.py +++ b/cyperf/models/config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config_category.py b/cyperf/models/config_category.py index f525067..350f0b4 100644 --- a/cyperf/models/config_category.py +++ b/cyperf/models/config_category.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config_id.py b/cyperf/models/config_id.py index e9143c0..b92dd20 100644 --- a/cyperf/models/config_id.py +++ b/cyperf/models/config_id.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config_metadata.py b/cyperf/models/config_metadata.py index eda89e7..0133f37 100644 --- a/cyperf/models/config_metadata.py +++ b/cyperf/models/config_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config_sub_category.py b/cyperf/models/config_sub_category.py index 1609ea0..3d06f37 100644 --- a/cyperf/models/config_sub_category.py +++ b/cyperf/models/config_sub_category.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/config_validation.py b/cyperf/models/config_validation.py index 37015e7..8313837 100644 --- a/cyperf/models/config_validation.py +++ b/cyperf/models/config_validation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/conflict.py b/cyperf/models/conflict.py index b63963d..ef196bb 100644 --- a/cyperf/models/conflict.py +++ b/cyperf/models/conflict.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/connection.py b/cyperf/models/connection.py index 02a48b7..75356ad 100644 --- a/cyperf/models/connection.py +++ b/cyperf/models/connection.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/connection_persistence.py b/cyperf/models/connection_persistence.py index b742035..7e2e08f 100644 --- a/cyperf/models/connection_persistence.py +++ b/cyperf/models/connection_persistence.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/consumer.py b/cyperf/models/consumer.py index 2e621e6..429849c 100644 --- a/cyperf/models/consumer.py +++ b/cyperf/models/consumer.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/content_block.py b/cyperf/models/content_block.py index 3831fde..f9306ca 100644 --- a/cyperf/models/content_block.py +++ b/cyperf/models/content_block.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/controller.py b/cyperf/models/controller.py index 0acffc6..c025ca3 100644 --- a/cyperf/models/controller.py +++ b/cyperf/models/controller.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/counted_feature_consumer.py b/cyperf/models/counted_feature_consumer.py index 9e406ba..3dda652 100644 --- a/cyperf/models/counted_feature_consumer.py +++ b/cyperf/models/counted_feature_consumer.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/counted_feature_stats.py b/cyperf/models/counted_feature_stats.py index ac2906f..20c4773 100644 --- a/cyperf/models/counted_feature_stats.py +++ b/cyperf/models/counted_feature_stats.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/create_app_operation.py b/cyperf/models/create_app_operation.py index bb516ef..27b947e 100644 --- a/cyperf/models/create_app_operation.py +++ b/cyperf/models/create_app_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/create_app_or_attack_operation_input.py b/cyperf/models/create_app_or_attack_operation_input.py index 6028d4d..04ab7e7 100644 --- a/cyperf/models/create_app_or_attack_operation_input.py +++ b/cyperf/models/create_app_or_attack_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/custom_dashboards.py b/cyperf/models/custom_dashboards.py index 080b20c..08f74d7 100644 --- a/cyperf/models/custom_dashboards.py +++ b/cyperf/models/custom_dashboards.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/custom_import_handler.py b/cyperf/models/custom_import_handler.py index 8f35a0f..5eff3cc 100644 --- a/cyperf/models/custom_import_handler.py +++ b/cyperf/models/custom_import_handler.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/custom_sequence.py b/cyperf/models/custom_sequence.py index ccbf7ed..36321e9 100644 --- a/cyperf/models/custom_sequence.py +++ b/cyperf/models/custom_sequence.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/custom_stat.py b/cyperf/models/custom_stat.py index eaa3bdf..3be11bc 100644 --- a/cyperf/models/custom_stat.py +++ b/cyperf/models/custom_stat.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dashboard.py b/cyperf/models/dashboard.py index f62c7b9..5ad2d6e 100644 --- a/cyperf/models/dashboard.py +++ b/cyperf/models/dashboard.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/data_type.py b/cyperf/models/data_type.py index ec5c84a..0c08e10 100644 --- a/cyperf/models/data_type.py +++ b/cyperf/models/data_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/data_type_values_inner.py b/cyperf/models/data_type_values_inner.py index 6e5a6da..c6dac24 100644 --- a/cyperf/models/data_type_values_inner.py +++ b/cyperf/models/data_type_values_inner.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/definition.py b/cyperf/models/definition.py index 0629239..92ca0fa 100644 --- a/cyperf/models/definition.py +++ b/cyperf/models/definition.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/delete_input.py b/cyperf/models/delete_input.py index 490d940..f0a6bb7 100644 --- a/cyperf/models/delete_input.py +++ b/cyperf/models/delete_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dh_p1_group.py b/cyperf/models/dh_p1_group.py index 3b7ff11..13ec1eb 100644 --- a/cyperf/models/dh_p1_group.py +++ b/cyperf/models/dh_p1_group.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/diagnostic_component.py b/cyperf/models/diagnostic_component.py index 5630071..508ff89 100644 --- a/cyperf/models/diagnostic_component.py +++ b/cyperf/models/diagnostic_component.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/diagnostic_component_context.py b/cyperf/models/diagnostic_component_context.py index 0079a66..db38707 100644 --- a/cyperf/models/diagnostic_component_context.py +++ b/cyperf/models/diagnostic_component_context.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/diagnostic_options.py b/cyperf/models/diagnostic_options.py index 739aa53..50d68ab 100644 --- a/cyperf/models/diagnostic_options.py +++ b/cyperf/models/diagnostic_options.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/disk_usage.py b/cyperf/models/disk_usage.py index 10b4637..87652d6 100644 --- a/cyperf/models/disk_usage.py +++ b/cyperf/models/disk_usage.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dismiss_operation.py b/cyperf/models/dismiss_operation.py index ccfeb99..7b53847 100644 --- a/cyperf/models/dismiss_operation.py +++ b/cyperf/models/dismiss_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dns_resolver.py b/cyperf/models/dns_resolver.py index c6969f9..56efa09 100644 --- a/cyperf/models/dns_resolver.py +++ b/cyperf/models/dns_resolver.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dns_server.py b/cyperf/models/dns_server.py index dfb5eaf..d130fba 100644 --- a/cyperf/models/dns_server.py +++ b/cyperf/models/dns_server.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dtls_settings.py b/cyperf/models/dtls_settings.py index 4ea3888..4ce0859 100644 --- a/cyperf/models/dtls_settings.py +++ b/cyperf/models/dtls_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dut_network.py b/cyperf/models/dut_network.py index 3e5ff3f..62b72d9 100644 --- a/cyperf/models/dut_network.py +++ b/cyperf/models/dut_network.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/dut_range.py b/cyperf/models/dut_range.py index fa81786..cde08e5 100644 --- a/cyperf/models/dut_range.py +++ b/cyperf/models/dut_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/edit_action_input.py b/cyperf/models/edit_action_input.py index 660ad15..8f413ba 100644 --- a/cyperf/models/edit_action_input.py +++ b/cyperf/models/edit_action_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/edit_app_operation.py b/cyperf/models/edit_app_operation.py index 33e5063..06de76a 100644 --- a/cyperf/models/edit_app_operation.py +++ b/cyperf/models/edit_app_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/effective_ports.py b/cyperf/models/effective_ports.py index 3659bee..6127123 100644 --- a/cyperf/models/effective_ports.py +++ b/cyperf/models/effective_ports.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/emulated_router.py b/cyperf/models/emulated_router.py index 4d93cec..66c1df2 100644 --- a/cyperf/models/emulated_router.py +++ b/cyperf/models/emulated_router.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/emulated_router_range.py b/cyperf/models/emulated_router_range.py index 1fe348d..327b5cf 100644 --- a/cyperf/models/emulated_router_range.py +++ b/cyperf/models/emulated_router_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/emulated_subnet_config.py b/cyperf/models/emulated_subnet_config.py index cb47de6..e517128 100644 --- a/cyperf/models/emulated_subnet_config.py +++ b/cyperf/models/emulated_subnet_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/enc_p1_algorithm.py b/cyperf/models/enc_p1_algorithm.py index 9517bb7..fbd07a0 100644 --- a/cyperf/models/enc_p1_algorithm.py +++ b/cyperf/models/enc_p1_algorithm.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/enc_p2_algorithm.py b/cyperf/models/enc_p2_algorithm.py index 31674bd..668b7b2 100644 --- a/cyperf/models/enc_p2_algorithm.py +++ b/cyperf/models/enc_p2_algorithm.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/endpoint.py b/cyperf/models/endpoint.py index f067242..20db042 100644 --- a/cyperf/models/endpoint.py +++ b/cyperf/models/endpoint.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/entitlement_code_info.py b/cyperf/models/entitlement_code_info.py index a56490d..86755cc 100644 --- a/cyperf/models/entitlement_code_info.py +++ b/cyperf/models/entitlement_code_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/entitlement_code_request.py b/cyperf/models/entitlement_code_request.py index 0c98cba..4db354c 100644 --- a/cyperf/models/entitlement_code_request.py +++ b/cyperf/models/entitlement_code_request.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/enum.py b/cyperf/models/enum.py index b5435d5..780b1bc 100644 --- a/cyperf/models/enum.py +++ b/cyperf/models/enum.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/error_description.py b/cyperf/models/error_description.py index 9cb79f2..567f892 100644 --- a/cyperf/models/error_description.py +++ b/cyperf/models/error_description.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/error_response.py b/cyperf/models/error_response.py index f18fe1b..b2ca93f 100644 --- a/cyperf/models/error_response.py +++ b/cyperf/models/error_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/esp_over_udp_settings.py b/cyperf/models/esp_over_udp_settings.py index 11ba156..45fb8be 100644 --- a/cyperf/models/esp_over_udp_settings.py +++ b/cyperf/models/esp_over_udp_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/eth_range.py b/cyperf/models/eth_range.py index 8939eb3..8f9b3ca 100644 --- a/cyperf/models/eth_range.py +++ b/cyperf/models/eth_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/eula_details.py b/cyperf/models/eula_details.py index 6f3f952..5a26c2e 100644 --- a/cyperf/models/eula_details.py +++ b/cyperf/models/eula_details.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/eula_summary.py b/cyperf/models/eula_summary.py index 4342389..b0f801c 100644 --- a/cyperf/models/eula_summary.py +++ b/cyperf/models/eula_summary.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/exchange.py b/cyperf/models/exchange.py index c6914fd..0101e44 100644 --- a/cyperf/models/exchange.py +++ b/cyperf/models/exchange.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/exchange_order.py b/cyperf/models/exchange_order.py index 6ee8c5e..6393d37 100644 --- a/cyperf/models/exchange_order.py +++ b/cyperf/models/exchange_order.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/exchange_payload.py b/cyperf/models/exchange_payload.py index 6d98999..eaab1c6 100644 --- a/cyperf/models/exchange_payload.py +++ b/cyperf/models/exchange_payload.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/expected_disk_space.py b/cyperf/models/expected_disk_space.py index 10fe944..f33ff82 100644 --- a/cyperf/models/expected_disk_space.py +++ b/cyperf/models/expected_disk_space.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/expected_disk_space_message.py b/cyperf/models/expected_disk_space_message.py index c68c435..2f8e6f0 100644 --- a/cyperf/models/expected_disk_space_message.py +++ b/cyperf/models/expected_disk_space_message.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/expected_disk_space_pretty_size.py b/cyperf/models/expected_disk_space_pretty_size.py index f616efb..71b2466 100644 --- a/cyperf/models/expected_disk_space_pretty_size.py +++ b/cyperf/models/expected_disk_space_pretty_size.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/expected_disk_space_size.py b/cyperf/models/expected_disk_space_size.py index 4cbadb4..79d6035 100644 --- a/cyperf/models/expected_disk_space_size.py +++ b/cyperf/models/expected_disk_space_size.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/export_all_operation.py b/cyperf/models/export_all_operation.py index 369929b..8176036 100644 --- a/cyperf/models/export_all_operation.py +++ b/cyperf/models/export_all_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/export_apps_operation_input.py b/cyperf/models/export_apps_operation_input.py index fd49745..ac0ee53 100644 --- a/cyperf/models/export_apps_operation_input.py +++ b/cyperf/models/export_apps_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/export_files_operation_input.py b/cyperf/models/export_files_operation_input.py index 31aeba9..d0a2977 100644 --- a/cyperf/models/export_files_operation_input.py +++ b/cyperf/models/export_files_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/export_files_request.py b/cyperf/models/export_files_request.py index 03dacf9..32f1d41 100644 --- a/cyperf/models/export_files_request.py +++ b/cyperf/models/export_files_request.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/export_package_operation.py b/cyperf/models/export_package_operation.py index c3f2bd9..dd47de7 100644 --- a/cyperf/models/export_package_operation.py +++ b/cyperf/models/export_package_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/external_resource_info.py b/cyperf/models/external_resource_info.py index 3fdb497..7eddfcd 100644 --- a/cyperf/models/external_resource_info.py +++ b/cyperf/models/external_resource_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/f5_encapsulation.py b/cyperf/models/f5_encapsulation.py index ed73979..533079f 100644 --- a/cyperf/models/f5_encapsulation.py +++ b/cyperf/models/f5_encapsulation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/f5_settings.py b/cyperf/models/f5_settings.py index d437ade..2a72e41 100644 --- a/cyperf/models/f5_settings.py +++ b/cyperf/models/f5_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/feature.py b/cyperf/models/feature.py index 5698b78..c190523 100644 --- a/cyperf/models/feature.py +++ b/cyperf/models/feature.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/feature_reservation.py b/cyperf/models/feature_reservation.py index 916ae58..ea123de 100644 --- a/cyperf/models/feature_reservation.py +++ b/cyperf/models/feature_reservation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/feature_reservation_reserve.py b/cyperf/models/feature_reservation_reserve.py index 4c93cec..bf3b057 100644 --- a/cyperf/models/feature_reservation_reserve.py +++ b/cyperf/models/feature_reservation_reserve.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/file_metadata.py b/cyperf/models/file_metadata.py index d68e1bd..8a02b18 100644 --- a/cyperf/models/file_metadata.py +++ b/cyperf/models/file_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/file_value.py b/cyperf/models/file_value.py index 8ce2752..1a92c96 100644 --- a/cyperf/models/file_value.py +++ b/cyperf/models/file_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/filter.py b/cyperf/models/filter.py index 8a40b69..c5c8b34 100644 --- a/cyperf/models/filter.py +++ b/cyperf/models/filter.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/filtered_stat.py b/cyperf/models/filtered_stat.py index dfacd06..0856fc3 100644 --- a/cyperf/models/filtered_stat.py +++ b/cyperf/models/filtered_stat.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/find_param_matches_operation.py b/cyperf/models/find_param_matches_operation.py index 92eee16..9fc2e4a 100644 --- a/cyperf/models/find_param_matches_operation.py +++ b/cyperf/models/find_param_matches_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/formatted_description.py b/cyperf/models/formatted_description.py index d6a7531..f9dab7d 100644 --- a/cyperf/models/formatted_description.py +++ b/cyperf/models/formatted_description.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/fortinet_encapsulation.py b/cyperf/models/fortinet_encapsulation.py index 860b9c5..a8ec577 100644 --- a/cyperf/models/fortinet_encapsulation.py +++ b/cyperf/models/fortinet_encapsulation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/fortinet_settings.py b/cyperf/models/fortinet_settings.py index b5a6676..816ede3 100644 --- a/cyperf/models/fortinet_settings.py +++ b/cyperf/models/fortinet_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/front_panel.py b/cyperf/models/front_panel.py index 67c2c9e..87943b4 100644 --- a/cyperf/models/front_panel.py +++ b/cyperf/models/front_panel.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/front_panel_ports_by_controller.py b/cyperf/models/front_panel_ports_by_controller.py index ec9f631..5ddb56e 100644 --- a/cyperf/models/front_panel_ports_by_controller.py +++ b/cyperf/models/front_panel_ports_by_controller.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/fulfillment_request.py b/cyperf/models/fulfillment_request.py index 572bbe3..ea4a210 100644 --- a/cyperf/models/fulfillment_request.py +++ b/cyperf/models/fulfillment_request.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/generate_all_operation.py b/cyperf/models/generate_all_operation.py index e358dfa..12c210f 100644 --- a/cyperf/models/generate_all_operation.py +++ b/cyperf/models/generate_all_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/generate_csv_reports_operation.py b/cyperf/models/generate_csv_reports_operation.py index 0b3a613..f11a283 100644 --- a/cyperf/models/generate_csv_reports_operation.py +++ b/cyperf/models/generate_csv_reports_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/generate_pdf_report_operation.py b/cyperf/models/generate_pdf_report_operation.py index 24a453a..7cf9d5b 100644 --- a/cyperf/models/generate_pdf_report_operation.py +++ b/cyperf/models/generate_pdf_report_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/generic_file.py b/cyperf/models/generic_file.py index dec088b..db4a10d 100644 --- a/cyperf/models/generic_file.py +++ b/cyperf/models/generic_file.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_agents200_response.py b/cyperf/models/get_agents200_response.py index 9f2e109..16535f2 100644 --- a/cyperf/models/get_agents200_response.py +++ b/cyperf/models/get_agents200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_agents200_response_one_of.py b/cyperf/models/get_agents200_response_one_of.py index ac0fbb5..5be31a2 100644 --- a/cyperf/models/get_agents200_response_one_of.py +++ b/cyperf/models/get_agents200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_agents_tags200_response.py b/cyperf/models/get_agents_tags200_response.py index b75c755..49d4244 100644 --- a/cyperf/models/get_agents_tags200_response.py +++ b/cyperf/models/get_agents_tags200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_agents_tags200_response_one_of.py b/cyperf/models/get_agents_tags200_response_one_of.py index 52df7eb..a43111b 100644 --- a/cyperf/models/get_agents_tags200_response_one_of.py +++ b/cyperf/models/get_agents_tags200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_async_operation_result200_response.py b/cyperf/models/get_async_operation_result200_response.py index d4473b8..a524cd7 100644 --- a/cyperf/models/get_async_operation_result200_response.py +++ b/cyperf/models/get_async_operation_result200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_brokers200_response.py b/cyperf/models/get_brokers200_response.py index af1490a..0a8e4f2 100644 --- a/cyperf/models/get_brokers200_response.py +++ b/cyperf/models/get_brokers200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_brokers200_response_one_of.py b/cyperf/models/get_brokers200_response_one_of.py index 109a749..c414c0a 100644 --- a/cyperf/models/get_brokers200_response_one_of.py +++ b/cyperf/models/get_brokers200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_categories_operation.py b/cyperf/models/get_categories_operation.py index 14a6b40..af5e9b2 100644 --- a/cyperf/models/get_categories_operation.py +++ b/cyperf/models/get_categories_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_config_categorie_subcategories200_response.py b/cyperf/models/get_config_categorie_subcategories200_response.py index 09ccfda..ae4bc67 100644 --- a/cyperf/models/get_config_categorie_subcategories200_response.py +++ b/cyperf/models/get_config_categorie_subcategories200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_config_categorie_subcategories200_response_one_of.py b/cyperf/models/get_config_categorie_subcategories200_response_one_of.py index 4538f05..a974ac3 100644 --- a/cyperf/models/get_config_categorie_subcategories200_response_one_of.py +++ b/cyperf/models/get_config_categorie_subcategories200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_config_categories200_response.py b/cyperf/models/get_config_categories200_response.py index 44e9a1b..3e084ac 100644 --- a/cyperf/models/get_config_categories200_response.py +++ b/cyperf/models/get_config_categories200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_config_categories200_response_one_of.py b/cyperf/models/get_config_categories200_response_one_of.py index 9cc0398..85a547b 100644 --- a/cyperf/models/get_config_categories200_response_one_of.py +++ b/cyperf/models/get_config_categories200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_configs200_response.py b/cyperf/models/get_configs200_response.py index 45826c3..279e726 100644 --- a/cyperf/models/get_configs200_response.py +++ b/cyperf/models/get_configs200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_configs200_response_one_of.py b/cyperf/models/get_configs200_response_one_of.py index 9732c55..6912994 100644 --- a/cyperf/models/get_configs200_response_one_of.py +++ b/cyperf/models/get_configs200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_controllers200_response.py b/cyperf/models/get_controllers200_response.py index 2e68d81..4e8495b 100644 --- a/cyperf/models/get_controllers200_response.py +++ b/cyperf/models/get_controllers200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_controllers200_response_one_of.py b/cyperf/models/get_controllers200_response_one_of.py index 07aae2d..068ae93 100644 --- a/cyperf/models/get_controllers200_response_one_of.py +++ b/cyperf/models/get_controllers200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_disk_usage_consumers200_response.py b/cyperf/models/get_disk_usage_consumers200_response.py index 2a8ee57..b05a761 100644 --- a/cyperf/models/get_disk_usage_consumers200_response.py +++ b/cyperf/models/get_disk_usage_consumers200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_disk_usage_consumers200_response_one_of.py b/cyperf/models/get_disk_usage_consumers200_response_one_of.py index b102098..8330331 100644 --- a/cyperf/models/get_disk_usage_consumers200_response_one_of.py +++ b/cyperf/models/get_disk_usage_consumers200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_license_async_operation_result200_response.py b/cyperf/models/get_license_async_operation_result200_response.py index 1dc2334..06bfa6c 100644 --- a/cyperf/models/get_license_async_operation_result200_response.py +++ b/cyperf/models/get_license_async_operation_result200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_license_servers200_response.py b/cyperf/models/get_license_servers200_response.py index d1d2606..64e1abb 100644 --- a/cyperf/models/get_license_servers200_response.py +++ b/cyperf/models/get_license_servers200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_license_servers200_response_one_of.py b/cyperf/models/get_license_servers200_response_one_of.py index 75dfe59..6e6ad75 100644 --- a/cyperf/models/get_license_servers200_response_one_of.py +++ b/cyperf/models/get_license_servers200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_notifications200_response.py b/cyperf/models/get_notifications200_response.py index 847fdac..3aae1e8 100644 --- a/cyperf/models/get_notifications200_response.py +++ b/cyperf/models/get_notifications200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_notifications200_response_one_of.py b/cyperf/models/get_notifications200_response_one_of.py index 6e61e3e..b91918c 100644 --- a/cyperf/models/get_notifications200_response_one_of.py +++ b/cyperf/models/get_notifications200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_application_types200_response.py b/cyperf/models/get_resources_application_types200_response.py index 92d9d1a..3f078d8 100644 --- a/cyperf/models/get_resources_application_types200_response.py +++ b/cyperf/models/get_resources_application_types200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_application_types200_response_one_of.py b/cyperf/models/get_resources_application_types200_response_one_of.py index a4778c2..b3bc263 100644 --- a/cyperf/models/get_resources_application_types200_response_one_of.py +++ b/cyperf/models/get_resources_application_types200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_apps200_response.py b/cyperf/models/get_resources_apps200_response.py index 0b9557c..4060018 100644 --- a/cyperf/models/get_resources_apps200_response.py +++ b/cyperf/models/get_resources_apps200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_apps200_response_one_of.py b/cyperf/models/get_resources_apps200_response_one_of.py index e36deea..f72c7c0 100644 --- a/cyperf/models/get_resources_apps200_response_one_of.py +++ b/cyperf/models/get_resources_apps200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_attacks200_response.py b/cyperf/models/get_resources_attacks200_response.py index 4227e3d..6cc4c19 100644 --- a/cyperf/models/get_resources_attacks200_response.py +++ b/cyperf/models/get_resources_attacks200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_attacks200_response_one_of.py b/cyperf/models/get_resources_attacks200_response_one_of.py index 520f321..40e1477 100644 --- a/cyperf/models/get_resources_attacks200_response_one_of.py +++ b/cyperf/models/get_resources_attacks200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_auth_profiles200_response.py b/cyperf/models/get_resources_auth_profiles200_response.py index e14d010..ffa4b9d 100644 --- a/cyperf/models/get_resources_auth_profiles200_response.py +++ b/cyperf/models/get_resources_auth_profiles200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_auth_profiles200_response_one_of.py b/cyperf/models/get_resources_auth_profiles200_response_one_of.py index a9d5db7..d5affe6 100644 --- a/cyperf/models/get_resources_auth_profiles200_response_one_of.py +++ b/cyperf/models/get_resources_auth_profiles200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_certificates200_response.py b/cyperf/models/get_resources_certificates200_response.py index 3847182..95293d1 100644 --- a/cyperf/models/get_resources_certificates200_response.py +++ b/cyperf/models/get_resources_certificates200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_certificates200_response_one_of.py b/cyperf/models/get_resources_certificates200_response_one_of.py index e89b61a..ed39350 100644 --- a/cyperf/models/get_resources_certificates200_response_one_of.py +++ b/cyperf/models/get_resources_certificates200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_custom_import_operations200_response.py b/cyperf/models/get_resources_custom_import_operations200_response.py index 2cc4b11..fcce716 100644 --- a/cyperf/models/get_resources_custom_import_operations200_response.py +++ b/cyperf/models/get_resources_custom_import_operations200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_custom_import_operations200_response_one_of.py b/cyperf/models/get_resources_custom_import_operations200_response_one_of.py index 5c4ad31..56e9e45 100644 --- a/cyperf/models/get_resources_custom_import_operations200_response_one_of.py +++ b/cyperf/models/get_resources_custom_import_operations200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_http_profiles200_response.py b/cyperf/models/get_resources_http_profiles200_response.py index a5ca4c2..6a4c2a3 100644 --- a/cyperf/models/get_resources_http_profiles200_response.py +++ b/cyperf/models/get_resources_http_profiles200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_http_profiles200_response_one_of.py b/cyperf/models/get_resources_http_profiles200_response_one_of.py index 85dda5f..7a92a32 100644 --- a/cyperf/models/get_resources_http_profiles200_response_one_of.py +++ b/cyperf/models/get_resources_http_profiles200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_llm_api_profiles200_response.py b/cyperf/models/get_resources_llm_api_profiles200_response.py index eb1e813..abbfa48 100644 --- a/cyperf/models/get_resources_llm_api_profiles200_response.py +++ b/cyperf/models/get_resources_llm_api_profiles200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py b/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py index d295f3a..ec3b250 100644 --- a/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py +++ b/cyperf/models/get_resources_llm_api_profiles200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_result_files200_response.py b/cyperf/models/get_result_files200_response.py index 8107fb7..a12dcaa 100644 --- a/cyperf/models/get_result_files200_response.py +++ b/cyperf/models/get_result_files200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_result_files200_response_one_of.py b/cyperf/models/get_result_files200_response_one_of.py index 4c8f718..aea7e64 100644 --- a/cyperf/models/get_result_files200_response_one_of.py +++ b/cyperf/models/get_result_files200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_result_stats200_response.py b/cyperf/models/get_result_stats200_response.py index e13e44f..b02a1e5 100644 --- a/cyperf/models/get_result_stats200_response.py +++ b/cyperf/models/get_result_stats200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_result_stats200_response_one_of.py b/cyperf/models/get_result_stats200_response_one_of.py index fadc58e..069cdec 100644 --- a/cyperf/models/get_result_stats200_response_one_of.py +++ b/cyperf/models/get_result_stats200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_results200_response.py b/cyperf/models/get_results200_response.py index f30f6a4..1057524 100644 --- a/cyperf/models/get_results200_response.py +++ b/cyperf/models/get_results200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_results200_response_one_of.py b/cyperf/models/get_results200_response_one_of.py index 660a86f..e583090 100644 --- a/cyperf/models/get_results200_response_one_of.py +++ b/cyperf/models/get_results200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_results_tags200_response.py b/cyperf/models/get_results_tags200_response.py index d07c8f6..8a41145 100644 --- a/cyperf/models/get_results_tags200_response.py +++ b/cyperf/models/get_results_tags200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_results_tags200_response_one_of.py b/cyperf/models/get_results_tags200_response_one_of.py index 6770a33..3f0c74e 100644 --- a/cyperf/models/get_results_tags200_response_one_of.py +++ b/cyperf/models/get_results_tags200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_scenarios_operation.py b/cyperf/models/get_scenarios_operation.py index b849232..38cff20 100644 --- a/cyperf/models/get_scenarios_operation.py +++ b/cyperf/models/get_scenarios_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_session_meta200_response.py b/cyperf/models/get_session_meta200_response.py index dcdb316..3f6765d 100644 --- a/cyperf/models/get_session_meta200_response.py +++ b/cyperf/models/get_session_meta200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_session_meta200_response_one_of.py b/cyperf/models/get_session_meta200_response_one_of.py index c0f3aff..ec4d798 100644 --- a/cyperf/models/get_session_meta200_response_one_of.py +++ b/cyperf/models/get_session_meta200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_sessions200_response.py b/cyperf/models/get_sessions200_response.py index 092e45f..0523e12 100644 --- a/cyperf/models/get_sessions200_response.py +++ b/cyperf/models/get_sessions200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_sessions200_response_one_of.py b/cyperf/models/get_sessions200_response_one_of.py index bb10f2e..61cdc59 100644 --- a/cyperf/models/get_sessions200_response_one_of.py +++ b/cyperf/models/get_sessions200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_stats_plugins200_response.py b/cyperf/models/get_stats_plugins200_response.py index a8058b3..dbacd57 100644 --- a/cyperf/models/get_stats_plugins200_response.py +++ b/cyperf/models/get_stats_plugins200_response.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_stats_plugins200_response_one_of.py b/cyperf/models/get_stats_plugins200_response_one_of.py index 657bce2..7ec49b7 100644 --- a/cyperf/models/get_stats_plugins200_response_one_of.py +++ b/cyperf/models/get_stats_plugins200_response_one_of.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/get_strikes_operation.py b/cyperf/models/get_strikes_operation.py index e390792..7323750 100644 --- a/cyperf/models/get_strikes_operation.py +++ b/cyperf/models/get_strikes_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/group_tls13.py b/cyperf/models/group_tls13.py index b248820..9f6b7ec 100644 --- a/cyperf/models/group_tls13.py +++ b/cyperf/models/group_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/hash_p1_algorithm.py b/cyperf/models/hash_p1_algorithm.py index 2231026..dae3e40 100644 --- a/cyperf/models/hash_p1_algorithm.py +++ b/cyperf/models/hash_p1_algorithm.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/hash_p2_algorithm.py b/cyperf/models/hash_p2_algorithm.py index 202a6ac..3b67114 100644 --- a/cyperf/models/hash_p2_algorithm.py +++ b/cyperf/models/hash_p2_algorithm.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/health_check_config.py b/cyperf/models/health_check_config.py index 7d4cfd9..c427412 100644 --- a/cyperf/models/health_check_config.py +++ b/cyperf/models/health_check_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/health_issue.py b/cyperf/models/health_issue.py index 2f11b87..b7a590f 100644 --- a/cyperf/models/health_issue.py +++ b/cyperf/models/health_issue.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/host_id.py b/cyperf/models/host_id.py index 0cecfab..07c4421 100644 --- a/cyperf/models/host_id.py +++ b/cyperf/models/host_id.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/http_profile.py b/cyperf/models/http_profile.py index 5497708..51aa898 100644 --- a/cyperf/models/http_profile.py +++ b/cyperf/models/http_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/http_req_meta.py b/cyperf/models/http_req_meta.py index 4a3e5f6..25adbd0 100644 --- a/cyperf/models/http_req_meta.py +++ b/cyperf/models/http_req_meta.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/http_res_meta.py b/cyperf/models/http_res_meta.py index 8f5fa3f..8cc46f8 100644 --- a/cyperf/models/http_res_meta.py +++ b/cyperf/models/http_res_meta.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/http_version.py b/cyperf/models/http_version.py index 86e1c21..90e153e 100644 --- a/cyperf/models/http_version.py +++ b/cyperf/models/http_version.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/id_p_signature_algo.py b/cyperf/models/id_p_signature_algo.py index befb973..8a33028 100644 --- a/cyperf/models/id_p_signature_algo.py +++ b/cyperf/models/id_p_signature_algo.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/identification_config.py b/cyperf/models/identification_config.py index 4269215..fd37ed5 100644 --- a/cyperf/models/identification_config.py +++ b/cyperf/models/identification_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/import_all_operation.py b/cyperf/models/import_all_operation.py index 489b76b..18ba6ee 100644 --- a/cyperf/models/import_all_operation.py +++ b/cyperf/models/import_all_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/import_offline_license_result.py b/cyperf/models/import_offline_license_result.py index 3939594..44aab95 100644 --- a/cyperf/models/import_offline_license_result.py +++ b/cyperf/models/import_offline_license_result.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ingest_operation.py b/cyperf/models/ingest_operation.py index 34468b9..68c2a32 100644 --- a/cyperf/models/ingest_operation.py +++ b/cyperf/models/ingest_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/inner_ip_range.py b/cyperf/models/inner_ip_range.py index ad7a6ec..93905f3 100644 --- a/cyperf/models/inner_ip_range.py +++ b/cyperf/models/inner_ip_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/inner_ip_sec_range.py b/cyperf/models/inner_ip_sec_range.py index c072c58..a2b1216 100644 --- a/cyperf/models/inner_ip_sec_range.py +++ b/cyperf/models/inner_ip_sec_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -45,6 +45,7 @@ class InnerIPSecRange(BaseModel): identification_config: Optional[IdentificationConfig] = Field(default=None, alias="IdentificationConfig") local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") multi_p2_over_p1: StrictBool = Field(alias="MultiP2OverP1") + pqckem_enabled: StrictBool = Field(alias="PQCKEMEnabled") public_peer: Annotated[str, Field(strict=True)] = Field(alias="PublicPeer") public_peer_increment: Annotated[str, Field(strict=True)] = Field(alias="PublicPeerIncrement") remote_access: Optional[RemoteAccess] = Field(default=None, alias="RemoteAccess") @@ -54,7 +55,7 @@ class InnerIPSecRange(BaseModel): tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "LocalSubConfig", "MultiP2OverP1", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "LocalSubConfig", "MultiP2OverP1", "PQCKEMEnabled", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] @field_validator('ip_sec_range_name') def ip_sec_range_name_validate_regular_expression(cls, value): @@ -175,6 +176,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "IdentificationConfig": IdentificationConfig.from_dict(obj["IdentificationConfig"]) if obj.get("IdentificationConfig") is not None else None, "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, "MultiP2OverP1": obj.get("MultiP2OverP1"), + "PQCKEMEnabled": obj.get("PQCKEMEnabled"), "PublicPeer": obj.get("PublicPeer"), "PublicPeerIncrement": obj.get("PublicPeerIncrement"), "RemoteAccess": RemoteAccess.from_dict(obj["RemoteAccess"]) if obj.get("RemoteAccess") is not None else None, diff --git a/cyperf/models/interface.py b/cyperf/models/interface.py index 5a354b6..e47779d 100644 --- a/cyperf/models/interface.py +++ b/cyperf/models/interface.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_mask.py b/cyperf/models/ip_mask.py index 4ec3078..b49e5c1 100644 --- a/cyperf/models/ip_mask.py +++ b/cyperf/models/ip_mask.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_network.py b/cyperf/models/ip_network.py index 60dd149..212b89c 100644 --- a/cyperf/models/ip_network.py +++ b/cyperf/models/ip_network.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_preference.py b/cyperf/models/ip_preference.py index 1104b13..a5f64cf 100644 --- a/cyperf/models/ip_preference.py +++ b/cyperf/models/ip_preference.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_range.py b/cyperf/models/ip_range.py index d29d5f0..c8b0d23 100644 --- a/cyperf/models/ip_range.py +++ b/cyperf/models/ip_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_sec_range.py b/cyperf/models/ip_sec_range.py index 77fd056..9c211a9 100644 --- a/cyperf/models/ip_sec_range.py +++ b/cyperf/models/ip_sec_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -49,6 +49,7 @@ class IPSecRange(BaseModel): inner_ip_sec_range: Optional[InnerIPSecRange] = Field(default=None, alias="InnerIPSecRange") local_sub_config: Optional[LocalSubnetConfig] = Field(default=None, alias="LocalSubConfig") multi_p2_over_p1: Optional[StrictBool] = Field(default=None, alias="MultiP2OverP1") + pqckem_enabled: Optional[StrictBool] = Field(default=None, alias="PQCKEMEnabled") protected_sub_config: Optional[ProtectedSubnetConfig] = Field(default=None, description="Deeprecated. Use RemoteSubConfig instead.", alias="ProtectedSubConfig") public_peer: Annotated[str, Field(strict=True)] = Field(alias="PublicPeer") public_peer_increment: Annotated[str, Field(strict=True)] = Field(alias="PublicPeerIncrement") @@ -59,7 +60,7 @@ class IPSecRange(BaseModel): tunnel_count_per_outer_ip: StrictInt = Field(alias="TunnelCountPerOuterIP") id: StrictStr links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "InnerIPSec", "InnerIPSecRange", "LocalSubConfig", "MultiP2OverP1", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] + __properties: ClassVar[List[str]] = ["AuthSettings", "IKEPhase1Config", "IKEPhase2Config", "IPSecRangeName", "IdentificationConfig", "InnerIPSec", "InnerIPSecRange", "LocalSubConfig", "MultiP2OverP1", "PQCKEMEnabled", "ProtectedSubConfig", "PublicPeer", "PublicPeerIncrement", "RemoteAccess", "RemoteSubConfig", "TestScenario", "Timers", "TunnelCountPerOuterIP", "id", "links"] @field_validator('ip_sec_range_name') def ip_sec_range_name_validate_regular_expression(cls, value): @@ -188,6 +189,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "InnerIPSecRange": InnerIPSecRange.from_dict(obj["InnerIPSecRange"]) if obj.get("InnerIPSecRange") is not None else None, "LocalSubConfig": LocalSubnetConfig.from_dict(obj["LocalSubConfig"]) if obj.get("LocalSubConfig") is not None else None, "MultiP2OverP1": obj.get("MultiP2OverP1"), + "PQCKEMEnabled": obj.get("PQCKEMEnabled"), "ProtectedSubConfig": ProtectedSubnetConfig.from_dict(obj["ProtectedSubConfig"]) if obj.get("ProtectedSubConfig") is not None else None, "PublicPeer": obj.get("PublicPeer"), "PublicPeerIncrement": obj.get("PublicPeerIncrement"), diff --git a/cyperf/models/ip_sec_stack.py b/cyperf/models/ip_sec_stack.py index f9a7014..2b4d194 100644 --- a/cyperf/models/ip_sec_stack.py +++ b/cyperf/models/ip_sec_stack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ip_ver.py b/cyperf/models/ip_ver.py index 3cdb157..b4bbe66 100644 --- a/cyperf/models/ip_ver.py +++ b/cyperf/models/ip_ver.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/keyword.py b/cyperf/models/keyword.py index e4999eb..7c37df2 100644 --- a/cyperf/models/keyword.py +++ b/cyperf/models/keyword.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/layout_config.py b/cyperf/models/layout_config.py index 9820871..1a1cb27 100644 --- a/cyperf/models/layout_config.py +++ b/cyperf/models/layout_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/license.py b/cyperf/models/license.py index 89d97cd..ac917f7 100644 --- a/cyperf/models/license.py +++ b/cyperf/models/license.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/license_receipt.py b/cyperf/models/license_receipt.py index 578088c..d08bb1a 100644 --- a/cyperf/models/license_receipt.py +++ b/cyperf/models/license_receipt.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/license_server_metadata.py b/cyperf/models/license_server_metadata.py index 9f78ef9..ce3108d 100644 --- a/cyperf/models/license_server_metadata.py +++ b/cyperf/models/license_server_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/link.py b/cyperf/models/link.py index a49376f..a876ede 100644 --- a/cyperf/models/link.py +++ b/cyperf/models/link.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/llmapi_profile.py b/cyperf/models/llmapi_profile.py index 3b5fe79..98abdd7 100644 --- a/cyperf/models/llmapi_profile.py +++ b/cyperf/models/llmapi_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/load_config_operation.py b/cyperf/models/load_config_operation.py index b98e5f9..3413a39 100644 --- a/cyperf/models/load_config_operation.py +++ b/cyperf/models/load_config_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/local_subnet_config.py b/cyperf/models/local_subnet_config.py index 303751c..22910a9 100644 --- a/cyperf/models/local_subnet_config.py +++ b/cyperf/models/local_subnet_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/log_config.py b/cyperf/models/log_config.py index 3a96bf6..5385eb2 100644 --- a/cyperf/models/log_config.py +++ b/cyperf/models/log_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/log_level.py b/cyperf/models/log_level.py index 3678313..00cd916 100644 --- a/cyperf/models/log_level.py +++ b/cyperf/models/log_level.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/mac_dtls_stack.py b/cyperf/models/mac_dtls_stack.py index df6a7fa..7b5ff4d 100644 --- a/cyperf/models/mac_dtls_stack.py +++ b/cyperf/models/mac_dtls_stack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/mapping_type.py b/cyperf/models/mapping_type.py index 5a000a4..0fc55cb 100644 --- a/cyperf/models/mapping_type.py +++ b/cyperf/models/mapping_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/marked_as_deleted.py b/cyperf/models/marked_as_deleted.py index 4578132..559ea13 100644 --- a/cyperf/models/marked_as_deleted.py +++ b/cyperf/models/marked_as_deleted.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/md2_tlv.py b/cyperf/models/md2_tlv.py index 9b87749..3990ed7 100644 --- a/cyperf/models/md2_tlv.py +++ b/cyperf/models/md2_tlv.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/media_file.py b/cyperf/models/media_file.py index 991c068..4b96519 100644 --- a/cyperf/models/media_file.py +++ b/cyperf/models/media_file.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/media_track.py b/cyperf/models/media_track.py index 1173235..979fc38 100644 --- a/cyperf/models/media_track.py +++ b/cyperf/models/media_track.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/metadata.py b/cyperf/models/metadata.py index 137c4e2..2647711 100644 --- a/cyperf/models/metadata.py +++ b/cyperf/models/metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/mos_mode.py b/cyperf/models/mos_mode.py index 368ebdb..558565f 100644 --- a/cyperf/models/mos_mode.py +++ b/cyperf/models/mos_mode.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/name_id_format.py b/cyperf/models/name_id_format.py index 61c071f..385fbe9 100644 --- a/cyperf/models/name_id_format.py +++ b/cyperf/models/name_id_format.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/name_server.py b/cyperf/models/name_server.py index a3c9a58..196f9f1 100644 --- a/cyperf/models/name_server.py +++ b/cyperf/models/name_server.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/network_mapping.py b/cyperf/models/network_mapping.py index 12c8201..7f43853 100644 --- a/cyperf/models/network_mapping.py +++ b/cyperf/models/network_mapping.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/network_meshing.py b/cyperf/models/network_meshing.py index e9ebd0a..19a2ad0 100644 --- a/cyperf/models/network_meshing.py +++ b/cyperf/models/network_meshing.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/network_profile.py b/cyperf/models/network_profile.py index b47054f..3cfb319 100644 --- a/cyperf/models/network_profile.py +++ b/cyperf/models/network_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/network_segment_base.py b/cyperf/models/network_segment_base.py index 5580ce5..0102a18 100644 --- a/cyperf/models/network_segment_base.py +++ b/cyperf/models/network_segment_base.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/nodes_by_controller.py b/cyperf/models/nodes_by_controller.py index 66b39f0..3508f0e 100644 --- a/cyperf/models/nodes_by_controller.py +++ b/cyperf/models/nodes_by_controller.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/nodes_power_cycle_operation.py b/cyperf/models/nodes_power_cycle_operation.py index 5c8903f..ecf18de 100644 --- a/cyperf/models/nodes_power_cycle_operation.py +++ b/cyperf/models/nodes_power_cycle_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/notification.py b/cyperf/models/notification.py index 5ad191c..ff91159 100644 --- a/cyperf/models/notification.py +++ b/cyperf/models/notification.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/notification_counts.py b/cyperf/models/notification_counts.py index d08e265..f2366cd 100644 --- a/cyperf/models/notification_counts.py +++ b/cyperf/models/notification_counts.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ntp_info.py b/cyperf/models/ntp_info.py index e105116..2520e63 100644 --- a/cyperf/models/ntp_info.py +++ b/cyperf/models/ntp_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/objective_type.py b/cyperf/models/objective_type.py index 8d74656..ef9d128 100644 --- a/cyperf/models/objective_type.py +++ b/cyperf/models/objective_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/objective_unit.py b/cyperf/models/objective_unit.py index 8b99d95..1bc71b4 100644 --- a/cyperf/models/objective_unit.py +++ b/cyperf/models/objective_unit.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/objective_value_entry.py b/cyperf/models/objective_value_entry.py index 7fb847a..24cd3eb 100644 --- a/cyperf/models/objective_value_entry.py +++ b/cyperf/models/objective_value_entry.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/objectives_and_timeline.py b/cyperf/models/objectives_and_timeline.py index f5bd81b..ab6e39b 100644 --- a/cyperf/models/objectives_and_timeline.py +++ b/cyperf/models/objectives_and_timeline.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/open_api_definitions.py b/cyperf/models/open_api_definitions.py index 4f9f5f9..9dd1deb 100644 --- a/cyperf/models/open_api_definitions.py +++ b/cyperf/models/open_api_definitions.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/p1_config.py b/cyperf/models/p1_config.py index 4c88af0..2b21dd2 100644 --- a/cyperf/models/p1_config.py +++ b/cyperf/models/p1_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com @@ -23,6 +23,7 @@ from cyperf.models.dh_p1_group import DhP1Group from cyperf.models.enc_p1_algorithm import EncP1Algorithm from cyperf.models.hash_p1_algorithm import HashP1Algorithm +from cyperf.models.pqc_kem_group import PqcKemGroup from cyperf.models.prf_p1_algorithm import PrfP1Algorithm from typing import Optional, Set, Union from typing_extensions import Self @@ -40,8 +41,9 @@ class P1Config(BaseModel): ppk_enabled: StrictBool = Field(alias="PPKEnabled") ppkid: StrictStr = Field(alias="PPKId") ppk_mandatory: StrictStr = Field(alias="PPKMandatory") + pqckem_round: List[PqcKemGroup] = Field(alias="PQCKEMRound") prf_algorithm: PrfP1Algorithm = Field(alias="PrfAlgorithm") - __properties: ClassVar[List[str]] = ["DHGroup", "EncAlgorithm", "HashAlgorithm", "InitialContact", "Lifetime", "PPKEnabled", "PPKId", "PPKMandatory", "PrfAlgorithm"] + __properties: ClassVar[List[str]] = ["DHGroup", "EncAlgorithm", "HashAlgorithm", "InitialContact", "Lifetime", "PPKEnabled", "PPKId", "PPKMandatory", "PQCKEMRound", "PrfAlgorithm"] @field_validator('ppk_mandatory') def ppk_mandatory_validate_enum(cls, value): @@ -111,6 +113,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "PPKEnabled": obj.get("PPKEnabled"), "PPKId": obj.get("PPKId"), "PPKMandatory": obj.get("PPKMandatory"), + "PQCKEMRound": obj.get("PQCKEMRound"), "PrfAlgorithm": obj.get("PrfAlgorithm") , "links": obj.get("links") diff --git a/cyperf/models/p2_config.py b/cyperf/models/p2_config.py index 8340f0b..6c9b9b2 100644 --- a/cyperf/models/p2_config.py +++ b/cyperf/models/p2_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pair.py b/cyperf/models/pair.py index c15ebc0..7a97c59 100644 --- a/cyperf/models/pair.py +++ b/cyperf/models/pair.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pangp_encapsulation.py b/cyperf/models/pangp_encapsulation.py index 88a533c..31966c9 100644 --- a/cyperf/models/pangp_encapsulation.py +++ b/cyperf/models/pangp_encapsulation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pangp_settings.py b/cyperf/models/pangp_settings.py index 591a3ef..9b52c5f 100644 --- a/cyperf/models/pangp_settings.py +++ b/cyperf/models/pangp_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata.py b/cyperf/models/param_metadata.py index c40caf4..d47b025 100644 --- a/cyperf/models/param_metadata.py +++ b/cyperf/models/param_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info.py b/cyperf/models/param_metadata_type_info.py index 904eb3e..b5a3a8f 100644 --- a/cyperf/models/param_metadata_type_info.py +++ b/cyperf/models/param_metadata_type_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info_array_v2.py b/cyperf/models/param_metadata_type_info_array_v2.py index 91df78c..1eb0450 100644 --- a/cyperf/models/param_metadata_type_info_array_v2.py +++ b/cyperf/models/param_metadata_type_info_array_v2.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info_array_v2_elements_inner.py b/cyperf/models/param_metadata_type_info_array_v2_elements_inner.py index 5192ef2..0090b8e 100644 --- a/cyperf/models/param_metadata_type_info_array_v2_elements_inner.py +++ b/cyperf/models/param_metadata_type_info_array_v2_elements_inner.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info_int.py b/cyperf/models/param_metadata_type_info_int.py index 36141a0..68586f1 100644 --- a/cyperf/models/param_metadata_type_info_int.py +++ b/cyperf/models/param_metadata_type_info_int.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info_media.py b/cyperf/models/param_metadata_type_info_media.py index c318bcd..cad43d6 100644 --- a/cyperf/models/param_metadata_type_info_media.py +++ b/cyperf/models/param_metadata_type_info_media.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_metadata_type_info_string.py b/cyperf/models/param_metadata_type_info_string.py index f0e606a..b0d0682 100644 --- a/cyperf/models/param_metadata_type_info_string.py +++ b/cyperf/models/param_metadata_type_info_string.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_source_type.py b/cyperf/models/param_source_type.py index e05bf8d..1127822 100644 --- a/cyperf/models/param_source_type.py +++ b/cyperf/models/param_source_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/param_type.py b/cyperf/models/param_type.py index 0932def..2a5f4e0 100644 --- a/cyperf/models/param_type.py +++ b/cyperf/models/param_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/parameter.py b/cyperf/models/parameter.py index 2ff1f01..7fd3f88 100644 --- a/cyperf/models/parameter.py +++ b/cyperf/models/parameter.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/parameter_match.py b/cyperf/models/parameter_match.py index 5d419bf..a921047 100644 --- a/cyperf/models/parameter_match.py +++ b/cyperf/models/parameter_match.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/parameter_meta.py b/cyperf/models/parameter_meta.py index 7219a69..fcb91d8 100644 --- a/cyperf/models/parameter_meta.py +++ b/cyperf/models/parameter_meta.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/parameter_metadata.py b/cyperf/models/parameter_metadata.py index 8dabe11..c0992d0 100644 --- a/cyperf/models/parameter_metadata.py +++ b/cyperf/models/parameter_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/params.py b/cyperf/models/params.py index 8c5c131..265f946 100644 --- a/cyperf/models/params.py +++ b/cyperf/models/params.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/params_enum.py b/cyperf/models/params_enum.py index 8f409e5..6ab88fd 100644 --- a/cyperf/models/params_enum.py +++ b/cyperf/models/params_enum.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/payload_meta.py b/cyperf/models/payload_meta.py index 62ad58a..c46b047 100644 --- a/cyperf/models/payload_meta.py +++ b/cyperf/models/payload_meta.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/payload_metadata.py b/cyperf/models/payload_metadata.py index ff6c423..37b6e57 100644 --- a/cyperf/models/payload_metadata.py +++ b/cyperf/models/payload_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pep_dut.py b/cyperf/models/pep_dut.py index d5b69c0..d40fd27 100644 --- a/cyperf/models/pep_dut.py +++ b/cyperf/models/pep_dut.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pfs_p2_group.py b/cyperf/models/pfs_p2_group.py index 5876abc..02714e3 100644 --- a/cyperf/models/pfs_p2_group.py +++ b/cyperf/models/pfs_p2_group.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/playlist_metadata.py b/cyperf/models/playlist_metadata.py index 13effc1..30af428 100644 --- a/cyperf/models/playlist_metadata.py +++ b/cyperf/models/playlist_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/playlist_sequencing_method.py b/cyperf/models/playlist_sequencing_method.py index f19e02b..025a068 100644 --- a/cyperf/models/playlist_sequencing_method.py +++ b/cyperf/models/playlist_sequencing_method.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/plugin.py b/cyperf/models/plugin.py index 8720947..7e6160a 100644 --- a/cyperf/models/plugin.py +++ b/cyperf/models/plugin.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/plugin_stats.py b/cyperf/models/plugin_stats.py index 7cb0ed8..b8e7312 100644 --- a/cyperf/models/plugin_stats.py +++ b/cyperf/models/plugin_stats.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/port.py b/cyperf/models/port.py index 477f923..25bc43a 100644 --- a/cyperf/models/port.py +++ b/cyperf/models/port.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/port_settings.py b/cyperf/models/port_settings.py index 9893c6c..2f9ed6c 100644 --- a/cyperf/models/port_settings.py +++ b/cyperf/models/port_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ports_by_controller.py b/cyperf/models/ports_by_controller.py index f6c398c..2240676 100644 --- a/cyperf/models/ports_by_controller.py +++ b/cyperf/models/ports_by_controller.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ports_by_node.py b/cyperf/models/ports_by_node.py index a67dbb8..7ad6b87 100644 --- a/cyperf/models/ports_by_node.py +++ b/cyperf/models/ports_by_node.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ports_by_panel.py b/cyperf/models/ports_by_panel.py index a5bf3c1..fba09d2 100644 --- a/cyperf/models/ports_by_panel.py +++ b/cyperf/models/ports_by_panel.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/ppk_pair.py b/cyperf/models/ppk_pair.py index 06205df..64091f4 100644 --- a/cyperf/models/ppk_pair.py +++ b/cyperf/models/ppk_pair.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/pqc_kem_group.py b/cyperf/models/pqc_kem_group.py new file mode 100644 index 0000000..0b69d82 --- /dev/null +++ b/cyperf/models/pqc_kem_group.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +from enum import Enum +from typing_extensions import Self + + +class PqcKemGroup(str, Enum): + """ + PqcKemGroup + """ + + """ + allowed enum values + """ + NONE = 'NONE' + MODP_768 = 'MODP 768' + MODP_1024 = 'MODP 1024' + MODP_1536 = 'MODP 1536' + MODP_2048 = 'MODP 2048' + MODP_3072 = 'MODP 3072' + MODP_4096 = 'MODP 4096' + MODP_6144 = 'MODP 6144' + MODP_8192 = 'MODP 8192' + MODP_1024_S160 = 'MODP 1024 S160' + MODP_2048_S224 = 'MODP 2048 S224' + MODP_2048_S256 = 'MODP 2048 S256' + ECP_192 = 'ECP 192' + ECP_224 = 'ECP 224' + ECP_256 = 'ECP 256' + ECP_384 = 'ECP 384' + ECP_521 = 'ECP 521' + ECP_224_BP = 'ECP 224 BP' + ECP_256_BP = 'ECP 256 BP' + ECP_384_BP = 'ECP 384 BP' + ECP_512_BP = 'ECP 512 BP' + MLKEM512 = 'MLKEM512' + MLKEM768 = 'MLKEM768' + MLKEM1024 = 'MLKEM1024' + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Create an instance of PqcKemGroup from a JSON string""" + return cls(json.loads(json_str)) + + diff --git a/cyperf/models/pqc_signature_algorithm_tls13.py b/cyperf/models/pqc_signature_algorithm_tls13.py index 34d6b8a..afb8620 100644 --- a/cyperf/models/pqc_signature_algorithm_tls13.py +++ b/cyperf/models/pqc_signature_algorithm_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/prf_p1_algorithm.py b/cyperf/models/prf_p1_algorithm.py index 98aae30..2bf7685 100644 --- a/cyperf/models/prf_p1_algorithm.py +++ b/cyperf/models/prf_p1_algorithm.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/profile.py b/cyperf/models/profile.py index 814b593..a2e4f9e 100644 --- a/cyperf/models/profile.py +++ b/cyperf/models/profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/protected_subnet_config.py b/cyperf/models/protected_subnet_config.py index d15bc22..6336893 100644 --- a/cyperf/models/protected_subnet_config.py +++ b/cyperf/models/protected_subnet_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/psp_range.py b/cyperf/models/psp_range.py index a9a94f5..6b06776 100644 --- a/cyperf/models/psp_range.py +++ b/cyperf/models/psp_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/psp_stack.py b/cyperf/models/psp_stack.py index 0f80787..ce5a225 100644 --- a/cyperf/models/psp_stack.py +++ b/cyperf/models/psp_stack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/quic_profile.py b/cyperf/models/quic_profile.py index 4aaf820..4e4e1f3 100644 --- a/cyperf/models/quic_profile.py +++ b/cyperf/models/quic_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/quic_version.py b/cyperf/models/quic_version.py index 6ae4dbb..8f1e895 100644 --- a/cyperf/models/quic_version.py +++ b/cyperf/models/quic_version.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reboot_compute_resources_operation.py b/cyperf/models/reboot_compute_resources_operation.py index fdfcd2a..738b5a1 100644 --- a/cyperf/models/reboot_compute_resources_operation.py +++ b/cyperf/models/reboot_compute_resources_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reboot_operation_input.py b/cyperf/models/reboot_operation_input.py index 82a8e65..7db264c 100644 --- a/cyperf/models/reboot_operation_input.py +++ b/cyperf/models/reboot_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reboot_ports_operation.py b/cyperf/models/reboot_ports_operation.py index d6d49a2..a149a50 100644 --- a/cyperf/models/reboot_ports_operation.py +++ b/cyperf/models/reboot_ports_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reference.py b/cyperf/models/reference.py index bb39ae6..16ccee9 100644 --- a/cyperf/models/reference.py +++ b/cyperf/models/reference.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/regex_match.py b/cyperf/models/regex_match.py index 4e01819..891aa97 100644 --- a/cyperf/models/regex_match.py +++ b/cyperf/models/regex_match.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/release_operation_input.py b/cyperf/models/release_operation_input.py index 934b5ad..605a95d 100644 --- a/cyperf/models/release_operation_input.py +++ b/cyperf/models/release_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/remote_access.py b/cyperf/models/remote_access.py index 13de408..8442163 100644 --- a/cyperf/models/remote_access.py +++ b/cyperf/models/remote_access.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/remote_subnet_config.py b/cyperf/models/remote_subnet_config.py index a4b6e66..6ad3651 100644 --- a/cyperf/models/remote_subnet_config.py +++ b/cyperf/models/remote_subnet_config.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/rename_input.py b/cyperf/models/rename_input.py index 639a343..d5dd4d4 100644 --- a/cyperf/models/rename_input.py +++ b/cyperf/models/rename_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reorder_action_input.py b/cyperf/models/reorder_action_input.py index fdae1f1..39c7184 100644 --- a/cyperf/models/reorder_action_input.py +++ b/cyperf/models/reorder_action_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reorder_exchanges_input.py b/cyperf/models/reorder_exchanges_input.py index 70b8c41..259feb2 100644 --- a/cyperf/models/reorder_exchanges_input.py +++ b/cyperf/models/reorder_exchanges_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/replay_capture.py b/cyperf/models/replay_capture.py index 3af9a03..3e91dc3 100644 --- a/cyperf/models/replay_capture.py +++ b/cyperf/models/replay_capture.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/required_file_types.py b/cyperf/models/required_file_types.py index 14be112..d829284 100644 --- a/cyperf/models/required_file_types.py +++ b/cyperf/models/required_file_types.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/reserve_operation_input.py b/cyperf/models/reserve_operation_input.py index 0364b1b..b4a1048 100644 --- a/cyperf/models/reserve_operation_input.py +++ b/cyperf/models/reserve_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/result_file_metadata.py b/cyperf/models/result_file_metadata.py index 1a8ea37..75bebaf 100644 --- a/cyperf/models/result_file_metadata.py +++ b/cyperf/models/result_file_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/result_metadata.py b/cyperf/models/result_metadata.py index 294b5c2..07addaa 100644 --- a/cyperf/models/result_metadata.py +++ b/cyperf/models/result_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/results_group.py b/cyperf/models/results_group.py index a128e00..e40f924 100644 --- a/cyperf/models/results_group.py +++ b/cyperf/models/results_group.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/rtp_encryption_mode.py b/cyperf/models/rtp_encryption_mode.py index 07b395f..5d5e0b4 100644 --- a/cyperf/models/rtp_encryption_mode.py +++ b/cyperf/models/rtp_encryption_mode.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/rtp_profile.py b/cyperf/models/rtp_profile.py index 994ab59..9943355 100644 --- a/cyperf/models/rtp_profile.py +++ b/cyperf/models/rtp_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/rtp_profile_meta.py b/cyperf/models/rtp_profile_meta.py index f476a13..d3f0cf5 100644 --- a/cyperf/models/rtp_profile_meta.py +++ b/cyperf/models/rtp_profile_meta.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/save_config_operation.py b/cyperf/models/save_config_operation.py index 8f94e01..d8161dd 100644 --- a/cyperf/models/save_config_operation.py +++ b/cyperf/models/save_config_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/scenario.py b/cyperf/models/scenario.py index 3ecf696..bc5033e 100644 --- a/cyperf/models/scenario.py +++ b/cyperf/models/scenario.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/secondary_objective.py b/cyperf/models/secondary_objective.py index f6eddc0..f61cab3 100644 --- a/cyperf/models/secondary_objective.py +++ b/cyperf/models/secondary_objective.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/section.py b/cyperf/models/section.py index 3e4fc2c..a905262 100644 --- a/cyperf/models/section.py +++ b/cyperf/models/section.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/segment_type.py b/cyperf/models/segment_type.py index c74ddf6..5f12f0c 100644 --- a/cyperf/models/segment_type.py +++ b/cyperf/models/segment_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/selected_env.py b/cyperf/models/selected_env.py index 5ef9db3..91f6565 100644 --- a/cyperf/models/selected_env.py +++ b/cyperf/models/selected_env.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/sequence_data_types.py b/cyperf/models/sequence_data_types.py index 899a421..a4a7a80 100644 --- a/cyperf/models/sequence_data_types.py +++ b/cyperf/models/sequence_data_types.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/sequence_value.py b/cyperf/models/sequence_value.py index b65f5ee..c54d903 100644 --- a/cyperf/models/sequence_value.py +++ b/cyperf/models/sequence_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/sequence_value_types.py b/cyperf/models/sequence_value_types.py index 9e32def..35d11f7 100644 --- a/cyperf/models/sequence_value_types.py +++ b/cyperf/models/sequence_value_types.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/session.py b/cyperf/models/session.py index 6632afc..f31fadb 100644 --- a/cyperf/models/session.py +++ b/cyperf/models/session.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/session_reuse_method_tls12.py b/cyperf/models/session_reuse_method_tls12.py index 0ad5c51..c6cdebf 100644 --- a/cyperf/models/session_reuse_method_tls12.py +++ b/cyperf/models/session_reuse_method_tls12.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/session_reuse_method_tls13.py b/cyperf/models/session_reuse_method_tls13.py index 350a7c5..4b220f4 100644 --- a/cyperf/models/session_reuse_method_tls13.py +++ b/cyperf/models/session_reuse_method_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_aggregation_mode_operation.py b/cyperf/models/set_aggregation_mode_operation.py index ddf817a..17e262c 100644 --- a/cyperf/models/set_aggregation_mode_operation.py +++ b/cyperf/models/set_aggregation_mode_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_controller_app_operation.py b/cyperf/models/set_controller_app_operation.py index c98904d..650c01a 100644 --- a/cyperf/models/set_controller_app_operation.py +++ b/cyperf/models/set_controller_app_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_dpdk_mode_operation_input.py b/cyperf/models/set_dpdk_mode_operation_input.py index f823c87..26d1617 100644 --- a/cyperf/models/set_dpdk_mode_operation_input.py +++ b/cyperf/models/set_dpdk_mode_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_front_panel_ports_link_state_operation.py b/cyperf/models/set_front_panel_ports_link_state_operation.py index d4a92b9..70649b3 100644 --- a/cyperf/models/set_front_panel_ports_link_state_operation.py +++ b/cyperf/models/set_front_panel_ports_link_state_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_nodes_app_operation.py b/cyperf/models/set_nodes_app_operation.py index 7975d63..2c2022e 100644 --- a/cyperf/models/set_nodes_app_operation.py +++ b/cyperf/models/set_nodes_app_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_ntp_operation_input.py b/cyperf/models/set_ntp_operation_input.py index 093bd3e..a3f9597 100644 --- a/cyperf/models/set_ntp_operation_input.py +++ b/cyperf/models/set_ntp_operation_input.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/set_ports_link_state_operation.py b/cyperf/models/set_ports_link_state_operation.py index 035fe02..369f250 100644 --- a/cyperf/models/set_ports_link_state_operation.py +++ b/cyperf/models/set_ports_link_state_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/simple_sequence_value.py b/cyperf/models/simple_sequence_value.py index 5ca3ae0..4c7e8ba 100644 --- a/cyperf/models/simple_sequence_value.py +++ b/cyperf/models/simple_sequence_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/simulated_id_p.py b/cyperf/models/simulated_id_p.py index 52f7ddf..4fd2dda 100644 --- a/cyperf/models/simulated_id_p.py +++ b/cyperf/models/simulated_id_p.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/single_value.py b/cyperf/models/single_value.py index c8e7345..3694232 100644 --- a/cyperf/models/single_value.py +++ b/cyperf/models/single_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/snapshot.py b/cyperf/models/snapshot.py index 7dfd64c..e53793f 100644 --- a/cyperf/models/snapshot.py +++ b/cyperf/models/snapshot.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/snowflake_exporter.py b/cyperf/models/snowflake_exporter.py index f4b9cd8..8cd21da 100644 --- a/cyperf/models/snowflake_exporter.py +++ b/cyperf/models/snowflake_exporter.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/sort_body_field.py b/cyperf/models/sort_body_field.py index 95918cd..5557c86 100644 --- a/cyperf/models/sort_body_field.py +++ b/cyperf/models/sort_body_field.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/specific_objective.py b/cyperf/models/specific_objective.py index f4fcf17..acc5936 100644 --- a/cyperf/models/specific_objective.py +++ b/cyperf/models/specific_objective.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/start_agents_batch_delete_request_inner.py b/cyperf/models/start_agents_batch_delete_request_inner.py index 08bc785..7b29fe5 100644 --- a/cyperf/models/start_agents_batch_delete_request_inner.py +++ b/cyperf/models/start_agents_batch_delete_request_inner.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/stateless_stream.py b/cyperf/models/stateless_stream.py index c95337b..08ef40f 100644 --- a/cyperf/models/stateless_stream.py +++ b/cyperf/models/stateless_stream.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/static_arp_entry.py b/cyperf/models/static_arp_entry.py index eb05a13..5efbd45 100644 --- a/cyperf/models/static_arp_entry.py +++ b/cyperf/models/static_arp_entry.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/stats_result.py b/cyperf/models/stats_result.py index 28ceddf..dad7c15 100644 --- a/cyperf/models/stats_result.py +++ b/cyperf/models/stats_result.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/steady_segment.py b/cyperf/models/steady_segment.py index eefb510..f4513ad 100644 --- a/cyperf/models/steady_segment.py +++ b/cyperf/models/steady_segment.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/step_segment.py b/cyperf/models/step_segment.py index dc5203b..d3c2939 100644 --- a/cyperf/models/step_segment.py +++ b/cyperf/models/step_segment.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/stream_direction.py b/cyperf/models/stream_direction.py index 7ac22b4..1b88986 100644 --- a/cyperf/models/stream_direction.py +++ b/cyperf/models/stream_direction.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/stream_payload_type.py b/cyperf/models/stream_payload_type.py index a25e924..4f4cab6 100644 --- a/cyperf/models/stream_payload_type.py +++ b/cyperf/models/stream_payload_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/stream_profile.py b/cyperf/models/stream_profile.py index a7d3737..0d9339a 100644 --- a/cyperf/models/stream_profile.py +++ b/cyperf/models/stream_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/sub_step.py b/cyperf/models/sub_step.py index efb6d78..88f47b2 100644 --- a/cyperf/models/sub_step.py +++ b/cyperf/models/sub_step.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/supported_group_tls13.py b/cyperf/models/supported_group_tls13.py index 6988337..3a42478 100644 --- a/cyperf/models/supported_group_tls13.py +++ b/cyperf/models/supported_group_tls13.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/system_info.py b/cyperf/models/system_info.py index fa85792..b80fc15 100644 --- a/cyperf/models/system_info.py +++ b/cyperf/models/system_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/tcp_profile.py b/cyperf/models/tcp_profile.py index b25d683..7304a0f 100644 --- a/cyperf/models/tcp_profile.py +++ b/cyperf/models/tcp_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/test_info.py b/cyperf/models/test_info.py index 5a2ddf6..2cb00e5 100644 --- a/cyperf/models/test_info.py +++ b/cyperf/models/test_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/test_state_changed_operation.py b/cyperf/models/test_state_changed_operation.py index a8a3cb6..4317b5a 100644 --- a/cyperf/models/test_state_changed_operation.py +++ b/cyperf/models/test_state_changed_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/text_segment.py b/cyperf/models/text_segment.py index 5f1c8d9..eaf0cce 100644 --- a/cyperf/models/text_segment.py +++ b/cyperf/models/text_segment.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/time_value.py b/cyperf/models/time_value.py index a9ce3ed..83f6f8e 100644 --- a/cyperf/models/time_value.py +++ b/cyperf/models/time_value.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/timeline_segment.py b/cyperf/models/timeline_segment.py index 5fec8ef..f9e7332 100644 --- a/cyperf/models/timeline_segment.py +++ b/cyperf/models/timeline_segment.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/timeline_segment_base.py b/cyperf/models/timeline_segment_base.py index 5ab29b1..fbf7bfb 100644 --- a/cyperf/models/timeline_segment_base.py +++ b/cyperf/models/timeline_segment_base.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/timeline_segment_union.py b/cyperf/models/timeline_segment_union.py index 9783cd2..5b2d323 100644 --- a/cyperf/models/timeline_segment_union.py +++ b/cyperf/models/timeline_segment_union.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/timers.py b/cyperf/models/timers.py index 39f8da6..ef1a481 100644 --- a/cyperf/models/timers.py +++ b/cyperf/models/timers.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/tls_profile.py b/cyperf/models/tls_profile.py index cfe841f..d1a0099 100644 --- a/cyperf/models/tls_profile.py +++ b/cyperf/models/tls_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/track.py b/cyperf/models/track.py index e5d9573..7709357 100644 --- a/cyperf/models/track.py +++ b/cyperf/models/track.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/track_type.py b/cyperf/models/track_type.py index 055596f..8387595 100644 --- a/cyperf/models/track_type.py +++ b/cyperf/models/track_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/traffic_agent_info.py b/cyperf/models/traffic_agent_info.py index 3f192dc..77581a1 100644 --- a/cyperf/models/traffic_agent_info.py +++ b/cyperf/models/traffic_agent_info.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/traffic_profile_base.py b/cyperf/models/traffic_profile_base.py index 6e10b0d..dba157c 100644 --- a/cyperf/models/traffic_profile_base.py +++ b/cyperf/models/traffic_profile_base.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/traffic_settings.py b/cyperf/models/traffic_settings.py index 20f6d66..7db077c 100644 --- a/cyperf/models/traffic_settings.py +++ b/cyperf/models/traffic_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/transport_profile.py b/cyperf/models/transport_profile.py index dc7a1c6..ccbca5a 100644 --- a/cyperf/models/transport_profile.py +++ b/cyperf/models/transport_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/transport_profile_base.py b/cyperf/models/transport_profile_base.py index d060bad..c1916bd 100644 --- a/cyperf/models/transport_profile_base.py +++ b/cyperf/models/transport_profile_base.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/tunnel_range.py b/cyperf/models/tunnel_range.py index 91b6787..ea062ae 100644 --- a/cyperf/models/tunnel_range.py +++ b/cyperf/models/tunnel_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/tunnel_settings.py b/cyperf/models/tunnel_settings.py index 2a57e35..c62bda0 100644 --- a/cyperf/models/tunnel_settings.py +++ b/cyperf/models/tunnel_settings.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/tunnel_stack.py b/cyperf/models/tunnel_stack.py index b6bd1fd..eadf8a4 100644 --- a/cyperf/models/tunnel_stack.py +++ b/cyperf/models/tunnel_stack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/type_array_v2_metadata.py b/cyperf/models/type_array_v2_metadata.py index 0260633..96d2729 100644 --- a/cyperf/models/type_array_v2_metadata.py +++ b/cyperf/models/type_array_v2_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/type_info_metadata.py b/cyperf/models/type_info_metadata.py index 9b1c6d1..d3f98bf 100644 --- a/cyperf/models/type_info_metadata.py +++ b/cyperf/models/type_info_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/type_int_metadata.py b/cyperf/models/type_int_metadata.py index aa003c9..415960c 100644 --- a/cyperf/models/type_int_metadata.py +++ b/cyperf/models/type_int_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/type_media_metadata.py b/cyperf/models/type_media_metadata.py index dd7bbf2..67cc543 100644 --- a/cyperf/models/type_media_metadata.py +++ b/cyperf/models/type_media_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/type_string_metadata.py b/cyperf/models/type_string_metadata.py index 962d68b..7ce70fe 100644 --- a/cyperf/models/type_string_metadata.py +++ b/cyperf/models/type_string_metadata.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/udp_profile.py b/cyperf/models/udp_profile.py index 206fef3..bd0675b 100644 --- a/cyperf/models/udp_profile.py +++ b/cyperf/models/udp_profile.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/update_network_mapping.py b/cyperf/models/update_network_mapping.py index 12a8468..5f61116 100644 --- a/cyperf/models/update_network_mapping.py +++ b/cyperf/models/update_network_mapping.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/update_port_tags_operation.py b/cyperf/models/update_port_tags_operation.py index 6151cd5..0b4907f 100644 --- a/cyperf/models/update_port_tags_operation.py +++ b/cyperf/models/update_port_tags_operation.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/validation_message.py b/cyperf/models/validation_message.py index a5475b5..bf4d485 100644 --- a/cyperf/models/validation_message.py +++ b/cyperf/models/validation_message.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/version.py b/cyperf/models/version.py index 975d2a1..d4ba8cc 100644 --- a/cyperf/models/version.py +++ b/cyperf/models/version.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/vlan_range.py b/cyperf/models/vlan_range.py index aa98489..51cb16c 100644 --- a/cyperf/models/vlan_range.py +++ b/cyperf/models/vlan_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/vlan_type.py b/cyperf/models/vlan_type.py index 77cd7e5..4c56ee1 100644 --- a/cyperf/models/vlan_type.py +++ b/cyperf/models/vlan_type.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/vx_lan_range.py b/cyperf/models/vx_lan_range.py index 4273611..b28585f 100644 --- a/cyperf/models/vx_lan_range.py +++ b/cyperf/models/vx_lan_range.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/vx_lan_stack.py b/cyperf/models/vx_lan_stack.py index d2b3676..5988dcb 100644 --- a/cyperf/models/vx_lan_stack.py +++ b/cyperf/models/vx_lan_stack.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/models/vx_lanid.py b/cyperf/models/vx_lanid.py index 950fc07..fbf87b1 100644 --- a/cyperf/models/vx_lanid.py +++ b/cyperf/models/vx_lanid.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/cyperf/rest.py b/cyperf/rest.py index 1fc2a19..1e40193 100644 --- a/cyperf/rest.py +++ b/cyperf/rest.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com diff --git a/docs/IPSecRange.md b/docs/IPSecRange.md index 54bcd91..326c29c 100644 --- a/docs/IPSecRange.md +++ b/docs/IPSecRange.md @@ -14,6 +14,7 @@ Name | Type | Description | Notes **inner_ip_sec_range** | [**InnerIPSecRange**](InnerIPSecRange.md) | | [optional] **local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] **multi_p2_over_p1** | **bool** | | [optional] +**pqckem_enabled** | **bool** | | [optional] **protected_sub_config** | [**ProtectedSubnetConfig**](ProtectedSubnetConfig.md) | Deeprecated. Use RemoteSubConfig instead. | [optional] **public_peer** | **str** | | **public_peer_increment** | **str** | | diff --git a/docs/InnerIPSecRange.md b/docs/InnerIPSecRange.md index f53c101..46364aa 100644 --- a/docs/InnerIPSecRange.md +++ b/docs/InnerIPSecRange.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **identification_config** | [**IdentificationConfig**](IdentificationConfig.md) | | [optional] **local_sub_config** | [**LocalSubnetConfig**](LocalSubnetConfig.md) | | [optional] **multi_p2_over_p1** | **bool** | | +**pqckem_enabled** | **bool** | | **public_peer** | **str** | | **public_peer_increment** | **str** | | **remote_access** | [**RemoteAccess**](RemoteAccess.md) | | [optional] diff --git a/docs/P1Config.md b/docs/P1Config.md index 8a55a7d..0eb663a 100644 --- a/docs/P1Config.md +++ b/docs/P1Config.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **ppk_enabled** | **bool** | | **ppkid** | **str** | | **ppk_mandatory** | **str** | | +**pqckem_round** | [**List[PqcKemGroup]**](PqcKemGroup.md) | | **prf_algorithm** | [**PrfP1Algorithm**](PrfP1Algorithm.md) | | ## Example diff --git a/docs/PqcKemGroup.md b/docs/PqcKemGroup.md new file mode 100644 index 0000000..9ba75e3 --- /dev/null +++ b/docs/PqcKemGroup.md @@ -0,0 +1,56 @@ +# PqcKemGroup + + +## Enum + +* `NONE` (value: `'NONE'`) + +* `MODP_768` (value: `'MODP 768'`) + +* `MODP_1024` (value: `'MODP 1024'`) + +* `MODP_1536` (value: `'MODP 1536'`) + +* `MODP_2048` (value: `'MODP 2048'`) + +* `MODP_3072` (value: `'MODP 3072'`) + +* `MODP_4096` (value: `'MODP 4096'`) + +* `MODP_6144` (value: `'MODP 6144'`) + +* `MODP_8192` (value: `'MODP 8192'`) + +* `MODP_1024_S160` (value: `'MODP 1024 S160'`) + +* `MODP_2048_S224` (value: `'MODP 2048 S224'`) + +* `MODP_2048_S256` (value: `'MODP 2048 S256'`) + +* `ECP_192` (value: `'ECP 192'`) + +* `ECP_224` (value: `'ECP 224'`) + +* `ECP_256` (value: `'ECP 256'`) + +* `ECP_384` (value: `'ECP 384'`) + +* `ECP_521` (value: `'ECP 521'`) + +* `ECP_224_BP` (value: `'ECP 224 BP'`) + +* `ECP_256_BP` (value: `'ECP 256 BP'`) + +* `ECP_384_BP` (value: `'ECP 384 BP'`) + +* `ECP_512_BP` (value: `'ECP 512 BP'`) + +* `MLKEM512` (value: `'MLKEM512'`) + +* `MLKEM768` (value: `'MLKEM768'`) + +* `MLKEM1024` (value: `'MLKEM1024'`) + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/pyproject.toml b/pyproject.toml index c498ef5..dcedd56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,12 +1,12 @@ [tool.poetry] name = "cyperf" version = "1.0.0" -description = "CyPerf Application API" +description = "Keysight CyPerf Application API" authors = ["Keysight CyPerf "] license = "NoLicense" readme = "README.md" repository = "https://github.com/GIT_USER_ID/GIT_REPO_ID" -keywords = ["OpenAPI", "OpenAPI-Generator", "CyPerf Application API"] +keywords = ["OpenAPI", "OpenAPI-Generator", "Keysight CyPerf Application API"] include = ["cyperf/py.typed"] [tool.poetry.dependencies] diff --git a/setup.py b/setup.py index 175cb33..f2b0684 100644 --- a/setup.py +++ b/setup.py @@ -1,9 +1,9 @@ # coding: utf-8 """ - CyPerf Application API + Keysight CyPerf Application API - CyPerf REST API + Keysight CyPerf REST API The version of the OpenAPI document: 1.0.0 Contact: support@keysight.com From 2507f462797138fe4b4471737f55c786f1c7c9a8 Mon Sep 17 00:00:00 2001 From: Stingescu Andrei Petrut Date: Wed, 5 Aug 2026 08:21:10 -0600 Subject: [PATCH 19/26] Pull request #82: Regenerate the python wrapper Merge in ISGAPPSEC/cyperf-api-wrapper from regenerate-wrapper-fanout to main Squashed commit of the following: commit 08c1423d2a780a10c5050b98906ec7074594d588 Author: stinandr Date: Wed Aug 5 10:41:22 2026 +0300 Add back Keysight prefix commit 1a5a03387e144f5f6a23f89009b9cc533346c2c7 Author: stinandr Date: Fri Jul 31 15:23:54 2026 +0300 Regenerate the python wrapper --- README.md | 24 + cyperf/__init__.py | 15 + cyperf/api/__init__.py | 1 + cyperf/api/agents_api.py | 276 ++ cyperf/api/dashboards_api.py | 2501 +++++++++++++++++ cyperf/dynamic_models/__init__.py | 14 + cyperf/models/__init__.py | 14 + cyperf/models/advanced_metric.py | 97 + cyperf/models/change_event.py | 97 + cyperf/models/convert_dashboards_operation.py | 97 + cyperf/models/data_source_details.py | 97 + cyperf/models/front_panel.py | 6 +- cyperf/models/front_panels_by_controller.py | 95 + ...get_stats_dashboard_changes200_response.py | 147 + ...ts_dashboard_changes200_response_one_of.py | 103 + .../get_stats_dashboards200_response.py | 147 + ...get_stats_dashboards200_response_one_of.py | 103 + cyperf/models/grid_position.py | 99 + cyperf/models/metrics_list.py | 103 + cyperf/models/panel.py | 140 + cyperf/models/set_controller_app_operation.py | 6 +- cyperf/models/set_fan_out_mode_operation.py | 105 + cyperf/models/set_nodes_app_operation.py | 6 +- cyperf/models/stats_dashboard.py | 145 + docs/AdvancedMetric.md | 31 + docs/AgentsApi.md | 79 + docs/ChangeEvent.md | 31 + docs/ConvertDashboardsOperation.md | 31 + docs/DashboardsApi.md | 731 +++++ docs/DataSourceDetails.md | 31 + docs/FrontPanel.md | 1 + docs/FrontPanelsByController.md | 30 + docs/GetStatsDashboardChanges200Response.md | 30 + ...etStatsDashboardChanges200ResponseOneOf.md | 30 + docs/GetStatsDashboards200Response.md | 30 + docs/GetStatsDashboards200ResponseOneOf.md | 30 + docs/GridPosition.md | 32 + docs/MetricsList.md | 30 + docs/Panel.md | 37 + docs/SetControllerAppOperation.md | 2 +- docs/SetFanOutModeOperation.md | 31 + docs/SetNodesAppOperation.md | 2 +- docs/StatsDashboard.md | 39 + 43 files changed, 5686 insertions(+), 10 deletions(-) create mode 100644 cyperf/api/dashboards_api.py create mode 100644 cyperf/models/advanced_metric.py create mode 100644 cyperf/models/change_event.py create mode 100644 cyperf/models/convert_dashboards_operation.py create mode 100644 cyperf/models/data_source_details.py create mode 100644 cyperf/models/front_panels_by_controller.py create mode 100644 cyperf/models/get_stats_dashboard_changes200_response.py create mode 100644 cyperf/models/get_stats_dashboard_changes200_response_one_of.py create mode 100644 cyperf/models/get_stats_dashboards200_response.py create mode 100644 cyperf/models/get_stats_dashboards200_response_one_of.py create mode 100644 cyperf/models/grid_position.py create mode 100644 cyperf/models/metrics_list.py create mode 100644 cyperf/models/panel.py create mode 100644 cyperf/models/set_fan_out_mode_operation.py create mode 100644 cyperf/models/stats_dashboard.py create mode 100644 docs/AdvancedMetric.md create mode 100644 docs/ChangeEvent.md create mode 100644 docs/ConvertDashboardsOperation.md create mode 100644 docs/DashboardsApi.md create mode 100644 docs/DataSourceDetails.md create mode 100644 docs/FrontPanelsByController.md create mode 100644 docs/GetStatsDashboardChanges200Response.md create mode 100644 docs/GetStatsDashboardChanges200ResponseOneOf.md create mode 100644 docs/GetStatsDashboards200Response.md create mode 100644 docs/GetStatsDashboards200ResponseOneOf.md create mode 100644 docs/GridPosition.md create mode 100644 docs/MetricsList.md create mode 100644 docs/Panel.md create mode 100644 docs/SetFanOutModeOperation.md create mode 100644 docs/StatsDashboard.md diff --git a/README.md b/README.md index e9834c4..d7772cc 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ Class | Method | HTTP request | Description *AgentsApi* | [**start_controllers_reboot_compute_resource**](docs/AgentsApi.md#start_controllers_reboot_compute_resource) | **POST** /api/v2/controllers/operations/reboot-compute-resource | *AgentsApi* | [**start_controllers_reboot_port**](docs/AgentsApi.md#start_controllers_reboot_port) | **POST** /api/v2/controllers/operations/reboot-port | *AgentsApi* | [**start_controllers_set_app**](docs/AgentsApi.md#start_controllers_set_app) | **POST** /api/v2/controllers/operations/set-app | +*AgentsApi* | [**start_controllers_set_front_panel_fanout**](docs/AgentsApi.md#start_controllers_set_front_panel_fanout) | **POST** /api/v2/controllers/operations/set-front-panel-fanout | *AgentsApi* | [**start_controllers_set_front_panel_port_link_state**](docs/AgentsApi.md#start_controllers_set_front_panel_port_link_state) | **POST** /api/v2/controllers/operations/set-front-panel-port-link-state | *AgentsApi* | [**start_controllers_set_node_aggregation**](docs/AgentsApi.md#start_controllers_set_node_aggregation) | **POST** /api/v2/controllers/operations/set-node-aggregation | *AgentsApi* | [**start_controllers_set_node_app**](docs/AgentsApi.md#start_controllers_set_node_app) | **POST** /api/v2/controllers/operations/set-node-app | @@ -274,6 +275,15 @@ Class | Method | HTTP request | Description *ConfigurationsApi* | [**start_configs_import**](docs/ConfigurationsApi.md#start_configs_import) | **POST** /api/v2/configs/operations/import | *ConfigurationsApi* | [**start_configs_import_all**](docs/ConfigurationsApi.md#start_configs_import_all) | **POST** /api/v2/configs/operations/importAll | *ConfigurationsApi* | [**update_config**](docs/ConfigurationsApi.md#update_config) | **PUT** /api/v2/configs/{configId} | +*DashboardsApi* | [**create_stats_dashboard_changes**](docs/DashboardsApi.md#create_stats_dashboard_changes) | **POST** /api/v2/stats-dashboards/{statsDashboardId}/changes | +*DashboardsApi* | [**create_stats_dashboards**](docs/DashboardsApi.md#create_stats_dashboards) | **POST** /api/v2/stats-dashboards | +*DashboardsApi* | [**delete_stats_dashboard**](docs/DashboardsApi.md#delete_stats_dashboard) | **DELETE** /api/v2/stats-dashboards/{statsDashboardId} | +*DashboardsApi* | [**get_stats_dashboard_by_id**](docs/DashboardsApi.md#get_stats_dashboard_by_id) | **GET** /api/v2/stats-dashboards/{statsDashboardId} | +*DashboardsApi* | [**get_stats_dashboard_changes**](docs/DashboardsApi.md#get_stats_dashboard_changes) | **GET** /api/v2/stats-dashboards/{statsDashboardId}/changes | +*DashboardsApi* | [**get_stats_dashboard_metrics**](docs/DashboardsApi.md#get_stats_dashboard_metrics) | **GET** /api/v2/stats-dashboards/{statsDashboardId}/metrics | +*DashboardsApi* | [**get_stats_dashboards**](docs/DashboardsApi.md#get_stats_dashboards) | **GET** /api/v2/stats-dashboards | +*DashboardsApi* | [**start_stats_dashboards_convert**](docs/DashboardsApi.md#start_stats_dashboards_convert) | **POST** /api/v2/stats-dashboards/operations/convert | +*DashboardsApi* | [**update_stats_dashboard**](docs/DashboardsApi.md#update_stats_dashboard) | **PUT** /api/v2/stats-dashboards/{statsDashboardId} | *DataMigrationApi* | [**start_controller_migration_export**](docs/DataMigrationApi.md#start_controller_migration_export) | **POST** /api/v2/controller-migration/operations/export | *DataMigrationApi* | [**start_controller_migration_import**](docs/DataMigrationApi.md#start_controller_migration_import) | **POST** /api/v2/controller-migration/operations/import | *DiagnosticsApi* | [**api_v2_diagnostics_components_get**](docs/DiagnosticsApi.md#api_v2_diagnostics_components_get) | **GET** /api/v2/diagnostics/components | @@ -409,6 +419,7 @@ Class | Method | HTTP request | Description - [AddActionInfo](docs/AddActionInfo.md) - [AddInput](docs/AddInput.md) - [Address](docs/Address.md) + - [AdvancedMetric](docs/AdvancedMetric.md) - [AdvancedSettings](docs/AdvancedSettings.md) - [Agent](docs/Agent.md) - [AgentAssignmentByFrontPanelPort](docs/AgentAssignmentByFrontPanelPort.md) @@ -464,6 +475,7 @@ Class | Method | HTTP request | Description - [CategoryValue](docs/CategoryValue.md) - [CertConfig](docs/CertConfig.md) - [Certificate](docs/Certificate.md) + - [ChangeEvent](docs/ChangeEvent.md) - [ChassisInfo](docs/ChassisInfo.md) - [Choice](docs/Choice.md) - [CipherTLS12](docs/CipherTLS12.md) @@ -493,6 +505,7 @@ Class | Method | HTTP request | Description - [Consumer](docs/Consumer.md) - [ContentBlock](docs/ContentBlock.md) - [Controller](docs/Controller.md) + - [ConvertDashboardsOperation](docs/ConvertDashboardsOperation.md) - [CountedFeatureConsumer](docs/CountedFeatureConsumer.md) - [CountedFeatureStats](docs/CountedFeatureStats.md) - [CreateAppOperation](docs/CreateAppOperation.md) @@ -507,6 +520,7 @@ Class | Method | HTTP request | Description - [DUTNetwork](docs/DUTNetwork.md) - [DUTRange](docs/DUTRange.md) - [Dashboard](docs/Dashboard.md) + - [DataSourceDetails](docs/DataSourceDetails.md) - [DataType](docs/DataType.md) - [DataTypeValuesInner](docs/DataTypeValuesInner.md) - [Definition](docs/Definition.md) @@ -563,6 +577,7 @@ Class | Method | HTTP request | Description - [FortinetSettings](docs/FortinetSettings.md) - [FrontPanel](docs/FrontPanel.md) - [FrontPanelPortsByController](docs/FrontPanelPortsByController.md) + - [FrontPanelsByController](docs/FrontPanelsByController.md) - [FulfillmentRequest](docs/FulfillmentRequest.md) - [GenerateAllOperation](docs/GenerateAllOperation.md) - [GenerateCSVReportsOperation](docs/GenerateCSVReportsOperation.md) @@ -620,9 +635,14 @@ Class | Method | HTTP request | Description - [GetSessionMeta200ResponseOneOf](docs/GetSessionMeta200ResponseOneOf.md) - [GetSessions200Response](docs/GetSessions200Response.md) - [GetSessions200ResponseOneOf](docs/GetSessions200ResponseOneOf.md) + - [GetStatsDashboardChanges200Response](docs/GetStatsDashboardChanges200Response.md) + - [GetStatsDashboardChanges200ResponseOneOf](docs/GetStatsDashboardChanges200ResponseOneOf.md) + - [GetStatsDashboards200Response](docs/GetStatsDashboards200Response.md) + - [GetStatsDashboards200ResponseOneOf](docs/GetStatsDashboards200ResponseOneOf.md) - [GetStatsPlugins200Response](docs/GetStatsPlugins200Response.md) - [GetStatsPlugins200ResponseOneOf](docs/GetStatsPlugins200ResponseOneOf.md) - [GetStrikesOperation](docs/GetStrikesOperation.md) + - [GridPosition](docs/GridPosition.md) - [GroupTLS13](docs/GroupTLS13.md) - [HTTPProfile](docs/HTTPProfile.md) - [HTTPReqMeta](docs/HTTPReqMeta.md) @@ -666,6 +686,7 @@ Class | Method | HTTP request | Description - [MediaFile](docs/MediaFile.md) - [MediaTrack](docs/MediaTrack.md) - [Metadata](docs/Metadata.md) + - [MetricsList](docs/MetricsList.md) - [MosMode](docs/MosMode.md) - [NameIdFormat](docs/NameIdFormat.md) - [NameServer](docs/NameServer.md) @@ -691,6 +712,7 @@ Class | Method | HTTP request | Description - [PSPRange](docs/PSPRange.md) - [PSPStack](docs/PSPStack.md) - [Pair](docs/Pair.md) + - [Panel](docs/Panel.md) - [ParamMetadata](docs/ParamMetadata.md) - [ParamMetadataTypeInfo](docs/ParamMetadataTypeInfo.md) - [ParamMetadataTypeInfoArrayV2](docs/ParamMetadataTypeInfoArrayV2.md) @@ -761,6 +783,7 @@ Class | Method | HTTP request | Description - [SetAggregationModeOperation](docs/SetAggregationModeOperation.md) - [SetControllerAppOperation](docs/SetControllerAppOperation.md) - [SetDpdkModeOperationInput](docs/SetDpdkModeOperationInput.md) + - [SetFanOutModeOperation](docs/SetFanOutModeOperation.md) - [SetFrontPanelPortsLinkStateOperation](docs/SetFrontPanelPortsLinkStateOperation.md) - [SetNodesAppOperation](docs/SetNodesAppOperation.md) - [SetNtpOperationInput](docs/SetNtpOperationInput.md) @@ -775,6 +798,7 @@ Class | Method | HTTP request | Description - [StartAgentsBatchDeleteRequestInner](docs/StartAgentsBatchDeleteRequestInner.md) - [StatelessStream](docs/StatelessStream.md) - [StaticARPEntry](docs/StaticARPEntry.md) + - [StatsDashboard](docs/StatsDashboard.md) - [StatsResult](docs/StatsResult.md) - [SteadySegment](docs/SteadySegment.md) - [StepSegment](docs/StepSegment.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index 81eb30a..b0f6420 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -34,6 +34,7 @@ from cyperf.api.authorization_api import AuthorizationApi from cyperf.api.brokers_api import BrokersApi from cyperf.api.configurations_api import ConfigurationsApi +from cyperf.api.dashboards_api import DashboardsApi from cyperf.api.data_migration_api import DataMigrationApi from cyperf.api.diagnostics_api import DiagnosticsApi from cyperf.api.license_servers_api import LicenseServersApi @@ -65,6 +66,7 @@ from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput from cyperf.models.address import Address +from cyperf.models.advanced_metric import AdvancedMetric from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort @@ -120,6 +122,7 @@ from cyperf.models.category_value import CategoryValue from cyperf.models.cert_config import CertConfig from cyperf.models.certificate import Certificate +from cyperf.models.change_event import ChangeEvent from cyperf.models.chassis_info import ChassisInfo from cyperf.models.choice import Choice from cyperf.models.cipher_tls12 import CipherTLS12 @@ -149,6 +152,7 @@ from cyperf.models.consumer import Consumer from cyperf.models.content_block import ContentBlock from cyperf.models.controller import Controller +from cyperf.models.convert_dashboards_operation import ConvertDashboardsOperation from cyperf.models.counted_feature_consumer import CountedFeatureConsumer from cyperf.models.counted_feature_stats import CountedFeatureStats from cyperf.models.create_app_operation import CreateAppOperation @@ -163,6 +167,7 @@ from cyperf.models.dut_network import DUTNetwork from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard +from cyperf.models.data_source_details import DataSourceDetails from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner from cyperf.models.definition import Definition @@ -219,6 +224,7 @@ from cyperf.models.fortinet_settings import FortinetSettings from cyperf.models.front_panel import FrontPanel from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController +from cyperf.models.front_panels_by_controller import FrontPanelsByController from cyperf.models.fulfillment_request import FulfillmentRequest from cyperf.models.generate_all_operation import GenerateAllOperation from cyperf.models.generate_csv_reports_operation import GenerateCSVReportsOperation @@ -276,9 +282,14 @@ from cyperf.models.get_session_meta200_response_one_of import GetSessionMeta200ResponseOneOf from cyperf.models.get_sessions200_response import GetSessions200Response from cyperf.models.get_sessions200_response_one_of import GetSessions200ResponseOneOf +from cyperf.models.get_stats_dashboard_changes200_response import GetStatsDashboardChanges200Response +from cyperf.models.get_stats_dashboard_changes200_response_one_of import GetStatsDashboardChanges200ResponseOneOf +from cyperf.models.get_stats_dashboards200_response import GetStatsDashboards200Response +from cyperf.models.get_stats_dashboards200_response_one_of import GetStatsDashboards200ResponseOneOf from cyperf.models.get_stats_plugins200_response import GetStatsPlugins200Response from cyperf.models.get_stats_plugins200_response_one_of import GetStatsPlugins200ResponseOneOf from cyperf.models.get_strikes_operation import GetStrikesOperation +from cyperf.models.grid_position import GridPosition from cyperf.models.group_tls13 import GroupTLS13 from cyperf.models.http_profile import HTTPProfile from cyperf.models.http_req_meta import HTTPReqMeta @@ -322,6 +333,7 @@ from cyperf.models.media_file import MediaFile from cyperf.models.media_track import MediaTrack from cyperf.models.metadata import Metadata +from cyperf.models.metrics_list import MetricsList from cyperf.models.mos_mode import MosMode from cyperf.models.name_id_format import NameIdFormat from cyperf.models.name_server import NameServer @@ -347,6 +359,7 @@ from cyperf.models.psp_range import PSPRange from cyperf.models.psp_stack import PSPStack from cyperf.models.pair import Pair +from cyperf.models.panel import Panel from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo from cyperf.models.param_metadata_type_info_array_v2 import ParamMetadataTypeInfoArrayV2 @@ -417,6 +430,7 @@ from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput +from cyperf.models.set_fan_out_mode_operation import SetFanOutModeOperation from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput @@ -431,6 +445,7 @@ from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner from cyperf.models.stateless_stream import StatelessStream from cyperf.models.static_arp_entry import StaticARPEntry +from cyperf.models.stats_dashboard import StatsDashboard from cyperf.models.stats_result import StatsResult from cyperf.models.steady_segment import SteadySegment from cyperf.models.step_segment import StepSegment diff --git a/cyperf/api/__init__.py b/cyperf/api/__init__.py index ac2cdcc..0e934f8 100644 --- a/cyperf/api/__init__.py +++ b/cyperf/api/__init__.py @@ -6,6 +6,7 @@ from cyperf.api.authorization_api import AuthorizationApi from cyperf.api.brokers_api import BrokersApi from cyperf.api.configurations_api import ConfigurationsApi +from cyperf.api.dashboards_api import DashboardsApi from cyperf.api.data_migration_api import DataMigrationApi from cyperf.api.diagnostics_api import DiagnosticsApi from cyperf.api.license_servers_api import LicenseServersApi diff --git a/cyperf/api/agents_api.py b/cyperf/api/agents_api.py index 8a91fef..66bef7b 100644 --- a/cyperf/api/agents_api.py +++ b/cyperf/api/agents_api.py @@ -43,6 +43,7 @@ from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput +from cyperf.models.set_fan_out_mode_operation import SetFanOutModeOperation from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput @@ -5109,6 +5110,16 @@ def _patch_agent_serialize( + + + + + + + + + + @@ -9068,6 +9079,271 @@ def _start_controllers_set_app_serialize( + @validate_call + def start_controllers_set_front_panel_fanout( + self, + set_fan_out_mode_operation: Optional[SetFanOutModeOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_controllers_set_front_panel_fanout + + Set the fanOut mode of the front panels. + + :param set_fan_out_mode_operation: + :type set_fan_out_mode_operation: SetFanOutModeOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_controllers_set_front_panel_fanout_serialize( + set_fan_out_mode_operation=set_fan_out_mode_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_controllers_set_front_panel_fanout_with_http_info( + self, + set_fan_out_mode_operation: Optional[SetFanOutModeOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_controllers_set_front_panel_fanout + + Set the fanOut mode of the front panels. + + :param set_fan_out_mode_operation: + :type set_fan_out_mode_operation: SetFanOutModeOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_controllers_set_front_panel_fanout_serialize( + set_fan_out_mode_operation=set_fan_out_mode_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_controllers_set_front_panel_fanout_without_preload_content( + self, + set_fan_out_mode_operation: Optional[SetFanOutModeOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_controllers_set_front_panel_fanout + + Set the fanOut mode of the front panels. + + :param set_fan_out_mode_operation: + :type set_fan_out_mode_operation: SetFanOutModeOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_controllers_set_front_panel_fanout_serialize( + set_fan_out_mode_operation=set_fan_out_mode_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _start_controllers_set_front_panel_fanout_serialize( + self, + set_fan_out_mode_operation, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if set_fan_out_mode_operation is not None: + _body_params = set_fan_out_mode_operation + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/controllers/operations/set-front-panel-fanout', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + @validate_call def start_controllers_set_front_panel_port_link_state( self, diff --git a/cyperf/api/dashboards_api.py b/cyperf/api/dashboards_api.py new file mode 100644 index 0000000..6d7df3c --- /dev/null +++ b/cyperf/api/dashboards_api.py @@ -0,0 +1,2501 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import warnings +from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt +from typing import Any, Dict, List, Optional, Tuple, Union +from typing_extensions import Annotated + +from pydantic import Field, StrictInt, StrictStr +from typing import List, Optional +from typing_extensions import Annotated +from cyperf.models.async_context import AsyncContext +from cyperf.models.change_event import ChangeEvent +from cyperf.models.convert_dashboards_operation import ConvertDashboardsOperation +from cyperf.models.get_stats_dashboard_changes200_response import GetStatsDashboardChanges200Response +from cyperf.models.get_stats_dashboards200_response import GetStatsDashboards200Response +from cyperf.models.metrics_list import MetricsList +from cyperf.models.stats_dashboard import StatsDashboard + +from cyperf import DynamicModel +from cyperf.api_client import ApiClient, RequestSerialized +from cyperf.api_response import ApiResponse +from cyperf.rest import RESTResponseType + + +class DashboardsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + + @validate_call + def create_stats_dashboard_changes( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard_changes: Optional[List[ChangeEvent]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[ChangeEvent]: + """create_stats_dashboard_changes + + Register a change event. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard_changes: + :type stats_dashboard_changes: List[ChangeEvent] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard_changes=stats_dashboard_changes, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[ChangeEvent]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def create_stats_dashboard_changes_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard_changes: Optional[List[ChangeEvent]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[ChangeEvent]]: + """create_stats_dashboard_changes + + Register a change event. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard_changes: + :type stats_dashboard_changes: List[ChangeEvent] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard_changes=stats_dashboard_changes, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[ChangeEvent]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def create_stats_dashboard_changes_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard_changes: Optional[List[ChangeEvent]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """create_stats_dashboard_changes + + Register a change event. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard_changes: + :type stats_dashboard_changes: List[ChangeEvent] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard_changes=stats_dashboard_changes, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[ChangeEvent]", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _create_stats_dashboard_changes_serialize( + self, + stats_dashboard_id, + stats_dashboard_changes, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'statsDashboardChanges': '', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if stats_dashboard_changes is not None: + _body_params = stats_dashboard_changes + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}/changes', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def create_stats_dashboards( + self, + stats_dashboards: Optional[List[StatsDashboard]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> List[StatsDashboard]: + """create_stats_dashboards + + Add a new dashboard. + + :param stats_dashboards: + :type stats_dashboards: List[StatsDashboard] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboards_serialize( + stats_dashboards=stats_dashboards, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[StatsDashboard]", + '409': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def create_stats_dashboards_with_http_info( + self, + stats_dashboards: Optional[List[StatsDashboard]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[List[StatsDashboard]]: + """create_stats_dashboards + + Add a new dashboard. + + :param stats_dashboards: + :type stats_dashboards: List[StatsDashboard] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboards_serialize( + stats_dashboards=stats_dashboards, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[StatsDashboard]", + '409': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def create_stats_dashboards_without_preload_content( + self, + stats_dashboards: Optional[List[StatsDashboard]] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """create_stats_dashboards + + Add a new dashboard. + + :param stats_dashboards: + :type stats_dashboards: List[StatsDashboard] + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._create_stats_dashboards_serialize( + stats_dashboards=stats_dashboards, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '201': "List[StatsDashboard]", + '409': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _create_stats_dashboards_serialize( + self, + stats_dashboards, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + 'statsDashboards': '', + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if stats_dashboards is not None: + _body_params = stats_dashboards + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/stats-dashboards', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def delete_stats_dashboard( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> None: + """delete_stats_dashboard + + Delete a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def delete_stats_dashboard_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[None]: + """delete_stats_dashboard + + Delete a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def delete_stats_dashboard_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """delete_stats_dashboard + + Delete a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._delete_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '204': None, + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _delete_stats_dashboard_serialize( + self, + stats_dashboard_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='DELETE', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_stats_dashboard_by_id( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> StatsDashboard: + """get_stats_dashboard_by_id + + Get a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_by_id_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_by_id_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[StatsDashboard]: + """get_stats_dashboard_by_id + + Get a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_by_id_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_by_id_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_stats_dashboard_by_id + + Get a particular dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_by_id_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_stats_dashboard_by_id_serialize( + self, + stats_dashboard_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_stats_dashboard_changes( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GetStatsDashboardChanges200Response: + """get_stats_dashboard_changes + + Get the list of change events. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboardChanges200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_changes_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[GetStatsDashboardChanges200Response]: + """get_stats_dashboard_changes + + Get the list of change events. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboardChanges200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_changes_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_stats_dashboard_changes + + Get the list of change events. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_changes_serialize( + stats_dashboard_id=stats_dashboard_id, + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboardChanges200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_stats_dashboard_changes_serialize( + self, + stats_dashboard_id, + take, + skip, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}/changes', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_stats_dashboard_metrics( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> MetricsList: + """get_stats_dashboard_metrics + + Get the list of metrics. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_metrics_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MetricsList", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_metrics_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[MetricsList]: + """get_stats_dashboard_metrics + + Get the list of metrics. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_metrics_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MetricsList", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboard_metrics_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_stats_dashboard_metrics + + Get the list of metrics. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboard_metrics_serialize( + stats_dashboard_id=stats_dashboard_id, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "MetricsList", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_stats_dashboard_metrics_serialize( + self, + stats_dashboard_id, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}/metrics', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def get_stats_dashboards( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> GetStatsDashboards200Response: + """get_stats_dashboards + + Get all the dashboards. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboards_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboards200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboards_with_http_info( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[GetStatsDashboards200Response]: + """get_stats_dashboards + + Get all the dashboards. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboards_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboards200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def get_stats_dashboards_without_preload_content( + self, + take: Annotated[Optional[StrictInt], Field(description="The number of search results to return")] = None, + skip: Annotated[Optional[StrictInt], Field(description="The number of search results to skip")] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """get_stats_dashboards + + Get all the dashboards. + + :param take: The number of search results to return + :type take: int + :param skip: The number of search results to skip + :type skip: int + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._get_stats_dashboards_serialize( + take=take, + skip=skip, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "GetStatsDashboards200Response", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _get_stats_dashboards_serialize( + self, + take, + skip, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + if take is not None: + + _query_params.append(('take', take)) + + if skip is not None: + + _query_params.append(('skip', skip)) + + # process the header parameters + # process the form parameters + # process the body parameter + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='GET', + resource_path='/api/v2/stats-dashboards', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + + + + + + + + + + + @validate_call + def start_stats_dashboards_convert( + self, + convert_dashboards_operation: Optional[ConvertDashboardsOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> AsyncContext: + """start_stats_dashboards_convert + + Converts dashboards to specified types of results. + + :param convert_dashboards_operation: + :type convert_dashboards_operation: ConvertDashboardsOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_stats_dashboards_convert_serialize( + convert_dashboards_operation=convert_dashboards_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_stats_dashboards_convert_with_http_info( + self, + convert_dashboards_operation: Optional[ConvertDashboardsOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[AsyncContext]: + """start_stats_dashboards_convert + + Converts dashboards to specified types of results. + + :param convert_dashboards_operation: + :type convert_dashboards_operation: ConvertDashboardsOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_stats_dashboards_convert_serialize( + convert_dashboards_operation=convert_dashboards_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def start_stats_dashboards_convert_without_preload_content( + self, + convert_dashboards_operation: Optional[ConvertDashboardsOperation] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """start_stats_dashboards_convert + + Converts dashboards to specified types of results. + + :param convert_dashboards_operation: + :type convert_dashboards_operation: ConvertDashboardsOperation + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._start_stats_dashboards_convert_serialize( + convert_dashboards_operation=convert_dashboards_operation, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '202': "AsyncContext", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _start_stats_dashboards_convert_serialize( + self, + convert_dashboards_operation, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if convert_dashboards_operation is not None: + _body_params = convert_dashboards_operation + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='POST', + resource_path='/api/v2/stats-dashboards/operations/convert', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + + + + @validate_call + def update_stats_dashboard( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard: Optional[StatsDashboard] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> StatsDashboard: + """update_stats_dashboard + + Update a dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard: + :type stats_dashboard: StatsDashboard + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._update_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard=stats_dashboard, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def update_stats_dashboard_with_http_info( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard: Optional[StatsDashboard] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> ApiResponse[StatsDashboard]: + """update_stats_dashboard + + Update a dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard: + :type stats_dashboard: StatsDashboard + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._update_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard=stats_dashboard, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=_response_types_map, + _request_timeout=_request_timeout + ) + + + @validate_call + def update_stats_dashboard_without_preload_content( + self, + stats_dashboard_id: Annotated[StrictStr, Field(description="The ID of the stats dashboard.")], + stats_dashboard: Optional[StatsDashboard] = None, + _request_timeout: Union[ + None, + Annotated[StrictFloat, Field(gt=0)], + Tuple[ + Annotated[StrictFloat, Field(gt=0)], + Annotated[StrictFloat, Field(gt=0)] + ] + ] = None, + _request_auth: Optional[Dict[StrictStr, Any]] = None, + _content_type: Optional[StrictStr] = None, + _headers: Optional[Dict[StrictStr, Any]] = None, + _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, + ) -> RESTResponseType: + """update_stats_dashboard + + Update a dashboard. + + :param stats_dashboard_id: The ID of the stats dashboard. (required) + :type stats_dashboard_id: str + :param stats_dashboard: + :type stats_dashboard: StatsDashboard + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :type _request_timeout: int, tuple(int, int), optional + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the + authentication in the spec for a single request. + :type _request_auth: dict, optional + :param _content_type: force content-type for the request. + :type _content_type: str, Optional + :param _headers: set to override the headers for a single + request; this effectively ignores the headers + in the spec for a single request. + :type _headers: dict, optional + :param _host_index: set to override the host_index for a single + request; this effectively ignores the host_index + in the spec for a single request. + :type _host_index: int, optional + :return: Returns the result object. + """ # noqa: E501 + + _param = self._update_stats_dashboard_serialize( + stats_dashboard_id=stats_dashboard_id, + stats_dashboard=stats_dashboard, + _request_auth=_request_auth, + _content_type=_content_type, + _headers=_headers, + _host_index=_host_index + ) + + _response_types_map: Dict[str, Optional[str]] = { + '200': "StatsDashboard", + '403': "ErrorResponse", + '500': "ErrorResponse", + } + return self.api_client.call_api( + *_param, + _response_types_map=None, + _request_timeout=_request_timeout + ) + + + def _update_stats_dashboard_serialize( + self, + stats_dashboard_id, + stats_dashboard, + _request_auth, + _content_type, + _headers, + _host_index, + ) -> RequestSerialized: + + _host = None + + _collection_formats: Dict[str, str] = { + } + + _path_params: Dict[str, str] = {} + _query_params: List[Tuple[str, str]] = [] + _header_params: Dict[str, Optional[str]] = _headers or {} + _form_params: List[Tuple[str, str]] = [] + _files: Dict[str, Union[str, bytes]] = {} + _body_params: Optional[bytes] = None + + # process the path parameters + if stats_dashboard_id is not None: + _path_params['statsDashboardId'] = stats_dashboard_id + # process the query parameters + # process the header parameters + # process the form parameters + # process the body parameter + if stats_dashboard is not None: + _body_params = stats_dashboard + + + # set the HTTP header `Accept` + if 'Accept' not in _header_params: + _header_params['Accept'] = self.api_client.select_header_accept( + [ + 'application/json' + ] + ) + + # set the HTTP header `Content-Type` + if _content_type: + _header_params['Content-Type'] = _content_type + else: + _default_content_type = ( + self.api_client.select_header_content_type( + [ + 'application/json' + ] + ) + ) + if _default_content_type is not None: + _header_params['Content-Type'] = _default_content_type + + # authentication setting + _auth_settings: List[str] = [ + 'OAuth2', + 'OAuth2' + ] + + return self.api_client.param_serialize( + method='PUT', + resource_path='/api/v2/stats-dashboards/{statsDashboardId}', + path_params=_path_params, + query_params=_query_params, + header_params=_header_params, + body=_body_params, + post_params=_form_params, + files=_files, + auth_settings=_auth_settings, + collection_formats=_collection_formats, + _host=_host, + _request_auth=_request_auth + ) + + diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 40a2728..536bfb0 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -31,6 +31,7 @@ AddActionInfo = DynamicModel('AddActionInfo', (), {} ) AddInput = DynamicModel('AddInput', (), {} ) Address = DynamicModel('Address', (), {} ) +AdvancedMetric = DynamicModel('AdvancedMetric', (), {} ) AdvancedSettings = DynamicModel('AdvancedSettings', (), {} ) Agent = DynamicModel('Agent', (), {} ) AgentAssignmentByFrontPanelPort = DynamicModel('AgentAssignmentByFrontPanelPort', (), {} ) @@ -86,6 +87,7 @@ CategoryValue = DynamicModel('CategoryValue', (), {} ) CertConfig = DynamicModel('CertConfig', (), {} ) Certificate = DynamicModel('Certificate', (), {} ) +ChangeEvent = DynamicModel('ChangeEvent', (), {} ) ChassisInfo = DynamicModel('ChassisInfo', (), {} ) Choice = DynamicModel('Choice', (), {} ) CipherTLS12 = DynamicModel('CipherTLS12', (), {} ) @@ -115,6 +117,7 @@ Consumer = DynamicModel('Consumer', (), {} ) ContentBlock = DynamicModel('ContentBlock', (), {} ) Controller = DynamicModel('Controller', (), {} ) +ConvertDashboardsOperation = DynamicModel('ConvertDashboardsOperation', (), {} ) CountedFeatureConsumer = DynamicModel('CountedFeatureConsumer', (), {} ) CountedFeatureStats = DynamicModel('CountedFeatureStats', (), {} ) CreateAppOperation = DynamicModel('CreateAppOperation', (), {} ) @@ -129,6 +132,7 @@ DUTNetwork = DynamicModel('DUTNetwork', (), {} ) DUTRange = DynamicModel('DUTRange', (), {} ) Dashboard = DynamicModel('Dashboard', (), {} ) +DataSourceDetails = DynamicModel('DataSourceDetails', (), {} ) DataType = DynamicModel('DataType', (), {} ) DataTypeValuesInner = DynamicModel('DataTypeValuesInner', (), {} ) Definition = DynamicModel('Definition', (), {} ) @@ -185,6 +189,7 @@ FortinetSettings = DynamicModel('FortinetSettings', (), {} ) FrontPanel = DynamicModel('FrontPanel', (), {} ) FrontPanelPortsByController = DynamicModel('FrontPanelPortsByController', (), {} ) +FrontPanelsByController = DynamicModel('FrontPanelsByController', (), {} ) FulfillmentRequest = DynamicModel('FulfillmentRequest', (), {} ) GenerateAllOperation = DynamicModel('GenerateAllOperation', (), {} ) GenerateCSVReportsOperation = DynamicModel('GenerateCSVReportsOperation', (), {} ) @@ -242,9 +247,14 @@ GetSessionMeta200ResponseOneOf = DynamicModel('GetSessionMeta200ResponseOneOf', (), {} ) GetSessions200Response = DynamicModel('GetSessions200Response', (), {} ) GetSessions200ResponseOneOf = DynamicModel('GetSessions200ResponseOneOf', (), {} ) +GetStatsDashboardChanges200Response = DynamicModel('GetStatsDashboardChanges200Response', (), {} ) +GetStatsDashboardChanges200ResponseOneOf = DynamicModel('GetStatsDashboardChanges200ResponseOneOf', (), {} ) +GetStatsDashboards200Response = DynamicModel('GetStatsDashboards200Response', (), {} ) +GetStatsDashboards200ResponseOneOf = DynamicModel('GetStatsDashboards200ResponseOneOf', (), {} ) GetStatsPlugins200Response = DynamicModel('GetStatsPlugins200Response', (), {} ) GetStatsPlugins200ResponseOneOf = DynamicModel('GetStatsPlugins200ResponseOneOf', (), {} ) GetStrikesOperation = DynamicModel('GetStrikesOperation', (), {} ) +GridPosition = DynamicModel('GridPosition', (), {} ) GroupTLS13 = DynamicModel('GroupTLS13', (), {} ) HTTPProfile = DynamicModel('HTTPProfile', (), {} ) HTTPReqMeta = DynamicModel('HTTPReqMeta', (), {} ) @@ -288,6 +298,7 @@ MediaFile = DynamicModel('MediaFile', (), {} ) MediaTrack = DynamicModel('MediaTrack', (), {} ) Metadata = DynamicModel('Metadata', (), {} ) +MetricsList = DynamicModel('MetricsList', (), {} ) MosMode = DynamicModel('MosMode', (), {} ) NameIdFormat = DynamicModel('NameIdFormat', (), {} ) NameServer = DynamicModel('NameServer', (), {} ) @@ -313,6 +324,7 @@ PSPRange = DynamicModel('PSPRange', (), {} ) PSPStack = DynamicModel('PSPStack', (), {} ) Pair = DynamicModel('Pair', (), {} ) +Panel = DynamicModel('Panel', (), {} ) ParamMetadata = DynamicModel('ParamMetadata', (), {} ) ParamMetadataTypeInfo = DynamicModel('ParamMetadataTypeInfo', (), {} ) ParamMetadataTypeInfoArrayV2 = DynamicModel('ParamMetadataTypeInfoArrayV2', (), {} ) @@ -383,6 +395,7 @@ SetAggregationModeOperation = DynamicModel('SetAggregationModeOperation', (), {} ) SetControllerAppOperation = DynamicModel('SetControllerAppOperation', (), {} ) SetDpdkModeOperationInput = DynamicModel('SetDpdkModeOperationInput', (), {} ) +SetFanOutModeOperation = DynamicModel('SetFanOutModeOperation', (), {} ) SetFrontPanelPortsLinkStateOperation = DynamicModel('SetFrontPanelPortsLinkStateOperation', (), {} ) SetNodesAppOperation = DynamicModel('SetNodesAppOperation', (), {} ) SetNtpOperationInput = DynamicModel('SetNtpOperationInput', (), {} ) @@ -397,6 +410,7 @@ StartAgentsBatchDeleteRequestInner = DynamicModel('StartAgentsBatchDeleteRequestInner', (), {} ) StatelessStream = DynamicModel('StatelessStream', (), {} ) StaticARPEntry = DynamicModel('StaticARPEntry', (), {} ) +StatsDashboard = DynamicModel('StatsDashboard', (), {} ) StatsResult = DynamicModel('StatsResult', (), {} ) SteadySegment = DynamicModel('SteadySegment', (), {} ) StepSegment = DynamicModel('StepSegment', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index cfc93c2..5225f22 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -31,6 +31,7 @@ class LinkNameException(Exception): from cyperf.models.add_action_info import AddActionInfo from cyperf.models.add_input import AddInput from cyperf.models.address import Address +from cyperf.models.advanced_metric import AdvancedMetric from cyperf.models.advanced_settings import AdvancedSettings from cyperf.models.agent import Agent from cyperf.models.agent_assignment_by_front_panel_port import AgentAssignmentByFrontPanelPort @@ -86,6 +87,7 @@ class LinkNameException(Exception): from cyperf.models.category_value import CategoryValue from cyperf.models.cert_config import CertConfig from cyperf.models.certificate import Certificate +from cyperf.models.change_event import ChangeEvent from cyperf.models.chassis_info import ChassisInfo from cyperf.models.choice import Choice from cyperf.models.cipher_tls12 import CipherTLS12 @@ -115,6 +117,7 @@ class LinkNameException(Exception): from cyperf.models.consumer import Consumer from cyperf.models.content_block import ContentBlock from cyperf.models.controller import Controller +from cyperf.models.convert_dashboards_operation import ConvertDashboardsOperation from cyperf.models.counted_feature_consumer import CountedFeatureConsumer from cyperf.models.counted_feature_stats import CountedFeatureStats from cyperf.models.create_app_operation import CreateAppOperation @@ -129,6 +132,7 @@ class LinkNameException(Exception): from cyperf.models.dut_network import DUTNetwork from cyperf.models.dut_range import DUTRange from cyperf.models.dashboard import Dashboard +from cyperf.models.data_source_details import DataSourceDetails from cyperf.models.data_type import DataType from cyperf.models.data_type_values_inner import DataTypeValuesInner from cyperf.models.definition import Definition @@ -185,6 +189,7 @@ class LinkNameException(Exception): from cyperf.models.fortinet_settings import FortinetSettings from cyperf.models.front_panel import FrontPanel from cyperf.models.front_panel_ports_by_controller import FrontPanelPortsByController +from cyperf.models.front_panels_by_controller import FrontPanelsByController from cyperf.models.fulfillment_request import FulfillmentRequest from cyperf.models.generate_all_operation import GenerateAllOperation from cyperf.models.generate_csv_reports_operation import GenerateCSVReportsOperation @@ -242,9 +247,14 @@ class LinkNameException(Exception): from cyperf.models.get_session_meta200_response_one_of import GetSessionMeta200ResponseOneOf from cyperf.models.get_sessions200_response import GetSessions200Response from cyperf.models.get_sessions200_response_one_of import GetSessions200ResponseOneOf +from cyperf.models.get_stats_dashboard_changes200_response import GetStatsDashboardChanges200Response +from cyperf.models.get_stats_dashboard_changes200_response_one_of import GetStatsDashboardChanges200ResponseOneOf +from cyperf.models.get_stats_dashboards200_response import GetStatsDashboards200Response +from cyperf.models.get_stats_dashboards200_response_one_of import GetStatsDashboards200ResponseOneOf from cyperf.models.get_stats_plugins200_response import GetStatsPlugins200Response from cyperf.models.get_stats_plugins200_response_one_of import GetStatsPlugins200ResponseOneOf from cyperf.models.get_strikes_operation import GetStrikesOperation +from cyperf.models.grid_position import GridPosition from cyperf.models.group_tls13 import GroupTLS13 from cyperf.models.http_profile import HTTPProfile from cyperf.models.http_req_meta import HTTPReqMeta @@ -288,6 +298,7 @@ class LinkNameException(Exception): from cyperf.models.media_file import MediaFile from cyperf.models.media_track import MediaTrack from cyperf.models.metadata import Metadata +from cyperf.models.metrics_list import MetricsList from cyperf.models.mos_mode import MosMode from cyperf.models.name_id_format import NameIdFormat from cyperf.models.name_server import NameServer @@ -313,6 +324,7 @@ class LinkNameException(Exception): from cyperf.models.psp_range import PSPRange from cyperf.models.psp_stack import PSPStack from cyperf.models.pair import Pair +from cyperf.models.panel import Panel from cyperf.models.param_metadata import ParamMetadata from cyperf.models.param_metadata_type_info import ParamMetadataTypeInfo from cyperf.models.param_metadata_type_info_array_v2 import ParamMetadataTypeInfoArrayV2 @@ -383,6 +395,7 @@ class LinkNameException(Exception): from cyperf.models.set_aggregation_mode_operation import SetAggregationModeOperation from cyperf.models.set_controller_app_operation import SetControllerAppOperation from cyperf.models.set_dpdk_mode_operation_input import SetDpdkModeOperationInput +from cyperf.models.set_fan_out_mode_operation import SetFanOutModeOperation from cyperf.models.set_front_panel_ports_link_state_operation import SetFrontPanelPortsLinkStateOperation from cyperf.models.set_nodes_app_operation import SetNodesAppOperation from cyperf.models.set_ntp_operation_input import SetNtpOperationInput @@ -397,6 +410,7 @@ class LinkNameException(Exception): from cyperf.models.start_agents_batch_delete_request_inner import StartAgentsBatchDeleteRequestInner from cyperf.models.stateless_stream import StatelessStream from cyperf.models.static_arp_entry import StaticARPEntry +from cyperf.models.stats_dashboard import StatsDashboard from cyperf.models.stats_result import StatsResult from cyperf.models.steady_segment import SteadySegment from cyperf.models.step_segment import StepSegment diff --git a/cyperf/models/advanced_metric.py b/cyperf/models/advanced_metric.py new file mode 100644 index 0000000..e6c2991 --- /dev/null +++ b/cyperf/models/advanced_metric.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class AdvancedMetric(BaseModel): + """ + AdvancedMetric + """ # noqa: E501 + name: Optional[StrictStr] = Field(default=None, description="The name of the metric") + sort_type: Optional[StrictStr] = Field(default=None, description="The sorting type of the metric", alias="sortType") + value: Optional[StrictStr] = Field(default=None, description="The value of the metric") + __properties: ClassVar[List[str]] = ["name", "sortType", "value"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of AdvancedMetric from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of AdvancedMetric from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "name": obj.get("name"), + "sortType": obj.get("sortType"), + "value": obj.get("value") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/change_event.py b/cyperf/models/change_event.py new file mode 100644 index 0000000..cccc9cc --- /dev/null +++ b/cyperf/models/change_event.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ChangeEvent(BaseModel): + """ + ChangeEvent + """ # noqa: E501 + dashboard_id: Optional[StrictStr] = Field(default=None, description="The id of the changed dashboard", alias="dashboardId") + session_id: Optional[StrictStr] = Field(default=None, description="The id of the session where the change happened", alias="sessionId") + test_id: Optional[StrictStr] = Field(default=None, description="The id of the test where the change happened", alias="testId") + __properties: ClassVar[List[str]] = ["dashboardId", "sessionId", "testId"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ChangeEvent from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ChangeEvent from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "dashboardId": obj.get("dashboardId"), + "sessionId": obj.get("sessionId"), + "testId": obj.get("testId") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/convert_dashboards_operation.py b/cyperf/models/convert_dashboards_operation.py new file mode 100644 index 0000000..40b23dd --- /dev/null +++ b/cyperf/models/convert_dashboards_operation.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class ConvertDashboardsOperation(BaseModel): + """ + ConvertDashboardsOperation + """ # noqa: E501 + dashboard_ids: Optional[List[StrictStr]] = Field(default=None, description="The dashboard ids to be converted", alias="dashboardIds") + test_id: Optional[StrictStr] = Field(default=None, description="The test that contains the dashboards", alias="testId") + types: Optional[List[StrictStr]] = Field(default=None, description="The types of queries the dashboards will be converted in") + __properties: ClassVar[List[str]] = ["dashboardIds", "testId", "types"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ConvertDashboardsOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ConvertDashboardsOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "dashboardIds": obj.get("dashboardIds") if obj.get("dashboardIds") is not None else [], + "testId": obj.get("testId"), + "types": obj.get("types") if obj.get("types") is not None else [] + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/data_source_details.py b/cyperf/models/data_source_details.py new file mode 100644 index 0000000..50a939d --- /dev/null +++ b/cyperf/models/data_source_details.py @@ -0,0 +1,97 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class DataSourceDetails(BaseModel): + """ + DataSourceDetails + """ # noqa: E501 + extra_filters: Optional[Dict[str, StrictStr]] = Field(default=None, description="Extra filters to be applied to the data source of the panel", alias="extraFilters") + name: Optional[StrictStr] = Field(default=None, description="The name of the data source of the panel") + timestamp_field: Optional[StrictStr] = Field(default=None, description="The name of the timestamp field of the data source of the panel", alias="timestampField") + __properties: ClassVar[List[str]] = ["extraFilters", "name", "timestampField"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of DataSourceDetails from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of DataSourceDetails from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "extraFilters": obj.get("extraFilters"), + "name": obj.get("name"), + "timestampField": obj.get("timestampField") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/front_panel.py b/cyperf/models/front_panel.py index 87943b4..3e5f311 100644 --- a/cyperf/models/front_panel.py +++ b/cyperf/models/front_panel.py @@ -31,6 +31,7 @@ class FrontPanel(BaseModel): """ FrontPanel """ # noqa: E501 + available_fan_out_modes: Optional[List[StrictStr]] = Field(default=None, description="A list with the current fanOut modes available for the front panel", alias="availableFanOutModes") fan_out_mode: Optional[StrictStr] = Field(default=None, description="The current fanOut mode of the front panel", alias="fanOutMode") health_details: Optional[List[HealthIssue]] = Field(default=None, description="A list with more details regarding the health of the front panel", alias="healthDetails") healthy: Optional[StrictBool] = Field(default=None, description="Whether the front panel has any health issue or not") @@ -39,7 +40,7 @@ class FrontPanel(BaseModel): name: Optional[StrictStr] = Field(default=None, description="A user-friendly display name for the front panel") ports: Optional[List[Port]] = Field(default=None, description="The front panel ports of the front panel") status: Optional[StrictStr] = Field(default=None, description="The current status of the front panel: ready or not ready") - __properties: ClassVar[List[str]] = ["fanOutMode", "healthDetails", "healthy", "id", "links", "name", "ports", "status"] + __properties: ClassVar[List[str]] = ["availableFanOutModes", "fanOutMode", "healthDetails", "healthy", "id", "links", "name", "ports", "status"] model_config = ConfigDict( populate_by_name=True, @@ -115,7 +116,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: return _obj _obj = cls.model_validate({ - "fanOutMode": obj.get("fanOutMode"), + "availableFanOutModes": obj.get("availableFanOutModes") if obj.get("availableFanOutModes") is not None else [], + "fanOutMode": obj.get("fanOutMode"), "healthDetails": ( [HealthIssue.from_dict(_item) for _item in obj.get("healthDetails", [])] if obj.get("healthDetails") is not None else None), "healthy": obj.get("healthy"), "id": obj.get("id"), diff --git a/cyperf/models/front_panels_by_controller.py b/cyperf/models/front_panels_by_controller.py new file mode 100644 index 0000000..37c4d0a --- /dev/null +++ b/cyperf/models/front_panels_by_controller.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class FrontPanelsByController(BaseModel): + """ + FrontPanelsByController + """ # noqa: E501 + controller_id: Optional[StrictStr] = Field(default=None, description="The id of the controller that the front panels are part of.", alias="controllerId") + front_panels: Optional[List[StrictStr]] = Field(default=None, description="The front panel ids.", alias="frontPanels") + __properties: ClassVar[List[str]] = ["controllerId", "frontPanels"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of FrontPanelsByController from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of FrontPanelsByController from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllerId": obj.get("controllerId"), + "frontPanels": obj.get("frontPanels") if obj.get("frontPanels") is not None else [] + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/get_stats_dashboard_changes200_response.py b/cyperf/models/get_stats_dashboard_changes200_response.py new file mode 100644 index 0000000..7256f0b --- /dev/null +++ b/cyperf/models/get_stats_dashboard_changes200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.change_event import ChangeEvent +from cyperf.models.get_stats_dashboard_changes200_response_one_of import GetStatsDashboardChanges200ResponseOneOf +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETSTATSDASHBOARDCHANGES200RESPONSE_ONE_OF_SCHEMAS = ["GetStatsDashboardChanges200ResponseOneOf", "List[ChangeEvent]"] + +class GetStatsDashboardChanges200Response(BaseModel): + """ + GetStatsDashboardChanges200Response + """ + # data type: List[ChangeEvent] + oneof_schema_1_validator: Optional[List[ChangeEvent]] = None + # data type: GetStatsDashboardChanges200ResponseOneOf + oneof_schema_2_validator: Optional[GetStatsDashboardChanges200ResponseOneOf] = None + actual_instance: Optional[Union[GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]]] = None + one_of_schemas: Set[str] = { "GetStatsDashboardChanges200ResponseOneOf", "List[ChangeEvent]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetStatsDashboardChanges200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[ChangeEvent] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetStatsDashboardChanges200ResponseOneOf + if not isinstance(v, GetStatsDashboardChanges200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetStatsDashboardChanges200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetStatsDashboardChanges200Response with oneOf schemas: GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetStatsDashboardChanges200Response with oneOf schemas: GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[ChangeEvent] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetStatsDashboardChanges200ResponseOneOf + + + + try: + instance.actual_instance = GetStatsDashboardChanges200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetStatsDashboardChanges200Response with oneOf schemas: GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetStatsDashboardChanges200Response with oneOf schemas: GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetStatsDashboardChanges200ResponseOneOf, List[ChangeEvent]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_stats_dashboard_changes200_response_one_of.py b/cyperf/models/get_stats_dashboard_changes200_response_one_of.py new file mode 100644 index 0000000..b62528d --- /dev/null +++ b/cyperf/models/get_stats_dashboard_changes200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.change_event import ChangeEvent +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetStatsDashboardChanges200ResponseOneOf(BaseModel): + """ + GetStatsDashboardChanges200ResponseOneOf + """ # noqa: E501 + data: Optional[List[ChangeEvent]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetStatsDashboardChanges200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetStatsDashboardChanges200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [ChangeEvent.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/get_stats_dashboards200_response.py b/cyperf/models/get_stats_dashboards200_response.py new file mode 100644 index 0000000..00a31c4 --- /dev/null +++ b/cyperf/models/get_stats_dashboards200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.get_stats_dashboards200_response_one_of import GetStatsDashboards200ResponseOneOf +from cyperf.models.stats_dashboard import StatsDashboard +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETSTATSDASHBOARDS200RESPONSE_ONE_OF_SCHEMAS = ["GetStatsDashboards200ResponseOneOf", "List[StatsDashboard]"] + +class GetStatsDashboards200Response(BaseModel): + """ + GetStatsDashboards200Response + """ + # data type: List[StatsDashboard] + oneof_schema_1_validator: Optional[List[StatsDashboard]] = None + # data type: GetStatsDashboards200ResponseOneOf + oneof_schema_2_validator: Optional[GetStatsDashboards200ResponseOneOf] = None + actual_instance: Optional[Union[GetStatsDashboards200ResponseOneOf, List[StatsDashboard]]] = None + one_of_schemas: Set[str] = { "GetStatsDashboards200ResponseOneOf", "List[StatsDashboard]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetStatsDashboards200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[StatsDashboard] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetStatsDashboards200ResponseOneOf + if not isinstance(v, GetStatsDashboards200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetStatsDashboards200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetStatsDashboards200Response with oneOf schemas: GetStatsDashboards200ResponseOneOf, List[StatsDashboard]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetStatsDashboards200Response with oneOf schemas: GetStatsDashboards200ResponseOneOf, List[StatsDashboard]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[StatsDashboard] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetStatsDashboards200ResponseOneOf + + + + try: + instance.actual_instance = GetStatsDashboards200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetStatsDashboards200Response with oneOf schemas: GetStatsDashboards200ResponseOneOf, List[StatsDashboard]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetStatsDashboards200Response with oneOf schemas: GetStatsDashboards200ResponseOneOf, List[StatsDashboard]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetStatsDashboards200ResponseOneOf, List[StatsDashboard]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_stats_dashboards200_response_one_of.py b/cyperf/models/get_stats_dashboards200_response_one_of.py new file mode 100644 index 0000000..4890ca5 --- /dev/null +++ b/cyperf/models/get_stats_dashboards200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.stats_dashboard import StatsDashboard +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetStatsDashboards200ResponseOneOf(BaseModel): + """ + GetStatsDashboards200ResponseOneOf + """ # noqa: E501 + data: Optional[List[StatsDashboard]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetStatsDashboards200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetStatsDashboards200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [StatsDashboard.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/grid_position.py b/cyperf/models/grid_position.py new file mode 100644 index 0000000..836a4f4 --- /dev/null +++ b/cyperf/models/grid_position.py @@ -0,0 +1,99 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GridPosition(BaseModel): + """ + GridPosition + """ # noqa: E501 + height: Optional[StrictInt] = Field(default=None, description="The height of the panel. A unit is equal to 30 pixels") + width: Optional[StrictInt] = Field(default=None, description="The width of the panel. A unit is equal to 1/24 of the screen width") + x_pos: Optional[StrictInt] = Field(default=None, description="The x coordinate of the panel. A unit is equal to 1/24 of the screen width", alias="xPos") + y_pos: Optional[StrictInt] = Field(default=None, description="The y coordinate of the panel. A unit is equal to 30 pixels", alias="yPos") + __properties: ClassVar[List[str]] = ["height", "width", "xPos", "yPos"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GridPosition from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GridPosition from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "height": obj.get("height"), + "width": obj.get("width"), + "xPos": obj.get("xPos"), + "yPos": obj.get("yPos") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/metrics_list.py b/cyperf/models/metrics_list.py new file mode 100644 index 0000000..96f4015 --- /dev/null +++ b/cyperf/models/metrics_list.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.advanced_metric import AdvancedMetric +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class MetricsList(BaseModel): + """ + MetricsList + """ # noqa: E501 + dashboard_id: Optional[StrictStr] = Field(default=None, description="The id of the dashboard with these metrics", alias="dashboardId") + metrics: Optional[List[AdvancedMetric]] = Field(default=None, description="The list of metrics in the specified dashboard") + __properties: ClassVar[List[str]] = ["dashboardId", "metrics"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of MetricsList from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in metrics (list) + _items = [] + if self.metrics: + for _item in self.metrics: + if _item: + _items.append(_item.to_dict()) + _dict['metrics'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of MetricsList from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "dashboardId": obj.get("dashboardId"), + "metrics": ( [AdvancedMetric.from_dict(_item) for _item in obj.get("metrics", [])] if obj.get("metrics") is not None else None) + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/panel.py b/cyperf/models/panel.py new file mode 100644 index 0000000..f31c256 --- /dev/null +++ b/cyperf/models/panel.py @@ -0,0 +1,140 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.advanced_metric import AdvancedMetric +from cyperf.models.appsec_app_metadata_keywords_inner import AppsecAppMetadataKeywordsInner +from cyperf.models.data_source_details import DataSourceDetails +from cyperf.models.grid_position import GridPosition +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class Panel(BaseModel): + """ + Panel + """ # noqa: E501 + filters: Optional[List[Dict[str, AppsecAppMetadataKeywordsInner]]] = Field(default=None, description="The filters to be applied to the panel stats") + group_by: Optional[List[AdvancedMetric]] = Field(default=None, description="The stats to be used as group by clauses", alias="groupBy") + limit: Optional[StrictInt] = Field(default=None, description="The maximum number of stats to be generated in a certain interval") + metrics: Optional[List[AdvancedMetric]] = Field(default=None, description="The stats to be displayed in the panel") + panel_data_source: Optional[DataSourceDetails] = Field(default=None, alias="panelDataSource") + panel_type: Optional[StrictStr] = Field(default=None, description="The type of the panel", alias="panelType") + position: Optional[GridPosition] = None + stats_sources: Optional[List[StrictStr]] = Field(default=None, description="The sources of the statistics based on the panel configuration", alias="statsSources") + title: Optional[StrictStr] = Field(default=None, description="The title of the panel") + __properties: ClassVar[List[str]] = ["filters", "groupBy", "limit", "metrics", "panelDataSource", "panelType", "position", "statsSources", "title"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of Panel from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in filters (list) + _items = [] + if self.filters: + for _item in self.filters: + if _item: + _items.append(_item.to_dict()) + _dict['filters'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in group_by (list) + _items = [] + if self.group_by: + for _item in self.group_by: + if _item: + _items.append(_item.to_dict()) + _dict['groupBy'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in metrics (list) + _items = [] + if self.metrics: + for _item in self.metrics: + if _item: + _items.append(_item.to_dict()) + _dict['metrics'] = _items + # override the default output from pydantic by calling `to_dict()` of panel_data_source + if self.panel_data_source: + _dict['panelDataSource'] = self.panel_data_source.to_dict() + # override the default output from pydantic by calling `to_dict()` of position + if self.position: + _dict['position'] = self.position.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of Panel from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "filters": ( [Dict.from_dict(_item) for _item in obj.get("filters", [])] if obj.get("filters") is not None else None), + "groupBy": ( [AdvancedMetric.from_dict(_item) for _item in obj.get("groupBy", [])] if obj.get("groupBy") is not None else None), + "limit": obj.get("limit"), + "metrics": ( [AdvancedMetric.from_dict(_item) for _item in obj.get("metrics", [])] if obj.get("metrics") is not None else None), + "panelDataSource": DataSourceDetails.from_dict(obj["panelDataSource"]) if obj.get("panelDataSource") is not None else None, + "panelType": obj.get("panelType"), + "position": GridPosition.from_dict(obj["position"]) if obj.get("position") is not None else None, + "statsSources": obj.get("statsSources") if obj.get("statsSources") is not None else [], + "title": obj.get("title") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/set_controller_app_operation.py b/cyperf/models/set_controller_app_operation.py index 650c01a..bca36c3 100644 --- a/cyperf/models/set_controller_app_operation.py +++ b/cyperf/models/set_controller_app_operation.py @@ -30,8 +30,8 @@ class SetControllerAppOperation(BaseModel): """ # noqa: E501 app_id: Optional[StrictStr] = Field(default=None, description="The id of the app to activate on the controllers.", alias="appId") controllers: Optional[List[StrictStr]] = Field(default=None, description="The controller ids for which to activate the app.") - force: Optional[StrictBool] = Field(default=None, description="Whether the ownership information will be cleared or not.") - __properties: ClassVar[List[str]] = ["appId", "controllers", "force"] + force_clear_ownership: Optional[StrictBool] = Field(default=None, description="Whether the ownership information will be cleared or not.", alias="forceClearOwnership") + __properties: ClassVar[List[str]] = ["appId", "controllers", "forceClearOwnership"] model_config = ConfigDict( populate_by_name=True, @@ -88,7 +88,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "appId": obj.get("appId"), "controllers": obj.get("controllers") if obj.get("controllers") is not None else [], - "force": obj.get("force") + "forceClearOwnership": obj.get("forceClearOwnership") , "links": obj.get("links") }) diff --git a/cyperf/models/set_fan_out_mode_operation.py b/cyperf/models/set_fan_out_mode_operation.py new file mode 100644 index 0000000..ed01a4e --- /dev/null +++ b/cyperf/models/set_fan_out_mode_operation.py @@ -0,0 +1,105 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.front_panels_by_controller import FrontPanelsByController +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class SetFanOutModeOperation(BaseModel): + """ + SetFanOutModeOperation + """ # noqa: E501 + controllers: Optional[List[FrontPanelsByController]] = Field(default=None, description="The controllers that the front panels are part of.") + fan_out_mode: Optional[StrictStr] = Field(default=None, description="The desired fanOut mode.", alias="fanOutMode") + force_clear_ownership: Optional[StrictBool] = Field(default=None, description="Whether the ownership information of reserved ports will be cleared before switching the fanOut mode.", alias="forceClearOwnership") + __properties: ClassVar[List[str]] = ["controllers", "fanOutMode", "forceClearOwnership"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of SetFanOutModeOperation from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in controllers (list) + _items = [] + if self.controllers: + for _item in self.controllers: + if _item: + _items.append(_item.to_dict()) + _dict['controllers'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of SetFanOutModeOperation from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "controllers": ( [FrontPanelsByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None), + "fanOutMode": obj.get("fanOutMode"), + "forceClearOwnership": obj.get("forceClearOwnership") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/set_nodes_app_operation.py b/cyperf/models/set_nodes_app_operation.py index 2c2022e..5712dad 100644 --- a/cyperf/models/set_nodes_app_operation.py +++ b/cyperf/models/set_nodes_app_operation.py @@ -31,8 +31,8 @@ class SetNodesAppOperation(BaseModel): """ # noqa: E501 app_id: Optional[StrictStr] = Field(default=None, description="The id of the app to activate on the compute nodes.", alias="appId") controllers: Optional[List[NodesByController]] = Field(default=None, description="The controllers that the compute nodes are part of.") - force: Optional[StrictBool] = Field(default=None, description="Whether the ownership information will be cleared or not.") - __properties: ClassVar[List[str]] = ["appId", "controllers", "force"] + force_clear_ownership: Optional[StrictBool] = Field(default=None, description="Whether the ownership information will be cleared or not.", alias="forceClearOwnership") + __properties: ClassVar[List[str]] = ["appId", "controllers", "forceClearOwnership"] model_config = ConfigDict( populate_by_name=True, @@ -96,7 +96,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: _obj = cls.model_validate({ "appId": obj.get("appId"), "controllers": ( [NodesByController.from_dict(_item) for _item in obj.get("controllers", [])] if obj.get("controllers") is not None else None), - "force": obj.get("force") + "forceClearOwnership": obj.get("forceClearOwnership") , "links": obj.get("links") }) diff --git a/cyperf/models/stats_dashboard.py b/cyperf/models/stats_dashboard.py new file mode 100644 index 0000000..c597570 --- /dev/null +++ b/cyperf/models/stats_dashboard.py @@ -0,0 +1,145 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.api_link import APILink +from cyperf.models.change_event import ChangeEvent +from cyperf.models.metrics_list import MetricsList +from cyperf.models.panel import Panel +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class StatsDashboard(BaseModel): + """ + StatsDashboard + """ # noqa: E501 + changes: Optional[List[ChangeEvent]] = Field(default=None, description="The changes hook") + group_id: Optional[StrictStr] = Field(default=None, description="The group identifier of the dashboard", alias="groupId") + id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the dashboard") + links: Optional[List[APILink]] = None + metrics: Optional[MetricsList] = None + name: Optional[StrictStr] = Field(default=None, description="The name of the dashboard") + owner: Optional[StrictStr] = Field(default=None, description="The friendly display name of the entity that created the dashboard") + owner_id: Optional[StrictStr] = Field(default=None, description="The unique identifier of the entity that created the dashboard", alias="ownerId") + panels: Optional[List[Panel]] = Field(default=None, description="The list of panels in the dashboard") + read_only: Optional[StrictBool] = Field(default=None, description="Is a read only dashboard", alias="readOnly") + type: Optional[StrictStr] = Field(default=None, description="The application type of the dashboard") + __properties: ClassVar[List[str]] = ["changes", "groupId", "id", "links", "metrics", "name", "owner", "ownerId", "panels", "readOnly", "type"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of StatsDashboard from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. + """ + excluded_fields: Set[str] = set([ + "owner", + "owner_id", + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in changes (list) + _items = [] + if self.changes: + for _item in self.changes: + if _item: + _items.append(_item.to_dict()) + _dict['changes'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in links (list) + _items = [] + if self.links: + for _item in self.links: + if _item: + _items.append(_item.to_dict()) + _dict['links'] = _items + # override the default output from pydantic by calling `to_dict()` of metrics + if self.metrics: + _dict['metrics'] = self.metrics.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in panels (list) + _items = [] + if self.panels: + for _item in self.panels: + if _item: + _items.append(_item.to_dict()) + _dict['panels'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of StatsDashboard from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "changes": ( [ChangeEvent.from_dict(_item) for _item in obj.get("changes", [])] if obj.get("changes") is not None else None), + "groupId": obj.get("groupId"), + "id": obj.get("id"), + "links": ( [APILink.from_dict(_item) for _item in obj.get("links", [])] if obj.get("links") is not None else None), + "metrics": MetricsList.from_dict(obj["metrics"]) if obj.get("metrics") is not None else None, + "name": obj.get("name"), + "owner": obj.get("owner"), + "ownerId": obj.get("ownerId"), + "panels": ( [Panel.from_dict(_item) for _item in obj.get("panels", [])] if obj.get("panels") is not None else None), + "readOnly": obj.get("readOnly"), + "type": obj.get("type") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/docs/AdvancedMetric.md b/docs/AdvancedMetric.md new file mode 100644 index 0000000..3c35275 --- /dev/null +++ b/docs/AdvancedMetric.md @@ -0,0 +1,31 @@ +# AdvancedMetric + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | The name of the metric | [optional] +**sort_type** | **str** | The sorting type of the metric | [optional] +**value** | **str** | The value of the metric | [optional] + +## Example + +```python +from cyperf.models.advanced_metric import AdvancedMetric + +# TODO update the JSON string below +json = "{}" +# create an instance of AdvancedMetric from a JSON string +advanced_metric_instance = AdvancedMetric.from_json(json) +# print the JSON string representation of the object +print(AdvancedMetric.to_json()) + +# convert the object into a dict +advanced_metric_dict = advanced_metric_instance.to_dict() +# create an instance of AdvancedMetric from a dict +advanced_metric_from_dict = AdvancedMetric.from_dict(advanced_metric_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/AgentsApi.md b/docs/AgentsApi.md index ff8134a..d2c7147 100644 --- a/docs/AgentsApi.md +++ b/docs/AgentsApi.md @@ -36,6 +36,7 @@ Method | HTTP request | Description [**start_controllers_reboot_compute_resource**](AgentsApi.md#start_controllers_reboot_compute_resource) | **POST** /api/v2/controllers/operations/reboot-compute-resource | [**start_controllers_reboot_port**](AgentsApi.md#start_controllers_reboot_port) | **POST** /api/v2/controllers/operations/reboot-port | [**start_controllers_set_app**](AgentsApi.md#start_controllers_set_app) | **POST** /api/v2/controllers/operations/set-app | +[**start_controllers_set_front_panel_fanout**](AgentsApi.md#start_controllers_set_front_panel_fanout) | **POST** /api/v2/controllers/operations/set-front-panel-fanout | [**start_controllers_set_front_panel_port_link_state**](AgentsApi.md#start_controllers_set_front_panel_port_link_state) | **POST** /api/v2/controllers/operations/set-front-panel-port-link-state | [**start_controllers_set_node_aggregation**](AgentsApi.md#start_controllers_set_node_aggregation) | **POST** /api/v2/controllers/operations/set-node-aggregation | [**start_controllers_set_node_app**](AgentsApi.md#start_controllers_set_node_app) | **POST** /api/v2/controllers/operations/set-node-app | @@ -2579,6 +2580,84 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **start_controllers_set_front_panel_fanout** +> AsyncContext start_controllers_set_front_panel_fanout(set_fan_out_mode_operation=set_fan_out_mode_operation) + + + +Set the fanOut mode of the front panels. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.async_context import AsyncContext +from cyperf.models.set_fan_out_mode_operation import SetFanOutModeOperation +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.AgentsApi(api_client) + set_fan_out_mode_operation = cyperf.SetFanOutModeOperation() # SetFanOutModeOperation | (optional) + + try: + api_response = api_instance.start_controllers_set_front_panel_fanout(set_fan_out_mode_operation=set_fan_out_mode_operation) + print("The response of AgentsApi->start_controllers_set_front_panel_fanout:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AgentsApi->start_controllers_set_front_panel_fanout: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **set_fan_out_mode_operation** | [**SetFanOutModeOperation**](SetFanOutModeOperation.md)| | [optional] + +### Return type + +[**AsyncContext**](AsyncContext.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Details about the operation that just started | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **start_controllers_set_front_panel_port_link_state** > AsyncContext start_controllers_set_front_panel_port_link_state(set_front_panel_ports_link_state_operation=set_front_panel_ports_link_state_operation) diff --git a/docs/ChangeEvent.md b/docs/ChangeEvent.md new file mode 100644 index 0000000..cae861f --- /dev/null +++ b/docs/ChangeEvent.md @@ -0,0 +1,31 @@ +# ChangeEvent + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**dashboard_id** | **str** | The id of the changed dashboard | [optional] +**session_id** | **str** | The id of the session where the change happened | [optional] +**test_id** | **str** | The id of the test where the change happened | [optional] + +## Example + +```python +from cyperf.models.change_event import ChangeEvent + +# TODO update the JSON string below +json = "{}" +# create an instance of ChangeEvent from a JSON string +change_event_instance = ChangeEvent.from_json(json) +# print the JSON string representation of the object +print(ChangeEvent.to_json()) + +# convert the object into a dict +change_event_dict = change_event_instance.to_dict() +# create an instance of ChangeEvent from a dict +change_event_from_dict = ChangeEvent.from_dict(change_event_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/ConvertDashboardsOperation.md b/docs/ConvertDashboardsOperation.md new file mode 100644 index 0000000..ec83651 --- /dev/null +++ b/docs/ConvertDashboardsOperation.md @@ -0,0 +1,31 @@ +# ConvertDashboardsOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**dashboard_ids** | **List[str]** | The dashboard ids to be converted | [optional] +**test_id** | **str** | The test that contains the dashboards | [optional] +**types** | **List[str]** | The types of queries the dashboards will be converted in | [optional] + +## Example + +```python +from cyperf.models.convert_dashboards_operation import ConvertDashboardsOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of ConvertDashboardsOperation from a JSON string +convert_dashboards_operation_instance = ConvertDashboardsOperation.from_json(json) +# print the JSON string representation of the object +print(ConvertDashboardsOperation.to_json()) + +# convert the object into a dict +convert_dashboards_operation_dict = convert_dashboards_operation_instance.to_dict() +# create an instance of ConvertDashboardsOperation from a dict +convert_dashboards_operation_from_dict = ConvertDashboardsOperation.from_dict(convert_dashboards_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/DashboardsApi.md b/docs/DashboardsApi.md new file mode 100644 index 0000000..7b5b267 --- /dev/null +++ b/docs/DashboardsApi.md @@ -0,0 +1,731 @@ +# cyperf.DashboardsApi + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_stats_dashboard_changes**](DashboardsApi.md#create_stats_dashboard_changes) | **POST** /api/v2/stats-dashboards/{statsDashboardId}/changes | +[**create_stats_dashboards**](DashboardsApi.md#create_stats_dashboards) | **POST** /api/v2/stats-dashboards | +[**delete_stats_dashboard**](DashboardsApi.md#delete_stats_dashboard) | **DELETE** /api/v2/stats-dashboards/{statsDashboardId} | +[**get_stats_dashboard_by_id**](DashboardsApi.md#get_stats_dashboard_by_id) | **GET** /api/v2/stats-dashboards/{statsDashboardId} | +[**get_stats_dashboard_changes**](DashboardsApi.md#get_stats_dashboard_changes) | **GET** /api/v2/stats-dashboards/{statsDashboardId}/changes | +[**get_stats_dashboard_metrics**](DashboardsApi.md#get_stats_dashboard_metrics) | **GET** /api/v2/stats-dashboards/{statsDashboardId}/metrics | +[**get_stats_dashboards**](DashboardsApi.md#get_stats_dashboards) | **GET** /api/v2/stats-dashboards | +[**start_stats_dashboards_convert**](DashboardsApi.md#start_stats_dashboards_convert) | **POST** /api/v2/stats-dashboards/operations/convert | +[**update_stats_dashboard**](DashboardsApi.md#update_stats_dashboard) | **PUT** /api/v2/stats-dashboards/{statsDashboardId} | + + +# **create_stats_dashboard_changes** +> List[ChangeEvent] create_stats_dashboard_changes(stats_dashboard_id, stats_dashboard_changes=stats_dashboard_changes) + + + +Register a change event. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.change_event import ChangeEvent +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + stats_dashboard_changes = [cyperf.ChangeEvent()] # List[ChangeEvent] | (optional) + + try: + api_response = api_instance.create_stats_dashboard_changes(stats_dashboard_id, stats_dashboard_changes=stats_dashboard_changes) + print("The response of DashboardsApi->create_stats_dashboard_changes:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->create_stats_dashboard_changes: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + **stats_dashboard_changes** | [**List[ChangeEvent]**](ChangeEvent.md)| | [optional] + +### Return type + +[**List[ChangeEvent]**](ChangeEvent.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | The change event was successfully registered. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_stats_dashboards** +> List[StatsDashboard] create_stats_dashboards(stats_dashboards=stats_dashboards) + + + +Add a new dashboard. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.stats_dashboard import StatsDashboard +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboards = [cyperf.StatsDashboard()] # List[StatsDashboard] | (optional) + + try: + api_response = api_instance.create_stats_dashboards(stats_dashboards=stats_dashboards) + print("The response of DashboardsApi->create_stats_dashboards:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->create_stats_dashboards: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboards** | [**List[StatsDashboard]**](StatsDashboard.md)| | [optional] + +### Return type + +[**List[StatsDashboard]**](StatsDashboard.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**201** | The dashboard was successfully added. | - | +**409** | The request could not be completed due to a conflict with the current state of the target resource. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_stats_dashboard** +> delete_stats_dashboard(stats_dashboard_id) + + + +Delete a particular dashboard. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + + try: + api_instance.delete_stats_dashboard(stats_dashboard_id) + except Exception as e: + print("Exception when calling DashboardsApi->delete_stats_dashboard: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + +### Return type + +void (empty response body) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | The dashboard was successfully deleted. | - | +**403** | The initiator of the request does not have enough privileges to perform the action. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_stats_dashboard_by_id** +> StatsDashboard get_stats_dashboard_by_id(stats_dashboard_id) + + + +Get a particular dashboard. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.stats_dashboard import StatsDashboard +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + + try: + api_response = api_instance.get_stats_dashboard_by_id(stats_dashboard_id) + print("The response of DashboardsApi->get_stats_dashboard_by_id:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->get_stats_dashboard_by_id: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + +### Return type + +[**StatsDashboard**](StatsDashboard.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The requested dashboard | - | +**403** | The initiator of the request does not have enough privileges to perform the action. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_stats_dashboard_changes** +> GetStatsDashboardChanges200Response get_stats_dashboard_changes(stats_dashboard_id, take=take, skip=skip) + + + +Get the list of change events. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.get_stats_dashboard_changes200_response import GetStatsDashboardChanges200Response +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_stats_dashboard_changes(stats_dashboard_id, take=take, skip=skip) + print("The response of DashboardsApi->get_stats_dashboard_changes:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->get_stats_dashboard_changes: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**GetStatsDashboardChanges200Response**](GetStatsDashboardChanges200Response.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The list of change events. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_stats_dashboard_metrics** +> MetricsList get_stats_dashboard_metrics(stats_dashboard_id) + + + +Get the list of metrics. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.metrics_list import MetricsList +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + + try: + api_response = api_instance.get_stats_dashboard_metrics(stats_dashboard_id) + print("The response of DashboardsApi->get_stats_dashboard_metrics:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->get_stats_dashboard_metrics: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + +### Return type + +[**MetricsList**](MetricsList.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The requested metrics | - | +**403** | The initiator of the request does not have enough privileges to perform the action. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_stats_dashboards** +> GetStatsDashboards200Response get_stats_dashboards(take=take, skip=skip) + + + +Get all the dashboards. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.get_stats_dashboards200_response import GetStatsDashboards200Response +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + take = 56 # int | The number of search results to return (optional) + skip = 56 # int | The number of search results to skip (optional) + + try: + api_response = api_instance.get_stats_dashboards(take=take, skip=skip) + print("The response of DashboardsApi->get_stats_dashboards:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->get_stats_dashboards: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **take** | **int**| The number of search results to return | [optional] + **skip** | **int**| The number of search results to skip | [optional] + +### Return type + +[**GetStatsDashboards200Response**](GetStatsDashboards200Response.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The list of available dashboards | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **start_stats_dashboards_convert** +> AsyncContext start_stats_dashboards_convert(convert_dashboards_operation=convert_dashboards_operation) + + + +Converts dashboards to specified types of results. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.async_context import AsyncContext +from cyperf.models.convert_dashboards_operation import ConvertDashboardsOperation +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + convert_dashboards_operation = cyperf.ConvertDashboardsOperation() # ConvertDashboardsOperation | (optional) + + try: + api_response = api_instance.start_stats_dashboards_convert(convert_dashboards_operation=convert_dashboards_operation) + print("The response of DashboardsApi->start_stats_dashboards_convert:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->start_stats_dashboards_convert: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **convert_dashboards_operation** | [**ConvertDashboardsOperation**](ConvertDashboardsOperation.md)| | [optional] + +### Return type + +[**AsyncContext**](AsyncContext.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**202** | Details about the operation that just started | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_stats_dashboard** +> StatsDashboard update_stats_dashboard(stats_dashboard_id, stats_dashboard=stats_dashboard) + + + +Update a dashboard. + +### Example + +* OAuth Authentication (OAuth2): +* OAuth Authentication (OAuth2): + +```python +import cyperf +from cyperf.models.stats_dashboard import StatsDashboard +from cyperf.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = cyperf.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +configuration.refresh_token = os.environ["OFFLINE_TOKEN_FROM_CYPERF_UI"] + +# Enter a context with an instance of the API client +with cyperf.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cyperf.DashboardsApi(api_client) + stats_dashboard_id = 'stats_dashboard_id_example' # str | The ID of the stats dashboard. + stats_dashboard = cyperf.StatsDashboard() # StatsDashboard | (optional) + + try: + api_response = api_instance.update_stats_dashboard(stats_dashboard_id, stats_dashboard=stats_dashboard) + print("The response of DashboardsApi->update_stats_dashboard:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DashboardsApi->update_stats_dashboard: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **stats_dashboard_id** | **str**| The ID of the stats dashboard. | + **stats_dashboard** | [**StatsDashboard**](StatsDashboard.md)| | [optional] + +### Return type + +[**StatsDashboard**](StatsDashboard.md) + +### Authorization + +[OAuth2](../README.md#OAuth2), [OAuth2](../README.md#OAuth2) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | The updated dashboard | - | +**403** | The initiator of the request does not have enough privileges to perform the action. | - | +**500** | Unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/docs/DataSourceDetails.md b/docs/DataSourceDetails.md new file mode 100644 index 0000000..07f04a2 --- /dev/null +++ b/docs/DataSourceDetails.md @@ -0,0 +1,31 @@ +# DataSourceDetails + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**extra_filters** | **Dict[str, str]** | Extra filters to be applied to the data source of the panel | [optional] +**name** | **str** | The name of the data source of the panel | [optional] +**timestamp_field** | **str** | The name of the timestamp field of the data source of the panel | [optional] + +## Example + +```python +from cyperf.models.data_source_details import DataSourceDetails + +# TODO update the JSON string below +json = "{}" +# create an instance of DataSourceDetails from a JSON string +data_source_details_instance = DataSourceDetails.from_json(json) +# print the JSON string representation of the object +print(DataSourceDetails.to_json()) + +# convert the object into a dict +data_source_details_dict = data_source_details_instance.to_dict() +# create an instance of DataSourceDetails from a dict +data_source_details_from_dict = DataSourceDetails.from_dict(data_source_details_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/FrontPanel.md b/docs/FrontPanel.md index 5e275fa..d1f9ac1 100644 --- a/docs/FrontPanel.md +++ b/docs/FrontPanel.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**available_fan_out_modes** | **List[str]** | A list with the current fanOut modes available for the front panel | [optional] **fan_out_mode** | **str** | The current fanOut mode of the front panel | [optional] **health_details** | [**List[HealthIssue]**](HealthIssue.md) | A list with more details regarding the health of the front panel | [optional] **healthy** | **bool** | Whether the front panel has any health issue or not | [optional] diff --git a/docs/FrontPanelsByController.md b/docs/FrontPanelsByController.md new file mode 100644 index 0000000..38d128f --- /dev/null +++ b/docs/FrontPanelsByController.md @@ -0,0 +1,30 @@ +# FrontPanelsByController + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controller_id** | **str** | The id of the controller that the front panels are part of. | [optional] +**front_panels** | **List[str]** | The front panel ids. | [optional] + +## Example + +```python +from cyperf.models.front_panels_by_controller import FrontPanelsByController + +# TODO update the JSON string below +json = "{}" +# create an instance of FrontPanelsByController from a JSON string +front_panels_by_controller_instance = FrontPanelsByController.from_json(json) +# print the JSON string representation of the object +print(FrontPanelsByController.to_json()) + +# convert the object into a dict +front_panels_by_controller_dict = front_panels_by_controller_instance.to_dict() +# create an instance of FrontPanelsByController from a dict +front_panels_by_controller_from_dict = FrontPanelsByController.from_dict(front_panels_by_controller_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetStatsDashboardChanges200Response.md b/docs/GetStatsDashboardChanges200Response.md new file mode 100644 index 0000000..dd5d542 --- /dev/null +++ b/docs/GetStatsDashboardChanges200Response.md @@ -0,0 +1,30 @@ +# GetStatsDashboardChanges200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ChangeEvent]**](ChangeEvent.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_stats_dashboard_changes200_response import GetStatsDashboardChanges200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetStatsDashboardChanges200Response from a JSON string +get_stats_dashboard_changes200_response_instance = GetStatsDashboardChanges200Response.from_json(json) +# print the JSON string representation of the object +print(GetStatsDashboardChanges200Response.to_json()) + +# convert the object into a dict +get_stats_dashboard_changes200_response_dict = get_stats_dashboard_changes200_response_instance.to_dict() +# create an instance of GetStatsDashboardChanges200Response from a dict +get_stats_dashboard_changes200_response_from_dict = GetStatsDashboardChanges200Response.from_dict(get_stats_dashboard_changes200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetStatsDashboardChanges200ResponseOneOf.md b/docs/GetStatsDashboardChanges200ResponseOneOf.md new file mode 100644 index 0000000..7183171 --- /dev/null +++ b/docs/GetStatsDashboardChanges200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetStatsDashboardChanges200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ChangeEvent]**](ChangeEvent.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_stats_dashboard_changes200_response_one_of import GetStatsDashboardChanges200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetStatsDashboardChanges200ResponseOneOf from a JSON string +get_stats_dashboard_changes200_response_one_of_instance = GetStatsDashboardChanges200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetStatsDashboardChanges200ResponseOneOf.to_json()) + +# convert the object into a dict +get_stats_dashboard_changes200_response_one_of_dict = get_stats_dashboard_changes200_response_one_of_instance.to_dict() +# create an instance of GetStatsDashboardChanges200ResponseOneOf from a dict +get_stats_dashboard_changes200_response_one_of_from_dict = GetStatsDashboardChanges200ResponseOneOf.from_dict(get_stats_dashboard_changes200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetStatsDashboards200Response.md b/docs/GetStatsDashboards200Response.md new file mode 100644 index 0000000..ea408ff --- /dev/null +++ b/docs/GetStatsDashboards200Response.md @@ -0,0 +1,30 @@ +# GetStatsDashboards200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[StatsDashboard]**](StatsDashboard.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_stats_dashboards200_response import GetStatsDashboards200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetStatsDashboards200Response from a JSON string +get_stats_dashboards200_response_instance = GetStatsDashboards200Response.from_json(json) +# print the JSON string representation of the object +print(GetStatsDashboards200Response.to_json()) + +# convert the object into a dict +get_stats_dashboards200_response_dict = get_stats_dashboards200_response_instance.to_dict() +# create an instance of GetStatsDashboards200Response from a dict +get_stats_dashboards200_response_from_dict = GetStatsDashboards200Response.from_dict(get_stats_dashboards200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetStatsDashboards200ResponseOneOf.md b/docs/GetStatsDashboards200ResponseOneOf.md new file mode 100644 index 0000000..88ad754 --- /dev/null +++ b/docs/GetStatsDashboards200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetStatsDashboards200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[StatsDashboard]**](StatsDashboard.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_stats_dashboards200_response_one_of import GetStatsDashboards200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetStatsDashboards200ResponseOneOf from a JSON string +get_stats_dashboards200_response_one_of_instance = GetStatsDashboards200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetStatsDashboards200ResponseOneOf.to_json()) + +# convert the object into a dict +get_stats_dashboards200_response_one_of_dict = get_stats_dashboards200_response_one_of_instance.to_dict() +# create an instance of GetStatsDashboards200ResponseOneOf from a dict +get_stats_dashboards200_response_one_of_from_dict = GetStatsDashboards200ResponseOneOf.from_dict(get_stats_dashboards200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GridPosition.md b/docs/GridPosition.md new file mode 100644 index 0000000..3d58afa --- /dev/null +++ b/docs/GridPosition.md @@ -0,0 +1,32 @@ +# GridPosition + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**height** | **int** | The height of the panel. A unit is equal to 30 pixels | [optional] +**width** | **int** | The width of the panel. A unit is equal to 1/24 of the screen width | [optional] +**x_pos** | **int** | The x coordinate of the panel. A unit is equal to 1/24 of the screen width | [optional] +**y_pos** | **int** | The y coordinate of the panel. A unit is equal to 30 pixels | [optional] + +## Example + +```python +from cyperf.models.grid_position import GridPosition + +# TODO update the JSON string below +json = "{}" +# create an instance of GridPosition from a JSON string +grid_position_instance = GridPosition.from_json(json) +# print the JSON string representation of the object +print(GridPosition.to_json()) + +# convert the object into a dict +grid_position_dict = grid_position_instance.to_dict() +# create an instance of GridPosition from a dict +grid_position_from_dict = GridPosition.from_dict(grid_position_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/MetricsList.md b/docs/MetricsList.md new file mode 100644 index 0000000..daab537 --- /dev/null +++ b/docs/MetricsList.md @@ -0,0 +1,30 @@ +# MetricsList + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**dashboard_id** | **str** | The id of the dashboard with these metrics | [optional] +**metrics** | [**List[AdvancedMetric]**](AdvancedMetric.md) | The list of metrics in the specified dashboard | [optional] + +## Example + +```python +from cyperf.models.metrics_list import MetricsList + +# TODO update the JSON string below +json = "{}" +# create an instance of MetricsList from a JSON string +metrics_list_instance = MetricsList.from_json(json) +# print the JSON string representation of the object +print(MetricsList.to_json()) + +# convert the object into a dict +metrics_list_dict = metrics_list_instance.to_dict() +# create an instance of MetricsList from a dict +metrics_list_from_dict = MetricsList.from_dict(metrics_list_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/Panel.md b/docs/Panel.md new file mode 100644 index 0000000..463ce3e --- /dev/null +++ b/docs/Panel.md @@ -0,0 +1,37 @@ +# Panel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**filters** | **List[Dict[str, AppsecAppMetadataKeywordsInner]]** | The filters to be applied to the panel stats | [optional] +**group_by** | [**List[AdvancedMetric]**](AdvancedMetric.md) | The stats to be used as group by clauses | [optional] +**limit** | **int** | The maximum number of stats to be generated in a certain interval | [optional] +**metrics** | [**List[AdvancedMetric]**](AdvancedMetric.md) | The stats to be displayed in the panel | [optional] +**panel_data_source** | [**DataSourceDetails**](DataSourceDetails.md) | | [optional] +**panel_type** | **str** | The type of the panel | [optional] +**position** | [**GridPosition**](GridPosition.md) | | [optional] +**stats_sources** | **List[str]** | The sources of the statistics based on the panel configuration | [optional] +**title** | **str** | The title of the panel | [optional] + +## Example + +```python +from cyperf.models.panel import Panel + +# TODO update the JSON string below +json = "{}" +# create an instance of Panel from a JSON string +panel_instance = Panel.from_json(json) +# print the JSON string representation of the object +print(Panel.to_json()) + +# convert the object into a dict +panel_dict = panel_instance.to_dict() +# create an instance of Panel from a dict +panel_from_dict = Panel.from_dict(panel_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SetControllerAppOperation.md b/docs/SetControllerAppOperation.md index a30cc4e..e3d90ba 100644 --- a/docs/SetControllerAppOperation.md +++ b/docs/SetControllerAppOperation.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **app_id** | **str** | The id of the app to activate on the controllers. | [optional] **controllers** | **List[str]** | The controller ids for which to activate the app. | [optional] -**force** | **bool** | Whether the ownership information will be cleared or not. | [optional] +**force_clear_ownership** | **bool** | Whether the ownership information will be cleared or not. | [optional] ## Example diff --git a/docs/SetFanOutModeOperation.md b/docs/SetFanOutModeOperation.md new file mode 100644 index 0000000..d9f8ab3 --- /dev/null +++ b/docs/SetFanOutModeOperation.md @@ -0,0 +1,31 @@ +# SetFanOutModeOperation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**controllers** | [**List[FrontPanelsByController]**](FrontPanelsByController.md) | The controllers that the front panels are part of. | [optional] +**fan_out_mode** | **str** | The desired fanOut mode. | [optional] +**force_clear_ownership** | **bool** | Whether the ownership information of reserved ports will be cleared before switching the fanOut mode. | [optional] + +## Example + +```python +from cyperf.models.set_fan_out_mode_operation import SetFanOutModeOperation + +# TODO update the JSON string below +json = "{}" +# create an instance of SetFanOutModeOperation from a JSON string +set_fan_out_mode_operation_instance = SetFanOutModeOperation.from_json(json) +# print the JSON string representation of the object +print(SetFanOutModeOperation.to_json()) + +# convert the object into a dict +set_fan_out_mode_operation_dict = set_fan_out_mode_operation_instance.to_dict() +# create an instance of SetFanOutModeOperation from a dict +set_fan_out_mode_operation_from_dict = SetFanOutModeOperation.from_dict(set_fan_out_mode_operation_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/SetNodesAppOperation.md b/docs/SetNodesAppOperation.md index 21446da..793bfef 100644 --- a/docs/SetNodesAppOperation.md +++ b/docs/SetNodesAppOperation.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **app_id** | **str** | The id of the app to activate on the compute nodes. | [optional] **controllers** | [**List[NodesByController]**](NodesByController.md) | The controllers that the compute nodes are part of. | [optional] -**force** | **bool** | Whether the ownership information will be cleared or not. | [optional] +**force_clear_ownership** | **bool** | Whether the ownership information will be cleared or not. | [optional] ## Example diff --git a/docs/StatsDashboard.md b/docs/StatsDashboard.md new file mode 100644 index 0000000..cf3d85f --- /dev/null +++ b/docs/StatsDashboard.md @@ -0,0 +1,39 @@ +# StatsDashboard + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**changes** | [**List[ChangeEvent]**](ChangeEvent.md) | The changes hook | [optional] +**group_id** | **str** | The group identifier of the dashboard | [optional] +**id** | **str** | The unique identifier of the dashboard | [optional] +**links** | [**List[APILink]**](APILink.md) | | [optional] +**metrics** | [**MetricsList**](MetricsList.md) | | [optional] +**name** | **str** | The name of the dashboard | [optional] +**owner** | **str** | The friendly display name of the entity that created the dashboard | [optional] [readonly] +**owner_id** | **str** | The unique identifier of the entity that created the dashboard | [optional] [readonly] +**panels** | [**List[Panel]**](Panel.md) | The list of panels in the dashboard | [optional] +**read_only** | **bool** | Is a read only dashboard | [optional] +**type** | **str** | The application type of the dashboard | [optional] + +## Example + +```python +from cyperf.models.stats_dashboard import StatsDashboard + +# TODO update the JSON string below +json = "{}" +# create an instance of StatsDashboard from a JSON string +stats_dashboard_instance = StatsDashboard.from_json(json) +# print the JSON string representation of the object +print(StatsDashboard.to_json()) + +# convert the object into a dict +stats_dashboard_dict = stats_dashboard_instance.to_dict() +# create an instance of StatsDashboard from a dict +stats_dashboard_from_dict = StatsDashboard.from_dict(stats_dashboard_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + From 33b5bb18a038fe4a775d52c57aebb2522af2efb6 Mon Sep 17 00:00:00 2001 From: Luca Muntean Date: Fri, 21 Aug 2026 06:20:57 -0600 Subject: [PATCH 20/26] Pull request #86: ISGAPPSEC2-39685 Fix integration tests for python 3.9 Merge in ISGAPPSEC/cyperf-api-wrapper from fix-integration-tests-wrapper to main Squashed commit of the following: commit 823389eb9ecba52537b7033f516c61f657d6669f Author: lucamunt Date: Thu Aug 20 16:12:51 2026 +0300 fix integration tests for python 3.9 --- cyperf/dynamic_model_meta.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cyperf/dynamic_model_meta.py b/cyperf/dynamic_model_meta.py index e45cc20..2e55b58 100644 --- a/cyperf/dynamic_model_meta.py +++ b/cyperf/dynamic_model_meta.py @@ -254,9 +254,9 @@ def __new__(cls, name, bases, dct): list_fields = [] if not_method: - list_match = re.search(r"List\[(\w+)\]", field_str) + list_match = re.search(r"List\[([\w.]+)\]", field_str) if list_match: - inner_type = list_match.group(1) + inner_type = list_match.group(1).rsplit(".", 1)[-1] if inner_type not in ignored_types: list_fields.append([inner_type, field.alias]) @@ -265,11 +265,11 @@ def __new__(cls, name, bases, dct): for child_key, _ in child_fields.items(): parts = cls.extract_x_operation(child_key, child_private_attrs) - + if parts: if len(parts) == 1 or (len(parts) == 2 and parts[1].strip() == "-"): child_method_name = child_key + "_" + child_name.lower() - dct[child_method_name] = cls.generate_method(child_key, 'POST', True, child_alias) + dct[child_method_name] = cls.generate_method(child_key, 'POST', True, child_alias) parts = cls.extract_x_operation(key, private_attrs) if parts: @@ -319,7 +319,7 @@ def init(cls, self, base_model): def to_str(cls, self) -> str: """Returns the string representation of the actual instance""" return f"{self.base_model}" - + @classmethod def repr(cls, self) -> str: """Returns the string representation of the actual instance""" @@ -537,7 +537,7 @@ def extract_x_operation(cls, key, private_attrs): private_attr_obj = private_attrs[extra_attr_name] if hasattr(private_attr_obj, 'default'): extra = private_attr_obj.default or {} - + operation_raw = extra.get("x-operation") if operation_raw: parts = operation_raw.split(",") @@ -554,7 +554,7 @@ def operation(self, *args, **kwargs): derived_href = self_link.href.rstrip("/") + f"/{child_inner_model}" f"/operations/{link_name.replace('_', '-')}" else: derived_href = self_link.href.rstrip("/") + f"/operations/{link_name.replace('_', '-')}" - + link_class = type(self.links[0]) if self.links else type(self_link) new_link = link_class( href=derived_href, From d59b1c4b3ba69dc0c60f938e2eff5d55c3d34241 Mon Sep 17 00:00:00 2001 From: Angela Grigoroaia Date: Mon, 24 Aug 2026 17:19:07 +0300 Subject: [PATCH 21/26] ISGAPPSEC2-39664: Update to KB v3.5.0 What: update metadata for KB version & .gitignore --- .claude/knowledge-base/.generated-manifest.md | 14 +++++++++++++- .claude/knowledge-base/USAGE.md | 6 +++--- .gitignore | 1 + 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.claude/knowledge-base/.generated-manifest.md b/.claude/knowledge-base/.generated-manifest.md index e62869f..94c8d51 100644 --- a/.claude/knowledge-base/.generated-manifest.md +++ b/.claude/knowledge-base/.generated-manifest.md @@ -37,7 +37,7 @@ Generated: 2026-07-09 | .claude/hooks/block_sensitive.py | hook | block-sensitive (helper script) | — | 3.4.0 | | .claude/hooks/lint_on_save.py | hook | lint-on-save (helper script) | — | 3.4.0 | | CLAUDE.md | readme | claude-md | — | 3.4.0 | -| .claude/knowledge-base/USAGE.md | readme | usage | — | 3.4.0 | +| .claude/knowledge-base/USAGE.md | readme | usage | — | 3.5.0 | ## Artifacts intentionally not generated @@ -52,6 +52,18 @@ Validation: passed — all 16 mandatory artifacts + 1 conditional (`deploy`, jus ## Incremental Update Log +### 2026-08-24 — Finish v3.5.0 upgrade: bring `USAGE.md` up to the current plugin version +Tooling/template refresh only — no discovery, no IQ/EQ, no re-analysis. The 2026-07-09 layout migration bumped the KB body (index README + all 10 `sections/*.md`) to plugin v3.5.0 but left `USAGE.md` stamped at plugin v3.4.0, leaving the KB in a mixed-version state. This entry closes that gap. + +- **Template check**: `skills/generate-tooling/references/usage-readme.md` is **byte-identical** between plugin v3.4.0 and v3.5.0 (md5 `2540c311d609c692fc36e2bfe2220225`, 5408 bytes both). The v3.5.0 CHANGELOG is entirely about the monolithic→split KB layout migration, which this repo already completed. So there was no template change to apply — the correction is a version stamp plus one KB-consistency fix. +- **`USAGE.md`**: generation marker and the `Generated: … | Plugin: …` line moved from plugin v3.4.0 → v3.5.0. The `Generated: 2026-07-09` date is preserved, matching how `README.md` was handled during the layout migration. +- **`USAGE.md` content refresh**: the `/document samples/` scenario listed only 5 sample scripts; `sections/file-index.md` and the working tree both report 7. Added the two missing entries (`sample_sequences_examples.py`, `samples/appbuilder/sample_appbuilder_examples.py`) so the usage guide agrees with the file index. No other prose changed. +- **Manifest**: the `USAGE.md` row's Version column moved 3.4.0 → 3.5.0. + +**Deliberately not changed**: the rows for `.claude/skills/*`, `.claude/agents/*`, `.claude/commands/*`, `.claude/settings.json`, `.claude/hooks/*`, and `CLAUDE.md` still read 3.4.0. Those artifacts are **absent from disk and from the entire git history** of this repo — the KB commit only ever contained the 13 `.claude/knowledge-base/**` files. Restamping rows for artifacts that were never generated here would be false provenance, so they are left as the historical record. Regenerating those 16 mandatory artifacts is a separate decision, not part of a version-stamp refresh. + +**Known drift (not addressed here, flagged for a future `incremental-discover`)**: `HEAD` has advanced past the 2026-07-31 refresh baseline (`835526c`). Tracked counts are now 438 model files and 454 doc pages, while the KB body still states 454 models / 469 docs. Correcting those figures is content re-analysis and was out of scope for this upgrade. + ### 2026-07-17 — Incremental content patch for 2 landed commits (no re-discovery/IQ/EQ) Two commits landed on `main` since the 2026-07-09 generation baseline (`0affc87`), both after the KB commit was authored: `d8f08be` ("Regenerate Python API Wrapper", PR #78, 2026-07-10) and `d56047c` ("ISGAPPSEC2-38156 sample script for appbuilder", PR #77, 2026-07-14). This patch updates only the counts/facts touched by those two commits — no fresh discovery pass, no IQ/EQ re-run (both remain "not yet evaluated"). diff --git a/.claude/knowledge-base/USAGE.md b/.claude/knowledge-base/USAGE.md index 3892e52..c727d08 100644 --- a/.claude/knowledge-base/USAGE.md +++ b/.claude/knowledge-base/USAGE.md @@ -1,7 +1,7 @@ - + # Usage Guide for cyperf-api-wrapper -Generated: 2026-07-09 | Plugin: knowledge-base v3.4.0 +Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 --- @@ -53,7 +53,7 @@ Generated: 2026-07-09 | Plugin: knowledge-base v3.4.0 **Run**: `/document samples/` -**What happens**: The document skill reads `samples/*.py` (the only hand-written usage examples in the repo — `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`, `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`), infers the two idiomatic call styles already used, and writes/updates guidance rather than touching the generator-owned `README.md`/`docs/*.md` (443 model docs + per-API-class docs), which would simply be clobbered on the next OpenAPI regeneration. +**What happens**: The document skill reads `samples/*.py` (the only hand-written usage examples in the repo — `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`, `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`, `sample_sequences_examples.py`, plus `samples/appbuilder/sample_appbuilder_examples.py`), infers the two idiomatic call styles already used, and writes/updates guidance rather than touching the generator-owned `README.md`/`docs/*.md` (443 model docs + per-API-class docs), which would simply be clobbered on the next OpenAPI regeneration. --- diff --git a/.gitignore b/.gitignore index 322da87..aae665e 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,4 @@ target/ # Claude Code local settings .claude/settings.local.json +.claude/settings.json From de30a5992c0b21170ed4e4a00493dd17227f225b Mon Sep 17 00:00:00 2001 From: Stingescu Andrei Petrut Date: Thu, 27 Aug 2026 05:00:31 -0600 Subject: [PATCH 22/26] Pull request #88: Regenerate the python wrapper based on openApi release doc Merge in ISGAPPSEC/cyperf-api-wrapper from ISGAPPSEC2-39780-regenerate-python-wrapper to main Squashed commit of the following: commit 8b660a6f28e4a36658752562e5b4c101c6e4dc0e Author: stinandr Date: Wed Aug 26 17:02:12 2026 +0300 revert ipsec multi_p2_over_p1 change commit 364121ebc001727b482cad2d2106bdb735afbf66 Author: stinandr Date: Tue Aug 25 16:45:34 2026 +0300 Regenerate the python wrapper based on openApi release doc --- README.md | 8 + cyperf/__init__.py | 8 + cyperf/api/agents_api.py | 69 +++++--- cyperf/dynamic_models/__init__.py | 8 + cyperf/models/__init__.py | 8 + cyperf/models/agent.py | 4 +- .../agent_assignment_by_front_panel_port.py | 2 +- cyperf/models/chassis_info.py | 8 +- cyperf/models/dns_resolver.py | 2 +- ...pute_node_compute_resources200_response.py | 147 ++++++++++++++++++ ...de_compute_resources200_response_one_of.py | 103 ++++++++++++ .../get_compute_node_ports200_response.py | 147 ++++++++++++++++++ ...t_compute_node_ports200_response_one_of.py | 103 ++++++++++++ ...et_controller_compute_nodes200_response.py | 147 ++++++++++++++++++ ...roller_compute_nodes200_response_one_of.py | 103 ++++++++++++ ...get_controller_front_panels200_response.py | 147 ++++++++++++++++++ ...troller_front_panels200_response_one_of.py | 103 ++++++++++++ cyperf/models/load_config_operation.py | 2 +- cyperf/models/profile.py | 2 +- docs/Agent.md | 1 - docs/AgentAssignmentByFrontPanelPort.md | 2 +- docs/AgentsApi.md | 50 +++--- docs/ChassisInfo.md | 1 + docs/DNSResolver.md | 2 +- ...tComputeNodeComputeResources200Response.md | 30 ++++ ...uteNodeComputeResources200ResponseOneOf.md | 30 ++++ docs/GetComputeNodePorts200Response.md | 30 ++++ docs/GetComputeNodePorts200ResponseOneOf.md | 30 ++++ docs/GetControllerComputeNodes200Response.md | 30 ++++ ...tControllerComputeNodes200ResponseOneOf.md | 30 ++++ docs/GetControllerFrontPanels200Response.md | 30 ++++ ...etControllerFrontPanels200ResponseOneOf.md | 30 ++++ docs/LoadConfigOperation.md | 2 +- docs/Profile.md | 2 +- 34 files changed, 1362 insertions(+), 59 deletions(-) create mode 100644 cyperf/models/get_compute_node_compute_resources200_response.py create mode 100644 cyperf/models/get_compute_node_compute_resources200_response_one_of.py create mode 100644 cyperf/models/get_compute_node_ports200_response.py create mode 100644 cyperf/models/get_compute_node_ports200_response_one_of.py create mode 100644 cyperf/models/get_controller_compute_nodes200_response.py create mode 100644 cyperf/models/get_controller_compute_nodes200_response_one_of.py create mode 100644 cyperf/models/get_controller_front_panels200_response.py create mode 100644 cyperf/models/get_controller_front_panels200_response_one_of.py create mode 100644 docs/GetComputeNodeComputeResources200Response.md create mode 100644 docs/GetComputeNodeComputeResources200ResponseOneOf.md create mode 100644 docs/GetComputeNodePorts200Response.md create mode 100644 docs/GetComputeNodePorts200ResponseOneOf.md create mode 100644 docs/GetControllerComputeNodes200Response.md create mode 100644 docs/GetControllerComputeNodes200ResponseOneOf.md create mode 100644 docs/GetControllerFrontPanels200Response.md create mode 100644 docs/GetControllerFrontPanels200ResponseOneOf.md diff --git a/README.md b/README.md index d7772cc..ed9d422 100644 --- a/README.md +++ b/README.md @@ -591,12 +591,20 @@ Class | Method | HTTP request | Description - [GetBrokers200Response](docs/GetBrokers200Response.md) - [GetBrokers200ResponseOneOf](docs/GetBrokers200ResponseOneOf.md) - [GetCategoriesOperation](docs/GetCategoriesOperation.md) + - [GetComputeNodeComputeResources200Response](docs/GetComputeNodeComputeResources200Response.md) + - [GetComputeNodeComputeResources200ResponseOneOf](docs/GetComputeNodeComputeResources200ResponseOneOf.md) + - [GetComputeNodePorts200Response](docs/GetComputeNodePorts200Response.md) + - [GetComputeNodePorts200ResponseOneOf](docs/GetComputeNodePorts200ResponseOneOf.md) - [GetConfigCategorieSubcategories200Response](docs/GetConfigCategorieSubcategories200Response.md) - [GetConfigCategorieSubcategories200ResponseOneOf](docs/GetConfigCategorieSubcategories200ResponseOneOf.md) - [GetConfigCategories200Response](docs/GetConfigCategories200Response.md) - [GetConfigCategories200ResponseOneOf](docs/GetConfigCategories200ResponseOneOf.md) - [GetConfigs200Response](docs/GetConfigs200Response.md) - [GetConfigs200ResponseOneOf](docs/GetConfigs200ResponseOneOf.md) + - [GetControllerComputeNodes200Response](docs/GetControllerComputeNodes200Response.md) + - [GetControllerComputeNodes200ResponseOneOf](docs/GetControllerComputeNodes200ResponseOneOf.md) + - [GetControllerFrontPanels200Response](docs/GetControllerFrontPanels200Response.md) + - [GetControllerFrontPanels200ResponseOneOf](docs/GetControllerFrontPanels200ResponseOneOf.md) - [GetControllers200Response](docs/GetControllers200Response.md) - [GetControllers200ResponseOneOf](docs/GetControllers200ResponseOneOf.md) - [GetDiskUsageConsumers200Response](docs/GetDiskUsageConsumers200Response.md) diff --git a/cyperf/__init__.py b/cyperf/__init__.py index b0f6420..dd96614 100644 --- a/cyperf/__init__.py +++ b/cyperf/__init__.py @@ -238,12 +238,20 @@ from cyperf.models.get_brokers200_response import GetBrokers200Response from cyperf.models.get_brokers200_response_one_of import GetBrokers200ResponseOneOf from cyperf.models.get_categories_operation import GetCategoriesOperation +from cyperf.models.get_compute_node_compute_resources200_response import GetComputeNodeComputeResources200Response +from cyperf.models.get_compute_node_compute_resources200_response_one_of import GetComputeNodeComputeResources200ResponseOneOf +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response +from cyperf.models.get_compute_node_ports200_response_one_of import GetComputeNodePorts200ResponseOneOf from cyperf.models.get_config_categorie_subcategories200_response import GetConfigCategorieSubcategories200Response from cyperf.models.get_config_categorie_subcategories200_response_one_of import GetConfigCategorieSubcategories200ResponseOneOf from cyperf.models.get_config_categories200_response import GetConfigCategories200Response from cyperf.models.get_config_categories200_response_one_of import GetConfigCategories200ResponseOneOf from cyperf.models.get_configs200_response import GetConfigs200Response from cyperf.models.get_configs200_response_one_of import GetConfigs200ResponseOneOf +from cyperf.models.get_controller_compute_nodes200_response import GetControllerComputeNodes200Response +from cyperf.models.get_controller_compute_nodes200_response_one_of import GetControllerComputeNodes200ResponseOneOf +from cyperf.models.get_controller_front_panels200_response import GetControllerFrontPanels200Response +from cyperf.models.get_controller_front_panels200_response_one_of import GetControllerFrontPanels200ResponseOneOf from cyperf.models.get_controllers200_response import GetControllers200Response from cyperf.models.get_controllers200_response_one_of import GetControllers200ResponseOneOf from cyperf.models.get_disk_usage_consumers200_response import GetDiskUsageConsumers200Response diff --git a/cyperf/api/agents_api.py b/cyperf/api/agents_api.py index 66bef7b..a848be2 100644 --- a/cyperf/api/agents_api.py +++ b/cyperf/api/agents_api.py @@ -32,6 +32,10 @@ from cyperf.models.front_panel import FrontPanel from cyperf.models.get_agents200_response import GetAgents200Response from cyperf.models.get_agents_tags200_response import GetAgentsTags200Response +from cyperf.models.get_compute_node_compute_resources200_response import GetComputeNodeComputeResources200Response +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response +from cyperf.models.get_controller_compute_nodes200_response import GetControllerComputeNodes200Response +from cyperf.models.get_controller_front_panels200_response import GetControllerFrontPanels200Response from cyperf.models.get_controllers200_response import GetControllers200Response from cyperf.models.nodes_power_cycle_operation import NodesPowerCycleOperation from cyperf.models.port import Port @@ -1523,9 +1527,10 @@ def get_compute_node_compute_resources( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[ComputeResource]: + ) -> GetComputeNodeComputeResources200Response: """get_compute_node_compute_resources + Get the compute resources of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -1569,7 +1574,7 @@ def get_compute_node_compute_resources( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeResource]", + '200': "GetComputeNodeComputeResources200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1598,9 +1603,10 @@ def get_compute_node_compute_resources_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[ComputeResource]]: + ) -> ApiResponse[GetComputeNodeComputeResources200Response]: """get_compute_node_compute_resources + Get the compute resources of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -1644,7 +1650,7 @@ def get_compute_node_compute_resources_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeResource]", + '200': "GetComputeNodeComputeResources200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -1676,6 +1682,7 @@ def get_compute_node_compute_resources_without_preload_content( ) -> RESTResponseType: """get_compute_node_compute_resources + Get the compute resources of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -1719,7 +1726,7 @@ def get_compute_node_compute_resources_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeResource]", + '200': "GetComputeNodeComputeResources200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2109,9 +2116,10 @@ def get_compute_node_ports( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[Port]: + ) -> GetComputeNodePorts200Response: """get_compute_node_ports + Get the ports of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -2155,7 +2163,7 @@ def get_compute_node_ports( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2184,9 +2192,10 @@ def get_compute_node_ports_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[Port]]: + ) -> ApiResponse[GetComputeNodePorts200Response]: """get_compute_node_ports + Get the ports of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -2230,7 +2239,7 @@ def get_compute_node_ports_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2262,6 +2271,7 @@ def get_compute_node_ports_without_preload_content( ) -> RESTResponseType: """get_compute_node_ports + Get the ports of a compute node. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -2305,7 +2315,7 @@ def get_compute_node_ports_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -2934,9 +2944,10 @@ def get_controller_compute_nodes( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[ComputeNode]: + ) -> GetControllerComputeNodes200Response: """get_controller_compute_nodes + Get the compute nodes chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -2977,7 +2988,7 @@ def get_controller_compute_nodes( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "GetControllerComputeNodes200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3005,9 +3016,10 @@ def get_controller_compute_nodes_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[ComputeNode]]: + ) -> ApiResponse[GetControllerComputeNodes200Response]: """get_controller_compute_nodes + Get the compute nodes chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -3048,7 +3060,7 @@ def get_controller_compute_nodes_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "GetControllerComputeNodes200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3079,6 +3091,7 @@ def get_controller_compute_nodes_without_preload_content( ) -> RESTResponseType: """get_controller_compute_nodes + Get the compute nodes chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -3119,7 +3132,7 @@ def get_controller_compute_nodes_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[ComputeNode]", + '200': "GetControllerComputeNodes200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3490,9 +3503,10 @@ def get_controller_front_panels( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[FrontPanel]: + ) -> GetControllerFrontPanels200Response: """get_controller_front_panels + Get the front panels chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -3533,7 +3547,7 @@ def get_controller_front_panels( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FrontPanel]", + '200': "GetControllerFrontPanels200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3561,9 +3575,10 @@ def get_controller_front_panels_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[FrontPanel]]: + ) -> ApiResponse[GetControllerFrontPanels200Response]: """get_controller_front_panels + Get the front panels chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -3604,7 +3619,7 @@ def get_controller_front_panels_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FrontPanel]", + '200': "GetControllerFrontPanels200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -3635,6 +3650,7 @@ def get_controller_front_panels_without_preload_content( ) -> RESTResponseType: """get_controller_front_panels + Get the front panels chain. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -3675,7 +3691,7 @@ def get_controller_front_panels_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[FrontPanel]", + '200': "GetControllerFrontPanels200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -4353,9 +4369,10 @@ def get_front_panel_ports( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> List[Port]: + ) -> GetComputeNodePorts200Response: """get_front_panel_ports + Get the ports of a front panel. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -4399,7 +4416,7 @@ def get_front_panel_ports( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -4428,9 +4445,10 @@ def get_front_panel_ports_with_http_info( _content_type: Optional[StrictStr] = None, _headers: Optional[Dict[StrictStr, Any]] = None, _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0, - ) -> ApiResponse[List[Port]]: + ) -> ApiResponse[GetComputeNodePorts200Response]: """get_front_panel_ports + Get the ports of a front panel. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -4474,7 +4492,7 @@ def get_front_panel_ports_with_http_info( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( @@ -4506,6 +4524,7 @@ def get_front_panel_ports_without_preload_content( ) -> RESTResponseType: """get_front_panel_ports + Get the ports of a front panel. :param controller_id: The ID of the controller. (required) :type controller_id: str @@ -4549,7 +4568,7 @@ def get_front_panel_ports_without_preload_content( ) _response_types_map: Dict[str, Optional[str]] = { - '200': "List[Port]", + '200': "GetComputeNodePorts200Response", '500': "ErrorResponse", } return self.api_client.call_api( diff --git a/cyperf/dynamic_models/__init__.py b/cyperf/dynamic_models/__init__.py index 536bfb0..bcea570 100644 --- a/cyperf/dynamic_models/__init__.py +++ b/cyperf/dynamic_models/__init__.py @@ -203,12 +203,20 @@ GetBrokers200Response = DynamicModel('GetBrokers200Response', (), {} ) GetBrokers200ResponseOneOf = DynamicModel('GetBrokers200ResponseOneOf', (), {} ) GetCategoriesOperation = DynamicModel('GetCategoriesOperation', (), {} ) +GetComputeNodeComputeResources200Response = DynamicModel('GetComputeNodeComputeResources200Response', (), {} ) +GetComputeNodeComputeResources200ResponseOneOf = DynamicModel('GetComputeNodeComputeResources200ResponseOneOf', (), {} ) +GetComputeNodePorts200Response = DynamicModel('GetComputeNodePorts200Response', (), {} ) +GetComputeNodePorts200ResponseOneOf = DynamicModel('GetComputeNodePorts200ResponseOneOf', (), {} ) GetConfigCategorieSubcategories200Response = DynamicModel('GetConfigCategorieSubcategories200Response', (), {} ) GetConfigCategorieSubcategories200ResponseOneOf = DynamicModel('GetConfigCategorieSubcategories200ResponseOneOf', (), {} ) GetConfigCategories200Response = DynamicModel('GetConfigCategories200Response', (), {} ) GetConfigCategories200ResponseOneOf = DynamicModel('GetConfigCategories200ResponseOneOf', (), {} ) GetConfigs200Response = DynamicModel('GetConfigs200Response', (), {} ) GetConfigs200ResponseOneOf = DynamicModel('GetConfigs200ResponseOneOf', (), {} ) +GetControllerComputeNodes200Response = DynamicModel('GetControllerComputeNodes200Response', (), {} ) +GetControllerComputeNodes200ResponseOneOf = DynamicModel('GetControllerComputeNodes200ResponseOneOf', (), {} ) +GetControllerFrontPanels200Response = DynamicModel('GetControllerFrontPanels200Response', (), {} ) +GetControllerFrontPanels200ResponseOneOf = DynamicModel('GetControllerFrontPanels200ResponseOneOf', (), {} ) GetControllers200Response = DynamicModel('GetControllers200Response', (), {} ) GetControllers200ResponseOneOf = DynamicModel('GetControllers200ResponseOneOf', (), {} ) GetDiskUsageConsumers200Response = DynamicModel('GetDiskUsageConsumers200Response', (), {} ) diff --git a/cyperf/models/__init__.py b/cyperf/models/__init__.py index 5225f22..a401464 100644 --- a/cyperf/models/__init__.py +++ b/cyperf/models/__init__.py @@ -203,12 +203,20 @@ class LinkNameException(Exception): from cyperf.models.get_brokers200_response import GetBrokers200Response from cyperf.models.get_brokers200_response_one_of import GetBrokers200ResponseOneOf from cyperf.models.get_categories_operation import GetCategoriesOperation +from cyperf.models.get_compute_node_compute_resources200_response import GetComputeNodeComputeResources200Response +from cyperf.models.get_compute_node_compute_resources200_response_one_of import GetComputeNodeComputeResources200ResponseOneOf +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response +from cyperf.models.get_compute_node_ports200_response_one_of import GetComputeNodePorts200ResponseOneOf from cyperf.models.get_config_categorie_subcategories200_response import GetConfigCategorieSubcategories200Response from cyperf.models.get_config_categorie_subcategories200_response_one_of import GetConfigCategorieSubcategories200ResponseOneOf from cyperf.models.get_config_categories200_response import GetConfigCategories200Response from cyperf.models.get_config_categories200_response_one_of import GetConfigCategories200ResponseOneOf from cyperf.models.get_configs200_response import GetConfigs200Response from cyperf.models.get_configs200_response_one_of import GetConfigs200ResponseOneOf +from cyperf.models.get_controller_compute_nodes200_response import GetControllerComputeNodes200Response +from cyperf.models.get_controller_compute_nodes200_response_one_of import GetControllerComputeNodes200ResponseOneOf +from cyperf.models.get_controller_front_panels200_response import GetControllerFrontPanels200Response +from cyperf.models.get_controller_front_panels200_response_one_of import GetControllerFrontPanels200ResponseOneOf from cyperf.models.get_controllers200_response import GetControllers200Response from cyperf.models.get_controllers200_response_one_of import GetControllers200ResponseOneOf from cyperf.models.get_disk_usage_consumers200_response import GetDiskUsageConsumers200Response diff --git a/cyperf/models/agent.py b/cyperf/models/agent.py index 319e667..72f8377 100644 --- a/cyperf/models/agent.py +++ b/cyperf/models/agent.py @@ -42,7 +42,6 @@ class Agent(BaseModel): last_update: Optional[StrictInt] = Field(default=None, description="A Unix timestamp that indicates when the agent was last updated", alias="LastUpdate") port_id_format: Optional[StrictStr] = Field(default=None, description="port agent id format", alias="PortIDFormat") reservation_id: Optional[StrictStr] = Field(default=None, description="The ID of the reservation", alias="ReservationID") - resource_name_format: Optional[StrictStr] = Field(default=None, description="display agent resource name format", alias="ResourceNameFormat") selected_env: Optional[SelectedEnv] = Field(default=None, alias="SelectedEnv") selection_status: Optional[StrictStr] = Field(default=None, description="The current status of the selection operation", alias="SelectionStatus") session_name: Optional[StrictStr] = Field(default=None, description="The session's name where the agent is running", alias="SessionName") @@ -63,7 +62,7 @@ class Agent(BaseModel): requires_updating: Optional[StrictBool] = Field(default=None, description="A flag indicating whether the agent is not using the recommended version", alias="requiresUpdating") system_info: Optional[SystemInfo] = Field(default=None, alias="systemInfo") links: Optional[List[APILink]] = None - __properties: ClassVar[List[str]] = ["AgentTags", "DisplayNameFormat", "IP", "Interfaces", "LastUpdate", "PortIDFormat", "ReservationID", "ResourceNameFormat", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] + __properties: ClassVar[List[str]] = ["AgentTags", "DisplayNameFormat", "IP", "Interfaces", "LastUpdate", "PortIDFormat", "ReservationID", "SelectedEnv", "SelectionStatus", "SessionName", "Status", "configuredProxy", "cpuInfo", "dpdkEnabled", "features", "hostname", "id", "memoryMB", "mgmtInterface", "ntpInfo", "offline", "owner", "ownerId", "packageVersionStatus", "requiresUpdating", "systemInfo", "links"] model_config = ConfigDict( populate_by_name=True, @@ -191,7 +190,6 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "LastUpdate": obj.get("LastUpdate"), "PortIDFormat": obj.get("PortIDFormat"), "ReservationID": obj.get("ReservationID"), - "ResourceNameFormat": obj.get("ResourceNameFormat"), "SelectedEnv": SelectedEnv.from_dict(obj["SelectedEnv"]) if obj.get("SelectedEnv") is not None else None, "SelectionStatus": obj.get("SelectionStatus"), "SessionName": obj.get("SessionName"), diff --git a/cyperf/models/agent_assignment_by_front_panel_port.py b/cyperf/models/agent_assignment_by_front_panel_port.py index 4ed8dc3..e1e81b0 100644 --- a/cyperf/models/agent_assignment_by_front_panel_port.py +++ b/cyperf/models/agent_assignment_by_front_panel_port.py @@ -31,7 +31,7 @@ class AgentAssignmentByFrontPanelPort(BaseModel): Details of an agent assignment by front panel port """ # noqa: E501 capture_settings: Optional[CaptureSettings] = Field(default=None, description="The capture settings of the front panel port that is assigned.", alias="captureSettings") - compute_resources_by_type: Optional[Dict[str, StrictInt]] = Field(default=None, description="The number of compute resources to assign per compute node type.", alias="computeResourcesByType") + compute_resources_by_type: Optional[Dict[str, StrictInt]] = Field(default=None, description="The number of compute resources to assign per compute node type name + aggregation mode. Each key must be formatted as ':'.", alias="computeResourcesByType") front_panel_port_id: StrictStr = Field(description="The id of the front panel port that is assigned.", alias="frontPanelPortId") id: StrictStr links: Optional[List[APILink]] = None diff --git a/cyperf/models/chassis_info.py b/cyperf/models/chassis_info.py index 3a022b0..00ea0da 100644 --- a/cyperf/models/chassis_info.py +++ b/cyperf/models/chassis_info.py @@ -35,7 +35,8 @@ class ChassisInfo(BaseModel): hw_platform: Optional[StrictStr] = Field(default=None, description="The hardware platform the corresponding port is running on", alias="hwPlatform") hw_revision: Optional[StrictStr] = Field(default=None, description="The hardware revision of the underlying platform", alias="hwRevision") port_id: Optional[StrictStr] = Field(default=None, description="The id of the corresponding port", alias="portID") - __properties: ClassVar[List[str]] = ["aggregatedMode", "checkoutID", "computeNodeID", "frontPanelPortID", "hwPlatform", "hwRevision", "portID"] + type_display_name: Optional[StrictStr] = Field(default=None, description="The marketing name for the compute node", alias="typeDisplayName") + __properties: ClassVar[List[str]] = ["aggregatedMode", "checkoutID", "computeNodeID", "frontPanelPortID", "hwPlatform", "hwRevision", "portID", "typeDisplayName"] model_config = ConfigDict( populate_by_name=True, @@ -74,6 +75,7 @@ def to_dict(self) -> Dict[str, Any]: * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. * OpenAPI `readOnly` fields are excluded. + * OpenAPI `readOnly` fields are excluded. """ excluded_fields: Set[str] = set([ "aggregated_mode", @@ -83,6 +85,7 @@ def to_dict(self) -> Dict[str, Any]: "hw_platform", "hw_revision", "port_id", + "type_display_name", ]) _dict = self.model_dump( @@ -110,7 +113,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "frontPanelPortID": obj.get("frontPanelPortID"), "hwPlatform": obj.get("hwPlatform"), "hwRevision": obj.get("hwRevision"), - "portID": obj.get("portID") + "portID": obj.get("portID"), + "typeDisplayName": obj.get("typeDisplayName") , "links": obj.get("links") }) diff --git a/cyperf/models/dns_resolver.py b/cyperf/models/dns_resolver.py index 56efa09..db284a3 100644 --- a/cyperf/models/dns_resolver.py +++ b/cyperf/models/dns_resolver.py @@ -30,7 +30,7 @@ class DNSResolver(BaseModel): """ DNSResolver """ # noqa: E501 - cache_timeout: Optional[StrictInt] = Field(default=None, description="The cached timeout for the DNS Resolver", alias="cacheTimeout") + cache_timeout: Optional[StrictInt] = Field(default=None, description="The timeout in seconds for cached DNS responses.", alias="cacheTimeout") enable_perconnect: Optional[StrictBool] = Field(default=None, description="The enable perconnection value.", alias="enablePerconnect") links: Optional[List[APILink]] = None name_servers: Optional[List[NameServer]] = Field(default=None, description="A list of name servers.", alias="nameServers") diff --git a/cyperf/models/get_compute_node_compute_resources200_response.py b/cyperf/models/get_compute_node_compute_resources200_response.py new file mode 100644 index 0000000..4c02343 --- /dev/null +++ b/cyperf/models/get_compute_node_compute_resources200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.compute_resource import ComputeResource +from cyperf.models.get_compute_node_compute_resources200_response_one_of import GetComputeNodeComputeResources200ResponseOneOf +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETCOMPUTENODECOMPUTERESOURCES200RESPONSE_ONE_OF_SCHEMAS = ["GetComputeNodeComputeResources200ResponseOneOf", "List[ComputeResource]"] + +class GetComputeNodeComputeResources200Response(BaseModel): + """ + GetComputeNodeComputeResources200Response + """ + # data type: List[ComputeResource] + oneof_schema_1_validator: Optional[List[ComputeResource]] = None + # data type: GetComputeNodeComputeResources200ResponseOneOf + oneof_schema_2_validator: Optional[GetComputeNodeComputeResources200ResponseOneOf] = None + actual_instance: Optional[Union[GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]]] = None + one_of_schemas: Set[str] = { "GetComputeNodeComputeResources200ResponseOneOf", "List[ComputeResource]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetComputeNodeComputeResources200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[ComputeResource] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetComputeNodeComputeResources200ResponseOneOf + if not isinstance(v, GetComputeNodeComputeResources200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetComputeNodeComputeResources200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetComputeNodeComputeResources200Response with oneOf schemas: GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetComputeNodeComputeResources200Response with oneOf schemas: GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[ComputeResource] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetComputeNodeComputeResources200ResponseOneOf + + + + try: + instance.actual_instance = GetComputeNodeComputeResources200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetComputeNodeComputeResources200Response with oneOf schemas: GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetComputeNodeComputeResources200Response with oneOf schemas: GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetComputeNodeComputeResources200ResponseOneOf, List[ComputeResource]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_compute_node_compute_resources200_response_one_of.py b/cyperf/models/get_compute_node_compute_resources200_response_one_of.py new file mode 100644 index 0000000..ef4ad5f --- /dev/null +++ b/cyperf/models/get_compute_node_compute_resources200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.compute_resource import ComputeResource +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetComputeNodeComputeResources200ResponseOneOf(BaseModel): + """ + GetComputeNodeComputeResources200ResponseOneOf + """ # noqa: E501 + data: Optional[List[ComputeResource]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetComputeNodeComputeResources200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetComputeNodeComputeResources200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [ComputeResource.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/get_compute_node_ports200_response.py b/cyperf/models/get_compute_node_ports200_response.py new file mode 100644 index 0000000..b5a50ab --- /dev/null +++ b/cyperf/models/get_compute_node_ports200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.get_compute_node_ports200_response_one_of import GetComputeNodePorts200ResponseOneOf +from cyperf.models.port import Port +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETCOMPUTENODEPORTS200RESPONSE_ONE_OF_SCHEMAS = ["GetComputeNodePorts200ResponseOneOf", "List[Port]"] + +class GetComputeNodePorts200Response(BaseModel): + """ + GetComputeNodePorts200Response + """ + # data type: List[Port] + oneof_schema_1_validator: Optional[List[Port]] = None + # data type: GetComputeNodePorts200ResponseOneOf + oneof_schema_2_validator: Optional[GetComputeNodePorts200ResponseOneOf] = None + actual_instance: Optional[Union[GetComputeNodePorts200ResponseOneOf, List[Port]]] = None + one_of_schemas: Set[str] = { "GetComputeNodePorts200ResponseOneOf", "List[Port]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetComputeNodePorts200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[Port] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetComputeNodePorts200ResponseOneOf + if not isinstance(v, GetComputeNodePorts200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetComputeNodePorts200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetComputeNodePorts200Response with oneOf schemas: GetComputeNodePorts200ResponseOneOf, List[Port]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetComputeNodePorts200Response with oneOf schemas: GetComputeNodePorts200ResponseOneOf, List[Port]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[Port] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetComputeNodePorts200ResponseOneOf + + + + try: + instance.actual_instance = GetComputeNodePorts200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetComputeNodePorts200Response with oneOf schemas: GetComputeNodePorts200ResponseOneOf, List[Port]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetComputeNodePorts200Response with oneOf schemas: GetComputeNodePorts200ResponseOneOf, List[Port]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetComputeNodePorts200ResponseOneOf, List[Port]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_compute_node_ports200_response_one_of.py b/cyperf/models/get_compute_node_ports200_response_one_of.py new file mode 100644 index 0000000..fde6492 --- /dev/null +++ b/cyperf/models/get_compute_node_ports200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.port import Port +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetComputeNodePorts200ResponseOneOf(BaseModel): + """ + GetComputeNodePorts200ResponseOneOf + """ # noqa: E501 + data: Optional[List[Port]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetComputeNodePorts200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetComputeNodePorts200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [Port.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/get_controller_compute_nodes200_response.py b/cyperf/models/get_controller_compute_nodes200_response.py new file mode 100644 index 0000000..00b900c --- /dev/null +++ b/cyperf/models/get_controller_compute_nodes200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.compute_node import ComputeNode +from cyperf.models.get_controller_compute_nodes200_response_one_of import GetControllerComputeNodes200ResponseOneOf +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETCONTROLLERCOMPUTENODES200RESPONSE_ONE_OF_SCHEMAS = ["GetControllerComputeNodes200ResponseOneOf", "List[ComputeNode]"] + +class GetControllerComputeNodes200Response(BaseModel): + """ + GetControllerComputeNodes200Response + """ + # data type: List[ComputeNode] + oneof_schema_1_validator: Optional[List[ComputeNode]] = None + # data type: GetControllerComputeNodes200ResponseOneOf + oneof_schema_2_validator: Optional[GetControllerComputeNodes200ResponseOneOf] = None + actual_instance: Optional[Union[GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]]] = None + one_of_schemas: Set[str] = { "GetControllerComputeNodes200ResponseOneOf", "List[ComputeNode]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetControllerComputeNodes200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[ComputeNode] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetControllerComputeNodes200ResponseOneOf + if not isinstance(v, GetControllerComputeNodes200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetControllerComputeNodes200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetControllerComputeNodes200Response with oneOf schemas: GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetControllerComputeNodes200Response with oneOf schemas: GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[ComputeNode] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetControllerComputeNodes200ResponseOneOf + + + + try: + instance.actual_instance = GetControllerComputeNodes200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetControllerComputeNodes200Response with oneOf schemas: GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetControllerComputeNodes200Response with oneOf schemas: GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetControllerComputeNodes200ResponseOneOf, List[ComputeNode]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_controller_compute_nodes200_response_one_of.py b/cyperf/models/get_controller_compute_nodes200_response_one_of.py new file mode 100644 index 0000000..fe7fc6a --- /dev/null +++ b/cyperf/models/get_controller_compute_nodes200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.compute_node import ComputeNode +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetControllerComputeNodes200ResponseOneOf(BaseModel): + """ + GetControllerComputeNodes200ResponseOneOf + """ # noqa: E501 + data: Optional[List[ComputeNode]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetControllerComputeNodes200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetControllerComputeNodes200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [ComputeNode.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/get_controller_front_panels200_response.py b/cyperf/models/get_controller_front_panels200_response.py new file mode 100644 index 0000000..73e9877 --- /dev/null +++ b/cyperf/models/get_controller_front_panels200_response.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import json +import pprint +from pydantic import BaseModel, ConfigDict, Field, StrictStr, ValidationError, field_validator +from typing import Any, List, Optional +from cyperf.models.front_panel import FrontPanel +from cyperf.models.get_controller_front_panels200_response_one_of import GetControllerFrontPanels200ResponseOneOf +from pydantic import StrictStr, Field +from typing import Union, List, Set, Optional, Dict +from typing_extensions import Literal, Self + +GETCONTROLLERFRONTPANELS200RESPONSE_ONE_OF_SCHEMAS = ["GetControllerFrontPanels200ResponseOneOf", "List[FrontPanel]"] + +class GetControllerFrontPanels200Response(BaseModel): + """ + GetControllerFrontPanels200Response + """ + # data type: List[FrontPanel] + oneof_schema_1_validator: Optional[List[FrontPanel]] = None + # data type: GetControllerFrontPanels200ResponseOneOf + oneof_schema_2_validator: Optional[GetControllerFrontPanels200ResponseOneOf] = None + actual_instance: Optional[Union[GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]]] = None + one_of_schemas: Set[str] = { "GetControllerFrontPanels200ResponseOneOf", "List[FrontPanel]" } + + model_config = ConfigDict( + validate_assignment=True, + protected_namespaces=(), + ) + + + def __init__(self, *args, **kwargs) -> None: + if args: + if len(args) > 1: + raise ValueError("If a position argument is used, only 1 is allowed to set `actual_instance`") + if kwargs: + raise ValueError("If a position argument is used, keyword arguments cannot be used.") + super().__init__(actual_instance=args[0]) + else: + super().__init__(**kwargs) + + @field_validator('actual_instance') + def actual_instance_must_validate_oneof(cls, v): + instance = GetControllerFrontPanels200Response.model_construct() + error_messages = [] + match = 0 + # validate data type: List[FrontPanel] + try: + instance.oneof_schema_1_validator = v + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # validate data type: GetControllerFrontPanels200ResponseOneOf + if not isinstance(v, GetControllerFrontPanels200ResponseOneOf): + error_messages.append(f"Error! Input type `{type(v)}` is not `GetControllerFrontPanels200ResponseOneOf`") + else: + match += 1 + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when setting `actual_instance` in GetControllerFrontPanels200Response with oneOf schemas: GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when setting `actual_instance` in GetControllerFrontPanels200Response with oneOf schemas: GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]. Details: " + ", ".join(error_messages)) + else: + return v + + @classmethod + def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self: + return cls.from_json(json.dumps(obj)) + + @classmethod + def from_json(cls, json_str: str) -> Self: + """Returns the object represented by the json string""" + instance = cls.model_construct() +# instance.api_client = client + error_messages = [] + match = 0 + + # deserialize data into List[FrontPanel] + try: + # validation + instance.oneof_schema_1_validator = json.loads(json_str) + # assign value to actual_instance + instance.actual_instance = instance.oneof_schema_1_validator + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + # deserialize data into GetControllerFrontPanels200ResponseOneOf + + + + try: + instance.actual_instance = GetControllerFrontPanels200ResponseOneOf.from_json(json_str) + match += 1 + except (ValidationError, ValueError) as e: + error_messages.append(str(e)) + + + if match > 1: + # more than 1 match + raise ValueError("Multiple matches found when deserializing the JSON string into GetControllerFrontPanels200Response with oneOf schemas: GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]. Details: " + ", ".join(error_messages)) + elif match == 0: + # no match + raise ValueError("No match found when deserializing the JSON string into GetControllerFrontPanels200Response with oneOf schemas: GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]. Details: " + ", ".join(error_messages)) + else: + return instance + + def to_json(self) -> str: + """Returns the JSON representation of the actual instance""" + if self.actual_instance is None: + return "null" + + if hasattr(self.actual_instance, "to_json") and callable(self.actual_instance.to_json): + return self.actual_instance.to_json() + else: + return json.dumps(self.actual_instance) + + def to_dict(self) -> Optional[Union[Dict[str, Any], GetControllerFrontPanels200ResponseOneOf, List[FrontPanel]]]: + """Returns the dict representation of the actual instance""" + if self.actual_instance is None: + return None + + if hasattr(self.actual_instance, "to_dict") and callable(self.actual_instance.to_dict): + return self.actual_instance.to_dict() + else: + # primitive type + return self.actual_instance + + def to_str(self) -> str: + """Returns the string representation of the actual instance""" + return pprint.pformat(self.model_dump()) + + diff --git a/cyperf/models/get_controller_front_panels200_response_one_of.py b/cyperf/models/get_controller_front_panels200_response_one_of.py new file mode 100644 index 0000000..6fe0be2 --- /dev/null +++ b/cyperf/models/get_controller_front_panels200_response_one_of.py @@ -0,0 +1,103 @@ +# coding: utf-8 + +""" + Keysight CyPerf Application API + + Keysight CyPerf REST API + + The version of the OpenAPI document: 1.0.0 + Contact: support@keysight.com + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictInt +from typing import Any, ClassVar, Dict, List, Optional +from cyperf.models.front_panel import FrontPanel +from typing import Optional, Set, Union +from typing_extensions import Self +from pydantic import Field, PrivateAttr + +class GetControllerFrontPanels200ResponseOneOf(BaseModel): + """ + GetControllerFrontPanels200ResponseOneOf + """ # noqa: E501 + data: Optional[List[FrontPanel]] = None + total_count: Optional[StrictInt] = Field(default=None, alias="totalCount") + __properties: ClassVar[List[str]] = ["data", "totalCount"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GetControllerFrontPanels200ResponseOneOf from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([ + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # override the default output from pydantic by calling `to_dict()` of each item in data (list) + _items = [] + if self.data: + for _item in self.data: + if _item: + _items.append(_item.to_dict()) + _dict['data'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GetControllerFrontPanels200ResponseOneOf from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + _obj = cls.model_validate(obj) +# _obj.api_client = client + return _obj + + _obj = cls.model_validate({ + "data": ( [FrontPanel.from_dict(_item) for _item in obj.get("data", [])] if obj.get("data") is not None else None), + "totalCount": obj.get("totalCount") + , + "links": obj.get("links") + }) + return _obj + + diff --git a/cyperf/models/load_config_operation.py b/cyperf/models/load_config_operation.py index 3413a39..17061f7 100644 --- a/cyperf/models/load_config_operation.py +++ b/cyperf/models/load_config_operation.py @@ -28,7 +28,7 @@ class LoadConfigOperation(BaseModel): """ LoadConfigOperation """ # noqa: E501 - config_url: Optional[StrictStr] = Field(default=None, description="The URL of the configuration that should be loaded", alias="configUrl") + config_url: Optional[StrictStr] = Field(default=None, description="The URL of the configuration that will be loaded when creating the session", alias="configUrl") __properties: ClassVar[List[str]] = ["configUrl"] model_config = ConfigDict( diff --git a/cyperf/models/profile.py b/cyperf/models/profile.py index a2e4f9e..927fe10 100644 --- a/cyperf/models/profile.py +++ b/cyperf/models/profile.py @@ -28,7 +28,7 @@ class Profile(BaseModel): """ Profile """ # noqa: E501 - category: Optional[StrictStr] = Field(default=None, description="Category of the profile") + category: Optional[StrictStr] = Field(default=None, description="The category of the profile template.") config_id: Optional[StrictStr] = Field(default=None, description="The config ID associated with this profile", alias="configId") description: Optional[StrictStr] = Field(default=None, description="Description of the profile") display_name: Optional[StrictStr] = Field(default=None, description="Display name of the profile", alias="displayName") diff --git a/docs/Agent.md b/docs/Agent.md index f06fdf5..97c003b 100644 --- a/docs/Agent.md +++ b/docs/Agent.md @@ -12,7 +12,6 @@ Name | Type | Description | Notes **last_update** | **int** | A Unix timestamp that indicates when the agent was last updated | [optional] [readonly] **port_id_format** | **str** | port agent id format | [optional] **reservation_id** | **str** | The ID of the reservation | [optional] [readonly] -**resource_name_format** | **str** | display agent resource name format | [optional] **selected_env** | [**SelectedEnv**](SelectedEnv.md) | | [optional] **selection_status** | **str** | The current status of the selection operation | [optional] **session_name** | **str** | The session's name where the agent is running | [optional] [readonly] diff --git a/docs/AgentAssignmentByFrontPanelPort.md b/docs/AgentAssignmentByFrontPanelPort.md index 8a4e9ab..5cce584 100644 --- a/docs/AgentAssignmentByFrontPanelPort.md +++ b/docs/AgentAssignmentByFrontPanelPort.md @@ -7,7 +7,7 @@ Details of an agent assignment by front panel port Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **capture_settings** | [**CaptureSettings**](CaptureSettings.md) | The capture settings of the front panel port that is assigned. | [optional] -**compute_resources_by_type** | **Dict[str, int]** | The number of compute resources to assign per compute node type. | [optional] +**compute_resources_by_type** | **Dict[str, int]** | The number of compute resources to assign per compute node type name + aggregation mode. Each key must be formatted as '<computeNodeTypeName>:<aggregationMode>'. | [optional] **front_panel_port_id** | **str** | The id of the front panel port that is assigned. | **id** | **str** | | **links** | [**List[APILink]**](APILink.md) | | [optional] diff --git a/docs/AgentsApi.md b/docs/AgentsApi.md index d2c7147..6f8c677 100644 --- a/docs/AgentsApi.md +++ b/docs/AgentsApi.md @@ -451,10 +451,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_compute_node_compute_resources** -> List[ComputeResource] get_compute_node_compute_resources(controller_id, compute_node_id, take=take, skip=skip) +> GetComputeNodeComputeResources200Response get_compute_node_compute_resources(controller_id, compute_node_id, take=take, skip=skip) +Get the compute resources of a compute node. + ### Example * OAuth Authentication (OAuth2): @@ -462,7 +464,7 @@ Name | Type | Description | Notes ```python import cyperf -from cyperf.models.compute_resource import ComputeResource +from cyperf.models.get_compute_node_compute_resources200_response import GetComputeNodeComputeResources200Response from cyperf.rest import ApiException from pprint import pprint @@ -512,7 +514,7 @@ Name | Type | Description | Notes ### Return type -[**List[ComputeResource]**](ComputeResource.md) +[**GetComputeNodeComputeResources200Response**](GetComputeNodeComputeResources200Response.md) ### Authorization @@ -527,7 +529,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | +**200** | The list of compute resources of the compute node. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -614,9 +616,11 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_compute_node_ports** -> List[Port] get_compute_node_ports(controller_id, compute_node_id, take=take, skip=skip) +> GetComputeNodePorts200Response get_compute_node_ports(controller_id, compute_node_id, take=take, skip=skip) + +Get the ports of a compute node. ### Example @@ -625,7 +629,7 @@ Name | Type | Description | Notes ```python import cyperf -from cyperf.models.port import Port +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response from cyperf.rest import ApiException from pprint import pprint @@ -675,7 +679,7 @@ Name | Type | Description | Notes ### Return type -[**List[Port]**](Port.md) +[**GetComputeNodePorts200Response**](GetComputeNodePorts200Response.md) ### Authorization @@ -690,7 +694,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | +**200** | The list of ports of the compute node. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -853,10 +857,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_controller_compute_nodes** -> List[ComputeNode] get_controller_compute_nodes(controller_id, take=take, skip=skip) +> GetControllerComputeNodes200Response get_controller_compute_nodes(controller_id, take=take, skip=skip) +Get the compute nodes chain. + ### Example * OAuth Authentication (OAuth2): @@ -864,7 +870,7 @@ Name | Type | Description | Notes ```python import cyperf -from cyperf.models.compute_node import ComputeNode +from cyperf.models.get_controller_compute_nodes200_response import GetControllerComputeNodes200Response from cyperf.rest import ApiException from pprint import pprint @@ -912,7 +918,7 @@ Name | Type | Description | Notes ### Return type -[**List[ComputeNode]**](ComputeNode.md) +[**GetControllerComputeNodes200Response**](GetControllerComputeNodes200Response.md) ### Authorization @@ -927,7 +933,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | +**200** | The list of compute nodes of the controller. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -1012,9 +1018,11 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_controller_front_panels** -> List[FrontPanel] get_controller_front_panels(controller_id, take=take, skip=skip) +> GetControllerFrontPanels200Response get_controller_front_panels(controller_id, take=take, skip=skip) + +Get the front panels chain. ### Example @@ -1023,7 +1031,7 @@ Name | Type | Description | Notes ```python import cyperf -from cyperf.models.front_panel import FrontPanel +from cyperf.models.get_controller_front_panels200_response import GetControllerFrontPanels200Response from cyperf.rest import ApiException from pprint import pprint @@ -1071,7 +1079,7 @@ Name | Type | Description | Notes ### Return type -[**List[FrontPanel]**](FrontPanel.md) +[**GetControllerFrontPanels200Response**](GetControllerFrontPanels200Response.md) ### Authorization @@ -1086,7 +1094,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | +**200** | The list of front panels of the controller. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -1255,10 +1263,12 @@ Name | Type | Description | Notes [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **get_front_panel_ports** -> List[Port] get_front_panel_ports(controller_id, front_panel_id, take=take, skip=skip) +> GetComputeNodePorts200Response get_front_panel_ports(controller_id, front_panel_id, take=take, skip=skip) +Get the ports of a front panel. + ### Example * OAuth Authentication (OAuth2): @@ -1266,7 +1276,7 @@ Name | Type | Description | Notes ```python import cyperf -from cyperf.models.port import Port +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response from cyperf.rest import ApiException from pprint import pprint @@ -1316,7 +1326,7 @@ Name | Type | Description | Notes ### Return type -[**List[Port]**](Port.md) +[**GetComputeNodePorts200Response**](GetComputeNodePorts200Response.md) ### Authorization @@ -1331,7 +1341,7 @@ Name | Type | Description | Notes | Status code | Description | Response headers | |-------------|-------------|------------------| -**200** | OK | - | +**200** | The list of ports of the front panel. | - | **500** | Unexpected error | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/ChassisInfo.md b/docs/ChassisInfo.md index 5655c76..ba2ead8 100644 --- a/docs/ChassisInfo.md +++ b/docs/ChassisInfo.md @@ -12,6 +12,7 @@ Name | Type | Description | Notes **hw_platform** | **str** | The hardware platform the corresponding port is running on | [optional] [readonly] **hw_revision** | **str** | The hardware revision of the underlying platform | [optional] [readonly] **port_id** | **str** | The id of the corresponding port | [optional] [readonly] +**type_display_name** | **str** | The marketing name for the compute node | [optional] [readonly] ## Example diff --git a/docs/DNSResolver.md b/docs/DNSResolver.md index 61ec6b0..1fc8507 100644 --- a/docs/DNSResolver.md +++ b/docs/DNSResolver.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**cache_timeout** | **int** | The cached timeout for the DNS Resolver | [optional] +**cache_timeout** | **int** | The timeout in seconds for cached DNS responses. | [optional] **enable_perconnect** | **bool** | The enable perconnection value. | [optional] **links** | [**List[APILink]**](APILink.md) | | [optional] **name_servers** | [**List[NameServer]**](NameServer.md) | A list of name servers. | [optional] diff --git a/docs/GetComputeNodeComputeResources200Response.md b/docs/GetComputeNodeComputeResources200Response.md new file mode 100644 index 0000000..7eb416c --- /dev/null +++ b/docs/GetComputeNodeComputeResources200Response.md @@ -0,0 +1,30 @@ +# GetComputeNodeComputeResources200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ComputeResource]**](ComputeResource.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_compute_node_compute_resources200_response import GetComputeNodeComputeResources200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetComputeNodeComputeResources200Response from a JSON string +get_compute_node_compute_resources200_response_instance = GetComputeNodeComputeResources200Response.from_json(json) +# print the JSON string representation of the object +print(GetComputeNodeComputeResources200Response.to_json()) + +# convert the object into a dict +get_compute_node_compute_resources200_response_dict = get_compute_node_compute_resources200_response_instance.to_dict() +# create an instance of GetComputeNodeComputeResources200Response from a dict +get_compute_node_compute_resources200_response_from_dict = GetComputeNodeComputeResources200Response.from_dict(get_compute_node_compute_resources200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetComputeNodeComputeResources200ResponseOneOf.md b/docs/GetComputeNodeComputeResources200ResponseOneOf.md new file mode 100644 index 0000000..86efa0f --- /dev/null +++ b/docs/GetComputeNodeComputeResources200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetComputeNodeComputeResources200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ComputeResource]**](ComputeResource.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_compute_node_compute_resources200_response_one_of import GetComputeNodeComputeResources200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetComputeNodeComputeResources200ResponseOneOf from a JSON string +get_compute_node_compute_resources200_response_one_of_instance = GetComputeNodeComputeResources200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetComputeNodeComputeResources200ResponseOneOf.to_json()) + +# convert the object into a dict +get_compute_node_compute_resources200_response_one_of_dict = get_compute_node_compute_resources200_response_one_of_instance.to_dict() +# create an instance of GetComputeNodeComputeResources200ResponseOneOf from a dict +get_compute_node_compute_resources200_response_one_of_from_dict = GetComputeNodeComputeResources200ResponseOneOf.from_dict(get_compute_node_compute_resources200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetComputeNodePorts200Response.md b/docs/GetComputeNodePorts200Response.md new file mode 100644 index 0000000..ceb6489 --- /dev/null +++ b/docs/GetComputeNodePorts200Response.md @@ -0,0 +1,30 @@ +# GetComputeNodePorts200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[Port]**](Port.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_compute_node_ports200_response import GetComputeNodePorts200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetComputeNodePorts200Response from a JSON string +get_compute_node_ports200_response_instance = GetComputeNodePorts200Response.from_json(json) +# print the JSON string representation of the object +print(GetComputeNodePorts200Response.to_json()) + +# convert the object into a dict +get_compute_node_ports200_response_dict = get_compute_node_ports200_response_instance.to_dict() +# create an instance of GetComputeNodePorts200Response from a dict +get_compute_node_ports200_response_from_dict = GetComputeNodePorts200Response.from_dict(get_compute_node_ports200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetComputeNodePorts200ResponseOneOf.md b/docs/GetComputeNodePorts200ResponseOneOf.md new file mode 100644 index 0000000..37100ad --- /dev/null +++ b/docs/GetComputeNodePorts200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetComputeNodePorts200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[Port]**](Port.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_compute_node_ports200_response_one_of import GetComputeNodePorts200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetComputeNodePorts200ResponseOneOf from a JSON string +get_compute_node_ports200_response_one_of_instance = GetComputeNodePorts200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetComputeNodePorts200ResponseOneOf.to_json()) + +# convert the object into a dict +get_compute_node_ports200_response_one_of_dict = get_compute_node_ports200_response_one_of_instance.to_dict() +# create an instance of GetComputeNodePorts200ResponseOneOf from a dict +get_compute_node_ports200_response_one_of_from_dict = GetComputeNodePorts200ResponseOneOf.from_dict(get_compute_node_ports200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetControllerComputeNodes200Response.md b/docs/GetControllerComputeNodes200Response.md new file mode 100644 index 0000000..c44863a --- /dev/null +++ b/docs/GetControllerComputeNodes200Response.md @@ -0,0 +1,30 @@ +# GetControllerComputeNodes200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ComputeNode]**](ComputeNode.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_controller_compute_nodes200_response import GetControllerComputeNodes200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetControllerComputeNodes200Response from a JSON string +get_controller_compute_nodes200_response_instance = GetControllerComputeNodes200Response.from_json(json) +# print the JSON string representation of the object +print(GetControllerComputeNodes200Response.to_json()) + +# convert the object into a dict +get_controller_compute_nodes200_response_dict = get_controller_compute_nodes200_response_instance.to_dict() +# create an instance of GetControllerComputeNodes200Response from a dict +get_controller_compute_nodes200_response_from_dict = GetControllerComputeNodes200Response.from_dict(get_controller_compute_nodes200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetControllerComputeNodes200ResponseOneOf.md b/docs/GetControllerComputeNodes200ResponseOneOf.md new file mode 100644 index 0000000..3a6a3c1 --- /dev/null +++ b/docs/GetControllerComputeNodes200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetControllerComputeNodes200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ComputeNode]**](ComputeNode.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_controller_compute_nodes200_response_one_of import GetControllerComputeNodes200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetControllerComputeNodes200ResponseOneOf from a JSON string +get_controller_compute_nodes200_response_one_of_instance = GetControllerComputeNodes200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetControllerComputeNodes200ResponseOneOf.to_json()) + +# convert the object into a dict +get_controller_compute_nodes200_response_one_of_dict = get_controller_compute_nodes200_response_one_of_instance.to_dict() +# create an instance of GetControllerComputeNodes200ResponseOneOf from a dict +get_controller_compute_nodes200_response_one_of_from_dict = GetControllerComputeNodes200ResponseOneOf.from_dict(get_controller_compute_nodes200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetControllerFrontPanels200Response.md b/docs/GetControllerFrontPanels200Response.md new file mode 100644 index 0000000..c61b21d --- /dev/null +++ b/docs/GetControllerFrontPanels200Response.md @@ -0,0 +1,30 @@ +# GetControllerFrontPanels200Response + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[FrontPanel]**](FrontPanel.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_controller_front_panels200_response import GetControllerFrontPanels200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetControllerFrontPanels200Response from a JSON string +get_controller_front_panels200_response_instance = GetControllerFrontPanels200Response.from_json(json) +# print the JSON string representation of the object +print(GetControllerFrontPanels200Response.to_json()) + +# convert the object into a dict +get_controller_front_panels200_response_dict = get_controller_front_panels200_response_instance.to_dict() +# create an instance of GetControllerFrontPanels200Response from a dict +get_controller_front_panels200_response_from_dict = GetControllerFrontPanels200Response.from_dict(get_controller_front_panels200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GetControllerFrontPanels200ResponseOneOf.md b/docs/GetControllerFrontPanels200ResponseOneOf.md new file mode 100644 index 0000000..880e03d --- /dev/null +++ b/docs/GetControllerFrontPanels200ResponseOneOf.md @@ -0,0 +1,30 @@ +# GetControllerFrontPanels200ResponseOneOf + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[FrontPanel]**](FrontPanel.md) | | [optional] +**total_count** | **int** | | [optional] + +## Example + +```python +from cyperf.models.get_controller_front_panels200_response_one_of import GetControllerFrontPanels200ResponseOneOf + +# TODO update the JSON string below +json = "{}" +# create an instance of GetControllerFrontPanels200ResponseOneOf from a JSON string +get_controller_front_panels200_response_one_of_instance = GetControllerFrontPanels200ResponseOneOf.from_json(json) +# print the JSON string representation of the object +print(GetControllerFrontPanels200ResponseOneOf.to_json()) + +# convert the object into a dict +get_controller_front_panels200_response_one_of_dict = get_controller_front_panels200_response_one_of_instance.to_dict() +# create an instance of GetControllerFrontPanels200ResponseOneOf from a dict +get_controller_front_panels200_response_one_of_from_dict = GetControllerFrontPanels200ResponseOneOf.from_dict(get_controller_front_panels200_response_one_of_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/LoadConfigOperation.md b/docs/LoadConfigOperation.md index 027b006..ba6d27c 100644 --- a/docs/LoadConfigOperation.md +++ b/docs/LoadConfigOperation.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**config_url** | **str** | The URL of the configuration that should be loaded | [optional] +**config_url** | **str** | The URL of the configuration that will be loaded when creating the session | [optional] ## Example diff --git a/docs/Profile.md b/docs/Profile.md index 060f801..0d0b19d 100644 --- a/docs/Profile.md +++ b/docs/Profile.md @@ -5,7 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**category** | **str** | Category of the profile | [optional] +**category** | **str** | The category of the profile template. | [optional] **config_id** | **str** | The config ID associated with this profile | [optional] **description** | **str** | Description of the profile | [optional] **display_name** | **str** | Display name of the profile | [optional] From a329815cf9a52d3f06dcdcbc6ac17e5efa0a37bf Mon Sep 17 00:00:00 2001 From: Stingescu Andrei Petrut Date: Fri, 28 Aug 2026 08:48:23 -0600 Subject: [PATCH 23/26] Pull request #85: Add HW sample scripts Merge in ISGAPPSEC/cyperf-api-wrapper from ISGAPPSEC2-39412-create-hw-sample-scripts to main Squashed commit of the following: commit e818b10ed80355b7be45d7804623b2705c1f718f Author: stinandr Date: Wed Aug 26 09:45:17 2026 +0300 Refactor port assignment & move hw methods to utils.py commit 020ac806fabca9f3e2ccc03bcb17e4116629aed5 Author: stinandr Date: Tue Aug 25 14:56:58 2026 +0300 Replace all sample hw scripts with single one commit 07313b80892fce1e298437e252ee36a16aaaae93 Author: Angela Grigoroaia Date: Tue Aug 25 03:58:28 2026 -0600 Change error message format for unavailable ports commit e63fe80072f2c50552a82d6b6f3be62408ee78dc Author: stinandr Date: Thu Aug 20 14:26:57 2026 +0300 Add HW sample scripts --- cyperf/utils.py | 29 ++- ...sample_load_and_run_precanned_config_hw.py | 222 ++++++++++++++++++ 2 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 samples/sample_load_and_run_precanned_config_hw.py diff --git a/cyperf/utils.py b/cyperf/utils.py index e519642..e853731 100644 --- a/cyperf/utils.py +++ b/cyperf/utils.py @@ -601,7 +601,7 @@ def create_api_client_cli(verify_ssl=True): """Parse the args passed to the current script and use them to create an API client; optionally disable SSL verification""" cli_args, offline_token = parse_cli_options() host = f'https://{cli_args.controller}' - + configuration = cyperf.Configuration(host=host, refresh_token=offline_token, username=cli_args.user, @@ -609,4 +609,31 @@ def create_api_client_cli(verify_ssl=True): configuration.verify_ssl = verify_ssl return cyperf.ApiClient(configuration) + +def require_ports(entity, min_count=1): + """Validate that entity.ports exists and has at least min_count entries, then return it.""" + if entity.ports is None: + raise ValueError(f"Ports are not defined for '{entity.name}'") + if len(entity.ports) < min_count: + raise ValueError(f"Expected at least {min_count} available port(s) for '{entity.name}'") + return entity.ports + + +def validate_ports(ports): + """Raise a ValueError listing any of the given ports that are down, not ready, or reserved by someone else.""" + invalid = [] + for port in ports or []: + reasons = [] + if port.link != 'UP': + reasons.append(f"link is '{port.link}'") + if port.status != 'READY': + reasons.append(f"status is '{port.status}'") + if port.reserved_by: + reasons.append(f"reserved by '{port.reserved_by}'") + if reasons: + invalid.append(f"{port.id} ({', '.join(reasons)})") + + if invalid: + raise ValueError(f"The following port(s) cannot be used right now: {'; '.join(invalid)}") + utils = TestRunner \ No newline at end of file diff --git a/samples/sample_load_and_run_precanned_config_hw.py b/samples/sample_load_and_run_precanned_config_hw.py new file mode 100644 index 0000000..ffb5821 --- /dev/null +++ b/samples/sample_load_and_run_precanned_config_hw.py @@ -0,0 +1,222 @@ +from time import sleep + +import cyperf +from cyperf.utils import create_api_client_cli, require_ports, validate_ports + + +def assign_M8400_ports(api_client, config, controller_id): + """Assign front panel ports on an M8400 chassis to the session's network segments.""" + api_agents_instance = cyperf.AgentsApi(api_client) + front_panels = api_agents_instance.get_controller_front_panels(controller_id=controller_id) + + if len(front_panels) < 2: + raise ValueError("Expected at least 2 available front panels") + + for front_panel in front_panels[:2]: + require_ports(front_panel, min_count=1) + + validate_ports([front_panels[0].ports[0], front_panels[1].ports[0]]) + + # Create a front panel port map (each network segment can be assigned one or more front panel ports) + port_map = { + 'IP Network 1': [front_panels[0].ports[0].id], + 'IP Network 2': [front_panels[1].ports[0].id] + } + + # Assign the front panel ports + print("Assigning front panel ports ...") + for net_profile in config.config.network_profiles: + for ip_net in net_profile.ip_network_segment: + if ip_net.name in port_map: + front_panel_port_ids = port_map[ip_net.name] + print(f"Front panel port(s) {', '.join(front_panel_port_ids)} assigned to {ip_net.name}.") + capture_settings = None # CaptureSettings | The capture settings of the front panel port that is assigned (optional) + compute_resources_by_type = {"APS-ONE-400:non-aggregated":2} # Dict[str, int] | The number of compute resources to assign per compute node type & aggregation (necessary) + links = None # List[APILink] | (optional) + port_details = [cyperf.AgentAssignmentByFrontPanelPort(capture_settings=capture_settings, + compute_resources_by_type=compute_resources_by_type, + front_panel_port_id=front_panel_port_id, + id=front_panel_port_id, + links=links) + for front_panel_port_id in front_panel_port_ids] + if not ip_net.agent_assignments: + by_front_panel_port = None # List[AgentAssignmentByFrontPanelPort] | The front panel ports assigned to the current test configuration (necessary) + by_id = None # List[AgentAssignmentDetails] | The agents statically assigned to the current test configuration (optional) + by_port = None # List[AgentAssignmentByPort] | The ports assigned to the current test configuration (incompatible with M8400) + by_tag = None # List[str] | The tags according to which the agents are dynamically assigned (incompatible with M8400) + ip_net.agent_assignments = cyperf.AgentAssignments(by_front_panel_port=by_front_panel_port, + by_id=by_id, + by_port=by_port, + by_tag=by_tag, + links=links) + ip_net.agent_assignments.by_front_panel_port = port_details + ip_net.update() + print("Assigning front panel ports completed.\n") + + +def _assign_by_port_ids(config, port_map): + """Assign the given port_map (network segment name -> list of port IDs) to the session's network segments.""" + print("Assigning ports ...") + for net_profile in config.config.network_profiles: + for ip_net in net_profile.ip_network_segment: + if ip_net.name in port_map: + port_ids = port_map[ip_net.name] + print(f"Port(s) {', '.join(port_ids)} assigned to {ip_net.name}.") + capture_settings = None # CaptureSettings | The capture settings of the port that is assigned (optional) + links = None # List[APILink] | (optional) + port_details = [cyperf.AgentAssignmentByPort(capture_settings=capture_settings, + port_id=port_id, + id=port_id, + links=links) + for port_id in port_ids] + if not ip_net.agent_assignments: + by_front_panel_port = None # List[AgentAssignmentByFrontPanelPort] | The front panel ports assigned to the current test configuration (compatible with M8400) + by_id = None # List[AgentAssignmentDetails] | The agents statically assigned to the current test configuration (optional) + by_port = None # List[AgentAssignmentByPort] | The ports assigned to the current test configuration (optional) + by_tag = None # List[str] | The tags according to which the agents are dynamically assigned + ip_net.agent_assignments = cyperf.AgentAssignments(by_front_panel_port=by_front_panel_port, + by_id=by_id, + by_port=by_port, + by_tag=by_tag, + links=links) + ip_net.agent_assignments.by_port = port_details + ip_net.update() + print("Assigning ports completed.\n") + + +def assign_M1010_ports(api_client, config, controller_id): + """Assign ports from a single M1010 compute node to the session's network segments.""" + api_agents_instance = cyperf.AgentsApi(api_client) + compute_nodes = api_agents_instance.get_controller_compute_nodes(controller_id=controller_id) + + if len(compute_nodes) == 0: + raise ValueError("Expected at least one available compute node") + + compute_node_ports = require_ports(compute_nodes[0], min_count=4) + + validate_ports(compute_node_ports[:4]) + + # Ports are wired as loopback pairs (0<->2, 1<->3) + port_map = { + 'IP Network 1': [compute_node_ports[0].id, compute_node_ports[1].id], + 'IP Network 2': [compute_node_ports[2].id, compute_node_ports[3].id] + } + + _assign_by_port_ids(config, port_map) + + +def assign_novusminipro_ports(api_client, config, controller_id): + """Assign ports from a NovusMiniPro's 'mgmt' compute node to the session's network segments.""" + api_agents_instance = cyperf.AgentsApi(api_client) + compute_node_mgmt = api_agents_instance.get_controller_compute_node_by_id(controller_id=controller_id, compute_node_id="mgmt") + ports = require_ports(compute_node_mgmt, min_count=4) + + validate_ports(ports[:4]) + + # Ports are assumed to be wired as loopback pairs (0<->1, 2<->3) + port_map = { + 'IP Network 1': [ports[0].id, ports[1].id], + 'IP Network 2': [ports[2].id, ports[3].id] + } + + _assign_by_port_ids(config, port_map) + + +# Maps a platform name to its port assignment function and default controller ID. +# Add a new entry here (and a corresponding assign_*_ports function above) to support another platform. +PLATFORMS = { + 'M8400': (assign_M8400_ports, "chs-001"), + 'M1010': (assign_M1010_ports, "chs-001"), + 'novusminipro': (assign_novusminipro_ports, "nvm1"), +} + + +if __name__ == "__main__": + import urllib3; urllib3.disable_warnings() + + # Select which hardware platform to run against, then replace that platform's + # controller ID in PLATFORMS above with your own (see AgentsApi.get_controllers()) + platform = 'M1010' # one of: 'M8400', 'M1010', 'novusminipro' + if platform not in PLATFORMS: + raise ValueError(f"Unknown platform '{platform}', expected one of {list(PLATFORMS)}") + assign_ports, controller_id = PLATFORMS[platform] + + # Enter a context with an instance of the API client + with create_api_client_cli(verify_ssl=False) as api_client: + # Find the pre-canned config + api_config_instance = cyperf.ConfigurationsApi(api_client) + take = 1 # int | The number of search results to return (optional) + skip = None # int | The number of search results to skip (optional) + search_col = 'displayName' # str | A list of comma-separated columns used to search for the supplied values (optional) + search_val = 'Not Working From Home Traffic Mix' # str | The keywords used to filter the items (optional) + filter_mode = None # str | The operator applied to the supplied values (optional) + sort = None # str | A list of comma-separated field:direction pairs used to sort the items where direction must be asc or dsc (optional) + config = api_config_instance.get_configs(take=1, + skip=skip, + search_col=search_col, + search_val=search_val, + filter_mode=filter_mode, + sort=sort) + + if len(config.data) == 0: + raise ValueError("Couldn't find the specified configuration.") + + # Load a pre-canned config + api_session_instance = cyperf.SessionsApi(api_client) + application = None # str | The user-friendly name for the application that controls this session (optional) + config_name = None # str | The display name of the configuration loaded in the session (optional) + config_url = config.data[0].config_url # str | The external URL of the configuration loaded in the session (optional) + index = None # int | The session's index (optional) (readonly) + name = None # str | The user-visible name of the session (optional) + owner = None # str | The user-visible name of the session's owner (optional) (readonly) + sessions = [cyperf.Session(application=application, + config_name=config_name, + configUrl=config_url, + index=index, + name=name, + owner=owner)] + + # Create a session + session = None + print(f"Creating session from config called {search_val} ...") + api_session_response = api_session_instance.create_sessions(sessions=sessions) + session = api_session_response[0] + print("Session created.\n") + + # Get the configuration of the created session + include = 'Config, TrafficProfiles' # str | Specifies if the sub-fields that are objects should be included (eg. 'Config'). (optional) + config = api_session_instance.get_session_config(session_id=session.id, include=include) + + # Modify test duration + config.config.traffic_profiles[0].objectives_and_timeline.primary_objective.timeline[1].duration = 30 + config.config.traffic_profiles[0].objectives_and_timeline.primary_objective.update() + + # Assign the ports/front panels for the selected platform + assign_ports(api_client, config, controller_id) + + # Start traffic + print("Starting the test ...") + api_test_operation_instance = cyperf.TestOperationsApi(api_client) + api_test_operation_response = api_test_operation_instance.start_test_run_start(session_id=session.id) + api_test_operation_response.await_completion() + + # Wait for the test to be finished + print("Test running ...") + session.refresh() + while session.test.status != 'STOPPED': + sleep(5) + session.refresh() + print("Test finished successfully.\n") + + # Download the test results + print("Downloading test results ...") + api_test_results_instance = cyperf.TestResultsApi(api_client) + generate_all_operation = cyperf.GenerateAllOperation() + api_test_results_response = api_test_results_instance.start_result_generate_all(result_id=session.test.test_id, generate_all_operation=generate_all_operation) + file_path = api_test_results_response.await_completion() + + last_separator_index = file_path.rfind("\\") + directory = file_path[:last_separator_index] + file_name = file_path[last_separator_index + 1:] + + print(f"Saved as: '{file_name}' at {directory}\n") From 38e810463b01a7eb3ae98cc91f939106446f1f72 Mon Sep 17 00:00:00 2001 From: Luca Muntean Date: Tue, 1 Sep 2026 05:24:04 -0600 Subject: [PATCH 24/26] Pull request #89: ISGAPPSEC2-38691 Regeneratre cyperf wrapper to include the python 3.14 fix Merge in ISGAPPSEC/cyperf-api-wrapper from regenerate-wrapper to main Squashed commit of the following: commit c4c9954f66e5224225f7654ad71508de902999b2 Author: lucamunt Date: Tue Sep 1 14:17:13 2026 +0300 regeneratre cyperf wrapper to include the python 3.14 fix --- cyperf/api_client.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cyperf/api_client.py b/cyperf/api_client.py index 7c49b5c..0408541 100644 --- a/cyperf/api_client.py +++ b/cyperf/api_client.py @@ -577,6 +577,12 @@ def __deserialize(self, data, klass): klass = m.group(1) continue + elif '|' in klass: + m = re.match(r'(.*)\|.*', klass) + assert m is not None, "Malformed union type definition" + klass = m.group(1).strip() + continue + else: break From 7068c665c9334325b47f2e6ecb61763dd4caf43e Mon Sep 17 00:00:00 2001 From: Marian-Madalin Stanciu Date: Wed, 16 Sep 2026 07:08:26 -0600 Subject: [PATCH 25/26] Pull request #90: ISGAPPSEC2-40005 regenerate wrapper after updating error handling on operations Merge in ISGAPPSEC/cyperf-api-wrapper from ISGAPPSEC2-40005_update_error_handling_on_operations to main Squashed commit of the following: commit e11e30998c314e170b1d3e65e90954cbf4b895ef Author: Marian-Madalin Stanciu Date: Wed Sep 16 11:49:27 2026 +0300 regenerate wrapper after updating error handling on operations --- cyperf/dynamic_model_meta.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cyperf/dynamic_model_meta.py b/cyperf/dynamic_model_meta.py index 2e55b58..02bc132 100644 --- a/cyperf/dynamic_model_meta.py +++ b/cyperf/dynamic_model_meta.py @@ -420,7 +420,7 @@ def poll(cls, self, get_final_result = True, poll_time = 1): return_type=self.base_model.__class__, href=self.url), api_client=self.api_client) if op.state == "ERROR": - raise ApiException(f"Error running operation {op.id} of type {op.type}: {op.message}") + raise ApiException(f"Error running operation {op.id} of type {op.type}: {op.message if op.message else op.base_model.result}") if op.result_url and get_final_result: return cls.link_based_request(op, None, "GET", return_type=object, href=op.result_url) return op.base_model.result From 30f5c0d7a7f40356aa21085b7e88602777add8ff Mon Sep 17 00:00:00 2001 From: Angela Grigoroaia Date: Tue, 22 Sep 2026 18:39:34 +0300 Subject: [PATCH 26/26] Cleanup --- .claude/knowledge-base/.generated-manifest.md | 100 --- .claude/knowledge-base/README.md | 24 - .claude/knowledge-base/USAGE.md | 92 -- .../knowledge-base/sections/architecture.md | 17 - .../sections/development-guide.md | 17 - .../sections/external-quality.md | 10 - .../sections/feature-registry.md | 12 - .claude/knowledge-base/sections/file-index.md | 57 -- .../sections/internal-quality.md | 8 - .../sections/project-standards.md | 28 - .../sections/surface-inventory.md | 65 -- .../knowledge-base/sections/technical-debt.md | 10 - .../sections/tooling-requirements.md | 14 - .pypirc | 3 - API-endpoints-changelog.txt | 817 ------------------ git_push.sh | 57 -- jenkins/JenkinsFile | 117 --- 17 files changed, 1448 deletions(-) delete mode 100644 .claude/knowledge-base/.generated-manifest.md delete mode 100644 .claude/knowledge-base/README.md delete mode 100644 .claude/knowledge-base/USAGE.md delete mode 100644 .claude/knowledge-base/sections/architecture.md delete mode 100644 .claude/knowledge-base/sections/development-guide.md delete mode 100644 .claude/knowledge-base/sections/external-quality.md delete mode 100644 .claude/knowledge-base/sections/feature-registry.md delete mode 100644 .claude/knowledge-base/sections/file-index.md delete mode 100644 .claude/knowledge-base/sections/internal-quality.md delete mode 100644 .claude/knowledge-base/sections/project-standards.md delete mode 100644 .claude/knowledge-base/sections/surface-inventory.md delete mode 100644 .claude/knowledge-base/sections/technical-debt.md delete mode 100644 .claude/knowledge-base/sections/tooling-requirements.md delete mode 100644 API-endpoints-changelog.txt delete mode 100644 git_push.sh delete mode 100644 jenkins/JenkinsFile diff --git a/.claude/knowledge-base/.generated-manifest.md b/.claude/knowledge-base/.generated-manifest.md deleted file mode 100644 index 94c8d51..0000000 --- a/.claude/knowledge-base/.generated-manifest.md +++ /dev/null @@ -1,100 +0,0 @@ -# Generated Artifacts Manifest -Plugin: knowledge-base v3.5.0 -Generated: 2026-07-09 - -| Path | Type | Name | Category | Version | -|------|------|------|----------|---------| -| .claude/knowledge-base/README.md | readme | knowledge-base | — | 3.5.0 | -| .claude/knowledge-base/sections/architecture.md | kb-section | architecture | — | 3.5.0 | -| .claude/knowledge-base/sections/file-index.md | kb-section | file-index | — | 3.5.0 | -| .claude/knowledge-base/sections/surface-inventory.md | kb-section | surface-inventory | — | 3.5.0 | -| .claude/knowledge-base/sections/project-standards.md | kb-section | project-standards | — | 3.5.0 | -| .claude/knowledge-base/sections/internal-quality.md | kb-section | internal-quality | — | 3.5.0 | -| .claude/knowledge-base/sections/external-quality.md | kb-section | external-quality | — | 3.5.0 | -| .claude/knowledge-base/sections/technical-debt.md | kb-section | technical-debt | — | 3.5.0 | -| .claude/knowledge-base/sections/feature-registry.md | kb-section | feature-registry | — | 3.5.0 | -| .claude/knowledge-base/sections/development-guide.md | kb-section | development-guide | — | 3.5.0 | -| .claude/knowledge-base/sections/tooling-requirements.md | kb-section | tooling-requirements | — | 3.5.0 | -| .claude/skills/explain/SKILL.md | skill | explain | understand | 3.4.0 | -| .claude/skills/document/SKILL.md | skill | document | understand | 3.4.0 | -| .claude/skills/review/SKILL.md | skill | review | operate | 3.4.0 | -| .claude/skills/exec-plan/SKILL.md | skill | exec-plan | operate | 3.4.0 | -| .claude/skills/deploy/SKILL.md | skill | deploy | operate | 3.4.0 | -| .claude/agents/scanner.md | agent | scanner | — | 3.4.0 | -| .claude/agents/analyzer.md | agent | analyzer | — | 3.4.0 | -| .claude/agents/reasoner.md | agent | reasoner | — | 3.4.0 | -| .claude/agents/reviewer.md | agent | reviewer | — | 3.4.0 | -| .claude/agents/exec-plan-author.md | agent | exec-plan-author | — | 3.4.0 | -| .claude/agents/exec-plan-implementer.md | agent | exec-plan-implementer | — | 3.4.0 | -| .claude/agents/exec-plan-discusser.md | agent | exec-plan-discusser | — | 3.4.0 | -| .claude/agents/exec-plan-researcher.md | agent | exec-plan-researcher | — | 3.4.0 | -| .claude/commands/explain.md | command | explain | — | 3.4.0 | -| .claude/commands/review.md | command | review | — | 3.4.0 | -| .claude/commands/exec-plan.md | command | exec-plan | — | 3.4.0 | -| .claude/commands/deploy.md | command | deploy | — | 3.4.0 | -| .claude/commands/incremental-discover.md | command | incremental-discover | — | 3.4.0 | -| .claude/settings.json | hook | block-sensitive, lint-on-save | — | 3.4.0 | -| .claude/hooks/block_sensitive.py | hook | block-sensitive (helper script) | — | 3.4.0 | -| .claude/hooks/lint_on_save.py | hook | lint-on-save (helper script) | — | 3.4.0 | -| CLAUDE.md | readme | claude-md | — | 3.4.0 | -| .claude/knowledge-base/USAGE.md | readme | usage | — | 3.5.0 | - -## Artifacts intentionally not generated - -| Artifact | Reason | -|----------|--------| -| MCP server configs (`.mcp.json`) | No qualifying stack signal: remote is internal Bitbucket (not GitHub), no database, no UI, no Slack/Stripe/Supabase integration. The project's `docker/Dockerfile` only packages the wheel for PyPI publish — not a local dev container workflow — so it doesn't justify a Docker MCP server either. | -| Improve skills (Tier A/B) | No IQ/EQ evaluation has run yet (this was a `discover`-only / base-mode run, not `discover-all`). Zero Improve skills is the correct base-mode outcome, not a gap. | -| `run-tests` hook | The project has no real test suite (`pytest --cov=cyperf` collects 0 tests) — wiring a hook to run non-existent tests on every save would be misleading. | -| `format-on-save` hook | No formatter is configured for this project (no black/ruff/autopep8) — only the `flake8` linter, which is covered by `lint-on-save`. | - -Validation: passed — all 16 mandatory artifacts + 1 conditional (`deploy`, justified by existing `docker/Dockerfile` + `jenkins/JenkinsFile` build/publish pipeline) verified present via Glob; frontmatter sanity (no `tools:` field, `name`/`description` present) and generation-marker presence verified across all skills/agents/commands/readmes; `.claude/settings.json` validated as parseable JSON; both hook helper scripts (`block_sensitive.py`, `lint_on_save.py`) validated via `py_compile` and exercised against representative stdin payloads (block / allow / skip-generated / skip-non-python cases all produced the expected exit codes). - -## Incremental Update Log - -### 2026-08-24 — Finish v3.5.0 upgrade: bring `USAGE.md` up to the current plugin version -Tooling/template refresh only — no discovery, no IQ/EQ, no re-analysis. The 2026-07-09 layout migration bumped the KB body (index README + all 10 `sections/*.md`) to plugin v3.5.0 but left `USAGE.md` stamped at plugin v3.4.0, leaving the KB in a mixed-version state. This entry closes that gap. - -- **Template check**: `skills/generate-tooling/references/usage-readme.md` is **byte-identical** between plugin v3.4.0 and v3.5.0 (md5 `2540c311d609c692fc36e2bfe2220225`, 5408 bytes both). The v3.5.0 CHANGELOG is entirely about the monolithic→split KB layout migration, which this repo already completed. So there was no template change to apply — the correction is a version stamp plus one KB-consistency fix. -- **`USAGE.md`**: generation marker and the `Generated: … | Plugin: …` line moved from plugin v3.4.0 → v3.5.0. The `Generated: 2026-07-09` date is preserved, matching how `README.md` was handled during the layout migration. -- **`USAGE.md` content refresh**: the `/document samples/` scenario listed only 5 sample scripts; `sections/file-index.md` and the working tree both report 7. Added the two missing entries (`sample_sequences_examples.py`, `samples/appbuilder/sample_appbuilder_examples.py`) so the usage guide agrees with the file index. No other prose changed. -- **Manifest**: the `USAGE.md` row's Version column moved 3.4.0 → 3.5.0. - -**Deliberately not changed**: the rows for `.claude/skills/*`, `.claude/agents/*`, `.claude/commands/*`, `.claude/settings.json`, `.claude/hooks/*`, and `CLAUDE.md` still read 3.4.0. Those artifacts are **absent from disk and from the entire git history** of this repo — the KB commit only ever contained the 13 `.claude/knowledge-base/**` files. Restamping rows for artifacts that were never generated here would be false provenance, so they are left as the historical record. Regenerating those 16 mandatory artifacts is a separate decision, not part of a version-stamp refresh. - -**Known drift (not addressed here, flagged for a future `incremental-discover`)**: `HEAD` has advanced past the 2026-07-31 refresh baseline (`835526c`). Tracked counts are now 438 model files and 454 doc pages, while the KB body still states 454 models / 469 docs. Correcting those figures is content re-analysis and was out of scope for this upgrade. - -### 2026-07-17 — Incremental content patch for 2 landed commits (no re-discovery/IQ/EQ) -Two commits landed on `main` since the 2026-07-09 generation baseline (`0affc87`), both after the KB commit was authored: `d8f08be` ("Regenerate Python API Wrapper", PR #78, 2026-07-10) and `d56047c` ("ISGAPPSEC2-38156 sample script for appbuilder", PR #77, 2026-07-14). This patch updates only the counts/facts touched by those two commits — no fresh discovery pass, no IQ/EQ re-run (both remain "not yet evaluated"). - -- **`d8f08be` (API regen)**: `cyperf/models/*.py` 443 → 454 (+11 new: `agent_assignment_by_front_panel_port`, `clear_compute_resources_ownership_operation`, `clear_front_panel_ports_ownership_operation`, `compute_resource`, `compute_resources_by_controller`, `compute_resources_by_node`, `front_panel`, `front_panel_ports_by_controller`, `ports_by_panel`, `reboot_compute_resources_operation`, `set_front_panel_ports_link_state_operation`; 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py`, not a net add). `docs/*.md` 458 → 469 (+11, 1:1 with the new models). `AgentsApi` operations grew from 27 to an estimated ~37 (verified by diffing unique method-base-names in `agents_api.py` before/after — a proxy count, not a line-by-line spec re-read); total operations therefore restated as "~322 (was 312)" everywhere it appears, flagged as approximate since only `AgentsApi` was re-counted precisely, not all 16 classes. The tracked `.openapi-generator/` directory was removed (now gitignored) — no KB fact referenced it, no change needed there. Total Python files 476 → 488. -- **`d56047c` (sample script)**: `samples/*.py` 6 → 7. Added `samples/appbuilder/sample_appbuilder_examples.py` (uploads an encrypted pcap via `ApplicationResourcesApi.start_resources_captures_encrypted_upload_file`, then builds AppBuilder apps/actions from the parsed capture flows/exchanges) plus `samples/appbuilder/claude.pcap` and `samples/appbuilder/tls_key.log` fixtures. Uses only the existing `ApplicationResourcesApi` surface (no new API class), so no surface-inventory API table change beyond the file-index row for the new sample. - -**Files patched**: `README.md` (Product Profile Scale/Architecture bullets), `sections/architecture.md` (layer 2/3 counts), `sections/file-index.md` (File Inventory table: api/models/docs/samples rows + new `samples/appbuilder/*` row), `sections/surface-inventory.md` (APIs intro total, `AgentsApi` row, auth-pattern enrichment row). - -**Not touched / not needed**: `sections/internal-quality.md`, `sections/external-quality.md`, `sections/technical-debt.md` (still gated on a real IQ/EQ run — this patch is facts-only), `sections/project-standards.md`, `sections/feature-registry.md`, `sections/development-guide.md`, `sections/tooling-requirements.md` (nothing in either commit touched standards, requirements, or tooling), Interaction Chains in `file-index.md` (the new appbuilder sample is a genuinely new workflow shape — capture-upload → AppBuilder app/action creation — that doesn't fit Chain A/B; documenting it properly would need a real interaction trace, which is out of scope for this lightweight patch and is called out here as a **fuller-analysis flag** for a future `discover`/`index-files` pass). - -**Git**: will be amended onto the existing unpushed local KB commit (currently `ea3e856` after rebasing twice across intervening `git pull`s), per this repo's explicit git-workflow instructions (never push this commit; `pull.rebase=true` keeps it replaying cleanly on top of new origin commits). Only `.claude/knowledge-base/**` is staged for the amend; the unrelated unstaged `.gitignore` working-tree change (adding `.claude/settings.local.json`) is left untouched. - -### 2026-07-09 — Migrate KB to v3.5.0 index + sections layout -Structural migration only — no discovery/IQ/EQ re-run, no new facts. The monolithic `.claude/knowledge-base/README.md` already used the exact 10 canonical v3.5.0 H2 section names, so this was a clean 1:1 carve with no renaming/remapping judgment required: - -- `## Product Profile` stayed in the new slim `README.md` (plus the new `## Sections` index table). -- `## External Quality Summary` → `sections/external-quality.md` (verbatim — still "not yet performed"). -- `## Internal Quality Summary` → `sections/internal-quality.md` (verbatim — still "not yet performed"). -- `## Project Standards` → `sections/project-standards.md` (verbatim, including its `### Coding & Quality Gates` / `### Testing` / `### Architectural Rules` subheadings, unchanged since they were already H3). -- `## Architecture Overview` → `sections/architecture.md` (verbatim). -- `## File Index` → `sections/file-index.md` (verbatim, including `### File Inventory` / `### Key File Details` / `### Interaction Chains` / `### Hub Files & Side Effect Map`). -- `## Surface Inventory` → `sections/surface-inventory.md` (verbatim, including `### APIs` / `### UIs` / `### CLIs` / `### Services` / `### Libraries` / `### AI Metadata`). -- `## Technical Debt Registry` → `sections/technical-debt.md` (verbatim — still "Requires IQ evaluation"). -- `## Feature Registry` → `sections/feature-registry.md` (verbatim, empty FR/NFR tables preserved as-is, not fabricated). -- `## Development Guide` → `sections/development-guide.md` (verbatim, `### For AI Agents` / `### For Human Developers`). -- `## Tooling Requirements` → `sections/tooling-requirements.md` (verbatim, `### Understand Skills` / `### Operate Skills` / `### Improve Skills`). - -No canonical section was missing content, so no `_Not yet populated..._` placeholder was needed anywhere. No heading-level bumping was needed either — every carved section's own subheadings were already H3, nesting correctly under the new top-level H2 in each section file. No content-drift fix was identified or applied for this repo (per repo-specific instructions, none was expected). - -**Tooling-file grep (step 3)**: `.claude/agents`, `.claude/skills`, `.claude/commands`, and `CLAUDE.md` do **not exist** in this checkout (they were generated in the isolated worktree `.claude/worktrees/elegant-wishing-tide/` during the original discover run and were never relocated into `main` — see `f59b111`'s commit message, "Knowledge base was generated in an isolated worktree; relocating it into the main checkout's .claude/knowledge-base..."). This manifest still lists them (unchanged, v3.4.0) because they are real generated artifacts that exist in that worktree / were intended to be relocated — they are simply outside the scope of this structural KB migration. No stale KB references were found or fixed because there was nothing on disk to grep in the main checkout. `.claude/knowledge-base/USAGE.md` mentions the KB generically (e.g. "run `/knowledge-base:incremental-discover`") but contains no reference to a specific `## Section Heading` that moved, so it required no edit and its marker was left at v3.4.0. - -**Legacy `.claude/kb/` directory**: none existed; nothing to remove. - -**Git**: amended onto the existing unpushed commit `f59b111` ("Add generated knowledge base") per this repo's explicit git-workflow instructions, since that commit had never been pushed to `origin/main`. Only `.claude/knowledge-base/**` was staged; the untracked `.claude/worktrees/elegant-wishing-tide/` and `pr-78.diff` were left untouched. diff --git a/.claude/knowledge-base/README.md b/.claude/knowledge-base/README.md deleted file mode 100644 index f224b01..0000000 --- a/.claude/knowledge-base/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Knowledge Base: cyperf-api-wrapper -Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 | Last incremental refresh: 2026-07-31 (git-history patch covering commits through `835526c`, no re-discovery/IQ/EQ) - -## Product Profile -- **Purpose**: Python client SDK for the Keysight CyPerf network/security performance-test controller — a mostly OpenAPI-generated REST client (`pip install cyperf`) topped with a hand-written `TestRunner`/CLI helper layer and a HATEOAS "dynamic model" layer for writing test-automation scripts. -- **Stack**: Python 3.8–3.12, pydantic ≥2, urllib3 ≥2.2, python-dateutil, typing-extensions; generated by [OpenAPI Generator](https://openapi-generator.tech) (Python/pydantic template). No web framework — this is an SDK/library, not a service. -- **Scale**: 488 Python files / ~145k LOC total (as of the Jul-10/14 2026 regen + sample-script commits), but the overwhelming majority is generator output: 454 model files (`cyperf/models/`), 16 API classes / ~322 operations (`cyperf/api/`; grew from 312 when `AgentsApi` gained ~10 new compute-resource/front-panel-port ownership operations), 469 generated doc pages (`docs/`). Hand-written surface is small and concentrated: `cyperf/utils.py` (636 lines), `cyperf/dynamic_model_meta.py` (584 lines), plus targeted edits inside `api_client.py` / `configuration.py`, and 7 sample scripts (~60k combined incl. one config zip and one pcap fixture). -- **Architecture**: Generated OpenAPI SDK, layered: `Configuration`/`ApiClient`/`RESTClientObject` (HTTP+OAuth2) → 16 generated `*Api` classes (~322 operations) → 454 generated pydantic models → a hand-written `DynamicModel` metaclass that wraps every model with lazy HATEOAS link-following, `.update()`/`.delete()`/`.refresh()`, and async-operation polling → `utils.TestRunner` + CLI helpers for scripting on top. Distributed as a PyPI package (internal Keysight/Bitbucket, `bitbucket.it.keysight.com/scm/isgappsec/cyperf-api-wrapper`), consumed by internal regression suites (e.g. the "appsec-automation" repo, per commit history). - -## Sections -| File | Description | -|------|-------------| -| [sections/architecture.md](sections/architecture.md) | Layered architecture, auth flow, async operations, dependency graph, data architecture | -| [sections/file-index.md](sections/file-index.md) | File inventory, key file details, interaction chains, hub files & side effects | -| [sections/surface-inventory.md](sections/surface-inventory.md) | APIs, UIs, CLIs, Services, Libraries, and AI metadata surfaces | -| [sections/project-standards.md](sections/project-standards.md) | Coding & quality gates, testing conventions, architectural rules | -| [sections/internal-quality.md](sections/internal-quality.md) | Internal Quality (IQ) summary — not yet evaluated | -| [sections/external-quality.md](sections/external-quality.md) | External Quality (EQ) summary — not yet evaluated | -| [sections/technical-debt.md](sections/technical-debt.md) | Technical debt registry — requires IQ evaluation | -| [sections/feature-registry.md](sections/feature-registry.md) | Functional and non-functional requirements tracked from plans | -| [sections/development-guide.md](sections/development-guide.md) | Guidance for AI agents and human developers working in this repo | -| [sections/tooling-requirements.md](sections/tooling-requirements.md) | Understand/Operate/Improve skill tooling requirements | - -Load only the section(s) relevant to your task rather than all of them at once. diff --git a/.claude/knowledge-base/USAGE.md b/.claude/knowledge-base/USAGE.md deleted file mode 100644 index c727d08..0000000 --- a/.claude/knowledge-base/USAGE.md +++ /dev/null @@ -1,92 +0,0 @@ - -# Usage Guide for cyperf-api-wrapper - -Generated: 2026-07-09 | Plugin: knowledge-base v3.5.0 - ---- - -## Quick Start - -| Command | What It Does | -|---------|-------------| -| `/explain {component}` | Explain any part of the `cyperf` SDK — a generated `*Api` operation (e.g. `SessionsApi.create_sessions`), a generated model, or one of the hand-written layers (`cyperf/utils.py` TestRunner, `cyperf/dynamic_model_meta.py` DynamicModel) — tracing what it actually does against the CyPerf controller | -| `/review` | Review staged changes against the project's conventions, scoped to the small hand-written surface (`cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches in `api_client.py`/`configuration.py`/`exceptions.py`, `samples/*.py`); generated files under `cyperf/api/`, `cyperf/models/`, and `docs/` are excluded by default | -| `/exec-plan {task}` | Create a step-by-step execution plan for changes such as adding a new sample script or extending `TestRunner`, flagging the scenario-zero test-framework gap (pytest collects 0 tests) along the way | - ---- - -## Scenario Examples - -### Understand a Component - -**Task**: You need to understand how an end-to-end test run is actually driven through the SDK, e.g. before adding a new convenience method to `TestRunner`. - -**Run**: `/explain TestRunner.wait_for_test_end` - -**What happens**: The explain skill locates `wait_for_test_end` in `cyperf/utils.py`, traces its 0.5s poll loop calling `SessionsApi.get_session_test(session_id=...)` (`GET /api/v2/sessions/{id}/test`) until `status=='STOPPED'`, and surfaces the wider chain it belongs to — `parse_cli_options()` → `TestRunner(...)` → `create_session_by_config_name()` → `start_test()` → `wait_for_test_end()` — as demonstrated end-to-end in `samples/sample_udp_streaming_run.py`. - ---- - -### Review Changes - -**Task**: You've modified `cyperf/utils.py` (e.g. touched `set_prisma_airs_params` or added a new `TestRunner` method) and want to catch issues before committing. - -**Run**: `/review` - -**What happens**: The review skill checks your staged diff against the project's actual conventions — the typed `ApiException` hierarchy in `cyperf/exceptions.py` as the dominant error-handling pattern (flagging any new broad `except Exception` swallows like the existing ones in `set_prisma_airs_params`/`set_model_armor_params`), the `flake8` lint rules (`--max-complexity=10 --max-line-length=127` in CI, `--max-line-length=150` locally per `setup.cfg`), and confirms you haven't hand-edited any file carrying the `"Generated by OpenAPI Generator... Do not edit the class manually"` header. - ---- - -### Plan a Feature - -**Task**: You need to add a new sample script demonstrating a raw-API-style attack test run against a precanned configuration. - -**Run**: `/exec-plan add a new sample script for attack test runs using the raw API style` - -**What happens**: The exec-plan skill creates a fully-scoped execution plan in `.claude/plans/`, modeled on the existing raw-API interaction chain used by `samples/sample_load_and_run_precanned_config.py` and `samples/sample_attack_based_script.py` (`create_api_client_cli()` → `ConfigurationsApi.get_configs` → `SessionsApi.create_sessions` → per-model `.update()` → `TestOperationsApi.start_test_run_start` + `.await_completion()`), and explicitly calls out that there is no automated test suite to validate against — `pytest --cov=cyperf` collects 0 tests today, so verification has to be manual/functional. You review and approve the plan before any code changes happen. After completion, run `/knowledge-base:incremental-discover` to update the KB. - ---- - -### Generate Documentation - -**Task**: You need an accurate, human-facing description of how the `TestRunner`-based workflow differs from the raw-API workflow, since the generated `README.md`/`docs/*.md` don't cover this. - -**Run**: `/document samples/` - -**What happens**: The document skill reads `samples/*.py` (the only hand-written usage examples in the repo — `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`, `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`, `sample_sequences_examples.py`, plus `samples/appbuilder/sample_appbuilder_examples.py`), infers the two idiomatic call styles already used, and writes/updates guidance rather than touching the generator-owned `README.md`/`docs/*.md` (443 model docs + per-API-class docs), which would simply be clobbered on the next OpenAPI regeneration. - ---- - -### Deploy (Package & Publish) - -**Task**: Build the `cyperf` package and publish a new version to the internal PyPI index after re-syncing the wrapper against a newer CyPerf controller OpenAPI spec. - -**Run**: `/deploy pypi` - -**What happens**: The deploy skill runs the same flow as `jenkins/JenkinsFile`: build inside `docker/Dockerfile`, bump `VERSION` via `sed` (keeping `setup.py`/`pyproject.toml`'s hardcoded `1.0.0` base in sync with the Jenkins-assigned build version), and — on a `release/` branch with `publish_pypi=true` — publish via `twine` using the credentials in `.pypirc`. `publish.sh`/`git_push.sh` are the local convenience-script equivalents of the same publish flow. This is packaging/publishing only — there is no runtime service to deploy; the "deployment target" is the internal PyPI index, and consumers (e.g. the `appsec-automation` regression repo) pick up the new version via `pip install`. - ---- - -No quality gaps have been identified yet that would warrant dedicated Improve skills — IQ/EQ evaluation simply has not run on this project. Run `/knowledge-base:discover-all` to perform that evaluation and generate any Improve skills the findings justify. - ---- - -## When to Use Commands vs. Agents - -**Use commands** (e.g., `/explain`, `/review`) as your primary interface. They delegate to skills, which launch agents as needed. - -**Agents are internal** — you rarely invoke them directly. The skill decides which agent to use: - -- `scanner` (haiku) for fast file searches -- `analyzer` (sonnet) for deep code analysis -- `reasoner` (opus) for complex architecture decisions - ---- - -## Keeping Your Knowledge Base Current - -After completing a plan: -- Run `/knowledge-base:incremental-discover` to update the KB from the plan's outcomes (~2% cost of full discover) - -After updating the knowledge-base plugin: -- Run `/knowledge-base:upgrade` to regenerate tooling without re-running analysis diff --git a/.claude/knowledge-base/sections/architecture.md b/.claude/knowledge-base/sections/architecture.md deleted file mode 100644 index 17d61ca..0000000 --- a/.claude/knowledge-base/sections/architecture.md +++ /dev/null @@ -1,17 +0,0 @@ - -## Architecture Overview - -**Style**: Generated OpenAPI client SDK ("Library" surface), not a monolith/microservice/UI. Four layers, bottom-up: - -1. **Transport/Auth** — `cyperf/configuration.py` (host, SSL/proxy/retry config, OAuth2 credential storage) + `cyperf/rest.py` (`RESTClientObject`, thin urllib3 wrapper: `PoolManager`/`ProxyManager`/SOCKS, `preload_content=False`) + `cyperf/api_client.py` (`ApiClient`: `param_serialize` → `call_api` → `response_deserialize`, plus a hand-written `__retry` loop layered on top of urllib3's own retries, and CyPerf-specific `accept_eula`/`wait_for_controller_up`/`refresh_authorization`). -2. **Generated REST surface** — `cyperf/api/*.py`, 16 classes / 321 operations (grew from 312 to 322 via the Jul-10 2026 "Regenerate Python API Wrapper" commit, which added ~10 compute-resource/front-panel-port ownership operations to `AgentsApi`; PR #81's Jul-27 2026 "Regenerate Cyperf Python Wrapper" then removed `SessionsApi.start_session_prepare_test`, net 321 — a precise full-class recount), each method built in triplicate (`op`, `op_with_http_info`, `op_without_preload_content`), all declaring `_auth_settings = ['OAuth2', 'OAuth2']`. -3. **Generated data models** — `cyperf/models/*.py`, 422 pydantic v2 models (was 443; +11 new models for the Jul-10 2026 regen, incl. `ComputeResource`, `FrontPanel`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation` → 454; PR #81's Jul-27 2026 regen then removed ~34 legacy per-endpoint response-wrapper/prepare-test models, added 3 TLS-1.3 signature-algorithm models, and renamed 9 more into generic shared schema types — `ContentBlock`, `FormattedDescription`, `TextSegment`, `Section`, `Keyword`, `Profile`, `LayoutConfig`, `BasicAuthProfile`, `GetScenariosOperation` — net -31 → 422), one per OpenAPI schema, re-exported flat from `cyperf/__init__.py`. -4. **Dynamic/HATEOAS overlay + scripting helpers** — `cyperf/dynamic_model_meta.py` (`DynamicModel` metaclass attaches `.update()/.delete()/.refresh()/.get_link()/.poll()` and lazy link-following properties to every generated model) and `cyperf/utils.py` (`TestRunner` class + `parse_cli_options`/`create_api_client_cli`) for end-to-end test-automation scripting. `samples/*.py` demonstrate both the raw-API style and the `TestRunner`-based style. - -**Auth flow**: `Configuration._get_access_token()` calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)` against the controller's Keycloak-style endpoint (`/auth/realms/keysight/protocol/openid-connect/token`), then every subsequent call attaches `Authorization: Bearer {access_token}` via `Configuration.auth_settings()`. - -**Async operations**: CyPerf operations that take time (start test, generate report, license activation) return an `AsyncContext`-like resource; `DynamicModel.poll()`/`.await_completion()` polls it via GET until `state != "IN_PROGRESS"`, raising `ApiException` on `state == "ERROR"`. - -**Dependency graph / hub files**: `api_client.py` ← used by all 16 `*Api` classes and by `dynamic_model_meta.py`. `dynamic_model_meta.py` ← used by `cyperf/__init__.py`, every `*_api.py`, and `cyperf/dynamic_models/__init__.py` (which mechanically instantiates one `DynamicModel`-built class per model name). `configuration.py` ← used by `ApiClient` and every sample script. `exceptions.py` ← imported everywhere `ApiException` handling occurs. No circular imports detected beyond the documented `dynamic_model_meta` ↔ `cyperf/__init__` load-order coupling noted above. - -**Data architecture**: No database — the controller (external system) is the data store; this package is purely a typed HTTP client. "Caching" is limited to in-memory model state kept in sync by `DynamicList`/`DynamicDict` wrappers between local mutation and server refresh. diff --git a/.claude/knowledge-base/sections/development-guide.md b/.claude/knowledge-base/sections/development-guide.md deleted file mode 100644 index 0e0324d..0000000 --- a/.claude/knowledge-base/sections/development-guide.md +++ /dev/null @@ -1,17 +0,0 @@ - -## Development Guide - -### For AI Agents -- **Never hand-edit** files carrying the `"Generated by OpenAPI Generator... Do not edit"` header (all of `cyperf/api/`, `cyperf/models/`, `docs/`, and most of `cyperf/api_client.py`/`configuration.py`/`rest.py`/`exceptions.py`). The only files meant for direct edits are `cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches inside the "generated" core files (search for CyPerf-specific methods like `accept_eula`, `wait_for_controller_up`, `_get_access_token` to see the pattern), `samples/*.py`, `docker/Dockerfile`, `jenkins/JenkinsFile`. -- **There is no test suite to run.** `pytest --cov=cyperf` is wired into every CI config but collects zero tests — don't assume `pytest` output means anything passed/failed today. If asked to "run the tests," flag this gap rather than reporting a false green. -- Files named `test_*.py` under `cyperf/api/` and `cyperf/models/` are **not tests** — they're generated models/API classes for CyPerf domain objects literally named "Test..." (TestInfo, TestOperationsApi, TestUsage, etc.). -- Entry points for understanding real usage: read `samples/*.py` before `cyperf/api/*.py` — the samples show the two idiomatic call styles (raw `*Api` classes vs. `utils.TestRunner`). `cyperf/utils.py` and `cyperf/dynamic_model_meta.py` are the only two files with actual business logic to reason about; everything else is either generated plumbing or generated boilerplate. -- The `DynamicModel` layer is the trap most likely to confuse: a plain-looking attribute access on a model (e.g. `session.config`) can trigger a lazy **HTTP GET** under the hood if the field is link-backed and not yet loaded. `.update()` similarly can issue network calls. Don't assume model attribute access is side-effect-free. - -### For Human Developers -- **Setup**: `pip install -r requirements.txt` (runtime) + `pip install -r test-requirements.txt` (dev tools); Python ≥3.8 (setup.py says `>=3.11`, pyproject.toml says `^3.8` — inconsistent, prefer 3.11+ to match CI's newer matrix legs). -- **Build**: `python setup.py install` or via Poetry (`pyproject.toml` present, but `setup.py` is what CI/Jenkins actually use). -- **Test**: `pytest --cov=cyperf` runs but exercises nothing (no test files exist yet). -- **Lint**: `flake8 . --max-complexity=10 --max-line-length=127` (CI, advisory) or `--max-line-length=150` (local `setup.cfg`); `mypy` configured but not enforced in CI. -- **Publish**: `jenkins/JenkinsFile` builds inside `docker/Dockerfile`, bumps `VERSION` via `sed`, and (if `publish_pypi=true` on a `release/` branch) publishes via `twine` using `.pypirc`. `publish.sh`/`git_push.sh` are local convenience scripts for the same flow. -- **Regenerating the client**: this repo is periodically re-synced against a newer CyPerf controller OpenAPI spec ("Re-generate wrapper" commits). After regenerating, re-apply the hand patches called out above (auth flow, EULA/controller-readiness helpers, `LinkNameException`, retry loop) since the generator will overwrite them. diff --git a/.claude/knowledge-base/sections/external-quality.md b/.claude/knowledge-base/sections/external-quality.md deleted file mode 100644 index 311f70d..0000000 --- a/.claude/knowledge-base/sections/external-quality.md +++ /dev/null @@ -1,10 +0,0 @@ - -## External Quality Summary - -EQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. - -### Surface changes observed since last KB refresh (pre-EQ, from git history 2026-07-14 → 2026-07-29) -- **Breaking**: `SessionsApi.start_session_prepare_test` (plus its `_with_http_info`/`_without_preload_content` variants) and the `PrepareTestOperation`/`PreparedTestOptions` models it used were removed entirely (PR #81, Jul 27 2026 regen). -- **Breaking**: `UtilsApi.get_eula`/`post_eula` gained a new required positional `id` parameter; the resource path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}` (PR #81). The wrapper's own `wait_for_controller_up()` was not updated to match, so this is also an internal reliability bug — see `sections/technical-debt.md` (TD-1). -- **Non-breaking / additive**: `DataMigrationApi.start_controller_migration_import` gained an optional `file` upload parameter (multipart form); `ApplicationResourcesApi.delete_resources_capture` now documents `401`/`403`/`404` `ErrorResponse` returns in addition to `500`; several `ApplicationResourcesApi` docstrings had the word "CyPerf" genericized (e.g. "Get a particular CyPerf application" → "Get a particular application") — cosmetic only. -- **Behavioral change (hand-written helper API, not generated)**: `utils.TestRunner.set_prisma_airs_params`/`set_model_armor_params` both gained an optional `hostname=` keyword argument and now raise `ValueError` when no matching guardrail strike or application is found at all (previously only printed and returned) — PR #80, Jul 29 2026, ISGAPPSEC2-38154. diff --git a/.claude/knowledge-base/sections/feature-registry.md b/.claude/knowledge-base/sections/feature-registry.md deleted file mode 100644 index 7ca3322..0000000 --- a/.claude/knowledge-base/sections/feature-registry.md +++ /dev/null @@ -1,12 +0,0 @@ - -## Feature Registry - -### Functional Requirements -| ID | Requirement | Source plan | Scenarios | -|----|-------------|-------------|-----------| -*(Empty at initial discover; grows as plans complete.)* - -### Non-Functional Requirements -| ID | Requirement | Source plan | Scenarios | -|----|-------------|-------------|-----------| -*(Empty at initial discover; grows as plans complete.)* diff --git a/.claude/knowledge-base/sections/file-index.md b/.claude/knowledge-base/sections/file-index.md deleted file mode 100644 index 2fc1d27..0000000 --- a/.claude/knowledge-base/sections/file-index.md +++ /dev/null @@ -1,57 +0,0 @@ - -## File Index - -### File Inventory -| Path / Group | Count | Role | Generated? | -|---|---|---|---| -| `cyperf/api_client.py` | 1 | HTTP request/response pipeline, retry, dynamic-model wrapping | Generated + hand patches (`accept_eula`, `wait_for_controller_up`, `refresh_authorization`, `__retry`) | -| `cyperf/configuration.py` | 1 | Auth/host/SSL/proxy config, OAuth2 token fetch | Generated + hand patch (`_get_access_token`, `eula_accept_interactive`) | -| `cyperf/rest.py` | 1 | urllib3-based low-level HTTP client | Generated (standard) | -| `cyperf/exceptions.py` | 1 | Exception hierarchy, status→exception mapping | Generated + 1 hand addition (`LinkNameException`) | -| `cyperf/api_response.py` | 1 | Generic `ApiResponse[T]` pydantic wrapper | Generated (standard) | -| `cyperf/__init__.py` | 1 | Public namespace (re-exports ~460 names) | Generated (standard) | -| `cyperf/dynamic_model_meta.py` | 1 | `DynamicModel` metaclass — HATEOAS link-following, update/delete/refresh/poll | **Hand-written**, no generator header | -| `cyperf/dynamic_models/__init__.py` | 1 | Mechanically builds one `DynamicModel`-wrapped class per model name | Generated (custom template, not standard openapi-generator) | -| `cyperf/utils.py` | 1 | `TestRunner` convenience class + CLI arg parsing (`parse_cli_options`, `create_api_client_cli`) | **Hand-written**, no generator header | -| `cyperf/api/*.py` | 16 (+`__init__.py`) | Generated REST operation classes, 321 operations total (was 312; `AgentsApi` gained ~10 compute-resource/front-panel-port ownership ops in the Jul-10 2026 regen → 322; PR #81's Jul-27 2026 "Regenerate Cyperf Python Wrapper" then removed `SessionsApi.start_session_prepare_test`, net 321 — precise full-class recount, superseding the earlier "~322, approximate" caveat) | Generated (standard) | -| `cyperf/models/*.py` | 422 | Generated pydantic model per OpenAPI schema (was 443; +11 new models for front-panel-port/compute-resource ownership in the Jul-10 2026 regen, 1 renamed: `set_link_state_operation.py` → `set_ports_link_state_operation.py` → 454; PR #81's Jul-27 2026 regen then removed ~34 legacy per-endpoint response-wrapper/prepare-test models, added 3 TLS-1.3 signature-algorithm models, and renamed 9 more into generic shared schema types — `ContentBlock`, `FormattedDescription`, `TextSegment`, `Section`, `Keyword`, `Profile`, `LayoutConfig`, `BasicAuthProfile`, `GetScenariosOperation` — net -31 → 422) | Generated (standard) | -| `docs/*.md` | 438 | Generated per-model/per-API-class reference docs (was 458; +11 for the Jul-10 2026 regen → 469; PR #81's Jul-27 2026 regen removed/renamed the same set of models, net -31 → 438) | Generated (standard) | -| `samples/*.py` | 7 | End-to-end usage examples (attack tests, config CRUD, UDP streaming, sequences, appbuilder capture-to-app workflow) | Hand-written | -| `samples/appbuilder/*` | 3 | `sample_appbuilder_examples.py` (uploads an encrypted pcap capture via `ApplicationResourcesApi`, then builds AppBuilder apps/actions from the parsed flows) + `claude.pcap`/`tls_key.log` fixtures (added 2026-07-14, PR #77) | Hand-written script + data fixtures | -| `samples/cyperf-configurations/*.zip` | 1 | Sample pre-canned CyPerf config bundle | Data fixture | -| `docker/Dockerfile` | 1 | Builds/installs the package for publishing | Hand-written | -| `jenkins/JenkinsFile` | 1 | Internal Keysight build/publish pipeline (PyPI release) | Hand-written | -| `.github/workflows/python.yml`, `.gitlab-ci.yml`, `.travis.yml` | 3 | Lint/test CI (all generator-produced, unmodified) | Generated (standard) | - -### Key File Details - -- **`cyperf/api_client.py`** — `ApiClient.__init__(configuration, header_name, header_value, cookie)`. `param_serialize()` builds method/url/headers/body via `update_params_for_auth`/`_apply_auth_params`. `call_api()` is the public sync entry point, wrapping private `__call_api` in a hand-written `__retry(request_func, retries=3→5)` loop (catches `ServiceException`/`urllib3.exceptions.RequestError`, `time.sleep(5)` between attempts) — independent of urllib3's own retry config. `__call_api` calls `rest_client.request(...)` then wraps the result via `DynamicModel.dynamic_wrapper(...)` (lazy import from `dynamic_model_meta`). `response_deserialize()` maps status→declared type, raises `ApiException.from_response(...)` on non-2xx. CyPerf-specific: `accept_eula(eula_text)` (env var `CYPERF_EULA_ACCEPTED` or interactive prompt), `wait_for_controller_up(timeout_seconds=600)` (polls `UtilsApi.check_eulas`, `ApplicationResourcesApi`, `SessionsApi`, `ConfigurationsApi`, `AgentsApi`, `TestResultsApi`), `refresh_authorization()` (clears `configuration.access_token` to force re-auth). **Flagged for human review (new, evidenced by PR #81, Jul 27 2026 regen)**: `UtilsApi.get_eula`/`post_eula` were regenerated to require a new positional `id` parameter (resource path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}`), but `wait_for_controller_up()`'s EULA-accept branch (lines ~166/172) still calls `eula_checker.get_eula()` and `eula_checker.post_eula(EulaSummary(accepted=True))` with no `id` — this now raises a pydantic `validate_call` error instead of completing EULA acceptance the first time a controller requires it. It isn't clear from the diff what `id` value is now expected (a literal `"CyPerf"`? one obtained from `list_eulas`?), so this needs a human fix, not a guess — see `sections/technical-debt.md`. - -- **`cyperf/configuration.py`** — Supports API-key, HTTP basic (`username`/`password`), and OAuth2 (`access_token`/`refresh_token`). `_get_access_token()` (hand-written) calls `AuthorizationApi.authenticate(client_id='clt-wap', grant_type='refresh_token'|'password', ...)`. `auth_settings()` lazily fetches the token and builds `auth['OAuth2'] = {'type':'oauth2','in':'header','key':'Authorization','value':'Bearer '+access_token}`; contains a verbatim duplicated credential-check block (~lines 417–436), a manual-edit artifact, functionally harmless. Host/SSL/proxy fields: `host`, `verify_ssl`, `ssl_ca_cert`, `cert_file`/`key_file`, `proxy`, `retries`, `connection_pool_maxsize` (`cpu_count()*5`); CyPerf-specific `eula_accept_interactive`, `temp_folder_path`. - -- **`cyperf/rest.py`** — `RESTClientObject` built on raw `urllib3` (`PoolManager`/`ProxyManager`/SOCKS via `is_socks_proxy_url`), `preload_content=False` always, retries passed straight to urllib3 (`pool_args['retries']`), TLS via `ssl.CERT_REQUIRED`/`CERT_NONE`. Body building supports JSON/form/multipart/raw depending on `Content-Type`. - -- **`cyperf/exceptions.py`** — `OpenApiException` → `ApiTypeError`/`ApiValueError`/`ApiAttributeError`/`ApiKeyError`/`ApiException`. `ApiException.from_response()` maps 400→`BadRequestException`, 401→`UnauthorizedException`, 403→`ForbiddenException`, 404→`NotFoundException`, 5xx→`ServiceException`. Hand addition: `LinkNameException(Exception)` — raised by `DynamicModel.get_link()` when a HATEOAS link name isn't found. - -- **`cyperf/dynamic_model_meta.py`** — `DynamicList(UserList)`/`DynamicDict(UserDict)` keep raw vs. link-wrapped collection data in sync, diffing local vs. server state to POST new items / batch-DELETE (`operations/batch-delete`) removed ones on `.update()`. `DynamicModel(type)` metaclass inspects each model's pydantic fields (via `x-operation` schema extras) to attach either a bound "operation" method (e.g. a synthetic `start_test_run_start`-style method returning an `AsyncContext`) or a lazy link-following property. Key instance methods added to every model: `update()` (PATCH only-changed fields; falls back to full GET+PUT on HTTP 405), `delete()`, `refresh()`, `get_link()`/`get_self_link()`, `link_based_request()` (the actual `api_client.param_serialize`+`call_api` call), `poll()`/`await_completion()` (polls async ops, `time.sleep(poll_time)`, raises on `state=="ERROR"`). Known latent bug: `DynamicDict.__init__` iterates `for key,i in dct` over what is normally a plain dict — likely never exercised in practice, worth a defensive look before relying on dict-typed link fields. - -- **`cyperf/utils.py`** — `TestRunner.__init__(controller, username, password, refresh_token, license_server, license_user, license_password, verify_ssl)`: reads env var **`CYPERF_OFFLINE_TOKEN`** when no explicit credentials are given, builds `Configuration`+`ApiClient`, calls `update_license_server()`, fetches online agents. ~35 methods wrap the generated `*Api` classes for common workflows: `load_configuration_file(s)`, `create_session(_by_config_name)`, `delete_session`, `assign_agents` (raises `ValueError("Insufficient agents found on setup.")`), `wait_until_agents_released` (raises `TimeoutError` after 180s), `start_test`/`stop_test`/`wait_for_test_end(session, test_monitor)` (0.5s poll loop with optional callback), `collect_stats`, `get_csvs_for_result` (file I/O: `os.makedirs` + `ZipFile(...).extractall(...)`), `set_prisma_airs_params`/`set_model_armor_params` — as of PR #80 (2026-07-29, ISGAPPSEC2-38154, "unified strike format" support) both now delegate to a new shared `_set_llm_api_profile_params(session, profile_model_name, hostname, params, app_protocol_id)` helper: matching is by `param_id`/`protocol_id` instead of by param/attack-name string, both gained an optional `hostname=` kwarg (`set_model_armor_params` defaults it to `modelarmor.{location}.rep.googleapis.com` when omitted), a per-application hostname update is now skipped gracefully (with a print) when an application has no `connections` instead of risking an index/attribute error, and a `ValueError` is now raised when neither a matching LLM-API-profile strike nor application is found at all (previously only printed and returned). Still broad except-and-print, no re-raise, on the per-branch `AttributeError`/`Exception` paths — the error-swallowing pattern is now consolidated into one function instead of four near-duplicate copies, but not resolved. Module functions: `parse_cli_options(extra_options=[])` (argparse: `--controller` required, `--user`/`--password`/`--license-server`/`--license-user`/`--license-password`, plus caller-supplied extra flags; falls back to `CYPERF_OFFLINE_TOKEN` env var), `create_api_client_cli(verify_ssl=True)`. `is_valid_ipv4`/`is_valid_ipv6` are defined without a `self` parameter — a bug if ever invoked as bound instance methods. - -- **`cyperf/__init__.py`** — Pure generated flat namespace: all 16 `*Api` classes, `ApiClient`, `ApiResponse`, `Configuration`, `DynamicModel`, all exception classes (incl. `LinkNameException`), and ~440 model classes. Notably **`utils` and `dynamic_model_meta` are not re-exported here** — accessed as `cyperf.utils`/`cyperf.dynamic_model_meta` submodules. - -### Interaction Chains - -**Chain A — `TestRunner`-based end-to-end test run** (used by `sample_udp_streaming_run.py`, `sample_attacks_load_and_run.py`): -1. `utils.parse_cli_options()` → parses `--controller/--user/--password/--refresh-token`. -2. `utils.TestRunner(...)` constructor → builds `Configuration` + `ApiClient` (no HTTP yet unless `license_server` given). -3. `TestRunner.create_session_by_config_name(name)` → `ConfigurationsApi.get_configs(...)` (**GET** `/api/v2/configurations`) → `TestRunner.create_session(config_url)` → `SessionsApi.create_sessions([Session(config_url=...)])` (**POST** `/api/v2/sessions`). -4. `TestRunner.add_app/disable_automatic_network/assign_agents/set_objective_and_timeline(...)` → mutate in-memory config models → `.update()` (via `DynamicModel`) → **PATCH/PUT** to session config sub-resources. -5. `TestRunner.start_test(session)` → `TestOperationsApi.start_test_run_start(session_id=...)` (**POST** `/api/v2/sessions/{id}/test-operations/start`) → `.await_completion()` polls the async op (**GET**) until done. -6. `TestRunner.wait_for_test_end(session, test_monitor)` → loop calling `SessionsApi.get_session_test(session_id=...)` (**GET** `/api/v2/sessions/{id}/test`) every 0.5s until `status=='STOPPED'`; each tick optionally calls `TestRunner.collect_stats(...)` → `StatisticsApi.get_result_stats`/`get_result_stat_by_id` (**GET**). -7. Cleanup: `TestRunner.delete_session(session)` → `SessionsApi.delete_session(...)` (**DELETE** `/api/v2/sessions/{id}`). - -**Chain B — raw-API end-to-end run** (used by `sample_load_and_run_precanned_config.py`, `sample_create_save_and_export_config.py`, `sample_attack_based_script.py`): same shape but inlined without `TestRunner` — `create_api_client_cli()` → `ConfigurationsApi.get_configs` → `SessionsApi.create_sessions` → per-model `.update()` calls → `TestOperationsApi.start_test_run_start` + `.await_completion()` → hand-rolled `while session.test.status != 'STOPPED': sleep(5); session.refresh()` (bypasses `wait_for_test_end`) → `TestResultsApi.start_result_generate_all`/`ReportsApi.start_result_generate_csv` + `.await_completion()`. These three scripts never call `delete_session` — no cleanup. - -### Hub Files & Side Effect Map -- **Hub files** (imported by many): `cyperf/api_client.py` (all 16 `*Api` classes + `dynamic_model_meta.py`), `cyperf/dynamic_model_meta.py` (`__init__.py`, all `*_api.py`, `dynamic_models/__init__.py`), `cyperf/configuration.py` (`ApiClient` + every sample), `cyperf/exceptions.py` (used wherever `ApiException` is caught). -- **Side effects**: `api_client.py`/`rest.py` — all outbound HTTPS to the CyPerf controller. `utils.py` — file I/O (`get_csvs_for_result`: `os.makedirs`, `ZipFile.extractall`), env var reads (`CYPERF_OFFLINE_TOKEN`, license/EULA flows), `time.sleep` polling, `print`/`pprint` to stdout. `dynamic_model_meta.py` — HTTP via `api_client.call_api`/`param_serialize`, `time.sleep` in `poll()`. No database, no message queues, no background workers. diff --git a/.claude/knowledge-base/sections/internal-quality.md b/.claude/knowledge-base/sections/internal-quality.md deleted file mode 100644 index b03e65c..0000000 --- a/.claude/knowledge-base/sections/internal-quality.md +++ /dev/null @@ -1,8 +0,0 @@ - -## Internal Quality Summary - -IQ evaluation not yet performed. Run `/knowledge-base:discover-all` for full evaluation. - -### Findings surfaced during incremental git-history review (pre-IQ, not a formal pass) -- **Reliability bug, newly introduced (PR #81, Jul 27 2026 "Regenerate Cyperf Python Wrapper")**: the regen changed `UtilsApi.get_eula`/`post_eula` to require a new positional `id` parameter (path `/eula/v1/eula/CyPerf` → `/eula/v1/eula/{id}`), but the hand-written `cyperf/api_client.py::wait_for_controller_up()` EULA-accept branch was not updated to pass `id` — it now raises a pydantic `validate_call` error instead of completing EULA acceptance. See `sections/file-index.md` (`cyperf/api_client.py`) and `sections/technical-debt.md`. Flagged for human review: the correct `id` value isn't evident from the diff alone. -- **Refactor, not a quality regression (PR #80, Jul 29 2026, ISGAPPSEC2-38154)**: `cyperf/utils.py`'s `set_prisma_airs_params`/`set_model_armor_params` were deduplicated into a shared `_set_llm_api_profile_params` helper, and a total-miss case (`ValueError`) is now raised instead of silently printing. The pre-existing broad except-and-print pattern (no re-raise) is preserved, just consolidated from four copies into one — not resolved. diff --git a/.claude/knowledge-base/sections/project-standards.md b/.claude/knowledge-base/sections/project-standards.md deleted file mode 100644 index 786e514..0000000 --- a/.claude/knowledge-base/sections/project-standards.md +++ /dev/null @@ -1,28 +0,0 @@ - -## Project Standards - -Populated from discover Phase 2 (automated config search). No ADRs, design docs, SECURITY.md, or CONTRIBUTING.md were found — these categories are absent, not just undocumented; treat their absence as expected for a generated-SDK repo rather than a gap to fill blindly. - -### Coding & Quality Gates -| Standard | Value | Source | -|----------|-------|--------| -| Coverage threshold | None declared (pytest-cov run but no `--cov-fail-under` or codecov config) | `tox.ini`, `.gitlab-ci.yml`, `.travis.yml` (all: `pytest --cov=cyperf`) | -| Complexity limit | `max-complexity=10` (warning only, `--exit-zero`), `max-line-length=127` in CI; `max-line-length=150` locally | `.github/workflows/python.yml` vs `setup.cfg` `[flake8]` (inconsistent between the two) | -| Required CI checks | flake8 syntax-error gate (`E9,F63,F7,F82`) blocks; complexity/line-length lint is advisory only | `.github/workflows/python.yml` | -| Security requirements | None found (no SECURITY.md, no scanning config) | — | -| Coding standards | flake8 only; no `.editorconfig`, no black/ruff/isort config; `mypy` configured in `pyproject.toml` but explicitly **not** strict yet (`# TODO: enable "strict" once all these individual checks are passing`) | `setup.cfg`, `pyproject.toml [tool.mypy]` | -| Error patterns | Exceptions (typed `ApiException` hierarchy keyed by HTTP status) is the dominant pattern; hand-written `utils.py` mixes proper re-raise with a few broad `except Exception`/`except AttributeError: print(...)` swallows in `set_prisma_airs_params`/`set_model_armor_params` | `cyperf/exceptions.py`, `cyperf/utils.py` | - -### Testing -| Field | Value | Notes | -|-------|-------|-------| -| Test methodology | *(empty → TDD default; not actually applicable, see framework note)* | No evidence of a test-writing process either way. | -| Test framework | **Configured (`pytest`) but no test files exist.** `tox.ini`, `test-requirements.txt`, `test.sh`, `.gitlab-ci.yml`, `.travis.yml` all run `pytest --cov=cyperf`, yet there is not a single real test module in the repo. Files that *look* like tests by name — `cyperf/api/test_operations_api.py`, `cyperf/api/test_results_api.py`, `cyperf/models/test_info.py`, `cyperf/models/test_state_changed_operation.py`, `cyperf/models/test_usage.py` — are generated model/API classes named after CyPerf domain entities ("TestOperationsApi", "TestInfo", "TestUsage"), not unit tests. | **Scenario-zero candidate**: this project cannot do TDD or run automated tests today; CI's `pytest --cov=cyperf` step passes trivially (0 tests collected) rather than verifying anything. | -| Test runner command | `pytest --cov=cyperf` (declared, but collects 0 tests) | From CI configs. | -| Test file pattern | None established | No `tests/` directory exists. | -| Coverage command | `pytest --cov=cyperf` | Same caveat as above — no real coverage is being measured. | - -### Architectural Rules -- Every generated file carries a `"Generated by OpenAPI Generator... Do not edit the class manually"` header — the implicit rule is: **hand edits are confined to `cyperf/utils.py`, `cyperf/dynamic_model_meta.py`, targeted patches inside `api_client.py`/`configuration.py`/`exceptions.py`, and `samples/`.** Regenerating the client (`.openapi-generator/FILES`, `.openapi-generator-ignore`) risks clobbering those hand patches unless they're re-applied or the generator is configured to skip them. -- All HTTP traffic funnels through one hub, `ApiClient.call_api` (via `RESTClientObject`) — no `*Api` class or model talks to `urllib3`/sockets directly. -- The `DynamicModel` metaclass layer depends on `cyperf/__init__.py` already having model classes bound (`get_inner_model` does `getattr(cyperf, name)`), and `cyperf/dynamic_models/__init__.py` depends on `DynamicModel` — a load-order coupling: `dynamic_model_meta` → `cyperf/__init__` (models) → `dynamic_models`. diff --git a/.claude/knowledge-base/sections/surface-inventory.md b/.claude/knowledge-base/sections/surface-inventory.md deleted file mode 100644 index 5ceddfc..0000000 --- a/.claude/knowledge-base/sections/surface-inventory.md +++ /dev/null @@ -1,65 +0,0 @@ - -## Surface Inventory - -### APIs -16 generated `*Api` classes / ~322 total operations against the CyPerf controller's REST API (was 312 as of 2026-07-09; the 2026-07-10 "Regenerate Python API Wrapper" commit added ~10 new `AgentsApi` operations for front-panel-port/compute-resource ownership — exact per-class count below is not re-verified for every class, only `AgentsApi`, so treat the total as approximate pending a fuller surface re-scan): - -| Class (file) | Ops | Purpose | -|---|---|---| -| `AuthorizationApi` | 1 | OAuth2/Keycloak login (password or refresh_token grant) | -| `SessionsApi` | 29 | Test-session lifecycle, session config, test init/prepare/end | -| `TestOperationsApi` | 5 | Start/stop/abort a test or calibration run | -| `TestResultsApi` | 15 | Result retrieval/export/delete, batch delete | -| `StatisticsApi` | 6 | Runtime/result statistics | -| `ReportsApi` | 4 | PDF/CSV report generation & download | -| `ConfigurationsApi` | 14 | Config CRUD, categories, import/export | -| `ApplicationResourcesApi` | 146 | Reusable resources: captures, certs, payloads, playlists, media, apps/attacks/strikes, fuzzing | -| `AgentsApi` | ~37 (was 27) | Test agents & compute nodes (reboot, reserve, tag, ports), now incl. front-panel-port and compute-resource ownership CRUD (`ClearFrontPanelPortsOwnershipOperation`, `ClearComputeResourcesOwnershipOperation`, `RebootComputeResourcesOperation`, `SetFrontPanelPortsLinkStateOperation`, etc., added 2026-07-10 PR #78) | -| `BrokersApi` | 5 | Broker instance CRUD | -| `LicenseServersApi` | 5 | License server config CRUD | -| `LicensingApi` | 19 | License activation/entitlement/host-ID, async ops | -| `NotificationsApi` | 6 | System notifications | -| `DiagnosticsApi` | 7 | Diagnostic bundle export/status | -| `DataMigrationApi` | 2 | Controller data export/import for migration | -| `UtilsApi` | 21 | EULAs, disk usage, cert manager, server time, log config | - -**Enrichment**: -| Field | Value | -|-------|-------| -| Error envelope shape | HTTP status code → typed Python exception (`ApiException.from_response`: 400→`BadRequestException`, 401→`UnauthorizedException`, 403→`ForbiddenException`, 404→`NotFoundException`, 5xx→`ServiceException`); response body is the controller's raw JSON, deserialized per `response_types_map`, not a fixed `{code, message}` envelope. | -| Versioning strategy | Path-based, mostly `/api/v2/...`; two legacy outliers: `/auth/realms/keysight/protocol/openid-connect/token` (Keycloak) and `/eula/v1/check`. No `Accept-Version` header. | -| Auth pattern | OAuth2 bearer token (`Authorization: Bearer {access_token}`), obtained via password or refresh_token grant against the controller's Keycloak endpoint (`client_id='clt-wap'`). Every operation (~322, was 312) declares `_auth_settings = ['OAuth2', 'OAuth2']`. | -| Rate-limit strategy | None detected in generated code or docs. | -| Pagination style | Offset-style (`take`/`skip` query params) on list endpoints (e.g. `AgentsApi.get_agents`), plus `search_col`/`search_val`/`filter_mode`/`sort` query params for filtering/sorting. | - -### UIs -N/A — pure SDK/library, no UI code. - -### CLIs -No standalone CLI product; `cyperf/utils.py` exposes a minimal argparse-based helper (`parse_cli_options`) that sample scripts use for their own `--controller/--user/--password/...` flags — not a packaged/installed CLI entry point. - -**Enrichment**: -| Field | Value | -|-------|-------| -| Argument parser | `argparse` (`utils.parse_cli_options`) | -| Exit-code convention | `parser.error(...)` (argparse default: exits 2 on usage error); no other exit-code convention established | -| Config file format | None — credentials via CLI flags or `CYPERF_OFFLINE_TOKEN` env var | -| Stdout/stderr discipline | Mixed — `print`/`pprint` used for status/results in `TestRunner`; warnings routed through a custom `format_warning_cli_issues` formatter | - -### Services -N/A — this package is a client library, not a deployed service. (The Jenkins pipeline publishes the built package to PyPI; it does not deploy a running service.) - -### Libraries -| Name | Purpose | Distribution | Known consumers | -|---|---|---|---| -| `cyperf` | Typed Python client for the Keysight CyPerf REST API | Internal PyPI (`.pypirc`), built via `jenkins/JenkinsFile` (Docker + `setup.py`/`build`/`twine`) | Internal test-automation scripts (`samples/`); the "appsec-automation" regression repo (per commit `ce85bc3`) | - -**Enrichment**: -| Field | Value | -|-------|-------| -| API contract stability | Unversioned in the semver sense — version tracks the CyPerf controller's own API version; `setup.py`/`pyproject.toml` both hardcode `1.0.0`, bumped at build time by Jenkins (`sed -i 's/VERSION = "1.0.0"/.../ '`). Contract itself is regenerated from the controller's OpenAPI spec each time the wrapper is refreshed ("Re-generate wrapper" commits appear in history). | -| Error semantics | Exceptions — typed `ApiException` hierarchy keyed by HTTP status. | -| Doc convention | OpenAPI-Generator-produced `docs/*.md` (one file per model/API class) plus a large generated `README.md`; no docstring convention (PEP 257) is consistently applied in hand-written code. | - -### AI Metadata -None found — no `.mcp.json`, no pre-existing `.claude/` directory, no `SKILL.md`, no structured tool schemas prior to this discovery run. diff --git a/.claude/knowledge-base/sections/technical-debt.md b/.claude/knowledge-base/sections/technical-debt.md deleted file mode 100644 index 3345eb9..0000000 --- a/.claude/knowledge-base/sections/technical-debt.md +++ /dev/null @@ -1,10 +0,0 @@ - -## Technical Debt Registry - -Full registry requires IQ evaluation. One item below was surfaced during an incremental git-history review (not from a formal IQ pass) and is tracked here because it is a confirmed, evidenced bug. - -| ID | Title | Severity | Evidence | Status | -|----|-------|----------|----------|--------| -| TD-1 | `wait_for_controller_up()` EULA-accept path breaks after the PR #81 `UtilsApi` regen | Blocking (confirmed library bug) | `cyperf/api_client.py` lines ~166/172 call `eula_checker.get_eula()` / `eula_checker.post_eula(EulaSummary(accepted=True))` with no `id` argument; PR #81 (Jul 27 2026 "Regenerate Cyperf Python Wrapper") changed `UtilsApi.get_eula`/`post_eula` to require a positional `id` (path changed from the hardcoded `/eula/v1/eula/CyPerf` to `/eula/v1/eula/{id}`) | Open — introduced 2026-07-27, not yet fixed as of 2026-07-31 | - -Open question for a human: what `id` should the wrapper now pass here (a literal `"CyPerf"`? one obtained from `list_eulas`?) — not inferable from the diff alone, so no fix was guessed. diff --git a/.claude/knowledge-base/sections/tooling-requirements.md b/.claude/knowledge-base/sections/tooling-requirements.md deleted file mode 100644 index 7a46888..0000000 --- a/.claude/knowledge-base/sections/tooling-requirements.md +++ /dev/null @@ -1,14 +0,0 @@ - -## Tooling Requirements - -### Understand Skills (always generated) -- `explain` — navigate the generated-vs-hand-written split; explain what a given `*Api` operation or model actually does against the CyPerf controller. -- `document` — keep `README.md`/`docs/*.md` in sync is generator-owned; human-facing docs work should target `samples/*.py` and this KB instead. - -### Operate Skills (always generated) -- `review` — code review, scoped to the small hand-written surface (`utils.py`, `dynamic_model_meta.py`, `samples/`, CI/build files); generated files should be excluded from review by default. -- `exec-plan` — flag the test-framework gap (scenario-zero) on first use per the Testing table above. -- No `deploy` skill — this project has no deployment target beyond a PyPI publish, already automated by Jenkins. - -### Improve Skills (gap-driven) -Requires IQ/EQ evaluation to identify gaps. diff --git a/.pypirc b/.pypirc index 502c84a..6555c91 100644 --- a/.pypirc +++ b/.pypirc @@ -9,6 +9,3 @@ repository = https://test.pypi.org/legacy/ [pypi] repository = https://upload.pypi.org/legacy/ - -[artifactory] -repository=https://artifactory.it.keysight.com/artifactory/api/pypi/pypi-local-wap diff --git a/API-endpoints-changelog.txt b/API-endpoints-changelog.txt deleted file mode 100644 index edb5b90..0000000 --- a/API-endpoints-changelog.txt +++ /dev/null @@ -1,817 +0,0 @@ -AgentsApi - DELETE /api/v2/agents/{agentId} - old: delete_agents - new: delete_agent - GET /api/v2/agents/{agentId} - old: get_agents_by_id - new: get_agent_by_id - GET /api/v2/tags - old: get_agent_tags - new: get_agents_tags - GET /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports/{portId} - old: get_ports_by_id - new: get_compute_node_port_by_id - GET /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId}/ports - old: get_ports - new: get_compute_node_ports - GET /api/v2/controllers/{controllerId} - old: get_controllers_by_id - new: get_controller_by_id - GET /api/v2/controllers/{controllerId}/compute-nodes/{computeNodeId} - old: get_compute_nodes_by_id - new: get_controller_compute_node_by_id - GET /api/v2/controllers/{controllerId}/compute-nodes - old: get_compute_nodes - new: get_controller_compute_nodes - PATCH /api/v2/agents/{agentId} - old: patch_agents - new: patch_agent - GET /api/v2/agents/operations/batch-delete/{id} - old: poll_batch_delete - new: poll_agents_batch_delete - GET /api/v2/agents/operations/exportFiles/{id} - old: poll_export_files - new: poll_agents_export_files - GET /api/v2/agents/operations/reboot/{id} - old: poll_reboot - new: poll_agents_reboot - GET /api/v2/agents/operations/release/{id} - old: poll_release - new: poll_agents_release - GET /api/v2/agents/operations/reserve/{id} - old: poll_reserve - new: poll_agents_reserve - GET /api/v2/agents/operations/set-dpdk-mode/{id} - old: poll_set_dpdk_mode - new: poll_agents_set_dpdk_mode - GET /api/v2/agents/operations/set-ntp/{id} - old: poll_set_ntp - new: poll_agents_set_ntp - GET /api/v2/agents/operations/update/{id} - old: poll_update - new: poll_agents_update - POST /api/v2/agents/operations/batch-delete - old: start_batch_delete - new: start_agents_batch_delete - POST /api/v2/agents/operations/exportFiles - old: start_export_files - new: start_agents_export_files - POST /api/v2/agents/operations/reboot - old: start_reboot - new: start_agents_reboot - POST /api/v2/agents/operations/release - old: start_release - new: start_agents_release - POST /api/v2/agents/operations/reserve - old: start_reserve - new: start_agents_reserve - POST /api/v2/agents/operations/set-dpdk-mode - old: start_set_dpdk_mode - new: start_agents_set_dpdk_mode - POST /api/v2/agents/operations/set-ntp - old: start_set_ntp - new: start_agents_set_ntp - POST /api/v2/agents/operations/update - old: start_update - new: start_agents_update -ApplicationResourcesApi - DELETE /api/v2/resources/captures/{captureId} - old: delete_captures - new: delete_resources_capture - DELETE /api/v2/resources/certificates/{certificateId} - old: delete_certificates - new: delete_resources_certificate - DELETE /api/v2/resources/flow-library/{flowLibraryId} - old: delete_flow_library - new: delete_resources_flow_library - DELETE /api/v2/resources/global-playlists/{globalPlaylistId} - old: delete_global_playlists - new: delete_resources_global_playlist - DELETE /api/v2/resources/http-library/{httpLibraryId} - old: delete_http_library - new: delete_resources_http_library - DELETE /api/v2/resources/media-files/{mediaFileId} - old: delete_media_files - new: delete_resources_media_file - DELETE /api/v2/resources/media-library/{mediaLibraryId} - old: delete_media_library - new: delete_resources_media_library - DELETE /api/v2/resources/other-library/{otherLibraryId} - old: delete_other_library - new: delete_resources_other_library - DELETE /api/v2/resources/payloads/{payloadId} - old: delete_payloads - new: delete_resources_payload - DELETE /api/v2/resources/pcaps/{pcapId} - old: delete_pcaps - new: delete_resources_pcap - DELETE /api/v2/resources/playlists/{playlistId} - old: delete_playlists - new: delete_resources_playlist - DELETE /api/v2/resources/sip-library/{sipLibraryId} - old: delete_sip_library - new: delete_resources_sip_library - DELETE /api/v2/resources/stats-profile/{statsProfileId} - old: delete_stats_profile - new: delete_resources_stats_profile - DELETE /api/v2/resources/tls-certificates/{tlsCertificateId} - old: delete_tls_certificates - new: delete_resources_tls_certificate - DELETE /api/v2/resources/tls-dhs/{tlsDhId} - old: delete_tls_dhs - new: delete_resources_tls_dh - DELETE /api/v2/resources/tls-keys/{tlsKeyId} - old: delete_tls_keys - new: delete_resources_tls_key - DELETE /api/v2/resources/user-defined-apps/{userDefinedAppId} - old: delete_user_defined_apps - new: delete_resources_user_defined_app - GET /api/v2/resources/captures/{captureId}/flows - old: get_flows - new: get_capture_flows - GET /api/v2/resources/captures/{captureId}/flows/{flowId}/exchanges - old: get_exchanges - new: get_flow_exchanges - GET /api/v2/resources/apps/{appId} - old: get_apps_by_id - new: get_resources_app_by_id - GET /api/v2/resources/application-types/{applicationTypeId} - old: get_application_types_by_id - new: get_resources_application_type_by_id - GET /api/v2/resources/application-types - old: get_application_types - new: get_resources_application_types - GET /api/v2/resources/apps - old: get_apps - new: get_resources_apps - GET /api/v2/resources/attacks/{attackId} - old: get_attacks_by_id - new: get_resources_attack_by_id - GET /api/v2/resources/attack-categories - old: get_attack_categories - new: get_resources_attack_categories - GET /api/v2/resources/attacks - old: get_attacks - new: get_resources_attacks - GET /api/v2/resources/auth-profiles/{authProfileId} - old: get_auth_profiles_by_id - new: get_resources_auth_profile_by_id - GET /api/v2/resources/auth-profiles - old: get_auth_profiles - new: get_resources_auth_profiles - GET /api/v2/resources/captures/{captureId} - old: get_captures_by_id - new: get_resources_capture_by_id - GET /api/v2/resources/captures - old: get_captures - new: get_resources_captures - GET /api/v2/resources/captures/operations/uploadFile/{uploadFileId}/result - old: get_resources_captures_operations_upload_file_operation_id_result - new: get_resources_captures_upload_file_result - GET /api/v2/resources/certificates/{certificateId} - old: get_certificates_by_id - new: get_resources_certificate_by_id - GET /api/v2/resources/certificates/{certificateId}/contentFile - old: get_resources_certificates_certificates_id_content_file - new: get_resources_certificate_content_file - GET /api/v2/resources/certificates - old: get_certificates - new: get_resources_certificates - GET /api/v2/resources/certificates/operations/uploadFile/{uploadFileId}/result - old: get_resources_certificates_operations_upload_file_operation_id_result - new: get_resources_certificates_upload_file_result - GET /api/v2/resources/flow-library - old: get_flow_library - new: get_resources_flow_library - GET /api/v2/resources/flow-library/{flowLibraryId} - old: get_flow_library_by_id - new: get_resources_flow_library_by_id - GET /api/v2/resources/flow-library/{flowLibraryId}/contentFile - old: get_resources_flow_library_flow_library_id_content_file - new: get_resources_flow_library_content_file - GET /api/v2/resources/flow-library/operations/uploadFile/{uploadFileId}/result - old: get_resources_flow_library_operations_upload_file_operation_id_result - new: get_resources_flow_library_upload_file_result - GET /api/v2/resources/global-playlists/{globalPlaylistId} - old: get_global_playlists_by_id - new: get_resources_global_playlist_by_id - GET /api/v2/resources/global-playlists/{globalPlaylistId}/contentFile - old: get_resources_global_playlists_global_playlists_id_content_file - new: get_resources_global_playlist_content_file - GET /api/v2/resources/global-playlists - old: get_global_playlists - new: get_resources_global_playlists - GET /api/v2/resources/global-playlists/operations/uploadFile/{uploadFileId}/result - old: get_resources_global_playlists_operations_upload_file_operation_id_result - new: get_resources_global_playlists_upload_file_result - GET /api/v2/resources/http-library - old: get_http_library - new: get_resources_http_library - GET /api/v2/resources/http-library/{httpLibraryId} - old: get_http_library_by_id - new: get_resources_http_library_by_id - GET /api/v2/resources/http-library/{httpLibraryId}/contentFile - old: get_resources_http_library_http_library_id_content_file - new: get_resources_http_library_content_file - GET /api/v2/resources/http-library/operations/uploadFile/{uploadFileId}/result - old: get_resources_http_library_operations_upload_file_operation_id_result - new: get_resources_http_library_upload_file_result - GET /api/v2/resources/http-profiles/{httpProfileId} - old: get_http_profiles_by_id - new: get_resources_http_profile_by_id - GET /api/v2/resources/http-profiles - old: get_http_profiles - new: get_resources_http_profiles - GET /api/v2/resources/media-files/{mediaFileId} - old: get_media_files_by_id - new: get_resources_media_file_by_id - GET /api/v2/resources/media-files/{mediaFileId}/contentFile - old: get_resources_media_files_media_files_id_content_file - new: get_resources_media_file_content_file - GET /api/v2/resources/media-files - old: get_media_files - new: get_resources_media_files - GET /api/v2/resources/media-files/operations/uploadFile/{uploadFileId}/result - old: get_resources_media_files_operations_upload_file_operation_id_result - new: get_resources_media_files_upload_file_result - GET /api/v2/resources/media-library - old: get_media_library - new: get_resources_media_library - GET /api/v2/resources/media-library/{mediaLibraryId} - old: get_media_library_by_id - new: get_resources_media_library_by_id - GET /api/v2/resources/media-library/{mediaLibraryId}/contentFile - old: get_resources_media_library_media_library_id_content_file - new: get_resources_media_library_content_file - GET /api/v2/resources/media-library/operations/uploadFile/{uploadFileId}/result - old: get_resources_media_library_operations_upload_file_operation_id_result - new: get_resources_media_library_upload_file_result - GET /api/v2/resources/other-library - old: get_other_library - new: get_resources_other_library - GET /api/v2/resources/other-library/{otherLibraryId} - old: get_other_library_by_id - new: get_resources_other_library_by_id - GET /api/v2/resources/other-library/{otherLibraryId}/contentFile - old: get_resources_other_library_other_library_id_content_file - new: get_resources_other_library_content_file - GET /api/v2/resources/other-library/operations/uploadFile/{uploadFileId}/result - old: get_resources_other_library_operations_upload_file_operation_id_result - new: get_resources_other_library_upload_file_result - GET /api/v2/resources/payloads/{payloadId} - old: get_payloads_by_id - new: get_resources_payload_by_id - GET /api/v2/resources/payloads/{payloadId}/contentFile - old: get_resources_payloads_payloads_id_content_file - new: get_resources_payload_content_file - GET /api/v2/resources/payloads - old: get_payloads - new: get_resources_payloads - GET /api/v2/resources/payloads/operations/uploadFile/{uploadFileId}/result - old: get_resources_payloads_operations_upload_file_operation_id_result - new: get_resources_payloads_upload_file_result - GET /api/v2/resources/pcaps/{pcapId} - old: get_pcaps_by_id - new: get_resources_pcap_by_id - GET /api/v2/resources/pcaps/{pcapId}/contentFile - old: get_resources_pcaps_pcaps_id_content_file - new: get_resources_pcap_content_file - GET /api/v2/resources/pcaps - old: get_pcaps - new: get_resources_pcaps - GET /api/v2/resources/pcaps/operations/uploadFile/{uploadFileId}/result - old: get_resources_pcaps_operations_upload_file_operation_id_result - new: get_resources_pcaps_upload_file_result - GET /api/v2/resources/playlists/{playlistId} - old: get_playlists_by_id - new: get_resources_playlist_by_id - GET /api/v2/resources/playlists/{playlistId}/contentFile - old: get_resources_playlists_playlists_id_content_file - new: get_resources_playlist_content_file - GET /api/v2/resources/playlists/{playlistId}/values - old: get_resources_playlists_playlists_id_values - new: get_resources_playlist_values - GET /api/v2/resources/playlists - old: get_playlists - new: get_resources_playlists - GET /api/v2/resources/playlists/operations/uploadFile/{uploadFileId}/result - old: get_resources_playlists_operations_upload_file_operation_id_result - new: get_resources_playlists_upload_file_result - GET /api/v2/resources/sip-library - old: get_sip_library - new: get_resources_sip_library - GET /api/v2/resources/sip-library/{sipLibraryId} - old: get_sip_library_by_id - new: get_resources_sip_library_by_id - GET /api/v2/resources/sip-library/{sipLibraryId}/contentFile - old: get_resources_sip_library_sip_library_id_content_file - new: get_resources_sip_library_content_file - GET /api/v2/resources/sip-library/operations/uploadFile/{uploadFileId}/result - old: get_resources_sip_library_operations_upload_file_operation_id_result - new: get_resources_sip_library_upload_file_result - GET /api/v2/resources/stats-profile - old: get_stats_profile - new: get_resources_stats_profile - GET /api/v2/resources/stats-profile/{statsProfileId} - old: get_stats_profile_by_id - new: get_resources_stats_profile_by_id - GET /api/v2/resources/stats-profile/{statsProfileId}/contentFile - old: get_resources_stats_profile_stats_profile_id_content_file - new: get_resources_stats_profile_content_file - GET /api/v2/resources/stats-profile/operations/uploadFile/{uploadFileId}/result - old: get_resources_stats_profile_operations_upload_file_operation_id_result - new: get_resources_stats_profile_upload_file_result - GET /api/v2/resources/strikes/{strikeId} - old: get_strikes_by_id - new: get_resources_strike_by_id - GET /api/v2/resources/strike-categories - old: get_strike_categories - new: get_resources_strike_categories - GET /api/v2/resources/strikes - old: get_strikes - new: get_resources_strikes - GET /api/v2/resources/tls-certificates/{tlsCertificateId} - old: get_tls_certificates_by_id - new: get_resources_tls_certificate_by_id - GET /api/v2/resources/tls-certificates/{tlsCertificateId}/contentFile - old: get_resources_tls_certificates_tls_certificates_id_content_file - new: get_resources_tls_certificate_content_file - GET /api/v2/resources/tls-certificates - old: get_tls_certificates - new: get_resources_tls_certificates - GET /api/v2/resources/tls-certificates/operations/uploadFile/{uploadFileId}/result - old: get_resources_tls_certificates_operations_upload_file_operation_id_result - new: get_resources_tls_certificates_upload_file_result - GET /api/v2/resources/tls-dhs/{tlsDhId} - old: get_tls_dhs_by_id - new: get_resources_tls_dh_by_id - GET /api/v2/resources/tls-dhs/{tlsDhId}/contentFile - old: get_resources_tls_dhs_tls_dhs_id_content_file - new: get_resources_tls_dh_content_file - GET /api/v2/resources/tls-dhs - old: get_tls_dhs - new: get_resources_tls_dhs - GET /api/v2/resources/tls-dhs/operations/uploadFile/{uploadFileId}/result - old: get_resources_tls_dhs_operations_upload_file_operation_id_result - new: get_resources_tls_dhs_upload_file_result - GET /api/v2/resources/tls-keys/{tlsKeyId} - old: get_tls_keys_by_id - new: get_resources_tls_key_by_id - GET /api/v2/resources/tls-keys/{tlsKeyId}/contentFile - old: get_resources_tls_keys_tls_keys_id_content_file - new: get_resources_tls_key_content_file - GET /api/v2/resources/tls-keys - old: get_tls_keys - new: get_resources_tls_keys - GET /api/v2/resources/tls-keys/operations/uploadFile/{uploadFileId}/result - old: get_resources_tls_keys_operations_upload_file_operation_id_result - new: get_resources_tls_keys_upload_file_result - GET /api/v2/resources/user-defined-apps - old: get_user_defined_apps - new: get_resources_user_defined_apps - GET /api/v2/resources/user-defined-apps/operations/uploadFile/{uploadFileId}/result - old: get_resources_user_defined_apps_operations_upload_file_operation_id_result - new: get_resources_user_defined_apps_upload_file_result - GET /api/v2/resources/apps/operations/export-all/{id} - old: poll_apps_export_all - new: poll_resources_apps_export_all - GET /api/v2/resources/captures/operations/batch-delete/{id} - old: poll_captures_batch_delete - new: poll_resources_captures_batch_delete - GET /api/v2/resources/captures/operations/uploadFile/{uploadFileId} - old: poll_captures_upload_file - new: poll_resources_captures_upload_file - GET /api/v2/resources/certificates/operations/uploadFile/{uploadFileId} - old: get_resources_certificates_operations_upload_file_operation_id - new: poll_resources_certificates_upload_file - GET /api/v2/resources/operations/create-app/{id} - old: poll_create_app - new: poll_resources_create_app - GET /api/v2/resources/operations/edit-app/{id} - old: poll_edit_app - new: poll_resources_edit_app - GET /api/v2/resources/flow-library/operations/uploadFile/{uploadFileId} - old: get_resources_flow_library_operations_upload_file_operation_id - new: poll_resources_flow_library_upload_file - GET /api/v2/resources/operations/get-attack-categories/{id} - old: poll_get_attack_categories - new: poll_resources_get_attack_categories - GET /api/v2/resources/operations/get-attacks/{id} - old: poll_get_attacks - new: poll_resources_get_attacks - GET /api/v2/resources/operations/get-strike-categories/{id} - old: poll_get_strike_categories - new: poll_resources_get_strike_categories - GET /api/v2/resources/operations/get-strikes/{id} - old: poll_get_strikes - new: poll_resources_get_strikes - GET /api/v2/resources/global-playlists/operations/uploadFile/{uploadFileId} - old: get_resources_global_playlists_operations_upload_file_operation_id - new: poll_resources_global_playlists_upload_file - GET /api/v2/resources/http-library/operations/uploadFile/{uploadFileId} - old: get_resources_http_library_operations_upload_file_operation_id - new: poll_resources_http_library_upload_file - GET /api/v2/resources/media-files/operations/uploadFile/{uploadFileId} - old: get_resources_media_files_operations_upload_file_operation_id - new: poll_resources_media_files_upload_file - GET /api/v2/resources/media-library/operations/uploadFile/{uploadFileId} - old: get_resources_media_library_operations_upload_file_operation_id - new: poll_resources_media_library_upload_file - GET /api/v2/resources/other-library/operations/uploadFile/{uploadFileId} - old: get_resources_other_library_operations_upload_file_operation_id - new: poll_resources_other_library_upload_file - GET /api/v2/resources/payloads/operations/uploadFile/{uploadFileId} - old: get_resources_payloads_operations_upload_file_operation_id - new: poll_resources_payloads_upload_file - GET /api/v2/resources/pcaps/operations/uploadFile/{uploadFileId} - old: get_resources_pcaps_operations_upload_file_operation_id - new: poll_resources_pcaps_upload_file - GET /api/v2/resources/playlists/operations/uploadFile/{uploadFileId} - old: get_resources_playlists_operations_upload_file_operation_id - new: poll_resources_playlists_upload_file - GET /api/v2/resources/sip-library/operations/uploadFile/{uploadFileId} - old: get_resources_sip_library_operations_upload_file_operation_id - new: poll_resources_sip_library_upload_file - GET /api/v2/resources/stats-profile/operations/uploadFile/{uploadFileId} - old: get_resources_stats_profile_operations_upload_file_operation_id - new: poll_resources_stats_profile_upload_file - GET /api/v2/resources/tls-certificates/operations/uploadFile/{uploadFileId} - old: get_resources_tls_certificates_operations_upload_file_operation_id - new: poll_resources_tls_certificates_upload_file - GET /api/v2/resources/tls-dhs/operations/uploadFile/{uploadFileId} - old: get_resources_tls_dhs_operations_upload_file_operation_id - new: poll_resources_tls_dhs_upload_file - GET /api/v2/resources/tls-keys/operations/uploadFile/{uploadFileId} - old: get_resources_tls_keys_operations_upload_file_operation_id - new: poll_resources_tls_keys_upload_file - GET /api/v2/resources/user-defined-apps/operations/export-all/{id} - old: poll_user_defined_apps_export_all - new: poll_resources_user_defined_apps_export_all - GET /api/v2/resources/user-defined-apps/operations/uploadFile/{uploadFileId} - old: get_resources_user_defined_apps_operations_upload_file_operation_id - new: poll_resources_user_defined_apps_upload_file - POST /api/v2/resources/apps/operations/export-all - old: start_apps_export_all - new: start_resources_apps_export_all - POST /api/v2/resources/captures/operations/batch-delete - old: start_captures_batch_delete - new: start_resources_captures_batch_delete - POST /api/v2/resources/captures/operations/uploadFile - old: start_captures_upload_file - new: start_resources_captures_upload_file - POST /api/v2/resources/certificates/operations/uploadFile - old: create_resources_certificates_operations_upload_file - new: start_resources_certificates_upload_file - POST /api/v2/resources/operations/create-app - old: start_create_app - new: start_resources_create_app - POST /api/v2/resources/operations/edit-app - old: start_edit_app - new: start_resources_edit_app - POST /api/v2/resources/flow-library/operations/uploadFile - old: create_resources_flow_library_operations_upload_file - new: start_resources_flow_library_upload_file - POST /api/v2/resources/operations/get-attack-categories - old: start_get_attack_categories - new: start_resources_get_attack_categories - POST /api/v2/resources/operations/get-attacks - old: start_get_attacks - new: start_resources_get_attacks - POST /api/v2/resources/operations/get-strike-categories - old: start_get_strike_categories - new: start_resources_get_strike_categories - POST /api/v2/resources/operations/get-strikes - old: start_get_strikes - new: start_resources_get_strikes - POST /api/v2/resources/global-playlists/operations/uploadFile - old: create_resources_global_playlists_operations_upload_file - new: start_resources_global_playlists_upload_file - POST /api/v2/resources/http-library/operations/uploadFile - old: create_resources_http_library_operations_upload_file - new: start_resources_http_library_upload_file - POST /api/v2/resources/media-files/operations/uploadFile - old: create_resources_media_files_operations_upload_file - new: start_resources_media_files_upload_file - POST /api/v2/resources/media-library/operations/uploadFile - old: create_resources_media_library_operations_upload_file - new: start_resources_media_library_upload_file - POST /api/v2/resources/other-library/operations/uploadFile - old: create_resources_other_library_operations_upload_file - new: start_resources_other_library_upload_file - POST /api/v2/resources/payloads/operations/uploadFile - old: create_resources_payloads_operations_upload_file - new: start_resources_payloads_upload_file - POST /api/v2/resources/pcaps/operations/uploadFile - old: create_resources_pcaps_operations_upload_file - new: start_resources_pcaps_upload_file - POST /api/v2/resources/playlists/operations/uploadFile - old: create_resources_playlists_operations_upload_file - new: start_resources_playlists_upload_file - POST /api/v2/resources/sip-library/operations/uploadFile - old: create_resources_sip_library_operations_upload_file - new: start_resources_sip_library_upload_file - POST /api/v2/resources/stats-profile/operations/uploadFile - old: create_resources_stats_profile_operations_upload_file - new: start_resources_stats_profile_upload_file - POST /api/v2/resources/tls-certificates/operations/uploadFile - old: create_resources_tls_certificates_operations_upload_file - new: start_resources_tls_certificates_upload_file - POST /api/v2/resources/tls-dhs/operations/uploadFile - old: create_resources_tls_dhs_operations_upload_file - new: start_resources_tls_dhs_upload_file - POST /api/v2/resources/tls-keys/operations/uploadFile - old: create_resources_tls_keys_operations_upload_file - new: start_resources_tls_keys_upload_file - POST /api/v2/resources/user-defined-apps/operations/export-all - old: start_user_defined_apps_export_all - new: start_resources_user_defined_apps_export_all - POST /api/v2/resources/user-defined-apps/operations/uploadFile - old: create_resources_user_defined_apps_operations_upload_file - new: start_resources_user_defined_apps_upload_file -BrokersApi - DELETE /api/v2/brokers/{brokerId} - old: delete_brokers - new: delete_broker - GET /api/v2/brokers/{brokerId} - old: get_brokers_by_id - new: get_broker_by_id - PATCH /api/v2/brokers/{brokerId} - old: patch_brokers - new: patch_broker -ConfigurationsApi - DELETE /api/v2/configs/{configId} - old: delete_configs - new: delete_config - GET /api/v2/configs/{configId} - old: get_configs_by_id - new: get_config_by_id - GET /api/v2/resources/custom-import-operations - old: get_custom_import_operations - new: get_resources_custom_import_operations - PATCH /api/v2/configs/{configId} - old: patch_configs - new: patch_config - PUT /api/v2/configs/{configId} - old: update_configs - new: update_config -DataMigrationApi - GET /api/v2/controller-migration/operations/export/{id} - old: poll_export - new: poll_controller_migration_export - GET /api/v2/controller-migration/operations/import/{id} - old: poll_import - new: poll_controller_migration_import - POST /api/v2/controller-migration/operations/export - old: start_export - new: start_controller_migration_export - POST /api/v2/controller-migration/operations/import - old: start_import - new: start_controller_migration_import -LicenseServersApi - DELETE /api/v2/license-servers/{licenseServerId} - old: delete_license_servers - new: delete_license_server - GET /api/v2/license-servers/{licenseServerId} - old: get_license_servers_by_id - new: get_license_server_by_id - PATCH /api/v2/license-servers/{licenseServerId} - old: patch_license_servers - new: patch_license_server -NotificationsApi - DELETE /api/v2/notifications/{notificationId} - old: delete_notifications - new: delete_notification - GET /api/v2/notifications/{notificationId} - old: get_notifications_by_id - new: get_notification_by_id -ReportsApi - GET /api/v2/results/{resultId}/download-csv/{downloadCsvId} - old: get_download_csv_by_id - new: get_result_download_csv_by_id - GET /api/v2/results/{resultId}/operations/generate-csv/{id} - old: poll_results_generate_csv - new: poll_result_generate_csv - GET /api/v2/results/{resultId}/operations/generate-pdf/{id} - old: poll_results_generate_pdf - new: poll_result_generate_pdf - POST /api/v2/results/{resultId}/operations/generate-csv - old: start_results_generate_csv - new: start_result_generate_csv - POST /api/v2/results/{resultId}/operations/generate-pdf - old: start_results_generate_pdf - new: start_result_generate_pdf -SessionsApi - POST /api/v2/sessions/{sessionId}/meta - old: create_meta - new: create_session_meta - DELETE /api/v2/sessions/{sessionId} - old: delete_sessions - new: delete_session - DELETE /api/v2/sessions/{sessionId}/meta/{metaId} - old: delete_meta - new: delete_session_meta - GET /api/v2/sessions/{sessionId}/config/$docs - old: get_docs - new: get_config_docs - GET /api/v2/sessions/{sessionId}/config/granular-stats - old: get_granular_stats - new: get_config_granular_stats - GET /api/v2/sessions/{sessionId}/config/granular-stats-filters - old: get_granular_stats_filters - new: get_config_granular_stats_filters - GET /api/v2/sessions/{sessionId} - old: get_sessions_by_id - new: get_session_by_id - GET /api/v2/sessions/{sessionId}/config - old: get_config - new: get_session_config - GET /api/v2/sessions/{sessionId}/meta - old: get_meta - new: get_session_meta - GET /api/v2/sessions/{sessionId}/meta/{metaId} - old: get_meta_by_id - new: get_session_meta_by_id - GET /api/v2/sessions/{sessionId}/test - old: get_test - new: get_session_test - PATCH /api/v2/sessions/{sessionId} - old: patch_sessions - new: patch_session - PATCH /api/v2/sessions/{sessionId}/meta/{metaId} - old: patch_meta - new: patch_session_meta - PATCH /api/v2/sessions/{sessionId}/test - old: patch_test - new: patch_session_test - GET /api/v2/sessions/{sessionId}/config/operations/granular-stats-default-dashboards/{id} - old: poll_config_granular_stats_default_dashboards - new: poll_session_config_granular_stats_default_dashboards - GET /api/v2/sessions/{sessionId}/operations/loadConfig/{id} - old: poll_sessions_load_config - new: poll_session_load_config - GET /api/v2/sessions/{sessionId}/operations/prepareTest/{id} - old: poll_prepare_test - new: poll_session_prepare_test - GET /api/v2/sessions/{sessionId}/operations/testEnd/{id} - old: poll_test_end - new: poll_session_test_end - GET /api/v2/sessions/{sessionId}/operations/testInit/{id} - old: poll_test_init - new: poll_session_test_init - GET /api/v2/sessions/{sessionId}/operations/touch/{id} - old: poll_sessions_touch - new: poll_session_touch - POST /api/v2/sessions/{sessionId}/config/operations/granular-stats-default-dashboards - old: start_config_granular_stats_default_dashboards - new: start_session_config_granular_stats_default_dashboards - POST /api/v2/sessions/{sessionId}/config/operations/save - old: start_config_save - new: start_session_config_save - POST /api/v2/sessions/{sessionId}/operations/loadConfig - old: start_sessions_load_config - new: start_session_load_config - POST /api/v2/sessions/{sessionId}/operations/prepareTest - old: start_prepare_test - new: start_session_prepare_test - POST /api/v2/sessions/{sessionId}/operations/testEnd - old: start_test_end - new: start_session_test_end - POST /api/v2/sessions/{sessionId}/operations/testInit - old: start_test_init - new: start_session_test_init - POST /api/v2/sessions/{sessionId}/operations/touch - old: start_sessions_touch - new: start_session_touch - PUT /api/v2/sessions/{sessionId} - old: update_sessions - new: update_session - PUT /api/v2/sessions/{sessionId}/config - old: update_config - new: update_session_config - PUT /api/v2/sessions/{sessionId}/meta - old: update_meta - new: update_session_meta - PUT /api/v2/sessions/{sessionId}/test - old: update_test - new: update_session_test -StatisticsApi - POST /api/v2/stats/plugins - old: create_plugins - new: create_stats_plugins - DELETE /api/v2/stats/plugins/{pluginId} - old: delete_plugins - new: delete_stats_plugin - GET /api/v2/results/{resultId}/stats/{statId} - old: get_stats_by_id - new: get_result_stat_by_id - GET /api/v2/results/{resultId}/stats - old: get_stats - new: get_result_stats - GET /api/v2/stats/plugins - old: get_plugins - new: get_stats_plugins - GET /api/v2/stats/plugins/operations/ingest/{id} - old: poll_plugins_ingest - new: poll_stats_plugins_ingest - POST /api/v2/stats/plugins/operations/ingest - old: start_plugins_ingest - new: start_stats_plugins_ingest -TestOperationsApi - GET /api/v2/sessions/{sessionId}/test-calibrate/operations/start/{id} - old: poll_start_calibration - new: poll_test_calibrate_start - GET /api/v2/sessions/{sessionId}/test-calibrate/operations/stop/{id} - old: poll_stop_calibration - new: poll_test_calibrate_stop - GET /api/v2/sessions/{sessionId}/test-run/operations/abort/{id} - old: poll_abort - new: poll_test_run_abort - GET /api/v2/sessions/{sessionId}/test-run/operations/start/{id} - old: poll_start_traffic - new: poll_test_run_start - GET /api/v2/sessions/{sessionId}/test-run/operations/stop/{id} - old: poll_stop_traffic - new: poll_test_run_stop - POST /api/v2/sessions/{sessionId}/test-calibrate/operations/start - old: start_start_calibration - new: start_test_calibrate_start - POST /api/v2/sessions/{sessionId}/test-calibrate/operations/stop - old: start_stop_calibration - new: start_test_calibrate_stop - POST /api/v2/sessions/{sessionId}/test-run/operations/abort - old: start_abort - new: start_test_run_abort - POST /api/v2/sessions/{sessionId}/test-run/operations/start - old: start_start_traffic - new: start_test_run_start - POST /api/v2/sessions/{sessionId}/test-run/operations/stop - old: start_stop_traffic - new: start_test_run_stop -TestResultsApi - DELETE /api/v2/results/{resultId} - old: delete_results - new: delete_result - DELETE /api/v2/results/{resultId}/files/{fileId} - old: delete_files - new: delete_result_file - GET /api/v2/results/{resultId} - old: get_results_by_id - new: get_result_by_id - GET /api/v2/results/{resultId}/download-all/{downloadAllId} - old: get_download_all_by_id - new: get_result_download_all_by_id - GET /api/v2/results/{resultId}/download-result-config - old: get_download_result_config - new: get_result_download_result_config - GET /api/v2/results/{resultId}/files/{fileId} - old: get_files_by_id - new: get_result_file_by_id - GET /api/v2/results/{resultId}/files/{fileId}/content - old: get_results_results_id_files_files_id_content - new: get_result_file_content - GET /api/v2/results/{resultId}/files - old: get_files - new: get_result_files - GET /api/v2/results/tags - old: get_result_tags - new: get_results_tags - GET /api/v2/results/{resultId}/operations/generate-all/{id} - old: poll_results_generate_all - new: poll_result_generate_all - GET /api/v2/results/{resultId}/operations/generate-results/{id} - old: poll_results_generate_results - new: poll_result_generate_results - GET /api/v2/results/{resultId}/operations/load/{id} - old: poll_results_load - new: poll_result_load - POST /api/v2/results/{resultId}/operations/generate-all - old: start_results_generate_all - new: start_result_generate_all - POST /api/v2/results/{resultId}/operations/generate-results - old: start_results_generate_results - new: start_result_generate_results - POST /api/v2/results/{resultId}/operations/load - old: start_results_load - new: start_result_load -UtilsApi - GET /api/v2/cert-manager/certificate - old: get_certificate - new: get_cert_manager_certificate - GET /api/v2/disk-usage/consumers/{consumerId} - old: get_consumers_by_id - new: get_disk_usage_consumer_by_id - GET /api/v2/disk-usage/consumers - old: get_consumers - new: get_disk_usage_consumers - GET /api/v2/cert-manager/operations/generate/{id} - old: poll_generate - new: poll_cert_manager_generate - GET /api/v2/cert-manager/operations/upload/{id} - old: poll_upload - new: poll_cert_manager_upload - POST /api/v2/cert-manager/operations/generate - old: start_generate - new: start_cert_manager_generate - POST /api/v2/cert-manager/operations/upload - old: start_upload - new: start_cert_manager_upload \ No newline at end of file diff --git a/git_push.sh b/git_push.sh deleted file mode 100644 index f53a75d..0000000 --- a/git_push.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ -# -# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" - -git_user_id=$1 -git_repo_id=$2 -release_note=$3 -git_host=$4 - -if [ "$git_host" = "" ]; then - git_host="github.com" - echo "[INFO] No command line input provided. Set \$git_host to $git_host" -fi - -if [ "$git_user_id" = "" ]; then - git_user_id="GIT_USER_ID" - echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" -fi - -if [ "$git_repo_id" = "" ]; then - git_repo_id="GIT_REPO_ID" - echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" -fi - -if [ "$release_note" = "" ]; then - release_note="Minor update" - echo "[INFO] No command line input provided. Set \$release_note to $release_note" -fi - -# Initialize the local directory as a Git repository -git init - -# Adds the files in the local repository and stages them for commit. -git add . - -# Commits the tracked changes and prepares them to be pushed to a remote repository. -git commit -m "$release_note" - -# Sets the new remote -git_remote=$(git remote) -if [ "$git_remote" = "" ]; then # git remote not defined - - if [ "$GIT_TOKEN" = "" ]; then - echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." - git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git - else - git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git - fi - -fi - -git pull origin master - -# Pushes (Forces) the changes in the local repository up to the remote repository -echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" -git push origin master 2>&1 | grep -v 'To https' diff --git a/jenkins/JenkinsFile b/jenkins/JenkinsFile deleted file mode 100644 index 3f7e4e3..0000000 --- a/jenkins/JenkinsFile +++ /dev/null @@ -1,117 +0,0 @@ -import jenkins.branch.* -import java.util.regex.Pattern - -def job_name_split = env.JOB_NAME.split('/')[-2] -env.job_name_split = env.JOB_NAME.split('/')[-2] -def branch = env.JOB_NAME.split('/')[-1] -env.branch = env.JOB_NAME.split('/')[-1] -def jenkins_cwd_lin = '/home/jenkins/build' + '/' + job_name_split + '/' + job_name_split + '-' + env.BUILD_NUMBER -env.jenkins_cwd_lin = '/home/jenkins/build' + '/' + job_name_split + '/' + job_name_split + '-' + env.BUILD_NUMBER - -pipeline_triggers=[ - [ - $class: 'BitBucketPPRTrigger', - triggers : [ - [ - $class: 'BitBucketPPRPullRequestTriggerFilter', - actionFilter: [ - $class: 'BitBucketPPRPullRequestCreatedActionFilter' - ] - ] - ] - ] - ] - -def projectProperties = [ - pipelineTriggers(pipeline_triggers), - [$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '50']], - parameters ([ - string(name:'BASE_IMAGE', defaultValue:'docker-virtual-wap.artifactorylbj.it.keysight.com/wap-base-debian:12.8-slim', description: 'docker-virtual-wap.artifactorylbj.it.keysight.com/wap-base-debian:12.8-slim'), - booleanParam(name:'publish_pypi', defaultValue:false, description: 'If true, the build will be published to the public PyPI repos. Only works on release/ branches.') - ]), -] - -properties(projectProperties) - -def do_publish = params.publish_pypi - -@NonCPS -boolean setDisplayVersion(publish) { - branch_sanitized = branch.replaceAll('-', '.').replaceAll('_', '.').replaceAll('%2F', '-') - def matcher = Pattern.compile("^release%2F([0-9]+)\\.([0-9]+)\\.([0-9]+)\$").matcher(branch) - if (matcher.matches()) { - build_number = "dev${env.BUILD_NUMBER}+${branch_sanitized}" - if (publish) { - build_number = "${env.BUILD_NUMBER}" - } - env.PIP_VERSION = "${matcher.group(1).toString()}.${matcher.group(2).toString()}.${build_number}" - env.DOCKER_VERSION = env.PIP_VERSION.replaceAll('\\+', '-') - } else if (branch.startsWith("release%2F")) { - throw new Exception("Unexpected release branch format ${branch}, expected 'release%2fNUMBER.NUMBER.NUMBER'") - } else { - env.PIP_VERSION = "0.0.dev${env.BUILD_NUMBER}+${branch_sanitized}" - env.DOCKER_VERSION = env.PIP_VERSION.replaceAll('\\+', '-') - publish = false - } - currentBuild.displayName = env.PIP_VERSION - return publish -} - -node('wap') { - dir (jenkins_cwd_lin) { - stage('GitCheckout') { - commit = checkout([$class: 'GitSCM', - branches: scm.branches, - extensions: scm.extensions, - userRemoteConfigs: [[ - credentialsId: 'e7e3fcc3-4f5f-4e68-b68c-76f40b75a3c7', - url: 'https://bitbucket.it.keysight.com/scm/isgappsec/cyperf-api-wrapper.git']] - ]) - do_publish = setDisplayVersion(do_publish) - } - stage('Build base') { - env.BASE_IMAGE = params.BASE_IMAGE - sh(''' - docker build -f docker/Dockerfile \ - --build-arg base_image="$BASE_IMAGE" \ - --build-arg VERSION="$PIP_VERSION" \ - -t cyperf-api-wrapper-build:$DOCKER_VERSION \ - . - ''') - } - stage('Build and publish to internal repo') { - withCredentials([[$class: 'UsernamePasswordMultiBinding', - credentialsId: 'e7e3fcc3-4f5f-4e68-b68c-76f40b75a3c7', - usernameVariable: 'ARTIFACTORY_USERNAME', - passwordVariable: 'ARTIFACTORY_PASSWORD']]) { - sh(''' - docker run --rm \ - --env TWINE_USERNAME="$ARTIFACTORY_USERNAME" \ - --env TWINE_PASSWORD="$ARTIFACTORY_PASSWORD" \ - cyperf-api-wrapper-build:$DOCKER_VERSION \ - /cyperf-api-wrapper-build/publish.sh /build/py3 "--repository artifactory" - ''') - } - } - stage('Build and publish to public repo') { - if (do_publish) { - withCredentials([ - string(credentialsId: 'PYPI_API_TOKEN', variable: 'PYPI_API_TOKEN') - ]) { - sh(''' - docker run --rm \ - --env TWINE_USERNAME="__token__" \ - --env TWINE_PASSWORD="$PYPI_API_TOKEN" \ - cyperf-api-wrapper-build:$DOCKER_VERSION \ - /cyperf-api-wrapper-build/publish.sh /build/py3 - ''') - } - } - } - stage('Cleanup') { - sh(''' - docker rmi cyperf-api-wrapper-build:$DOCKER_VERSION - ''') - } - } -}