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