4a78f63875e2af9eced98529f17045c13e85bbc7
Some checks failed
CI (tests + ruff) and stable tag / unittest (py3.10) (push) Has been cancelled
CI (tests + ruff) and stable tag / unittest (py3.11) (push) Has been cancelled
CI (tests + ruff) and stable tag / unittest (py3.12) (push) Has been cancelled
CI (tests + ruff) and stable tag / unittest (py3.13) (push) Has been cancelled
CI (tests + ruff) and stable tag / ruff (py3.12) (push) Has been cancelled
CI (tests + ruff) and stable tag / Tag stable (if version commit) (push) Has been cancelled
- Move CLI + migration logic out of src/p2pkg/__main__.py into dedicated modules: apply.py, cli.py, discovery.py, gitutils.py, plans.py, templates.py - Add -k/--keep option to preserve legacy *.py files as forwarding stubs (default removes legacy) - Implement Strategy A recursive discovery: only migrate *.py inside a runnable outermost package (__init__.py + __main__.py) - Update tests to import new modules and build a Strategy A compatible package tree for recursive runs https://chatgpt.com/share/69468609-0584-800f-a3e0-9d58210fb0e8
p2pkg
A small, purpose-built repository for a very specific migration:
foo.py➜foo/__main__.py- Generates
foo/__init__.pythat re-exports the public API from__main__so existing code likeimport fooorfrom foo import some_functionkeeps working. - Keeps the original module code as-is in
__main__.py(one-off refactor helper).
Install (editable)
python -m venv .venv
. .venv/bin/activate
pip install -e .
Usage
# Migrate one or more flat modules into packages
p2pkg roles_list.py another_module.py
# Or run directly
python tools/p2pkg.py roles_list.py
Behavior
Given roles_list.py:
roles_list.py
After migration:
roles_list/
├── __init__.py # re-exports public API from __main__
└── __main__.py # contains the original implementation (moved)
- Running
python -m roles_listexecutesroles_list/__main__.py. - Existing imports remain compatible (via re-exports in
__init__.py).
Development
Run tests:
make test
License
MIT License. See LICENSE.
Author: Kevin Veen-Birkenbach
Languages
Python
98.2%
Makefile
1.8%