fix: Improve error handling at startup (#5994)
* 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
This commit is contained in:
parent
e0f5cfccd8
commit
c7584d8733
3 changed files with 27 additions and 10 deletions
|
|
@ -7,6 +7,7 @@ import socket
|
|||
import sys
|
||||
import time
|
||||
import warnings
|
||||
from contextlib import suppress
|
||||
from pathlib import Path
|
||||
|
||||
import click
|
||||
|
|
@ -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 ""
|
||||
|
||||
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -72,11 +72,11 @@ class TelemetryService(Service):
|
|||
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"))
|
||||
|
|
|
|||
|
|
@ -3,8 +3,6 @@ from importlib import metadata
|
|||
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"]
|
||||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue