docs: def _apply_param_actions(self, params, schema_params):
          """Traverse a schema and perform the updates it describes to params."""
  
          for key, val in schema_params.items():
              if key not in params:
                  continue
  
              if isinstance(val, dict):
                  self._apply_param_actions(params[key], schema_params[key])
              elif isinstance(val, ResourceId):
                  resource_id = val
  
                  # Callers can provide ints as ids.
                  # We normalize them to strings so that actions don't get confused.
                  params[key] = str(params[key])
  
                  resource_id.action(params, schema_params, key,
                                     resource_id, self.state, self.options)
              else:
                  logger.error("Invalid value in schema params: %r. schema_params: %r and params: %r",
                               val, schema_params, params)