Michael Merickel
2018-10-15 0c29cf2df41600d3906d521c72991c7686018b71
commit | author | age
b210ce 1 import sys
CM 2 import platform
3 import pkg_resources
b7f994 4 import argparse
b210ce 5 from operator import itemgetter
CM 6
0c29cf 7
MM 8 def out(*args):  # pragma: no cover
b210ce 9     for arg in args:
CM 10         sys.stdout.write(arg)
11         sys.stdout.write(' ')
12     sys.stdout.write('\n')
13
0c29cf 14
0c208d 15 def get_parser():
1efb31 16     parser = argparse.ArgumentParser(
0c29cf 17         description="Show Python distribution versions and locations in use"
MM 18     )
1efb31 19     return parser
0c208d 20
0c29cf 21
MM 22 def main(
23     argv=sys.argv,
24     pkg_resources=pkg_resources,
25     platform=platform.platform,
26     out=out,
27 ):
b210ce 28     # all args except argv are for unit testing purposes only
0c208d 29     parser = get_parser()
b210ce 30     parser.parse_args(argv[1:])
CM 31     packages = []
32     for distribution in pkg_resources.working_set:
33         name = distribution.project_name
34         packages.append(
0c29cf 35             {
MM 36                 'version': distribution.version,
37                 'lowername': name.lower(),
38                 'name': name,
39                 'location': distribution.location,
40             }
41         )
b210ce 42     packages = sorted(packages, key=itemgetter('lowername'))
CM 43     pyramid_version = pkg_resources.get_distribution('pyramid').version
44     plat = platform()
45     out('Pyramid version:', pyramid_version)
46     out('Platform:', plat)
47     out('Packages:')
48     for package in packages:
49         out(' ', package['name'], package['version'])
50         out('   ', package['location'])
40d54e 51
0c29cf 52
MM 53 if __name__ == '__main__':  # pragma: no cover
40d54e 54     sys.exit(main() or 0)