# -*- coding: utf-8 -*-

"""
    test_meraki

    This file was automatically generated by APIMATIC v2.0 ( https://apimatic.io ).
"""

from test_meraki.api_helper import APIHelper
from test_meraki.configuration import Configuration
from test_meraki.controllers.base_controller import BaseController
from test_meraki.http.auth.custom_header_auth import CustomHeaderAuth

class SMController(BaseController):

    """A Controller to access Endpoints in the test_meraki API."""


    def create_network_sm_app_polaris(self,
                                      network_id,
                                      create_network_sm_app_polaris):
        """Does a POST request to /networks/{networkId}/sm/app/polaris.

        Create a new Polaris app

        Args:
            network_id (string): TODO: type description here. Example: 
            create_network_sm_app_polaris (CreateNetworkSmAppPolaris): TODO:
                type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/app/polaris'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(create_network_sm_app_polaris))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_app_polaris(self,
                                   network_id,
                                   bundle_id=None):
        """Does a GET request to /networks/{networkId}/sm/app/polaris.

        Get details for a Cisco Polaris app if it exists

        Args:
            network_id (string): TODO: type description here. Example: 
            bundle_id (string, optional): The bundle ID of the app to be
                found, defaults to com.cisco.ciscosecurity.app

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/app/polaris'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'bundleId': bundle_id
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_network_sm_app_polaris(self,
                                      network_id,
                                      app_id,
                                      update_network_sm_app_polaris=None):
        """Does a PUT request to /networks/{networkId}/sm/app/polaris/{appId}.

        Update an existing Polaris app

        Args:
            network_id (string): TODO: type description here. Example: 
            app_id (string): TODO: type description here. Example: 
            update_network_sm_app_polaris (UpdateNetworkSmAppPolaris,
                optional): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/app/polaris/{appId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'appId': app_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(update_network_sm_app_polaris))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def delete_network_sm_app_polaris(self,
                                      network_id,
                                      app_id):
        """Does a DELETE request to /networks/{networkId}/sm/app/polaris/{appId}.

        Delete a Cisco Polaris app

        Args:
            network_id (string): TODO: type description here. Example: 
            app_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/app/polaris/{appId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'appId': app_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.delete(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def create_network_sm_bypass_activation_lock_attempt(self,
                                                         network_id,
                                                         create_network_sm_bypass_activation_lock_attempt):
        """Does a POST request to /networks/{networkId}/sm/bypassActivationLockAttempts.

        Bypass activation lock attempt

        Args:
            network_id (string): TODO: type description here. Example: 
            create_network_sm_bypass_activation_lock_attempt
                (CreateNetworkSmBypassActivationLockAttempt): TODO: type
                description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/bypassActivationLockAttempts'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(create_network_sm_bypass_activation_lock_attempt))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_bypass_activation_lock_attempt(self,
                                                      network_id,
                                                      attempt_id):
        """Does a GET request to /networks/{networkId}/sm/bypassActivationLockAttempts/{attemptId}.

        Bypass activation lock attempt status

        Args:
            network_id (string): TODO: type description here. Example: 
            attempt_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/bypassActivationLockAttempts/{attemptId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'attemptId': attempt_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_network_sm_device_fields(self,
                                        network_id,
                                        update_network_sm_device_fields):
        """Does a PUT request to /networks/{networkId}/sm/device/fields.

        Modify the fields of a device

        Args:
            network_id (string): TODO: type description here. Example: 
            update_network_sm_device_fields (UpdateNetworkSmDeviceFields):
                TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/device/fields'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(update_network_sm_device_fields))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_wipe_network_sm_device(self,
                                      network_id,
                                      wipe_network_sm_device=None):
        """Does a PUT request to /networks/{networkId}/sm/device/wipe.

        Wipe a device

        Args:
            network_id (string): TODO: type description here. Example: 
            wipe_network_sm_device (WipeNetworkSmDevice, optional): TODO: type
                description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/device/wipe'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(wipe_network_sm_device))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def create_refresh_network_sm_device_details(self,
                                                 network_id,
                                                 device_id):
        """Does a POST request to /networks/{networkId}/sm/device/{deviceId}/refreshDetails.

        Refresh the details of a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            void: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/device/{deviceId}/refreshDetails'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.post(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

    def get_network_sm_devices(self,
                               network_id,
                               fields=None,
                               wifi_macs=None,
                               serials=None,
                               ids=None,
                               scope=None,
                               batch_size=None,
                               batch_token=None):
        """Does a GET request to /networks/{networkId}/sm/devices.

        List the devices enrolled in an SM network with various specified
        fields and filters

        Args:
            network_id (string): TODO: type description here. Example: 
            fields (string, optional): Additional fields that will be
                displayed for each device. Multiple fields can be passed in as
                comma separated values.     The default fields are: id, name,
                tags, ssid, wifiMac, osName, systemModel, uuid, and
                serialNumber. The additional fields are: ip,     systemType,
                availableDeviceCapacity, kioskAppName, biosVersion,
                lastConnected, missingAppsCount, userSuppliedAddress,
                location, lastUser,     ownerEmail, ownerUsername, publicIp,
                phoneNumber, diskInfoJson, deviceCapacity, isManaged, hadMdm,
                isSupervised, meid, imei, iccid,     simCarrierNetwork,
                cellularDataUsed, isHotspotEnabled, createdAt,
                batteryEstCharge, quarantined, avName, avRunning, asName,
                fwName,     isRooted, loginRequired, screenLockEnabled,
                screenLockDelay, autoLoginDisabled, autoTags, hasMdm,
                hasDesktopAgent, diskEncryptionEnabled,    
                hardwareEncryptionCaps, passCodeLock, usesHardwareKeystore,
                and androidSecurityPatchVersion.
            wifi_macs (string, optional): Filter devices by wifi mac(s).
                Multiple wifi macs can be passed in as comma separated
                values.
            serials (string, optional): Filter devices by serial(s). Multiple
                serials can be passed in as comma separated values.
            ids (string, optional): Filter devices by id(s). Multiple ids can
                be passed in as comma separated values.
            scope (string, optional): Specify a scope (one of all, none,
                withAny, withAll, withoutAny, or withoutAll) and a set of tags
                as comma separated values.
            batch_size (int, optional): Number of devices to return, 1000 is
                the default as well as the max.
            batch_token (string, optional): If the network has more devices
                than the batch size, a batch token will be returned     as a
                part of the device list. To see the remainder of the devices,
                pass in the batchToken as a parameter in the next request.    
                Requests made with the batchToken do not require additional
                parameters as the batchToken includes the parameters passed in
                with the original request. Additional parameters passed in
                with the batchToken will be ignored.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/devices'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'fields': fields,
            'wifiMacs': wifi_macs,
            'serials': serials,
            'ids': ids,
            'scope': scope,
            'batchSize': batch_size,
            'batchToken': batch_token
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_checkin_network_sm_devices(self,
                                          network_id,
                                          checkin_network_sm_devices=None):
        """Does a PUT request to /networks/{networkId}/sm/devices/checkin.

        Force check-in a set of devices

        Args:
            network_id (string): TODO: type description here. Example: 
            checkin_network_sm_devices (CheckinNetworkSmDevices, optional):
                TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/devices/checkin'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(checkin_network_sm_devices))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_move_network_sm_devices(self,
                                       network_id,
                                       move_network_sm_devices):
        """Does a PUT request to /networks/{networkId}/sm/devices/move.

        Move a set of devices to a new network

        Args:
            network_id (string): TODO: type description here. Example: 
            move_network_sm_devices (MoveNetworkSmDevices): TODO: type
                description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/devices/move'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(move_network_sm_devices))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_network_sm_devices_tags(self,
                                       network_id,
                                       update_network_sm_devices_tags):
        """Does a PUT request to /networks/{networkId}/sm/devices/tags.

        Add, delete, or update the tags of a set of devices

        Args:
            network_id (string): TODO: type description here. Example: 
            update_network_sm_devices_tags (UpdateNetworkSmDevicesTags): TODO:
                type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/devices/tags'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(update_network_sm_devices_tags))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def create_unenroll_network_sm_device(self,
                                          network_id,
                                          device_id):
        """Does a POST request to /networks/{networkId}/sm/devices/{deviceId}/unenroll.

        Unenroll a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/devices/{deviceId}/unenroll'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.post(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def create_network_sm_profile_clarity(self,
                                          network_id,
                                          create_network_sm_profile_clarity):
        """Does a POST request to /networks/{networkId}/sm/profile/clarity.

        Create a new profile containing a Cisco Clarity payload

        Args:
            network_id (string): TODO: type description here. Example: 
            create_network_sm_profile_clarity (CreateNetworkSmProfileClarity):
                TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/clarity'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(create_network_sm_profile_clarity))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_network_sm_profile_clarity(self,
                                          network_id,
                                          profile_id,
                                          update_network_sm_profile_clarity=None):
        """Does a PUT request to /networks/{networkId}/sm/profile/clarity/{profileId}.

        Update an existing profile containing a Cisco Clarity payload

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 
            update_network_sm_profile_clarity (UpdateNetworkSmProfileClarity,
                optional): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/clarity/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(update_network_sm_profile_clarity))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def add_network_sm_profile_clarity(self,
                                       network_id,
                                       profile_id,
                                       add_network_sm_profile_clarity):
        """Does a POST request to /networks/{networkId}/sm/profile/clarity/{profileId}.

        Add a Cisco Clarity payload to an existing profile

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 
            add_network_sm_profile_clarity (AddNetworkSmProfileClarity): TODO:
                type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/clarity/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(add_network_sm_profile_clarity))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_profile_clarity(self,
                                       network_id,
                                       profile_id):
        """Does a GET request to /networks/{networkId}/sm/profile/clarity/{profileId}.

        Get details for a Cisco Clarity payload

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/clarity/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def delete_network_sm_profile_clarity(self,
                                          network_id,
                                          profile_id):
        """Does a DELETE request to /networks/{networkId}/sm/profile/clarity/{profileId}.

        Delete a Cisco Clarity payload. Deletes the entire profile if it's
        empty after removing the payload.

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/clarity/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.delete(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def create_network_sm_profile_umbrella(self,
                                           network_id,
                                           create_network_sm_profile_umbrella):
        """Does a POST request to /networks/{networkId}/sm/profile/umbrella.

        Create a new profile containing a Cisco Umbrella payload

        Args:
            network_id (string): TODO: type description here. Example: 
            create_network_sm_profile_umbrella
                (CreateNetworkSmProfileUmbrella): TODO: type description here.
                Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/umbrella'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(create_network_sm_profile_umbrella))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_network_sm_profile_umbrella(self,
                                           network_id,
                                           profile_id,
                                           update_network_sm_profile_umbrella=None):
        """Does a PUT request to /networks/{networkId}/sm/profile/umbrella/{profileId}.

        Update an existing profile containing a Cisco Umbrella payload

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 
            update_network_sm_profile_umbrella
                (UpdateNetworkSmProfileUmbrella, optional): TODO: type
                description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/umbrella/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(update_network_sm_profile_umbrella))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def add_network_sm_profile_umbrella(self,
                                        network_id,
                                        profile_id,
                                        add_network_sm_profile_umbrella):
        """Does a POST request to /networks/{networkId}/sm/profile/umbrella/{profileId}.

        Add a Cisco Umbrella payload to an existing profile

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 
            add_network_sm_profile_umbrella (AddNetworkSmProfileUmbrella):
                TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/umbrella/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.post(_query_url, headers=_headers, parameters=APIHelper.json_serialize(add_network_sm_profile_umbrella))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_profile_umbrella(self,
                                        network_id,
                                        profile_id):
        """Does a GET request to /networks/{networkId}/sm/profile/umbrella/{profileId}.

        Get details for a Cisco Umbrella payload

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/umbrella/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def delete_network_sm_profile_umbrella(self,
                                           network_id,
                                           profile_id):
        """Does a DELETE request to /networks/{networkId}/sm/profile/umbrella/{profileId}.

        Delete a Cisco Umbrella payload. Deletes the entire profile if it's
        empty after removing the payload

        Args:
            network_id (string): TODO: type description here. Example: 
            profile_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profile/umbrella/{profileId}'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'profileId': profile_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.delete(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_profiles(self,
                                network_id):
        """Does a GET request to /networks/{networkId}/sm/profiles.

        List all the profiles in the network

        Args:
            network_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/profiles'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_user_device_profiles(self,
                                            network_id,
                                            user_id):
        """Does a GET request to /networks/{networkId}/sm/user/{userId}/deviceProfiles.

        Get the profiles associated with a user

        Args:
            network_id (string): TODO: type description here. Example: 
            user_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/user/{userId}/deviceProfiles'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'userId': user_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_user_softwares(self,
                                      network_id,
                                      user_id):
        """Does a GET request to /networks/{networkId}/sm/user/{userId}/softwares.

        Get a list of softwares associated with a user

        Args:
            network_id (string): TODO: type description here. Example: 
            user_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/user/{userId}/softwares'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'userId': user_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_users(self,
                             network_id,
                             ids=None,
                             usernames=None,
                             emails=None,
                             scope=None):
        """Does a GET request to /networks/{networkId}/sm/users.

        List the owners in an SM network with various specified fields and
        filters

        Args:
            network_id (string): TODO: type description here. Example: 
            ids (string, optional): Filter users by id(s). Multiple ids can be
                passed in as comma separated values.
            usernames (string, optional): Filter users by username(s).
                Multiple usernames can be passed in as comma separated
                values.
            emails (string, optional): Filter users by email(s). Multiple
                emails can be passed in as comma separated values.
            scope (string, optional): Specifiy a scope (one of all, none,
                withAny, withAll, withoutAny, withoutAll) and a set of tags as
                comma separated values.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/users'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'ids': ids,
            'usernames': usernames,
            'emails': emails,
            'scope': scope
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_cellular_usage_history(self,
                                              network_id,
                                              device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/cellularUsageHistory.

        Return the client's daily cellular data usage history. Usage data is
        in kilobytes.

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/cellularUsageHistory'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_certs(self,
                             network_id,
                             device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/certs.

        List the certs on a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/certs'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_device_profiles(self,
                                       network_id,
                                       device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/deviceProfiles.

        Get the profiles associated with a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/deviceProfiles'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_network_adapters(self,
                                        network_id,
                                        device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/networkAdapters.

        List the network adapters of a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/networkAdapters'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_restrictions(self,
                                    network_id,
                                    device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/restrictions.

        List the restrictions on a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/restrictions'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_security_centers(self,
                                        network_id,
                                        device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/securityCenters.

        List the security centers on a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/securityCenters'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_softwares(self,
                                 network_id,
                                 device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/softwares.

        Get a list of softwares associated with a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/softwares'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_wlan_lists(self,
                                  network_id,
                                  device_id):
        """Does a GET request to /networks/{networkId}/sm/{deviceId}/wlanLists.

        List the saved SSID names on a device

        Args:
            network_id (string): TODO: type description here. Example: 
            device_id (string): TODO: type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{networkId}/sm/{deviceId}/wlanLists'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'networkId': network_id,
            'deviceId': device_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def update_lock_network_sm_devices(self,
                                       network_id,
                                       lock_network_sm_devices=None):
        """Does a PUT request to /networks/{network_id}/sm/devices/lock.

        Lock a set of devices

        Args:
            network_id (string): TODO: type description here. Example: 
            lock_network_sm_devices (LockNetworkSmDevices, optional): TODO:
                type description here. Example: 

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{network_id}/sm/devices/lock'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'network_id': network_id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare headers
        _headers = {
            'content-type': 'application/json; charset=utf-8'
        }

        # Prepare and execute request
        _request = self.http_client.put(_query_url, headers=_headers, parameters=APIHelper.json_serialize(lock_network_sm_devices))
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_connectivity(self,
                                    network_id,
                                    id,
                                    per_page=None,
                                    starting_after=None,
                                    ending_before=None):
        """Does a GET request to /networks/{network_id}/sm/{id}/connectivity.

        Returns historical connectivity data (whether a device is regularly
        checking in to Dashboard).

        Args:
            network_id (string): TODO: type description here. Example: 
            id (string): TODO: type description here. Example: 
            per_page (string, optional): The number of entries per page
                returned
            starting_after (string, optional): A token used by the server to
                indicate the start of the page. Often this is a timestamp or
                an ID but it is not limited to those. This parameter should
                not be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.
            ending_before (string, optional): A token used by the server to
                indicate the end of the page. Often this is a timestamp or an
                ID but it is not limited to those. This parameter should not
                be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{network_id}/sm/{id}/connectivity'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'network_id': network_id,
            'id': id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'perPage': per_page,
            'startingAfter': starting_after,
            'endingBefore': ending_before
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_desktop_logs(self,
                                    network_id,
                                    id,
                                    per_page=None,
                                    starting_after=None,
                                    ending_before=None):
        """Does a GET request to /networks/{network_id}/sm/{id}/desktopLogs.

        Return historical records of various Systems Manager network
        connection details for desktop devices.

        Args:
            network_id (string): TODO: type description here. Example: 
            id (string): TODO: type description here. Example: 
            per_page (string, optional): The number of entries per page
                returned
            starting_after (string, optional): A token used by the server to
                indicate the start of the page. Often this is a timestamp or
                an ID but it is not limited to those. This parameter should
                not be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.
            ending_before (string, optional): A token used by the server to
                indicate the end of the page. Often this is a timestamp or an
                ID but it is not limited to those. This parameter should not
                be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{network_id}/sm/{id}/desktopLogs'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'network_id': network_id,
            'id': id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'perPage': per_page,
            'startingAfter': starting_after,
            'endingBefore': ending_before
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_device_command_logs(self,
                                           network_id,
                                           id,
                                           per_page=None,
                                           starting_after=None,
                                           ending_before=None):
        """Does a GET request to /networks/{network_id}/sm/{id}/deviceCommandLogs.

            Return historical records of commands sent to Systems Manager
            devices.
            <p>Note that this will include the name of the Dashboard user who
            initiated the command if it was generated
            by a Dashboard admin rather than the automatic behavior of the
            system; you may wish to filter this out
            of any reports.</p>

        Args:
            network_id (string): TODO: type description here. Example: 
            id (string): TODO: type description here. Example: 
            per_page (string, optional): The number of entries per page
                returned
            starting_after (string, optional): A token used by the server to
                indicate the start of the page. Often this is a timestamp or
                an ID but it is not limited to those. This parameter should
                not be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.
            ending_before (string, optional): A token used by the server to
                indicate the end of the page. Often this is a timestamp or an
                ID but it is not limited to those. This parameter should not
                be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{network_id}/sm/{id}/deviceCommandLogs'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'network_id': network_id,
            'id': id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'perPage': per_page,
            'startingAfter': starting_after,
            'endingBefore': ending_before
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body

    def get_network_sm_performance_history(self,
                                           network_id,
                                           id,
                                           per_page=None,
                                           starting_after=None,
                                           ending_before=None):
        """Does a GET request to /networks/{network_id}/sm/{id}/performanceHistory.

        Return historical records of various Systems Manager client metrics
        for desktop devices.

        Args:
            network_id (string): TODO: type description here. Example: 
            id (string): TODO: type description here. Example: 
            per_page (string, optional): The number of entries per page
                returned
            starting_after (string, optional): A token used by the server to
                indicate the start of the page. Often this is a timestamp or
                an ID but it is not limited to those. This parameter should
                not be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.
            ending_before (string, optional): A token used by the server to
                indicate the end of the page. Often this is a timestamp or an
                ID but it is not limited to those. This parameter should not
                be defined by client applications. The link for the first,
                last, next or prev page in the HTTP Link header should define
                it.

        Returns:
            object: Response from the API. Successful operation

        Raises:
            APIException: When an error occurs while fetching the data from
                the remote API. This exception includes the HTTP Response
                code, an error message, and the HTTP body that was received in
                the request.

        """

        # Prepare query URL
        _url_path = '/networks/{network_id}/sm/{id}/performanceHistory'
        _url_path = APIHelper.append_url_with_template_parameters(_url_path, { 
            'network_id': network_id,
            'id': id
        })
        _query_builder = Configuration.base_uri
        _query_builder += _url_path
        _query_parameters = {
            'perPage': per_page,
            'startingAfter': starting_after,
            'endingBefore': ending_before
        }
        _query_builder = APIHelper.append_url_with_query_parameters(_query_builder,
            _query_parameters, Configuration.array_serialization)
        _query_url = APIHelper.clean_url(_query_builder)

        # Prepare and execute request
        _request = self.http_client.get(_query_url)
        CustomHeaderAuth.apply(_request)
        _context = self.execute_request(_request)
        self.validate_response(_context)

        # Return appropriate type
        return _context.response.raw_body
