Write your client side code in a Jiphy! Jiphy is a two-way Python->JavaScript converter. It's not meant to create executable Python code from complex JavaScript files, or runnable JavaScript from complex Python projects. Instead, Jiphy enables Python programmers to more easily write JavaScript code by allowing them to use more familiar syntax, and even JavaScript developers to more easily write Python code.
As a Python developer you can convert existing code in someone else's project from JavasScript into Python, edit it, and then convert it back before submitting.
Jiphy's Design Objectives:
Write:
import underscore as _
def my_function(argument1, argument2):
if argument1:
del argument2
elif argument2:
print(argument2)
if somevar is someothervar And x is not b: pass
Get:
var _ = require('_');
function my_function(argument1, argument2) {
if (argument1) {
delete argument2;
} else if (argument2) {
console.log(argument2);
}
if (somevar === someothervar && x !== b) {}
}
in a jiphy.
jiphy (pronounced: jiffy) simply stands for JavaScript In, Python Out.
Jiphy is very different from other attempts at Python -> JavaScript conversion for the following reasons:
Jiphy only supports syntax, but with ES6 around the corner should one day support Classes, default arguments, etc.
For instance:
if something is True:
do_something()
print("done")
Is valid as the if statement has a new line after it. However:
if something is True:
do_something()
print("done")
is NOT valid in Jiphy. The lack of a new line makes it impossible to do a 1:1 conversion and still be nicely formatted JS code.
For now, you still have to write var in front of new variables in Jiphy. Jiphy simply does not yet have the smarts to know when it is and when it is not required.
Python | JavaScript | Supported To JavaScript | Supported To Python |
---|---|---|---|
def (...): | function(...) {} | ✓ | ✓ |
if ...: | if (...) {} | ✓ | ✓ |
while ...: | while (...) {} | ✓ | ✓ |
elif ...: | } else if (...) { | ✓ | ✓ |
else: | } else { | ✓ | ✓ |
pass | {} | ✓ | ✓ |
print(...) | console.log(...) | ✓ | ✓ |
True | true | ✓ | ✓ |
False | false | ✓ | ✓ |
None | null | ✓ | ✓ |
Or | || | ✓ | ✓ |
And | && | ✓ | ✓ |
Unset | undefined | ✓ | ✓ |
not | ! | ✓ | ✓ |
is | === | ✓ | ✓ |
del | delete | ✓ | ✓ |
\n | ;\n | ✓ | ✓ |
# comment | // comment | ✓ | ✓ |
str(...) | String(...) | ✓ | ✓ |
bool(...) | Boolean(...) | ✓ | ✓ |
int(...) | Number(...) | ✓ | ✓ |
import pdb; pdb.set_trace() | debugger; | ✓ | ✓ |
try: | try { | ✓ | ✓ |
except | catch | ✓ | ✓ |
except Exception as e | catch(e) | ✓ | ✓ |
.append(...) | .push(...) | ✓ | ✓ |
raise 'error' | throw 'error'; | ✓ | ✓ |
import x | var x = require(x) | ✓ | |
import x as _ | var _ = require(x) | ✓ | |
"String" | 'String' | ✓ | |
"""String""" | 'Str' + 'ing' | ✓ | |
@decorator | f = decorator(f) | ✓ |
Installing jiphy is as simple as:
pip install jiphy
or if you prefer
easy_install jiphy
from the command line:
jiphy mypythonfile.py mypythonfile2.py
or to conform all code to the specified file format
jiphy mypythonfile.js mypythonfile2.js --conform
or recursively:
jiphy -rc .
which is equivalent to
jiphy **/*.py
or recursively conform:
jiphy -rc --conform .
or to see the proposed changes without applying them
jiphy mypythonfile.py --diff
from within Python:
import jiphy
jiphy.to.javascript(python_code)
jiphy.to.python(javascript_code)
Thanks and I hope you find jiphy useful!
~Timothy Crosley