Kevin Veen-Birkenbach 4a78f63875
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
refactor(p2pkg): split monolith into atomic modules; add keep-legacy stubs; align tests with Strategy A discovery
- 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
2025-12-20 18:22:39 +01:00
2025-12-20 11:46:06 +01:00

p2pkg

A small, purpose-built repository for a very specific migration:

  • foo.pyfoo/__main__.py
  • Generates foo/__init__.py that re-exports the public API from __main__ so existing code like import foo or from foo import some_function keeps 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_list executes roles_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

Description
No description provided
Readme MIT 52 KiB
Languages
Python 98.2%
Makefile 1.8%