Goal: The Easiest Way to Run JavaScript in Python
Project description
run-js
Goal: The Easiest Way to Run JavaScript in Python
features
- Stateless
- Async JS Functions
- No Intermediary Files
- Functional Programming
- CommonJS and ES6 Modules
- Automatic JSON Conversion
- Clear Installation Prompts
install
pip install run-js
usage
# import the package from JavaScript into Python
from js import lodash
# access a function as an attribute
result = lodash.uniq([1, 2, 2, 3, 3, 3])
# result is [1, 2, 3]
Frequently Asked Questions
what if my JavaScript package has a dash in the name?
Python doesn't allow -
in import statements, so js
is also a dictionary.
import js
fastMin = js['fast-min']
result = fastMin([1, 2, 2, 3, 3, 3])
// result is 1
do I need to understand JavaScript packaging?
If you try to run a JavaScript package and it isn't installed, run-js will automatically provide you a prompt to install it. You don't have to learn NPM's package.json format.
do I need to install NodeJS?
Yes, you currently must install NodeJS on your system before using run-js. The NPM CLI is also required, but usually comes with the NodeJS installation. If you are using MacOS, you can install it with brew install node
. We will try to add friendly prompts to install NodeJS in the future. (It's a little complicated because of all the different platforms to support.)
limitations
only json-serializable input
run-js currently only supports running functions that accept JSON-serializable input. In other words, you can only call a function that accepts numbers, string, arrays, and simple objects. You can't pass functions or sets as a parameter. (We may try to fix this in the future, but only if it can be done securely.)
stateless
For security reasons, run-js doesn't keep a JavaScript process running in the background. Therefore, you can't chain JavaScript function calls.
more examples
import js
# calculate statistics
js['calc-stats']([291, 1723, 74, 741, 93, 84, 19])
{ "min": 1, "max": 100, "mean": 66.25, "median": 70, "mode": 95, "modes": [90, 100], "sum": 328350, "histogram": { ... } }
# run-length decoding
js['fast-rle/decode']([5, 3, 1, 8, 2, 0])
[3, 3, 3, 3, 3, 8, 0, 0]
# reprojecting geospatial bounding boxes
js["reproject-bbox"]({"bbox": [-122.51, 40.97, -122.34, 41.11], "from": 4326, "to": 3857})
[-13637750.817083945, 5007917.677222896, -13618826.503649088, 5028580.202823918 ]
# clipping hyperrectangle (multi-dimensional rectangle) from imagery data
js['xdim'].clip({ "data": [0, 123, 123, 255, ...], "layout": "[row,column,band]", "sizes": {"band": 4, "row": 768, "column": 1024 }, "rect": { "band": [2,2], "row": [20, 219], "column": [47, 211]}})
[213, 542, 521, 481, ...]
necessary disclaimer
Use at your own risk.
thanks
This project was partially inspired by the awesome Python package called sh.
support
Email the library author at daniel.j.dufour@gmail.com or post an issue at https://github.com/DanielJDufour/run-js/issues
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file run-js-0.0.4.tar.gz
.
File metadata
- Download URL: run-js-0.0.4.tar.gz
- Upload date:
- Size: 8.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.0.1 pkginfo/1.5.0.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.50.0 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f59f7da6114d5b9c947ff0474cbc7a68fc9869207f810ed4131e8f7327eb549 |
|
MD5 | 366b848b29c89949b61dd2a2cc539722 |
|
BLAKE2b-256 | 9b71bcc9efe2889e2f94ad4270edc894644fedc7fda00dd2f1d34c3d36635ca2 |