# coding: utf-8

"""
    Sonatype Lifecycle Public REST API

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

    The version of the OpenAPI document: 1.196.0-01
    Contact: community@sonatype.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, StrictStr, field_validator
from typing import List
from typing_extensions import Annotated
from sonatype_iq_api_client.models.api_auto_policy_waiver_dto import ApiAutoPolicyWaiverDTO
from sonatype_iq_api_client.models.api_auto_policy_waiver_status_dto import ApiAutoPolicyWaiverStatusDTO

from sonatype_iq_api_client.api_client import ApiClient, RequestSerialized
from sonatype_iq_api_client.api_response import ApiResponse
from sonatype_iq_api_client.rest import RESTResponseType


class AutoPolicyWaiversApi:
    """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 add_auto_policy_waiver(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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,
    ) -> ApiAutoPolicyWaiverDTO:
        """add_auto_policy_waiver

        Use this method to create an auto policy waiver configuration. Only one configuration can exist at a time for a given application or organization.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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._add_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def add_auto_policy_waiver_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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[ApiAutoPolicyWaiverDTO]:
        """add_auto_policy_waiver

        Use this method to create an auto policy waiver configuration. Only one configuration can exist at a time for a given application or organization.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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._add_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def add_auto_policy_waiver_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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:
        """add_auto_policy_waiver

        Use this method to create an auto policy waiver configuration. Only one configuration can exist at a time for a given application or organization.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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._add_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _add_auto_policy_waiver_serialize(
        self,
        owner_type,
        owner_id,
        api_auto_policy_waiver_dto,
        _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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if api_auto_policy_waiver_dto is not None:
            _body_params = api_auto_policy_waiver_dto


        # 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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}',
            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 add_auto_policy_waivers(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[List[ApiAutoPolicyWaiverDTO], Field(description="The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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[ApiAutoPolicyWaiverDTO]:
        """add_auto_policy_waivers

        Use this method to create an auto policy waiver configuration. Only three configurations can  exist at a time for a given application or organization. With different combinations for reachable/pathForward  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: List[ApiAutoPolicyWaiverDTO]
        :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._add_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def add_auto_policy_waivers_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[List[ApiAutoPolicyWaiverDTO], Field(description="The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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[ApiAutoPolicyWaiverDTO]]:
        """add_auto_policy_waivers

        Use this method to create an auto policy waiver configuration. Only three configurations can  exist at a time for a given application or organization. With different combinations for reachable/pathForward  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: List[ApiAutoPolicyWaiverDTO]
        :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._add_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def add_auto_policy_waivers_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        api_auto_policy_waiver_dto: Annotated[List[ApiAutoPolicyWaiverDTO], Field(description="The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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:
        """add_auto_policy_waivers

        Use this method to create an auto policy waiver configuration. Only three configurations can  exist at a time for a given application or organization. With different combinations for reachable/pathForward  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param api_auto_policy_waiver_dto: The request JSON can be an array that include the fields<ol><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: List[ApiAutoPolicyWaiverDTO]
        :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._add_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _add_auto_policy_waivers_serialize(
        self,
        owner_type,
        owner_id,
        api_auto_policy_waiver_dto,
        _request_auth,
        _content_type,
        _headers,
        _host_index,
    ) -> RequestSerialized:

        _host = None

        _collection_formats: Dict[str, str] = {
            'ApiAutoPolicyWaiverDTO': '',
        }

        _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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if api_auto_policy_waiver_dto is not None:
            _body_params = api_auto_policy_waiver_dto


        # 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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='POST',
            resource_path='/api/v2/autoPolicyWaivers/v2/{ownerType}/{ownerId}',
            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_auto_policy_waiver(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be deleted")],
        _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_auto_policy_waiver

        Use this method to delete an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be deleted (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def delete_auto_policy_waiver_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be deleted")],
        _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_auto_policy_waiver

        Use this method to delete an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be deleted (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def delete_auto_policy_waiver_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be deleted")],
        _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_auto_policy_waiver

        Use this method to delete an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Waive Policy Violations

        :param owner_type: Enter the ownerType to specify the scope. A waiver corresponding to the autoPolicyWaiverId provided and within the scope specified will be deleted. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be deleted (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '204': None,
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _delete_auto_policy_waiver_serialize(
        self,
        owner_type,
        owner_id,
        auto_policy_waiver_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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_id
        if auto_policy_waiver_id is not None:
            _path_params['autoPolicyWaiverId'] = auto_policy_waiver_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter




        # authentication setting
        _auth_settings: List[str] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='DELETE',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}/{autoPolicyWaiverId}',
            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_applicable_auto_waivers(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType.")],
        _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[ApiAutoPolicyWaiverStatusDTO]:
        """get_applicable_auto_waivers

        Use this method to retrieve all applicable auto waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType. (required)
        :type owner_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_applicable_auto_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverStatusDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_applicable_auto_waivers_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType.")],
        _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[ApiAutoPolicyWaiverStatusDTO]]:
        """get_applicable_auto_waivers

        Use this method to retrieve all applicable auto waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType. (required)
        :type owner_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_applicable_auto_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverStatusDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_applicable_auto_waivers_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType.")],
        _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_applicable_auto_waivers

        Use this method to retrieve all applicable auto waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain applicable auto policy waivers, if any, that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType. (required)
        :type owner_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_applicable_auto_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverStatusDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_applicable_auto_waivers_serialize(
        self,
        owner_type,
        owner_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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v2/autoPolicyWaivers/v2/{ownerType}/{ownerId}/applicableAutoWaivers',
            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_auto_policy_waiver(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details.")],
        _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,
    ) -> ApiAutoPolicyWaiverDTO:
        """get_auto_policy_waiver

        Use this method to retrieve auto policy waiver details for the autoPolicyWaiverId specified.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details. (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_auto_policy_waiver_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details.")],
        _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[ApiAutoPolicyWaiverDTO]:
        """get_auto_policy_waiver

        Use this method to retrieve auto policy waiver details for the autoPolicyWaiverId specified.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details. (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_auto_policy_waiver_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details.")],
        _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_auto_policy_waiver

        Use this method to retrieve auto policy waiver details for the autoPolicyWaiverId specified.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId for which you want to retrieve the auto policy waiver details. (required)
        :type auto_policy_waiver_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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_auto_policy_waiver_serialize(
        self,
        owner_type,
        owner_id,
        auto_policy_waiver_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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_id
        if auto_policy_waiver_id is not None:
            _path_params['autoPolicyWaiverId'] = auto_policy_waiver_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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}/{autoPolicyWaiverId}',
            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_auto_policy_waiver_status(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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,
    ) -> ApiAutoPolicyWaiverStatusDTO:
        """get_auto_policy_waiver_status

        Use this method to retrieve status details for any auto policy waiver enabled for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waiver_status_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverStatusDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_auto_policy_waiver_status_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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[ApiAutoPolicyWaiverStatusDTO]:
        """get_auto_policy_waiver_status

        Use this method to retrieve status details for any auto policy waiver enabled for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waiver_status_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverStatusDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_auto_policy_waiver_status_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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_auto_policy_waiver_status

        Use this method to retrieve status details for any auto policy waiver enabled for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain status details for the active auto policy waiver, if any, that is within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waiver_status_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverStatusDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_auto_policy_waiver_status_serialize(
        self,
        owner_type,
        owner_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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}/status',
            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_auto_policy_waivers(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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[ApiAutoPolicyWaiverDTO]:
        """get_auto_policy_waivers

        Use this method to retrieve waiver details for all auto policy waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def get_auto_policy_waivers_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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[ApiAutoPolicyWaiverDTO]]:
        """get_auto_policy_waivers

        Use this method to retrieve waiver details for all auto policy waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def get_auto_policy_waivers_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        _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_auto_policy_waivers

        Use this method to retrieve waiver details for all auto policy waivers for the scope specified. You can specify the scope by using the parameters ownerType and ownerId.  Permissions required: View IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_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_auto_policy_waivers_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "List[ApiAutoPolicyWaiverDTO]",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _get_auto_policy_waivers_serialize(
        self,
        owner_type,
        owner_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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='GET',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}',
            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_auto_policy_waiver(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be updated.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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,
    ) -> ApiAutoPolicyWaiverDTO:
        """update_auto_policy_waiver

        Use this method to update an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Write IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be updated. (required)
        :type auto_policy_waiver_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        ).data


    @validate_call
    def update_auto_policy_waiver_with_http_info(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be updated.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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[ApiAutoPolicyWaiverDTO]:
        """update_auto_policy_waiver

        Use this method to update an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Write IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be updated. (required)
        :type auto_policy_waiver_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        response_data.read()
        return self.api_client.response_deserialize(
            response_data=response_data,
            response_types_map=_response_types_map,
        )


    @validate_call
    def update_auto_policy_waiver_without_preload_content(
        self,
        owner_type: Annotated[str, Field(strict=True, description="Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.")],
        owner_id: Annotated[StrictStr, Field(description="Enter the corresponding id for the ownerType specified above.")],
        auto_policy_waiver_id: Annotated[StrictStr, Field(description="Enter the autoPolicyWaiverId to be updated.")],
        api_auto_policy_waiver_dto: Annotated[ApiAutoPolicyWaiverDTO, Field(description="The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol>")],
        _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_auto_policy_waiver

        Use this method to update an auto policy waiver, specified by the autoPolicyWaiverId.  Permissions required: Write IQ Elements

        :param owner_type: Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. (required)
        :type owner_type: str
        :param owner_id: Enter the corresponding id for the ownerType specified above. (required)
        :type owner_id: str
        :param auto_policy_waiver_id: Enter the autoPolicyWaiverId to be updated. (required)
        :type auto_policy_waiver_id: str
        :param api_auto_policy_waiver_dto: The request JSON can include the fields<ol><li>autoPolicyWaiverId</li><li>threatLevel</li><li>pathForward</li><li>reachable</li></ol> (required)
        :type api_auto_policy_waiver_dto: ApiAutoPolicyWaiverDTO
        :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_auto_policy_waiver_serialize(
            owner_type=owner_type,
            owner_id=owner_id,
            auto_policy_waiver_id=auto_policy_waiver_id,
            api_auto_policy_waiver_dto=api_auto_policy_waiver_dto,
            _request_auth=_request_auth,
            _content_type=_content_type,
            _headers=_headers,
            _host_index=_host_index
        )

        _response_types_map: Dict[str, Optional[str]] = {
            '200': "ApiAutoPolicyWaiverDTO",
        }
        response_data = self.api_client.call_api(
            *_param,
            _request_timeout=_request_timeout
        )
        return response_data.response


    def _update_auto_policy_waiver_serialize(
        self,
        owner_type,
        owner_id,
        auto_policy_waiver_id,
        api_auto_policy_waiver_dto,
        _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, List[str], List[bytes], List[Tuple[str, bytes]]]
        ] = {}
        _body_params: Optional[bytes] = None

        # process the path parameters
        if owner_type is not None:
            _path_params['ownerType'] = owner_type
        if owner_id is not None:
            _path_params['ownerId'] = owner_id
        if auto_policy_waiver_id is not None:
            _path_params['autoPolicyWaiverId'] = auto_policy_waiver_id
        # process the query parameters
        # process the header parameters
        # process the form parameters
        # process the body parameter
        if api_auto_policy_waiver_dto is not None:
            _body_params = api_auto_policy_waiver_dto


        # 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] = [
            'BasicAuth'
        ]

        return self.api_client.param_serialize(
            method='PUT',
            resource_path='/api/v2/autoPolicyWaivers/{ownerType}/{ownerId}/{autoPolicyWaiverId}',
            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
        )


