Coverage for src\pathier\__init__.py: 40%
25 statements
« prev ^ index » next coverage.py v7.2.2, created at 2024-05-07 16:38 -0500
« prev ^ index » next coverage.py v7.2.2, created at 2024-05-07 16:38 -0500
1import argparse
2import griddle
3import noiftimer
4import printbuddies
5import younotyou
7from .pathier import Pathier, Pathish, Pathy
9__all__ = ["Pathier", "Pathy", "Pathish"]
12@noiftimer.time_it()
13def sizeup():
14 """Print the sub-directories and their sizes of the current working directory."""
15 parser = argparse.ArgumentParser("sizeup")
16 parser.add_argument(
17 "-i",
18 "--ignore",
19 nargs="*",
20 default=None,
21 type=str,
22 help="Directory patterns to ignore.",
23 )
24 args = parser.parse_args()
25 matcher = younotyou.Matcher(exclude_patterns=args.ignore)
26 sizes: dict[str, int] = {}
27 folders = [
28 folder
29 for folder in Pathier.cwd().iterdir()
30 if folder.is_dir() and str(folder) not in matcher
31 ]
32 print(f"Sizing up {len(folders)} directories...")
33 with printbuddies.ProgBar(len(folders)) as prog:
34 for folder in folders:
35 prog.display(f"Scanning '{folder.name}'")
36 sizes[folder.name] = folder.size
37 total_size = sum(sizes[folder] for folder in sizes)
38 size_list = [
39 (folder, Pathier.format_bytes(sizes[folder]))
40 for folder in sorted(list(sizes.keys()), key=lambda f: sizes[f], reverse=True)
41 ]
42 print(griddle.griddy(size_list, ["Dir", "Size"]))
43 print(f"Total size of '{Pathier.cwd()}': {Pathier.format_bytes(total_size)}")
46__version__ = "1.5.1"