summaryrefslogtreecommitdiffstats
path: root/tests/ci/pip_license.py
diff options
context:
space:
mode:
authorRoss Brattain <ross.b.brattain@intel.com>2017-08-07 18:39:28 -0700
committerRoss Brattain <ross.b.brattain@intel.com>2017-08-07 18:39:57 -0700
commit35735f7e490314b50ba835f8c1daea6d7d4f9c51 (patch)
tree1bcdafff578e5a9125b0b2ca1914118ce02b9576 /tests/ci/pip_license.py
parent72778951d6b8968f562fb8fefa02a57159ea1b83 (diff)
pip_license: quick hack script to add license info to requirements.txt
Change-Id: Ic41772cb32cd53d405b16880bd43cf89307b4716 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Diffstat (limited to 'tests/ci/pip_license.py')
-rw-r--r--tests/ci/pip_license.py80
1 files changed, 80 insertions, 0 deletions
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()