packagelister.packagelister_cli

 1import argparse
 2from pathlib import Path
 3
 4from packagelister import scan
 5
 6
 7def main():
 8    def get_args() -> argparse.Namespace:
 9        parser = argparse.ArgumentParser()
10
11        parser.add_argument(
12            "project_path",
13            nargs="?",
14            type=str,
15            default=None,
16            help=""" The project directory path to scan. """,
17        )
18
19        parser.add_argument(
20            "-s",
21            "--show_files",
22            action="store_true",
23            help=""" Show which files imported each of the packages. """,
24        )
25
26        parser.add_argument(
27            "-g",
28            "--generate_requirements",
29            action="store_true",
30            help=""" Generate a requirements.txt file in --project_path. """,
31        )
32
33        parser.add_argument(
34            "-i",
35            "--include_builtins",
36            action="store_true",
37            help=""" Include built in standard library modules. """,
38        )
39
40        args = parser.parse_args()
41
42        if not args.project_path:
43            args.project_path = Path.cwd()
44        else:
45            args.project_path = Path(args.project_path)
46        if not args.project_path.is_absolute():
47            args.project_path = args.project_path.absolute()
48
49        return args
50
51    args = get_args()
52    packages = scan(args.project_path, args.include_builtins)
53    if args.generate_requirements:
54        req_path = args.project_path / "requirements.txt"
55        req_path.write_text(
56            "\n".join(
57                f"{package}~={packages[package]['version']}"
58                if packages[package]["version"]
59                else package
60                for package in sorted(packages)
61            )
62        )
63    packages = {
64        f"{package}=={packages[package]['version']}": packages[package]["files"]
65        for package in sorted(packages)
66    }
67
68    if args.show_files:
69        longest_key = max(len(package) for package in packages)
70        packages = [
71            f"{package}{' '*(longest_key-len(package)+4)}{', '.join(str(Path(file).relative_to(args.project_path)) for file in packages[package])}"
72            for package in packages
73        ]
74
75    print(f"Packages used in {args.project_path.stem}:")
76    print(
77        *packages,
78        sep="\n",
79    )
80
81
82if __name__ == "__main__":
83    main()
def main():
 8def main():
 9    def get_args() -> argparse.Namespace:
10        parser = argparse.ArgumentParser()
11
12        parser.add_argument(
13            "project_path",
14            nargs="?",
15            type=str,
16            default=None,
17            help=""" The project directory path to scan. """,
18        )
19
20        parser.add_argument(
21            "-s",
22            "--show_files",
23            action="store_true",
24            help=""" Show which files imported each of the packages. """,
25        )
26
27        parser.add_argument(
28            "-g",
29            "--generate_requirements",
30            action="store_true",
31            help=""" Generate a requirements.txt file in --project_path. """,
32        )
33
34        parser.add_argument(
35            "-i",
36            "--include_builtins",
37            action="store_true",
38            help=""" Include built in standard library modules. """,
39        )
40
41        args = parser.parse_args()
42
43        if not args.project_path:
44            args.project_path = Path.cwd()
45        else:
46            args.project_path = Path(args.project_path)
47        if not args.project_path.is_absolute():
48            args.project_path = args.project_path.absolute()
49
50        return args
51
52    args = get_args()
53    packages = scan(args.project_path, args.include_builtins)
54    if args.generate_requirements:
55        req_path = args.project_path / "requirements.txt"
56        req_path.write_text(
57            "\n".join(
58                f"{package}~={packages[package]['version']}"
59                if packages[package]["version"]
60                else package
61                for package in sorted(packages)
62            )
63        )
64    packages = {
65        f"{package}=={packages[package]['version']}": packages[package]["files"]
66        for package in sorted(packages)
67    }
68
69    if args.show_files:
70        longest_key = max(len(package) for package in packages)
71        packages = [
72            f"{package}{' '*(longest_key-len(package)+4)}{', '.join(str(Path(file).relative_to(args.project_path)) for file in packages[package])}"
73            for package in packages
74        ]
75
76    print(f"Packages used in {args.project_path.stem}:")
77    print(
78        *packages,
79        sep="\n",
80    )