Package providing command line tools to move/copy function/classes and their associated import statements between files.
Project description
mvdef
Package providing command line tools to move/copy function/classes and their associated import statements between files
Requires
- Python 3.10+
Installation
pip install mvdef
Usage
mvdef
Moves functions named by -m/--mv and their associated imports from src to dst,
or just previews the changes as a diff if passed -d/--dry-run.
usage: mvdef [-h] -m [MV ...] [-d] [-e] [-c] [-f] [-v] src dst
Move function definitions from one file to another, moving/copying
any necessary associated import statements along with them.
Option Description Type Default
—————————— —————————————————————————————————————————— ——————————— ———————
• src source file to take definitions from Path -
• dst destination file (may not exist) Path -
• mv names to move from the source file list[str] -
• dry_run whether to only preview the change diffs bool False
• escalate whether to raise an error upon failure bool False
• cls_defs whether to use only class definitions bool False
• func_defs whether to use only function definitions bool False
• verbose whether to log anything bool False
positional arguments:
src
dst
options:
-h, --help show this help message and exit
-m [MV ...], --mv [MV ...]
-d, --dry-run
-e, --escalate
-c, --cls-defs
-f, --func-defs
-v, --verbose
cpdef
Copies functions named by -m/--mv and their associated imports from src to dst,
or just previews the changes as a diff if passed -d/--dry-run.
Has the same flags and signature as mvdef, but never changes src.
usage: cpdef [-h] -m [MV ...] [-d] [-e] [-c] [-f] [-v] src dst
Copy function definitions from one file to another, and any necessary
associated import statements along with them.
Option Description Type Default
—————————— —————————————————————————————————————————— ——————————— ———————
• src source file to copy definitions from Path -
• dst destination file (may not exist) Path -
• mv names to copy from the source file list[str] -
• dry_run whether to only preview the change diffs bool False
• escalate whether to raise an error upon failure bool False
• cls_defs whether to use only class definitions bool False
• func_defs whether to use only function definitions bool False
• verbose whether to log anything bool False
positional arguments:
src
dst
options:
-h, --help show this help message and exit
-m [MV ...], --mv [MV ...]
-d, --dry-run
-e, --escalate
-c, --cls-defs
-f, --func-defs
-v, --verbose
lsdef
Has a similar signature, but no dst (it operates on just one file) and the mv argument
is replaced by match, which can specify regular expressions (default * matches any name).
usage: lsdef [-h] [-m [MATCH ...]] [-d] [-l] [-e] [-c] [-f] [-v] src
List function definitions in a given file.
Option Description Type Default
—————————— —————————————————————————————————————————— ——————————— ———————
• src source file to list definitions from Path -
• match name regex to list from the source file list[str] ['*']
• dry_run whether to print the __all__ diff bool False
• list whether to print the list of names bool False
• escalate whether to raise an error upon failure bool False
• cls_defs whether to use only class definitions bool False
• func_defs whether to use only function definitions bool False
• verbose whether to log anything bool False
positional arguments:
src
options:
-h, --help show this help message and exit
-m [MATCH ...], --match [MATCH ...]
-d, --dry-run
-l, --list
-e, --escalate
-c, --cls-defs
-f, --func-defs
-v, --verbose
How it works
The structure of a mvdef invocation
When you call mvdef foo.py bar.py -d -c -m A, equivalent to:
mvdef foo.py bar.py --dry-run --cls-defs --mv A
You're requesting to show the file diffs it'd take (--dry-run)
to move the class definition (--cls-defs) named A (--mv A)
from foo.py (the src, first positional argument)
to bar.py (the dst, second positional argument).
Parsing the request
The request to move a definition is stored on a dataclass mvdef.transfer.MvDef
immediately upon invoking the program command.
Upon creation, this class stores 2 attributes src_diff and dst_diff
(both are mvdef.diff.Differ objects) which will coordinate the creation of patches,
or 'diffs'. These start their life with empty agendas (mvdef.agenda.Agenda).
Next, the main MvDef class calls its check() method, which returns an exception
(or raises it if escalate is True), preventing further work if the source file
does not contain a class named A as requested.
If the source file has the required definitions to fulfil the request,
then the MvDef.diffs() method gets called next,
populates the empty agendas on the Differ objects for the 2 files,
then produces the diffs they imply.
If the dry run setting is not used, the source and destination files are overwritten with the changes, instead of just displaying the diffs.
lsdef approach
lsdef is similar, but instead of making a src_diff it makes a src_manifest
(mvdef.manifest.Manifest object), and there is no dst file to handle.
Error handling is the same as above.
Project details
Release history Release notifications | RSS feed
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 mvdef-0.9.4.tar.gz.
File metadata
- Download URL: mvdef-0.9.4.tar.gz
- Upload date:
- Size: 411.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.12.4 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f7ed65276eecb6a448aace12932dfd74b2bd72e1c95f03a30a529fac985d25f
|
|
| MD5 |
f020e569a4c8e114151d386357a5021c
|
|
| BLAKE2b-256 |
742afd7d63bdd6e375e6d42dfba5717dbd167edcea69085a0e3a91b169f0cf3a
|
File details
Details for the file mvdef-0.9.4-py3-none-any.whl.
File metadata
- Download URL: mvdef-0.9.4-py3-none-any.whl
- Upload date:
- Size: 410.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.12.4 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e17fe8ad1a182da281585e62577b127037d59c22757134169b52011cd73df048
|
|
| MD5 |
f96594188f9e3c27a123360e52d37e36
|
|
| BLAKE2b-256 |
d9d998817d1d0eba6ff97bba0c1d035dcb3cd69b25307d3adae6d1249c1ca131
|