Source code for reactonite.NodeWrapper

import os
import subprocess


[docs]class NodeWrapper: """Node wrapper to execute commands corresponding to node js using python. Attributes ---------- npx : str Commandline to be used for npx according to system(Linux, Windows) npm : str Commandline to be used for npm according to system(Linux, Windows) node : str Commandline to be used for node according to system(Linux, Windows) """ def __init__(self): if os.name == "nt": self.npx = "npx.cmd" self.npm = "npm.cmd" self.node = "node.exe" else: self.npx = "npx" self.npm = "npm" self.node = "node" self.check_react_install()
[docs] def check_react_install(self): """Checks the installation of Nodejs/npm/npx. If npm is not available it throws an error. Raises ------ RuntimeError Raised if Nodejs/npm/npx is not available. """ try: subprocess.run([self.npx, "--version"], shell=False, cwd='.', stdout=subprocess.DEVNULL) except Exception: raise RuntimeError("npx not found. Please install/reinstall node") try: subprocess.run([self.npm, "--version"], shell=False, cwd='.', stdout=subprocess.DEVNULL) except Exception: raise RuntimeError("npm not found. Please install/reinstall node") try: subprocess.run([self.node, "--version"], shell=False, cwd='.', stdout=subprocess.DEVNULL) except Exception: raise RuntimeError("nodejs not found. Please install/reinstall \ node")
# TODO: Log these version numbers
[docs] def install_grapesjs(self, project_dir): cur_dir = project_dir folders = next(os.walk(cur_dir))[1] gui_dir = os.path.join(cur_dir, 'gui') if 'gui' not in folders: os.makedirs('gui') grapesjs_path = 'https://github.com/reactonite/grapesjs/' subprocess.run(['git', 'init'], shell=False, cwd=gui_dir) subprocess.run(['git', 'remote', 'add', 'origin', grapesjs_path], shell=False, cwd=gui_dir) subprocess.run(['git', 'pull', 'origin', 'master'], shell=False, cwd=gui_dir) subprocess.run([self.npm, 'i'], shell=False, cwd=gui_dir)
[docs] def start_grapesjs(self, project_dir): cur_dir = project_dir gui_dir = os.path.join(cur_dir, 'gui') subprocess.run([self.npm, 'start'], shell=False, cwd=gui_dir)
[docs] def create_react_app(self, project_name, rename_to, working_dir='.'): """Creates a new react app and renames it as specified. Parameters ---------- project_name : str Project name to be used to create the app rename_to : str Renames the created React app to this working_dir : str Working dir to run commands inside """ subprocess.run([self.npx, "create-react-app", project_name, "--use-npm", "--template", "cra-template-pwa"], shell=False, cwd=working_dir) src = os.path.join(working_dir, project_name) dest = os.path.join('.', rename_to) os.rename(src, dest)
[docs] def install(self, package_name, working_dir): """Installs the given package in npm and saves in package.json Parameters ---------- package_name : str Package to be installed. working_dir : str Directory containing npm project root """ subprocess.run([self.npm, "i", package_name, "--save"], shell=False, cwd=working_dir)
[docs] def start(self, working_dir): """Runs the command npm start in the given working directory Parameters ---------- working_dir : str Directory to execute the command in. """ subprocess.run([self.npm, "start"], shell=False, cwd=working_dir)
[docs] def build(self, working_dir): """Create an optimized build of your app in the build folder Parameters ---------- working_dir : str Directory containing npm project root """ subprocess.run([self.npm, "run", "build"], shell=False, cwd=working_dir)
[docs] def prettify(self, path, working_dir="."): """Runs code formatting using prettier on the given path Parameters ---------- path : str Filepath or directory to run prettier on working_dir : str Directory from which command is run """ subprocess.run([self.npx, "prettier", "--write", path], shell=False, cwd=working_dir)