Source code for wxc_sdk.xapi

from typing import Optional, Union

from wxc_sdk.api_child import ApiChild
from wxc_sdk.base import ApiModel

__all__ = ['ExecuteCommandResponse', 'QueryStatusResponse', 'XApi']


[docs] class QueryStatusResponse(ApiModel): #: The unique identifier for the Webex RoomOS Device. device_id: Optional[str] = None #: xAPI status result result: Optional[dict] = None
[docs] class ExecuteCommandResponse(ApiModel): #: The unique identifier for the Webex RoomOS Device. device_id: Optional[str] = None #: xAPI command arguments arguments: Optional[dict] = None #: xAPI command results result: Optional[dict] = None
[docs] class XApi(ApiChild, base='xapi'): """ xAPI The xAPI allows developers to programmatically invoke commands and query the status of devices that run Webex RoomOS software. Executing commands requires an auth token with the `spark:xapi_commands` scope. Querying devices requires an auth token with the `spark:xapi_statuses` scope. All xAPI requests require a `deviceId` which can be obtained using the `Devices API <https://developer.webex.com/docs/api/v1/devices>`_. xAPI commands and statuses are described in the `Cisco Collaboration Endpoint Software API Reference Guide <https://www.cisco.com/c/en/us/support/collaboration-endpoints/spark-room-kit-series/products-command-reference -list.html>`_. For more information about developing applications for cloud connected devices, see the `Device Developers Guide <https://developer.webex.com/docs/api/guides/device-developers-guide>`_. """
[docs] def query_status(self, device_id: str, name: list[str]) -> QueryStatusResponse: """ Query Status Query the current status of the Webex RoomOS Device. You specify the target device in the `deviceId` parameter in the URI. The target device is queried for statuses according to the expression in the `name` parameter. See the `xAPI section of the Device Developers Guide <https://developer.webex.com/docs/api/guides/device-developers-guide#xapi>`_ for a description of status expressions. :param device_id: The unique identifier for the Webex RoomOS Device. :type device_id: str :param name: A list of status expressions used to query the Webex RoomOS Device. See the `xAPI section of the Device Developers Guide <https://developer.webex.com/docs/api/guides/device-developers-guide#xapi>`_ for a description of status expressions. A request can contain at most 10 different status expressions. :type name: list[str] """ params = {} params['deviceId'] = device_id params['name'] = ','.join(name) url = self.ep('status') data = super().get(url, params=params) r = QueryStatusResponse.model_validate(data) return r
[docs] def execute_command(self, command_name: str, device_id: str, arguments: dict = None, body: Union[dict, str] = None) -> ExecuteCommandResponse: """ Execute Command Executes a command on the Webex RoomOS Device. Specify the command to execute in the `commandName` URI parameter. See the `xAPI section of the Device Developers Guide <https://developer.webex.com/docs/devices#xapi>`_ for a description of command expressions. :param command_name: Command to execute on the Webex RoomOS Device. :type command_name: str :param device_id: The unique identifier for the Webex RoomOS Device. :type device_id: str :param arguments: xAPI command arguments :type arguments: dict :param body: xAPI command body, as a complex JSON object or as a string :type body: ExecuteCommandBody :rtype: :class:`ExecuteCommandResponse` """ json_body = dict() json_body['deviceId'] = device_id if arguments is not None: json_body['arguments'] = arguments if body is not None: json_body['body'] = body url = self.ep(f'command/{command_name}') data = super().post(url, json=json_body) r = ExecuteCommandResponse.model_validate(data) return r
[docs] def system_unit_boot(self, device_id: str, force: bool = False) -> ExecuteCommandResponse: """ Reboot the device :param device_id: The unique identifier for the Webex RoomOS Device. :type device_id: str :param force: If True, the device will be rebooted immediately. If False, the device will wait for a period of time before rebooting. :type force: bool """ return self.execute_command('SystemUnit.Boot', device_id, arguments={'Force': str(force)})