Coverage for /home/runner/work/coxbuild/coxbuild/src/coxbuild/extensions/python/format.py: 0%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

33 statements  

1from pathlib import Path 

2 

3from coxbuild import get_working_directory 

4from coxbuild.schema import depend, group, precond, run, task 

5 

6from . import grouped 

7from .package import hasPackages, upgradePackages 

8 

9subgrouped = group("format") 

10 

11 

12@grouped 

13@subgrouped 

14@precond(lambda: not hasPackages({"autopep8": "*", "isort": "*"})) 

15@task 

16def restore(): 

17 """Restore Python format tools.""" 

18 upgradePackages("autopep8", "isort") 

19 

20 

21@grouped 

22@subgrouped 

23@depend(restore) 

24@task 

25def autopep8(path: Path | None = None): 

26 """Use autopep8 to format Python code.""" 

27 run(["autopep8", "-r", "--in-place", str(path or get_working_directory())]) 

28 

29 

30@grouped 

31@subgrouped 

32@depend(restore) 

33@task 

34def isort(path: Path | None = None): 

35 """Use isort to format Python imports.""" 

36 for file in (path or get_working_directory()).glob("**/*.py"): 

37 if file.is_dir(): 

38 continue 

39 run(["isort", str(file)]) 

40 

41 

42@grouped 

43@subgrouped 

44@depend(autopep8, isort) 

45@task 

46def format(): 

47 """Format Python code.""" 

48 pass