Browse Source

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.
Masen Furer 3 months ago
parent
commit
49e48a5a8c
1 changed files with 10 additions and 4 deletions
  1. 10 4
      reflex/custom_components/custom_components.py

+ 10 - 4
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.")