Module misty2py.basic_skills.free_memory
This module removes non-system files from Misty's memory.
Functions
def delete_assets(misty: Misty,
assets: Dict,
ignore_list: List = []) ‑> List[str]-
Expand source code
def delete_assets(misty: Misty, assets: Dict, ignore_list: List = []) -> List[str]: """Deletes all non-system files except those that are in `ignore_list`. Args: misty (Misty): the Misty whose assets to delete. assets (Dict): The dictionary of assets; a list of file names under their asset type as the keyword. ignore_list (List, optional): The list of file names for files that should not be deleted. Defaults to `[]`. Returns: List[str]: The list of files that were succesfully deleted. """ action = "_delete" delete_list = [] for asset_type, files in assets.items(): for file in files: if file not in ignore_list: if asset_type == "recording": data = {"Name": file} else: data = {"FileName": file} response = misty.perform_action( asset_type + action, data=data ).parse_to_dict() response = response.get("rest_response", {}) status = response.get("success") if status: print("Successfully deleted the asset `%s`." % file) delete_list.append(file) else: print( "Failed to delete the asset `%s`. Message: `%s`" % (file, response) ) return delete_list
Deletes all non-system files except those that are in
ignore_list
.Args
misty
:Misty
- the Misty whose assets to delete.
assets
:Dict
- The dictionary of assets; a list of file names under their asset type as the keyword.
ignore_list
:List
, optional- The list of file names for files that should not be deleted. Defaults to
[]
.
Returns
List[str]
- The list of files that were succesfully deleted.
def free_memory(misty: Misty,
assets: List = ['audio', 'image', 'video', 'recording'],
save: bool = True,
overwrite: bool = False,
save_dir: str = 'data') ‑> Dict-
Expand source code
def free_memory( misty: Misty, assets: List = ["audio", "image", "video", "recording"], save: bool = True, overwrite: bool = False, save_dir: str = "data", ) -> Dict: """Removes all non-system files in Misty's memory. Args: misty (Misty): the Misty whose memory to free. assets (List, optional): The list of asset types to delete. Defaults to `["audio", "image", "video", "recording"]`. save (bool, optional): Whether to save the files that are being deleted from Misty's memory. Defaults to `True`. overwrite (bool): Whether the overwrite the file if it exists. Defaults to `False`. save_dir (str, optional): The path to the directory that will store saved assets. Defaults to `"data"`. Returns: Dict: a dictionary with the key `overall_success` specifying whether all actions were successful and a key for every action containing the dictionarised Misty2pyResponse to that action. """ save_dir = get_abs_path(save_dir) enable_audio = misty.perform_action("audio_enable").parse_to_dict() enable_av = misty.perform_action("streaming_av_enable").parse_to_dict() enable_camera = misty.perform_action("camera_enable").parse_to_dict() assets_to_delete = get_non_system_assets(misty, assets=assets) deletion = {} if len(assets_to_delete) == 0: deletion["success"] = True deletion["message"] = "No non-system files present." else: failed_to_save_list = [] if save: failed_to_save_list = save_assets( misty, assets_to_delete, save_dir, overwrite ) deleted = delete_assets(misty, assets_to_delete, failed_to_save_list) if len(deleted) > 0: deletion["success"] = True deletion["message"] = "Successfully deleted following assets: %s" % str( deleted ) else: deletion["success"] = False deletion["message"] = "Failed to delete any assets." disable_audio = misty.perform_action("audio_disable").parse_to_dict() disable_av = misty.perform_action("streaming_av_disable").parse_to_dict() disable_camera = misty.perform_action("camera_disable").parse_to_dict() return success_of_action_dict( enable_audio=enable_audio, enable_av=enable_av, enable_camera=enable_camera, deletion={ "overall_success": deletion["success"], "misty2py_response": deletion, }, disable_audio=disable_audio, disable_av=disable_av, disable_camera=disable_camera, )
Removes all non-system files in Misty's memory.
Args
misty
:Misty
- the Misty whose memory to free.
assets
:List
, optional- The list of asset types to delete. Defaults to
["audio", "image", "video", "recording"]
. save
:bool
, optional- Whether to save the files that are being deleted from Misty's memory. Defaults to
True
. overwrite
:bool
- Whether the overwrite the file if it exists. Defaults to
False
. save_dir
:str
, optional- The path to the directory that will store saved assets. Defaults to
"data"
.
Returns
Dict
- a dictionary with the key
overall_success
specifying whether all actions were successful and a key for every action containing the dictionarised Misty2pyResponse to that action.
def get_asset_properties(asset_type: str, file: str) ‑> Tuple[Dict, str, str]
-
Expand source code
def get_asset_properties(asset_type: str, file: str) -> Tuple[Dict, str, str]: """Obtains the parameters, the name and the extension of a file. Args: asset_type (str): The type of the asset. file (str): The file name. Returns: Tuple[Dict, str, str]: the parameters (a dict with keys `Name` for recordings or `FileName` for other asset types containing the name and the key `Base64` set to `"true"`), the file name and the file extension. """ if asset_type == "recording": params = {"Name": file, "Base64": "true"} else: params = {"FileName": file, "Base64": "true"} split_file_name = file.split(".") name = split_file_name[0] if len(split_file_name) > 1: ext = split_file_name[1] else: ext = "unknown" return params, name, ext
Obtains the parameters, the name and the extension of a file.
Args
asset_type
:str
- The type of the asset.
file
:str
- The file name.
Returns
Tuple[Dict, str, str]
- the parameters (a dict with keys
Name
for recordings orFileName
for other asset types containing the name and the keyBase64
set to"true"
), the file name and the file extension.
def get_non_system_assets(misty: Misty,
assets: List = ['audio', 'image', 'video', 'recording']) ‑> Dict-
Expand source code
def get_non_system_assets( misty: Misty, assets: List = ["audio", "image", "video", "recording"], ) -> Dict: """Obtains the list of all non-system assets that fall under one of the `assets` types. Args: misty (Misty): The Misty whose non system assets to obtain. assets (List, optional): The types of assets to obtain. Defaults to `["audio", "image", "video", "recording"]`. Returns: Dict: all non-system assets of a given type (keywords) listed as their names in the list under the type keyword. """ action = "_list" non_sys_assets = {} for asset in assets: data = misty.get_info(asset + action).parse_to_dict() data = data.get("rest_response", {}) result = data.get("result", []) for hit in result: name = hit.get("name") if not name: continue is_system = hit.get("systemAsset", True) if not is_system: if not non_sys_assets.get(asset): non_sys_assets[asset] = [] non_sys_assets[asset].append(name) print( "Found a non-system asset of type `%s` named `%s`." % (asset, name) ) return non_sys_assets
Obtains the list of all non-system assets that fall under one of the
assets
types.Args
misty
:Misty
- The Misty whose non system assets to obtain.
assets
:List
, optional- The types of assets to obtain. Defaults to
["audio", "image", "video", "recording"]
.
Returns
Dict
- all non-system assets of a given type (keywords) listed as their names in the list under the type keyword.
def save_assets(misty: Misty,
assets: Dict,
location: str,
overwrite: bool) ‑> List[str]-
Expand source code
def save_assets( misty: Misty, assets: Dict, location: str, overwrite: bool ) -> List[str]: """Saves multiple assets. Args: misty (Misty): the Misty whose assets to save. assets (Dict): The dictionary of assets; a list of file names under their asset type as the keyword. location (str): The absolute path to the directory where the assets are saved. overwrite (bool): Whether the overwrite the file if it exists. Returns: List[str]: A list of file names for the files that failed to be saved. """ failed_list = [] action = "_file" for asset_type, files in assets.items(): for file in files: params, name, ext = get_asset_properties(asset_type, file) response = misty.get_info( asset_type + action, params=params ).parse_to_dict() response = response.get("rest_response", {}) result = response.get("result") if not result: failed_list.append(file) else: file_name = "%s_%s_%s_in_base64.txt" % (asset_type, name, ext) full_path = os.path.join(location, file_name) file_content = result.get("base64") if not file_content: failed_list.append(file) else: success = save_base64_str(full_path, file_content, overwrite) if not success: failed_list.append(file) return failed_list
Saves multiple assets.
Args
misty
:Misty
- the Misty whose assets to save.
assets
:Dict
- The dictionary of assets; a list of file names under their asset type as the keyword.
location
:str
- The absolute path to the directory where the assets are saved.
overwrite
:bool
- Whether the overwrite the file if it exists.
Returns
List[str]
- A list of file names for the files that failed to be saved.
def save_base64_str(full_path: str, content: str, overwrite: bool) ‑> bool
-
Expand source code
def save_base64_str(full_path: str, content: str, overwrite: bool) -> bool: """Saves an asset content to the file specified by `full_path`. Args: full_path (str): The absolute path to the save location. content (str): The base64 content to save. overwrite (bool): Whether the overwrite the file if it exists. Returns: bool: The successfulness of the operation. """ if not overwrite and os.path.exists(full_path): print("File `%s` already exists, not overwriting." % full_path) return True try: with open(full_path, "w") as f: f.write(content) print("Asset saved into `%s`." % full_path) return True except Exception as e: print( "Failed to save the asset into `%s`. Error message: `%s`" % (full_path, e) ) return False
Saves an asset content to the file specified by
full_path
.Args
full_path
:str
- The absolute path to the save location.
content
:str
- The base64 content to save.
overwrite
:bool
- Whether the overwrite the file if it exists.
Returns
bool
- The successfulness of the operation.