From 35735f7e490314b50ba835f8c1daea6d7d4f9c51 Mon Sep 17 00:00:00 2001 From: Ross Brattain Date: Mon, 7 Aug 2017 18:39:28 -0700 Subject: pip_license: quick hack script to add license info to requirements.txt Change-Id: Ic41772cb32cd53d405b16880bd43cf89307b4716 Signed-off-by: Ross Brattain --- tests/ci/pip_license.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tests/ci/pip_license.py (limited to 'tests/ci') diff --git a/tests/ci/pip_license.py b/tests/ci/pip_license.py new file mode 100644 index 000000000..e512db7ee --- /dev/null +++ b/tests/ci/pip_license.py @@ -0,0 +1,80 @@ +# Copyright (c) 2017 Intel Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pkg_resources +import pip.req +import sys + + +def get_pkg_license(pkg): + """ + Given a package reference (as from requirements.txt), + return license listed in package metadata. + NOTE: This function does no error checking and is for + demonstration purposes only. + + can-pip-or-setuptools-distribute-etc-list-the-license-used-by-each-install + https://stackoverflow.com/a/19086260 + https://stackoverflow.com/users/308066/dkamins + """ + try: + pkgs = pkg_resources.working_set.resolve(pkg, replace_conflicting=True) + # pkgs = pkg_resources.require(pkg) + except pkg_resources.DistributionNotFound as e: + sys.stderr.write("%s\n" % e) + return None + pkg = pkgs[0] + try: + info = pkg.get_metadata_lines('METADATA') + except IOError: + try: + info = pkg.get_metadata_lines('PKG-INFO') + except IOError: + info = [] + licenses = [] + for line in info: + if "License:" in line: + lic = line.split(': ', 1)[1] + if "UNKNOWN" not in lic: + # try this type first + licenses.append(lic) + # break + elif "License ::" in line: + licenses.append(" ".join(line.split(':: ')[1:3])) + return "; ".join(licenses) + +# quick and dirty hack + + +def main(): + + reqs = list(pip.req.parse_requirements("../../requirements.txt", session='hack')) + lines = [] + for req in reqs: + pkg = pkg_resources.parse_requirements([req.name]) + lic = get_pkg_license(pkg) + markers = req.markers + if markers: + mark = "; " + str(req.markers) + else: + mark = "" + line = "{0}{1}\t\t# {2}\n".format(req.req, mark, lic) + sys.stdout.write(line) + lines.append(line) + with open("requirements.txt", "w") as rrr: + rrr.writelines(lines) + + +if __name__ == '__main__': + main() -- cgit 1.2.3-korg