def get_keystrokes_with_args()

in mm_action_prediction/tools/extract_actions.py [0:0]


def get_keystrokes_with_args(raw_keystroke_list, price_dict):
    """Gets the keystrokes + args from the raw keystrokes in the logs after some processing

    Args:
        raw_keystroke_list: list extracted from the logs
        price_dict : dict from furniture type to the default min & max prices

    Returns:
        list of keystrokes where each keystroke is an api name + corresponding args
    """
    keystrokes_with_args = []
    for stroke in raw_keystroke_list:
        keystroke = json.loads(stroke)[ACTION_NAME]

        if keystroke == SEARCH_FURNITURE:
            furniture_type_arg = json.loads(stroke)[ACTION_METADATA][FURNITURE_TYPE]

            if furniture_type_arg != "":
                action_metadata = json.loads(stroke)[ACTION_METADATA]

                # check if the prices are close to the default populated prices.
                # if yes, replace by -1
                min_price_arg = action_metadata[MIN_PRICE]
                max_price_arg = action_metadata[MAX_PRICE]
                if math.isclose(
                    min_price_arg, price_dict[furniture_type_arg][0], abs_tol=0.9
                ):
                    action_metadata[MIN_PRICE] = -1
                if math.isclose(
                    max_price_arg, price_dict[furniture_type_arg][1], abs_tol=0.9
                ):
                    action_metadata[MAX_PRICE] = -1
                keystrokes_with_args.append(
                    {
                        API: keystroke,
                        NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                        PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                        ARGS: action_metadata,
                    }
                )

        elif keystroke == BRING_OBJECT_TO_FOCUS:
            keystrokes_with_args.append(
                {
                    API: keystroke,
                    NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                    PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                    ARGS: json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS],
                }
            )
        elif keystroke.startswith(ROTATE):
            if (
                json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS] is not None
                and json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS] != ""
            ):
                keystrokes_with_args.append(
                    {
                        API: keystroke,
                        NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                        PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                        ARGS: json.loads(stroke)[NEXT_STATE][PREFAB_IN_FOCUS],
                    }
                )
            else:
                keystrokes_with_args.append(
                    {
                        API: keystroke,
                        NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                        PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                        ARGS: json.loads(stroke)[NEXT_STATE]["sharedPrefabInFocus"],
                    }
                )
        elif keystroke == FURNITURE_CLICK:
            keystrokes_with_args.append(
                {
                    API: keystroke,
                    NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                    PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                    ARGS: get_args_for_furniture_click(stroke),
                }
            )
        elif keystroke == SHARE:
            keystrokes_with_args.append(
                {
                    API: keystroke,
                    NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                    PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                    ARGS: None,
                }
            )
            # fix some PREVIOUS_STATE log strangeness
            keystrokes_with_args[-1][PREVIOUS_STATE][PREFAB_IN_FOCUS] = \
                keystrokes_with_args[-1][NEXT_STATE][SHARED_FOCUS]
            keystrokes_with_args[-1][PREVIOUS_STATE][PREFABS_IN_CAROUSEL] = \
                keystrokes_with_args[-1][NEXT_STATE][SHARED_CAROUSEL]
        else:
            keystrokes_with_args.append(
                {
                    API: keystroke,
                    NEXT_STATE: json.loads(stroke)[NEXT_STATE],
                    PREVIOUS_STATE: json.loads(stroke)[PREVIOUS_STATE],
                    ARGS: None,
                }
            )
    return keystrokes_with_args