| name | py2py3-converter | ||||||
|---|---|---|---|---|---|---|---|
| description | Automatically converts legacy Python 2 code to Python 3 with compatibility checks and test generation. | ||||||
| version | 1.0.0 | ||||||
| triggers |
|
py2py3-converter is an OpenClaw skill that automatically converts legacy Python 2 code to modern Python 3 syntax. It handles the most common migration patterns, generates compatibility reports, and creates unit tests for the converted code.
Python 2 reached end-of-life on January 1, 2020, yet many codebases still contain Python 2 code. This skill automates the tedious work of manual migration, reducing human error and accelerating the upgrade process.
The converter handles these Python 2 → 3 transformations:
printstatements →print()function callsraw_input()→input()xrange()→range()unicode()→str()basestring→strlongtype →intdict.has_key(k)→k in dictexcept Exception, e→except Exception as eraise ValueError, "msg"→raise ValueError("msg")- Integer division
/awareness __future__import removaliteritems()/itervalues()/iterkeys()→items()/values()/keys()reduce()→functools.reduce()
After conversion, a compatibility report is generated listing:
- Warnings for patterns that may need manual review
- Errors for constructs that could not be safely converted
- Informational notes about behavior changes
For each converted file, a companion pytest test file is generated that:
- Validates syntax correctness of converted code
- Tests key functions for expected behavior
- Covers detected edge cases
print "hello"→print("hello")print "a", "b"→print("a", "b")print >> sys.stderr, "err"→print("err", file=sys.stderr)print()already valid → left unchanged
u"string"prefix →"string"(default in Python 3)- Warns about
b"bytes"patterns that may need review basestringreferences →str
from __future__ import print_function→ removed (default in Python 3)import urllib2→import urllib.requestimport ConfigParser→import configparserreduce→ addsfrom functools import reduce
# Convert a file
node scripts/cli.js convert --input path/to/py2file.py --output path/to/py3file.py
# Convert from stdin
cat py2file.py | node scripts/cli.js convert
# Convert and generate tests
node scripts/cli.js convert --input file.py --output converted.py --generate-tests
# Show compatibility report only
node scripts/cli.js check --input file.py0- Conversion successful, no errors1- Conversion completed with warnings2- Conversion failed due to errors
Agents invoke the skill via the CLI interface. The standard workflow:
- Agent receives Python 2 code from user
- Agent calls
node scripts/cli.js convert --input <file> - Skill returns converted code + compatibility report
- Agent presents results to user
Input:
{
"code": "print 'hello world'",
"options": {
"generateTests": false,
"keepWarnings": true
}
}Output:
{
"convertedCode": "print('hello world')",
"issues": [
{
"type": "info",
"line": 1,
"message": "Converted print statement to function call"
}
]
}