Metadata-Version: 2.4
Name: py-node-manager
Version: 0.1.2
Summary: A tool library for conveniently using Node.js in Python
Author-email: insistence <3055204202@qq.com>
Project-URL: Homepage, https://github.com/HogaStack/py-node-manager
Project-URL: Documentation, https://github.com/HogaStack/py-node-manager
Project-URL: Repository, https://github.com/HogaStack/py-node-manager
Project-URL: Issues, https://github.com/HogaStack/py-node-manager/issues
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: dev
Requires-Dist: build; extra == "dev"
Requires-Dist: pytest>=6.0.0; extra == "dev"
Requires-Dist: pytest-cov>=2.10.0; extra == "dev"
Requires-Dist: twine; extra == "dev"
Dynamic: license-file

# py-node-manager

A tool library for conveniently using Node.js in Python.

[![Tests](https://github.com/HogaStack/py-node-manager/workflows/Tests/badge.svg)](https://github.com/HogaStack/py-node-manager/actions)
[![Coverage](https://codecov.io/gh/HogaStack/py-node-manager/branch/main/graph/badge.svg)](https://codecov.io/gh/HogaStack/py-node-manager)
[![GitHub](https://shields.io/badge/license-MIT-informational)](https://github.com/HogaStack/py-node-manager/blob/main/LICENSE)
[![PyPI](https://img.shields.io/pypi/v/py-node-manager.svg?color=dark-green)](https://pypi.org/project/py-node-manager/)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)

English | [简体中文](./README-zh_CN.md)

## Installation

```bash
pip install py-node-manager
```

## Usage

### Basic Usage

```python
from py_node_manager import NodeManager

# Create NodeManager instance
# download_node=True means automatically download Node.js if not found in system
# node_version specifies the Node.js version to download
manager = NodeManager(download_node=True, node_version='18.17.0')

# Get paths to Node.js, npm, and npx
node_path = manager.node_path  # Path to downloaded Node.js, None if using system Node.js
npm_path = manager.npm_path    # Path to npm
npx_path = manager.npx_path    # Path to npx

# Get environment variables (if using downloaded Node.js)
node_env = manager.node_env    # Environment variables dictionary
```

### Running Node.js Commands

```python
import subprocess
from py_node_manager import NodeManager

manager = NodeManager(download_node=True, node_version='18.17.0')

# Run Node.js commands
result = subprocess.run(
    [manager.npm_path, 'init', '-y'],
    env=manager.node_env,
    capture_output=True,
    text=True
)
print(result.stdout)
```

### Without Automatic Node.js Download

```python
from py_node_manager import NodeManager

# Will raise an exception if Node.js is not found in the system
manager = NodeManager(download_node=False, node_version='18.17.0')
```

## Testing

This project uses pytest for testing with 100% code coverage.

### Running Tests

To run the tests in the conda environment:

```bash

# Install dependencies
pip install -e .
pip install -r requirements-dev.txt

# Run tests
pytest tests/ -v

# Run tests with coverage report
pytest tests/ --cov=py_node_manager --cov-report=term-missing
```

### Test Structure

- `tests/test_node_manager.py` - Complete test suite for NodeManager class
- `tests/conftest.py` - pytest configuration
- `tests/__init__.py` - Package initialization

All code paths are tested including:

- Normal execution paths
- Error handling scenarios
- Platform-specific behaviors
- CLI mode logging
- Cached Node.js usage
