Skip to content

Commit

Permalink
fix: Improve error handling at startup (#5994)
Browse files Browse the repository at this point in the history
* fix: Handle network errors when fetching version notice

Catch and handle potential network connection errors when attempting to build the version notice, preventing potential startup failures due to version check issues

* refactor: Improve version check error handling and add docstring

Enhance version notice function by:
- Adding comprehensive docstring with description, args, returns, and example
- Using contextlib.suppress to handle network errors
- Removing redundant try-except block in print_banner
- Simplifying version check logic

* refactor: Improve telemetry error logging

Change telemetry service error logging from `logger.exception()` to `logger.error()` to reduce verbosity and prevent unnecessary stack trace printing

* refactor: Remove unnecessary logger import in version utility

Remove unused logger import and exception logging in version check function to simplify error handling and reduce unnecessary logging
  • Loading branch information
ogabrielluiz authored Jan 29, 2025
1 parent e0f5cfc commit c7584d8
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 10 deletions.
28 changes: 24 additions & 4 deletions src/backend/base/langflow/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import sys
import time
import warnings
from contextlib import suppress
from pathlib import Path

import click
Expand Down Expand Up @@ -312,10 +313,28 @@ def get_letter_from_version(version: str) -> str | None:


def build_version_notice(current_version: str, package_name: str) -> str:
latest_version = fetch_latest_version(package_name, include_prerelease=langflow_is_pre_release(current_version))
if latest_version and pkg_version.parse(current_version) < pkg_version.parse(latest_version):
release_type = "pre-release" if langflow_is_pre_release(latest_version) else "version"
return f"A new {release_type} of {package_name} is available: {latest_version}"
"""Build a version notice message if a newer version is available.
This function checks if there is a newer version of the package available on PyPI
and returns an appropriate notice message.
Args:
current_version (str): The currently installed version of the package
package_name (str): The name of the package to check
Returns:
str: A notice message if a newer version is available, empty string otherwise.
The message will indicate if the newer version is a pre-release.
Example:
>>> build_version_notice("1.0.0", "langflow")
'A new version of langflow is available: 1.1.0'
"""
with suppress(httpx.ConnectError):
latest_version = fetch_latest_version(package_name, include_prerelease=langflow_is_pre_release(current_version))
if latest_version and pkg_version.parse(current_version) < pkg_version.parse(latest_version):
release_type = "pre-release" if langflow_is_pre_release(latest_version) else "version"
return f"A new {release_type} of {package_name} is available: {latest_version}"
return ""


Expand Down Expand Up @@ -347,6 +366,7 @@ def print_banner(host: str, port: int) -> None:
is_pre_release |= langflow_is_pre_release(langflow_version) # Update pre-release status

notice = build_version_notice(langflow_version, package_name)

notice = stylize_text(notice, package_name, is_prerelease=is_pre_release)
if notice:
notices.append(notice)
Expand Down
6 changes: 3 additions & 3 deletions src/backend/base/langflow/services/telemetry/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@ async def send_telemetry_data(self, payload: BaseModel, path: str | None = None)
else:
logger.debug("Telemetry data sent successfully.")
except httpx.HTTPStatusError:
logger.exception("HTTP error occurred")
logger.error("HTTP error occurred")
except httpx.RequestError:
logger.exception("Request error occurred")
logger.error("Request error occurred")
except Exception: # noqa: BLE001
logger.exception("Unexpected error occurred")
logger.error("Unexpected error occurred")

async def log_package_run(self, payload: RunPayload) -> None:
await self._queue_event((self.send_telemetry_data, payload, "run"))
Expand Down
3 changes: 0 additions & 3 deletions src/backend/base/langflow/utils/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import httpx
from packaging import version as pkg_version

from langflow.logging.logger import logger


def _compute_non_prerelease_version(prerelease_version: str) -> str:
prerelease_keywords = ["a", "b", "rc", "dev", "post"]
Expand Down Expand Up @@ -86,7 +84,6 @@ def fetch_latest_version(package_name: str, *, include_prerelease: bool) -> str
return max(valid_versions, key=pkg_version.parse)

except Exception: # noqa: BLE001
logger.exception("Error fetching latest version")
return None


Expand Down

0 comments on commit c7584d8

Please sign in to comment.