Skip to content

Commit

Permalink
Add Node Version Error Handling (#159)
Browse files Browse the repository at this point in the history
  • Loading branch information
Alek99 authored Dec 22, 2022
1 parent 57e278a commit 429b212
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pynecone/components/feedback/progress.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class Progress(ChakraComponent):
tag = "Progress"

# If true, the progress bar will show stripe
has_striped: Var[bool]
has_stripe: Var[bool]

# If true, and hasStripe is true, the stripes will be animated
is_animated: Var[bool]
Expand Down
2 changes: 2 additions & 0 deletions pynecone/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
PACKAGE_NAME = "pynecone-io"
# The current version of Pynecone.
VERSION = pkg_resources.get_distribution(PACKAGE_NAME).version
# Minimum version of Node.js required to run Pynecone.
MIN_NODE_VERSION = "12.22.0"

# Files and directories used to init a new project.
# The root directory of the pynecone library.
Expand Down
32 changes: 32 additions & 0 deletions pynecone/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
Type,
Union,
)
import typer

import plotly.graph_objects as go
from plotly.io import to_json
Expand Down Expand Up @@ -298,6 +299,28 @@ def get_config() -> Config:
return Config(app_name="")


def check_node_version(min_version):
"""Check the version of Node.js.
Args:
min_version: The minimum version of Node.js required.
Returns:
Whether the version of Node.js is high enough.
"""
try:
# Run the node -v command and capture the output
result = subprocess.run(
["node", "-v"], stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
# The output will be in the form "vX.Y.Z", so we can split it on the "v" character and take the second part
version = result.stdout.decode().strip().split("v")[1]
# Compare the version numbers
return version.split(".") >= min_version.split(".")
except Exception as e:
return False


def get_package_manager() -> str:
"""Get the package manager executable.
Expand All @@ -306,7 +329,16 @@ def get_package_manager() -> str:
Raises:
FileNotFoundError: If bun or npm is not installed.
Exit: If the app directory is invalid.
"""
# Check that the node version is valid.
if not check_node_version(constants.MIN_NODE_VERSION):
console.print(
f"[red]Node.js version {constants.MIN_NODE_VERSION} or higher is required to run Pynecone."
)
raise typer.Exit()

# On Windows, we use npm instead of bun.
if platform.system() == "Windows":
npm_path = which("npm")
Expand Down

0 comments on commit 429b212

Please sign in to comment.