Phases 2-4 of package refactor. Creates the full directory tree with __init__.py files per the design doc. Actual code migration from the sim worktree is a separate effort — models have deep inheritance chains and auth mixins that need base class extraction first. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.2 KiB
pm3py Refactor Progress
Design: 2026-03-18-refactor-design.md
Branch: refactor/core-package
Started: 2026-03-18
Phase 1 — Create core/, normalize names, fix imports
Status: Complete
What was done
- Created
pm3py/core/sub-package - Moved all source modules into
core/:protocol.py,transport.py,client.py,hw.py,hf.py,lf.py— moved as-ishf_14a.py→hf_iso14a.py(renamed)hf_15.py→hf_iso15.py(renamed)hf_mf.py→hf_mfc.py(renamed)
- Normalized client attributes:
hf.a14→hf.iso14ahf.mf→hf.mfchf.iso15— unchanged
- Created
core/__init__.pyre-exporting:Proxmark3,FirmwareInfo,PM3Transport,PM3Error,PM3Response,PM3Status,Cmd - Updated
pm3py/__init__.pyto import from.core.* - Updated all 10 test files (imports + attribute references)
- 30/30 tests passing
Backward compatibility
from pm3py import Proxmark3still works (re-exported)- Breaking:
hf.a14→hf.iso14a,hf.mf→hf.mfc - Breaking: Direct imports like
from pm3py.hf_14a import ...→from pm3py.core.hf_iso14a import ...
Phase 2 — Extract sniff/
Status: Scaffolded — extraction deferred
hf_iso15.py is 94 lines of clean reader commands + thin sniff() firmware call. The trace parsing, 15693 decoders, NDEF annotation, and ANSI formatting described in the design doc haven't been written yet. Nothing to extract.
Created pm3py/sniff/__init__.py placeholder. Will extract into sub-modules when sniff infrastructure is implemented.
Phase 3 — Scaffold transponders/
Status: Complete (scaffolded)
Created full directory tree per design:
transponders/hf/iso14443a3/nxp/— MIFARE Classic, Ultralight, NTAGtransponders/hf/iso14443a4/nxp/— DESFire, NTAG 5transponders/hf/iso15693/nxp/— ICODE SLIX2transponders/hf/iso15693/st/— ST25TVtransponders/lf/atmel/— T55xxtransponders/lf/em/— EM4100, EM4x05
All directories have __init__.py. Model migration from sim worktree is a separate effort — the sim framework has ~7.8k LOC with deep inheritance chains (Transponder → Tag15693 → NxpIcodeTag → IcodeSlix2Tag, etc.) and auth mixins (NxpPasswordAuth, NxpAesAuth). Base class extraction needs to happen alongside model migration.
Phase 4 — Scaffold reader/ and sim/
Status: Complete (scaffolded)
Created directory trees per design:
reader/hf/nxp/— NXP reader ICs (CLRC663, PN5xx)reader/hf/st/— ST reader ICsreader/lf/reader/modes/— inventory, programming, access control workflowssim/— sim session, table compiler, relay (migrate from worktree)
All directories have __init__.py. Sim migration (~41 files, 7.8k LOC) is a separate effort.
Next Steps
- Sniff infrastructure: implement trace parsing, 15693 decoders, NDEF annotation, ANSI formatting in
sniff/ - Transponder migration: extract base classes from sim worktree, populate
transponders/modules - Sim migration: move sim session, table compiler, relay into
sim/ - Reader modes: implement inventory, programming, access workflows in
reader/modes/