infiniflow/ragflow · error · ConnectorValidationError

Unexpected error during Dropbox settings validation: {e}

Error message

Unexpected error during Dropbox settings validation: {e}

What it means

Catch-all raised by validate_connector_settings() when files_list_folder throws anything other than AuthError/ApiError: network timeouts, DNS failures, SSL errors, rate limiting surfaced as generic exceptions. The original exception text is embedded; e.user_message_text is not available on this path, so raw {e} is shown.

Source

Thrown at common/data_source/dropbox_connector.py:55

        self.dropbox_client = Dropbox(access_token)
        return None

    def validate_connector_settings(self) -> None:
        """Validate Dropbox connector settings"""
        if self.dropbox_client is None:
            raise ConnectorMissingCredentialError("Dropbox")

        try:
            self.dropbox_client.files_list_folder(path="", limit=1)
        except AuthError as e:
            logger.exception("[Dropbox]: Failed to validate Dropbox credentials")
            raise ConnectorValidationError(f"Dropbox credential is invalid: {e}")
        except ApiError as e:
            if e.error is not None and "insufficient_permissions" in str(e.error).lower():
                raise InsufficientPermissionsError("Your Dropbox token does not have sufficient permissions.")
            raise ConnectorValidationError(f"Unexpected Dropbox error during validation: {e.user_message_text or e}")
        except Exception as e:
            raise ConnectorValidationError(f"Unexpected error during Dropbox settings validation: {e}")

    def _download_file(self, path: str) -> bytes:
        """Download a single file from Dropbox."""
        if self.dropbox_client is None:
            raise ConnectorMissingCredentialError("Dropbox")
        _, resp = self.dropbox_client.files_download(path)
        return resp.content

    def _get_shared_link(self, path: str) -> str:
        """Create a shared link for a file in Dropbox."""
        if self.dropbox_client is None:
            raise ConnectorMissingCredentialError("Dropbox")

        try:
            shared_links = self.dropbox_client.sharing_list_shared_links(path=path)
            if shared_links.links:
                return shared_links.links[0].url

View on GitHub (pinned to 554fb1133a)

Solutions

  1. Inspect the embedded {e}: connection/SSL errors point to network egress, not credentials
  2. Test reachability: curl -v https://api.dropboxapi.com/2/files/list_folder from the connector host
  3. Add the proxy CA to the host trust store or configure HTTPS_PROXY for the connector process
  4. If transient (rate limit), retry validation after a backoff
Defensive patterns

Strategy: retry

Validate before calling

import requests
requests.head('https://api.dropboxapi.com', timeout=5)  # fail early on egress problems

Try / catch

try:
    connector.validate_connector_settings()
except ConnectorValidationError as e:
    if is_transient(str(e)):  # timeout / rate limit heuristics
        time.sleep(backoff)
        connector.validate_connector_settings()
    else:
        raise

Prevention

When it happens

Trigger: Connector host cannot reach api.dropboxapi.com (firewall, proxy, VPN); TLS interception with an untrusted CA; transient 429/5xx wrapped by the SDK.

Common situations: Self-hosted Onenyx behind an egress proxy; corporate MITM certificates; sandboxed CI without network access.

Related errors


AI-assisted analysis of infiniflow/ragflow@554fb1133a (2026-08-15). Data as JSON: /api/errors/380bbeeb1e06b92e. Report an issue: GitHub.