diff --git a/package_manager/parse_metadata.py b/package_manager/parse_metadata.py index 738538b9c..41c3a52ae 100644 --- a/package_manager/parse_metadata.py +++ b/package_manager/parse_metadata.py @@ -13,7 +13,7 @@ # limitations under the License. import re -from six import itervalues +import six INDEX_KEY = "Package" FILENAME_KEY = "Filename" @@ -22,6 +22,11 @@ def parse_package_metadata(data, mirror_url, snapshot, package_prefix): """ Takes a debian package list, changes the relative urls to absolute urls, and saves the resulting metadata as a json file """ + + # this is called with the output of gzip.open, but should be strings + if isinstance(data, six.binary_type): + data = data.decode('utf-8') + raw_entries = [line.rstrip() for line in data.splitlines()] parsed_entries = {} current_key = None @@ -55,7 +60,7 @@ def parse_package_metadata(data, mirror_url, snapshot, package_prefix): # The Filename Key is a relative url pointing to the .deb package # Here, we're rewriting the metadata with the absolute urls, # which is a concatenation of the mirror + '/debian/' + relative_path - for pkg_data in itervalues(parsed_entries): + for pkg_data in six.itervalues(parsed_entries): if package_prefix: pkg_data[FILENAME_KEY] = package_prefix + pkg_data[FILENAME_KEY] else: diff --git a/package_manager/parse_metadata_test.py b/package_manager/parse_metadata_test.py index 4f83243fb..7d0a4594e 100644 --- a/package_manager/parse_metadata_test.py +++ b/package_manager/parse_metadata_test.py @@ -8,7 +8,8 @@ class TestParseMetadata(unittest.TestCase): def setUp(self): current_dir = os.path.dirname(__file__) filename = os.path.join(current_dir, 'testdata', 'Packages.txt') - with open(filename) as f: + # parse_package_metadata is called on the binary output of gzip.open + with open(filename, 'rb') as f: data = f.read() self.data = data self.mirror_url = "http://debian.org"