docs: def scrub(data):
      """Verify and clean data. Raise error if input fails."""
      # blanks, Nones, and empty strings can stay as is
      if not data:
          return data
      if isinstance(data, (int, float)):
          return data
      if isinstance(data, list):
          return [scrub(entry) for entry in data]
      if isinstance(data, dict):
          return {scrub(key): scrub(value) for key, value in data.items()}
      try:
          return json.encoder.encode_basestring(data)[1:-1]
      except TypeError as exc:
          raise ValidationError("Input '%s' is not a permitted type: %s" % (data,
                                                                            exc))
      except Exception as exc:
          raise ValidationError("Input '%s' not permitted: %s" % (data, exc))