def extract_metadata(self): """Return info from the metadata.txt inside the zip file""" opened_zip_file = zipfile.ZipFile(self.filename, 'r') expected = [f.filename for f in opened_zip_file.filelist if f.filename.endswith('metadata.txt')][0] metadata = ConfigParser() try: # Py2 metadata.readfp(opened_zip_file.open(expected)) except TypeError: # Py3 md = opened_zip_file.open(expected).read() metadata.read_string(md.decode('utf-8')) result = {} def get_option(section, option, default=''): try: return metadata.get(section, option) except NoOptionError: return default result['name'] = get_option('general', 'name') result['about'] = get_option('general', 'about') result['download_url'] = get_option('general', 'about') result['version'] = get_option('general', 'version') result['description'] = get_option('general', 'description') result['qgis_minimum_version'] = get_option('general', 'qgisMinimumVersion') result['qgis_maximum_version'] = get_option('general', 'qgisMaximumVersion', '') result['author_name'] = get_option('general', 'author').replace('&', '&') result['homepage'] = get_option('general', 'homepage', '') result['tracker'] = get_option('general', 'tracker', '') result['repository'] = get_option('general', 'repository', '') result['tags'] = get_option('general', 'tags', '') result['changelog'] = get_option('general', 'changelog') result['experimental'] = get_option('general', 'experimental', False) result['deprecated'] = get_option('general', 'experimental', False) return result