Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Node Version Error Handling #159

Merged
merged 6 commits into from
Dec 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need this line either if we don't cast to int

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually need this line because the output has v

# 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