Skip to content

Commit 88ba1c7

Browse files
committed
♻️ refactor: improve cli
1 parent f92df8e commit 88ba1c7

File tree

4 files changed

+32
-31
lines changed

4 files changed

+32
-31
lines changed

pdm_build.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ def pdm_build_initialize(context: Context) -> None:
2929

3030
def pdm_build_update_files(context: Context, files: dict[str, Path]) -> None:
3131
from pyfuture.hooks import pdm as pyfuture_pdm_hooks
32+
from pyfuture.utils import get_target
3233

3334
hook_config = pyfuture_pdm_hooks.get_hook_config(context)
3435
target_str = pyfuture_pdm_hooks.get_target_str(hook_config)
35-
target = pyfuture_pdm_hooks.get_target(target_str)
36+
target = get_target(target_str)
3637
pyfuture_pdm_hooks.pdm_build_update_files(context, files, target)

pyfuture/__main__.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from rich.logging import RichHandler
1010
from rich.style import Style
1111

12-
from pyfuture.utils import transfer_file
12+
from pyfuture.utils import get_target, transfer_file
1313

1414
app = typer.Typer()
1515

@@ -21,21 +21,21 @@ def init_logger(log_level: str):
2121

2222

2323
@app.command()
24-
def transfer(src_file: Path, tgt_file: Path, *, target: str = "3.9", log_level: str = "INFO"):
24+
def transfer(src_file: Path, tgt_file: Path, *, target: str = "py39", log_level: str = "INFO"):
2525
"""
2626
Transfer code from src_file and write to tgt_file.
2727
"""
28-
assert target == "3.9", "PyFuture is very early stage, not support target argument yet"
28+
2929
init_logger(log_level)
3030
transfer_file(src_file, tgt_file)
3131

3232

3333
@app.command()
34-
def watch(src_file: Path, tgt_file: Path, *, target: str = "3.9", log_level: str = "INFO"): # pragma: no cover
34+
def watch(src_file: Path, tgt_file: Path, *, target: str = "py39", log_level: str = "INFO"): # pragma: no cover
3535
"""
3636
Transfer all python files in src_dir to build_dir, and watch for changes.
3737
"""
38-
assert target == "3.9", "PyFuture is very early stage, not support target argument yet"
38+
3939
init_logger(log_level)
4040
transfer_file(src_file, tgt_file)
4141

@@ -46,18 +46,18 @@ def watch(src_file: Path, tgt_file: Path, *, target: str = "3.9", log_level: str
4646
match mode:
4747
case Change.modified:
4848
logger.info("Source file has been modified")
49-
transfer_file(Path(path), tgt_file)
49+
transfer_file(Path(path), tgt_file, target=get_target(target))
5050
case Change.deleted:
5151
logger.info("Source file has been deleted")
5252
break
5353

5454

5555
@app.command()
56-
def transfer_dir(src_dir: Path, build_dir: Path, *, target: str = "3.9", log_level: str = "INFO"):
56+
def transfer_dir(src_dir: Path, build_dir: Path, *, target: str = "py39", log_level: str = "INFO"):
5757
"""
5858
Transfer all python files in src_dir to build_dir.
5959
"""
60-
assert target == "3.9", "PyFuture is very early stage, not support target argument yet"
60+
6161
init_logger(log_level)
6262

6363
for src_file in src_dir.glob("**/*.py"):
@@ -66,11 +66,11 @@ def transfer_dir(src_dir: Path, build_dir: Path, *, target: str = "3.9", log_lev
6666

6767

6868
@app.command()
69-
def watch_dir(src_dir: Path, build_dir: Path, *, target: str = "3.9", log_level: str = "INFO"): # pragma: no cover
69+
def watch_dir(src_dir: Path, build_dir: Path, *, target: str = "py39", log_level: str = "INFO"): # pragma: no cover
7070
"""
7171
Transfer all python files in src_dir to build_dir, and watch for changes.
7272
"""
73-
assert target == "3.9", "PyFuture is very early stage, not support target argument yet"
73+
7474
init_logger(log_level)
7575
transfer_dir(src_dir, build_dir, target=target)
7676

pyfuture/hooks/pdm.py

+1-20
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import os
4-
import sys
54
from pathlib import Path
65

76
from pdm.backend.hooks.base import Context
@@ -26,28 +25,10 @@ def get_target_str(hook_config: dict) -> str | None:
2625
"""
2726
target_str = os.environ.get("PYFUTURE_TARGET", None)
2827
if target_str is None:
29-
target_str = hook_config.get("target", None)
28+
target_str = hook_config.get("target")
3029
return target_str
3130

3231

33-
def get_target(target_str: str | None) -> tuple[int, int]:
34-
"""
35-
Get target version from target string.
36-
37-
Example:
38-
>>> get_target(None) == sys.version_info[:2]
39-
True
40-
>>> get_target("py39")
41-
(3, 9)
42-
>>> get_target("py310")
43-
(3, 10)
44-
"""
45-
if target_str is None:
46-
return sys.version_info[:2]
47-
else:
48-
return (int(target_str[2:3]), int(target_str[3:]))
49-
50-
5132
def get_hook_config(context: Context) -> dict: # pragma: no cover
5233
return context.config.data.get("tool", {}).get("pdm", {}).get("build", {}).get("hooks", {}).get("pyfuture", {})
5334

pyfuture/utils.py

+19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import contextlib
44
import io
5+
import sys
56
from pathlib import Path
67

78
import libcst as cst
@@ -10,6 +11,24 @@
1011
from .codemod.utils import RuleSet, get_transformers
1112

1213

14+
def get_target(target_str: str | None) -> tuple[int, int]:
15+
"""
16+
Get target version from target string.
17+
18+
Example:
19+
>>> get_target(None) == sys.version_info[:2]
20+
True
21+
>>> get_target("py39")
22+
(3, 9)
23+
>>> get_target("py310")
24+
(3, 10)
25+
"""
26+
if target_str is None:
27+
return sys.version_info[:2]
28+
else:
29+
return (int(target_str[2:3]), int(target_str[3:]))
30+
31+
1332
def apply_transformer(
1433
transformers: list[type[Codemod]],
1534
code: str,

0 commit comments

Comments
 (0)