Precision import refactoring tool — rewrite, migrate, and sanitize Python imports project-wide with safety and accuracy.
Project description
import-surgeon 🩺⚙️
Precision Python import refactoring — safe, atomic, AST-exact, rollback-friendly.
🧠 Overview
import-surgeon is an Elite import refactoring engine for Python codebases.
It precisely updates imports and moves symbols across modules without breaking your code, using full LibCST AST guarantees, backup files, atomic writes, and optional auto-formatting.
Think of it as libcst + git-protection + atomic rollback-safe refactor surgery
Use it for:
✅ Package restructures ✅ Module renames ✅ Moving functions/classes between files ✅ Gradual API migrations ✅ Org-wide import cleanup ✅ CI-safe automated refactors
No regex. No AST guessing. No broken imports.
✨ Features
Capability Description
Accurate import rewrites LibCST powered symbol movement (AST-exact) Dotted name rewrites old.module.Foo → new.module.Foo if --rewrite-dotted Atomic file updates Guaranteed atomic writes + metadata restore Auto backup & rollback --no-backup optional; --rollback supported Supports aliases from A import Foo as Bar handled correctly Respects relative imports --force-relative + auto base-package detection Batch migrations YAML config for multi-module migrations Safe in CI --require-clean-git to prevent dirty changes Git auto-commit --auto-commit "msg" Optional format Black + isort applied after changes Warnings for risky spots Wildcards, dotted patterns, skipped rel imports Progress bar tqdm fallback built-in
📦 Installation
pip install import-surgeon
Optional but recommended:
pip install black isort chardet tqdm
🛠 Usage
Basic dry-run (default)
import-surgeon --old-module utils --new-module core.utils --symbols load,save
Apply changes
import-surgeon --old-module old.pkg --new-module new.pkg --symbols Foo,Bar --apply
Rewrite dotted usages too
import-surgeon --apply --rewrite-dotted
--old-module old.mod --new-module new.mod --symbols Client
Use YAML migrations file
migrate.yml
migrations:
- old_module: old.auth new_module: services.auth symbols: [User, Token]
Run:
import-surgeon --config migrate.yml --apply
Rollback a refactor
import-surgeon --rollback --summary-json summary.json
🧪 Example Output
✔️ New imports inserted ✔️ Old imports removed ✔️ Diff preview in dry-run ✔️ JSON report with file list, change lines & risks
🔒 Safety Guarantees
Dry run by default
File backups by default
Atomic writes (no corruption)
Git-clean check option
Per-file encoding detection
Refuses unsafe wildcard rewrites unless configured
🧠 CLI Options (summary)
Flag Meaning
--old-module Old module to move from --new-module New module to move to --symbols Comma-separated symbol list --apply Actually write changes --no-backup Skip file backups --config FILE YAML batch config --rollback Rollback via summary JSON --rewrite-dotted Rewrite dotted uses too --format Run isort + black --auto-commit Auto-commit in git repo --require-clean-git Ensure repo clean before write
🚦 Exit Codes
Code Meaning
0 Success 1 Changes had errors 2 CLI/config error
📁 Project Structure
src/import_surgeon/ cli.py
🧩 Roadmap
Symbol dependency graph warnings
VSCode / PyCharm integration
Preview UI with selectable edits
Interactive TUI surgeon console
NeoVim LSP hooks
🤝 Contributing
PRs welcome, especially for:
Editor plugins
Safety analyzers
Batch migration assistants
Code mod multi-tool integration
📜 License
MIT — commercial and open use welcome.
⭐ Support
Star the repo — every ⭐ funds more time for DevTools research 🙏
https://github.com/dhruv13x/import-surgeon
🩺 Your imports deserve precision surgery — not blind search-replace. Run import-surgeon and refactor with confidence.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file import_surgeon-3.0.1.tar.gz.
File metadata
- Download URL: import_surgeon-3.0.1.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b42b8f5e4e0ade3eb66f3594f6c0fe79b03a0bc0d9700b8c7c06a52e3dc11b98
|
|
| MD5 |
21f75e721a84d78438f943db0d1b79ce
|
|
| BLAKE2b-256 |
9238a42a663908dc2e28eaea89f03ffbcdffadcee86d8d4b3010467f3a3f33b0
|
Provenance
The following attestation bundles were made for import_surgeon-3.0.1.tar.gz:
Publisher:
publish.yml on dhruv13x/import-surgeon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
import_surgeon-3.0.1.tar.gz -
Subject digest:
b42b8f5e4e0ade3eb66f3594f6c0fe79b03a0bc0d9700b8c7c06a52e3dc11b98 - Sigstore transparency entry: 722147965
- Sigstore integration time:
-
Permalink:
dhruv13x/import-surgeon@9af6db7d13430772ee015f01498440af39e5419d -
Branch / Tag:
refs/tags/v3.0.1 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9af6db7d13430772ee015f01498440af39e5419d -
Trigger Event:
push
-
Statement type:
File details
Details for the file import_surgeon-3.0.1-py3-none-any.whl.
File metadata
- Download URL: import_surgeon-3.0.1-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a2074da09836941f6f2e16de55d32da6dc6550b610013cc6bde45f4e7a1b968
|
|
| MD5 |
522af41fc75b17040b4eb0962e530f40
|
|
| BLAKE2b-256 |
6a23a7131f20923728bb33bd94447ca586df91afe97d6745e58f90f9f7232241
|
Provenance
The following attestation bundles were made for import_surgeon-3.0.1-py3-none-any.whl:
Publisher:
publish.yml on dhruv13x/import-surgeon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
import_surgeon-3.0.1-py3-none-any.whl -
Subject digest:
4a2074da09836941f6f2e16de55d32da6dc6550b610013cc6bde45f4e7a1b968 - Sigstore transparency entry: 722148036
- Sigstore integration time:
-
Permalink:
dhruv13x/import-surgeon@9af6db7d13430772ee015f01498440af39e5419d -
Branch / Tag:
refs/tags/v3.0.1 - Owner: https://github.com/dhruv13x
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9af6db7d13430772ee015f01498440af39e5419d -
Trigger Event:
push
-
Statement type: