def format_request_kwargs()

in footmark/connection.py [0:0]


    def format_request_kwargs(self, **kwargs):
        for key, value in list(kwargs.items()):
            # Format the following parameter to JSON
            if key in ["instance_ids", "disk_ids", "execution_ids", "parameters"]:
                if not value:
                    continue
                kwargs[key] = json.dumps(value)
            if key in ["page_size", "page_number"]:
                try:
                    if value and int(value):
                        kwargs[key] = json.dumps(int(value))
                    continue
                except Exception as e:
                    raise e
            # Convert Tags
            if key == "tags":
                kwargs[key] = self.convert_tags(value)

            # Base64 userdata
            if key == "user_data":
                if not value:
                    continue
                if isinstance(value, str):
                    value = value.encode('ascii')
                try:
                    if base64.b64encode(base64.b64decode(value)) != value:
                        kwargs[key] = base64.b64encode(value)
                except:
                    kwargs[key] = base64.b64encode(value)

        # Add 'Action' parameter. Using inspect.stack()[1][3] gets invoking method name
        action = self.underscore_to_studlycaps(inspect.stack()[1][3])
        if action in ["CreateInstances", "StartInstances", "StopInstances", "RebootInstances", "DeleteInstances"]:
            action = action[:-1]
        kwargs["Action"] = action

        # Add 'ClientToken' parameter
        kwargs["client_token"] = self.build_client_token(action)

        return kwargs