From ead2796c34214c3ac2c2a1511e5b7086528ffe85 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 5 Feb 2025 16:15:23 -0800 Subject: [PATCH] Resolve custom component version dynamically (#4759) If the custom component is using setuptools_scm or some other dynamic versioning scheme, use `build.util` to get the actual version being published. --- reflex/custom_components/custom_components.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/reflex/custom_components/custom_components.py b/reflex/custom_components/custom_components.py index a54004803..6bb428072 100644 --- a/reflex/custom_components/custom_components.py +++ b/reflex/custom_components/custom_components.py @@ -14,7 +14,7 @@ from typing import Optional, Tuple import httpx import tomlkit import typer -from tomlkit.exceptions import TOMLKitError +from tomlkit.exceptions import NonExistentKey, TOMLKitError from reflex import constants from reflex.config import environment, get_config @@ -533,7 +533,13 @@ def _get_version_to_publish() -> str: Returns: The version to publish. """ - return _get_package_config()["project"]["version"] + try: + return _get_package_config()["project"]["version"] + except NonExistentKey: + # Try to get the version from dynamic sources + import build.util + + return build.util.project_wheel_metadata(".", isolated=True)["version"] def _ensure_dist_dir(version_to_publish: str, build: bool): @@ -756,7 +762,7 @@ def _min_validate_project_info(): ) raise typer.Exit(code=1) - if not project.get("version"): + if not project.get("version") and "version" not in project.get("dynamic", []): console.error( f"The project version is not found in {CustomComponents.PYPROJECT_TOML}" ) @@ -772,7 +778,7 @@ def _validate_project_info(): pyproject_toml = _get_package_config() project = pyproject_toml["project"] console.print( - f"Double check the information before publishing: {project['name']} version {project['version']}" + f"Double check the information before publishing: {project['name']} version {_get_version_to_publish()}" ) console.print("Update or enter to keep the current information.")