[Buildroot] [RFC] scanpypi: handle packages with wrong metadata

yegorslists at googlemail.com yegorslists at googlemail.com
Fri Jan 26 13:32:50 UTC 2018


From: Yegor Yefremov <yegorslists at googlemail.com>

Some packages like python-adafruit-ads1x15 have different values in
PyPI metadata and setup.py or tar file name.

Use package name (self.pkg_name) derived from tar file name instead
of metadata_name taken from JSON.

Also output the missing key when trying to setup arguments.

Signed-off-by: Yegor Yefremov <yegorslists at googlemail.com>
---
 utils/scanpypi | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/utils/scanpypi b/utils/scanpypi
index 7392c50..0add12b 100755
--- a/utils/scanpypi
+++ b/utils/scanpypi
@@ -130,6 +130,7 @@ class BuildrootPackage():
         self.md5_sum = None
         self.metadata = None
         self.metadata_name = None
+        self.pkg_name = None
         self.metadata_url = None
         self.pkg_req = None
         self.setup_metadata = None
@@ -249,10 +250,12 @@ class BuildrootPackage():
                     os.makedirs(tmp_pkg)
                 as_tarfile.extractall(tmp_pkg)
 
+        index_of_pkg_version = self.filename.index(self.version) - 1
+        self.pkg_name = self.filename[:index_of_pkg_version]
         tmp_extract = '{folder}/{name}-{version}'
         self.tmp_extract = tmp_extract.format(
             folder=tmp_pkg,
-            name=self.metadata_name,
+            name=self.pkg_name,
             version=self.version)
 
     def load_setup(self):
@@ -265,14 +268,15 @@ class BuildrootPackage():
         s_file, s_path, s_desc = imp.find_module('setup', [self.tmp_extract])
         setup = imp.load_module('setup', s_file, s_path, s_desc)
         try:
-            self.setup_metadata = self.setup_args[self.metadata_name]
-        except KeyError:
+            self.setup_metadata = self.setup_args[self.pkg_name]
+        except KeyError as err:
+            print('Following key is missing: {}'.format(err))
             # This means setup was not called which most likely mean that it is
             # called through the if __name__ == '__main__' directive.
             # In this case, we can only pray that it is called through a
             # function called main() in setup.py.
             setup.main()  # Will raise AttributeError if not found
-            self.setup_metadata = self.setup_args[self.metadata_name]
+            self.setup_metadata = self.setup_args[self.pkg_name]
         # Here we must remove the module the hard way.
         # We must do this because of a very specific case: if a package calls
         # setup from the __main__ but does not come with a 'main()' function,
-- 
2.1.4



More information about the buildroot mailing list