Module misty2py.response
This module defines Misty2pyResponse class to handle responses from Misty2py when it communicates with Misty's REST API or Misty's WebSocket API.
Functions
def compose_custom_response(resp: Dict,
success_message: str = 'Operation successful.',
fail_message: str = 'Operation failed.') ‑> Dict-
Expand source code
def compose_custom_response( resp: Dict, success_message: str = "Operation successful.", fail_message: str = "Operation failed.", ) -> Dict: """Enhances a dictionarised Misty2pyResponse with `success_message` in case of success and with `fail_message` otherwise. Args: resp (Dict): The dictionarised Misty2pyResponse. success_message (str, optional): A message/keyword to append in case of success. Defaults to `"Operation successful."`. fail_message (str, optional): A message/keyword to append in case of failure. Defaults to `"Operation failed."`. Returns: Dict: The enhanced version. """ def compose_str( main_str: str, potential_str: Optional[str], fallback: Optional[str] = None ) -> str: """Composes a single string from main_str, potential_str and fallback. - If `potential_str` and `fallback` are both `None`, the final string is `main_str`. - If `potential_str` is a string, the final string is `main_str` followed by a space and `potential_str`. - If `potential_str` is `None` and `fallback` is a string, the final string is `main_str` followed by a space and `fallback`. """ if isinstance(potential_str, str): return "%s %s" % (main_str, potential_str) if isinstance(fallback, str): return "%s %s" % (main_str, fallback) return main_str success = resp.get("overall_success") dct = {"overall_success": success} potential_resp = resp.get("rest_response") if potential_resp: potential_message = potential_resp.get("message") if success: message = compose_str(success_message, potential_message) else: message = compose_str( fail_message, potential_message, fallback="No further details provided." ) dct["rest_response"] = { "success": potential_resp.get("success"), "message": message, } return dct
Enhances a dictionarised Misty2pyResponse with
success_message
in case of success and withfail_message
otherwise.Args
resp
:Dict
- The dictionarised Misty2pyResponse.
success_message
:str
, optional- A message/keyword to append in case of success. Defaults to
"Operation successful."
. fail_message
:str
, optional- A message/keyword to append in case of failure. Defaults to
"Operation failed."
.
Returns
Dict
- The enhanced version.
def success_of_action_dict(**messages) ‑> Dict
-
Expand source code
def success_of_action_dict(**messages) -> Dict: """Parses the overall success of a dictionary of actions, where the key is an action name and the value is a dictionarised Misty2pyResponse. `overall_success` is only true if all actions were successful. Returns: Dict: The dictionary of the keys `"overall_success"` (bool) and action names that contain the dictionarised Misty2pyResponses. """ status_dict = {} overall_success = True for name, message in messages.items(): status_dict[name] = message if not message.get("overall_success"): overall_success = False status_dict["overall_success"] = overall_success return status_dict
Parses the overall success of a dictionary of actions, where the key is an action name and the value is a dictionarised Misty2pyResponse.
overall_success
is only true if all actions were successful.Returns
Dict
- The dictionary of the keys
"overall_success"
(bool) and action names that contain the dictionarised Misty2pyResponses.
def success_of_action_list(msg_list: List[Dict[str, Dict]]) ‑> Dict
-
Expand source code
def success_of_action_list(msg_list: List[Dict[str, Dict]]) -> Dict: """Parses the overall success of a list of dictionaries where the keyw is an action name and the value is a dictionarised Misty2pyResponse. `overall_success` is only true if all actions were successful. Args: msg_list (List[Dict[str, Dict]]): The list of dictionaries where the keyword is an action name and the value is a Misty2pyResponse. Returns: Dict: The dictionary of the keys `"overall_success"` (bool) and `"actions"` whose value is a list of dictionaries with keys being action names and values being Misty2pyResponses. """ dct = {"actions": []} success = True for event in msg_list: for name, message in event.items(): if not message.get("overall_success"): success = False dct["actions"].append((name, message)) dct["overall_success"] = success return dct
Parses the overall success of a list of dictionaries where the keyw is an action name and the value is a dictionarised Misty2pyResponse.
overall_success
is only true if all actions were successful.Args
msg_list
:List[Dict[str, Dict]]
- The list of dictionaries where the keyword is an action name and the value is a Misty2pyResponse.
Returns
Dict
- The dictionary of the keys
"overall_success"
(bool) and"actions"
whose value is a list of dictionaries with keys being action names and values being Misty2pyResponses.
def unknown_error(e: Exception) ‑> Misty2pyResponse
-
Expand source code
def unknown_error(e: Exception) -> Misty2pyResponse: """Generates a Misty2pyResponse for an error `e` originating in unknown circumstances.""" return Misty2pyResponse(False, error_msg=e, error_type=Misty2pyErrorType.UNKNOWN)
Generates a Misty2pyResponse for an error
e
originating in unknown circumstances.
Classes
class Misty2pyErrorType (value, names=None, *, module=None, qualname=None, type=None, start=1)
-
Expand source code
class Misty2pyErrorType(Enum): """This class represents the types of errors originating in the Misty2py. """ DATA_FORMAT = "incorrect data format" """Represents an error originating from the user supplying incorrect data format to any method, class or function.""" DATA_SHORTCUT = "unsupported data shortcut" """Represents an error originating from the user supplying an unsupported data shortcut to any method, class or function.""" UNKNOWN = "unknown" """Represents an error originating from the user supplying an unsupported command string to methods or functions that take commands as strings.""" COMMAND = "unsupported command" """Represents an error originating from the user supplying unsupported HTTP request method or an unsupported command type to methods, classes or functions handling HTTP requests to Misty's REST API.""" REQUEST_METHOD = "unsupported request method" """Represents an error whose origin is not known to the application.""" MISSING = "missing argument or parameter" """Represents an error originating from missing arguments or parameters.""" NONE = None """Represents that no error is present.""" def __str__(self) -> str: """Parses an error type into a string.""" return str(self.value)
This class represents the types of errors originating in the Misty2py.
Ancestors
- enum.Enum
Class variables
var COMMAND
-
Represents an error originating from the user supplying unsupported HTTP request method or an unsupported command type to methods, classes or functions handling HTTP requests to Misty's REST API.
var DATA_FORMAT
-
Represents an error originating from the user supplying incorrect data format to any method, class or function.
var DATA_SHORTCUT
-
Represents an error originating from the user supplying an unsupported data shortcut to any method, class or function.
var MISSING
-
Represents an error originating from missing arguments or parameters.
var NONE
-
Represents that no error is present.
var REQUEST_METHOD
-
Represents an error whose origin is not known to the application.
var UNKNOWN
-
Represents an error originating from the user supplying an unsupported command string to methods or functions that take commands as strings.
class Misty2pyResponse (misty2py_status: bool,
rest_response: Any = None,
ws_response: Dict | None = None,
error_type: Misty2pyErrorType = None,
error_msg: str | None = None)-
Expand source code
class Misty2pyResponse: """A class representing a response from any function or method of Misty2py that communicates with Misty's REST API or Misty's WebSocket API. Attributes: misty2py_status (bool): Indicates whether any error originating in Misty2py was encountered. rest_response (Any): The response from Misty's REST API. `None` if this response does not contain a sub-response from Misty's REST API. ws_response (Optional[Dict]): The response from Misty's WebSocket API. `None` if this response does not contain a sub-response from Misty's WebSocket API. error_type (Misty2pyErrorType): The type of Misty2py error encountered. `Misty2pyErrorType.NONE` if no error in Misty2py was encountered. error_msg (Optional[str]): The error message for a Misty2py error. `None` if no error in Misty2py was encountered. """ def __init__( self, misty2py_status: bool, rest_response: Any = None, ws_response: Optional[Dict] = None, error_type: Misty2pyErrorType = Misty2pyErrorType.NONE, error_msg: Optional[str] = None, ) -> None: """Creates a Misty2pyResponse object for a specific action. Args: misty2py_status (bool): Indicates whether any error originating in Misty2py was encountered. rest_response (Any, optional): The response from Misty's REST API. `None` if this response does not contain a sub-response from Misty's REST API. Defaults to `None`. ws_response (Optional[Dict], optional): The response from Misty's WebSocket API. `None` if this response does not contain a sub-response from Misty's WebSocket API. Defaults to `None`. error_type (Misty2pyErrorType, optional): The type of Misty2py error encountered. `Misty2pyErrorType.NONE` if no error in Misty2py was encountered. Defaults to `Misty2pyErrorType.NONE`. error_msg (Optional[str], optional): The error message for a Misty2py error. `None` if no error in Misty2py was encountered. Defaults to `None`. """ self.misty2py_status = misty2py_status self.rest_response = rest_response self.error_type = error_type self.error_msg = error_msg self.ws_response = ws_response def parse_to_dict(self) -> Dict: """Parses this Misty2py object into a dictionary. Returns: Dict: A dictionary with keys `"misty2py_response"` (Dict) for the response of the Misty2py package, `"overall_success"` (bool) and optional keys `"rest_response"` (Dict) and `"ws_response"` (Dict). """ dct = { "misty2py_response": self.get_misty2py_response(), "overall_success": self._is_successful(), } if self.rest_response is not None: dct["rest_response"] = self.get_rest_response() if self.ws_response is not None: dct["ws_response"] = self.ws_response return dct def get_rest_response(self) -> Dict: """Returns the REST API sub-response of this Misty2pyResponse with keys `"success"` and optional keys `"message"` or `"content"`.""" if isinstance(self.rest_response, Dict): dct = self.rest_response.copy() st = dct.pop("status", None) if st == "Success": dct["success"] = True else: dct["success"] = False return dct return self.rest_response def get_ws_response(self) -> Dict: """Returns the WebSocket API sub-response of this Misty2pyResponse.""" return self.ws_response def get_misty2py_response(self) -> Dict: """Parses the Misty2py part of this Misty2pyResponse to a dictionary containing keys `"success"` and, if the value of `"success"` is `False`, the `"error_msg"` (str) and `"error_type"` (str).""" success = self.misty2py_status dct = {"success": success} if not success: dct["error_msg"] = self.error_msg dct["error_type"] = str(self.error_type) return dct def _is_successful(self) -> bool: """Returns `True` if every sub-response present in this Misty2pyResponse is successful. Returns `False` otherwise.""" success = self.misty2py_status if self.ws_response is not None: success = success and self.ws_response.get("success") if self.rest_response is not None: success = success and self.rest_response.get("status") == "Success" return success
A class representing a response from any function or method of Misty2py that communicates with Misty's REST API or Misty's WebSocket API.
Attributes
misty2py_status
:bool
- Indicates whether any error originating in Misty2py was encountered.
rest_response
:Any
- The response from Misty's REST API.
None
if this response does not contain a sub-response from Misty's REST API. ws_response
:Optional[Dict]
- The response from Misty's WebSocket API.
None
if this response does not contain a sub-response from Misty's WebSocket API. error_type
:Misty2pyErrorType
- The type of Misty2py error encountered.
Misty2pyErrorType.NONE
if no error in Misty2py was encountered. error_msg
:Optional[str]
- The error message for a Misty2py error.
None
if no error in Misty2py was encountered.
Creates a Misty2pyResponse object for a specific action.
Args
misty2py_status
:bool
- Indicates whether any error originating in Misty2py was encountered.
rest_response
:Any
, optional- The response from Misty's REST API.
None
if this response does not contain a sub-response from Misty's REST API. Defaults toNone
. ws_response
:Optional[Dict]
, optional- The response from Misty's WebSocket API.
None
if this response does not contain a sub-response from Misty's WebSocket API. Defaults toNone
. error_type
:Misty2pyErrorType
, optional- The type of Misty2py error encountered.
Misty2pyErrorType.NONE
if no error in Misty2py was encountered. Defaults toMisty2pyErrorType.NONE
. error_msg
:Optional[str]
, optional- The error message for a Misty2py error.
None
if no error in Misty2py was encountered. Defaults toNone
.
Methods
def get_misty2py_response(self) ‑> Dict
-
Expand source code
def get_misty2py_response(self) -> Dict: """Parses the Misty2py part of this Misty2pyResponse to a dictionary containing keys `"success"` and, if the value of `"success"` is `False`, the `"error_msg"` (str) and `"error_type"` (str).""" success = self.misty2py_status dct = {"success": success} if not success: dct["error_msg"] = self.error_msg dct["error_type"] = str(self.error_type) return dct
Parses the Misty2py part of this Misty2pyResponse to a dictionary containing keys
"success"
and, if the value of"success"
isFalse
, the"error_msg"
(str) and"error_type"
(str). def get_rest_response(self) ‑> Dict
-
Expand source code
def get_rest_response(self) -> Dict: """Returns the REST API sub-response of this Misty2pyResponse with keys `"success"` and optional keys `"message"` or `"content"`.""" if isinstance(self.rest_response, Dict): dct = self.rest_response.copy() st = dct.pop("status", None) if st == "Success": dct["success"] = True else: dct["success"] = False return dct return self.rest_response
Returns the REST API sub-response of this Misty2pyResponse with keys
"success"
and optional keys"message"
or"content"
. def get_ws_response(self) ‑> Dict
-
Expand source code
def get_ws_response(self) -> Dict: """Returns the WebSocket API sub-response of this Misty2pyResponse.""" return self.ws_response
Returns the WebSocket API sub-response of this Misty2pyResponse.
def parse_to_dict(self) ‑> Dict
-
Expand source code
def parse_to_dict(self) -> Dict: """Parses this Misty2py object into a dictionary. Returns: Dict: A dictionary with keys `"misty2py_response"` (Dict) for the response of the Misty2py package, `"overall_success"` (bool) and optional keys `"rest_response"` (Dict) and `"ws_response"` (Dict). """ dct = { "misty2py_response": self.get_misty2py_response(), "overall_success": self._is_successful(), } if self.rest_response is not None: dct["rest_response"] = self.get_rest_response() if self.ws_response is not None: dct["ws_response"] = self.ws_response return dct
Parses this Misty2py object into a dictionary.
Returns
Dict
- A dictionary with keys
"misty2py_response"
(Dict) for the response of the Misty2py package,"overall_success"
(bool) and optional keys"rest_response"
(Dict) and"ws_response"
(Dict).