示例#1
0
 def test_get_repo_type_not_detected(self, mock_get_pacman_packages,
                                     mock_get_deb_packages,
                                     mock_get_repomd_xml):
     mock_get_repomd_xml.side_effect = KiwiUriOpenError('error')
     mock_get_pacman_packages.side_effect = KiwiUriOpenError('error')
     mock_get_deb_packages.side_effect = KiwiUriOpenError('error')
     assert self.solver.get_repo_type() is None
示例#2
0
 def test_get_repo_type_pacman(
     self, mock_get_pacman_packages, mock_get_deb_packages,
     mock_get_repomd_xml
 ):
     mock_get_repomd_xml.side_effect = KiwiUriOpenError('error')
     mock_get_deb_packages.side_effect = KiwiUriOpenError('error')
     mock_get_pacman_packages.return_value = '"some_repo.db.sig"'
     assert self.solver.get_repo_type() == 'pacman'
示例#3
0
文件: base.py 项目: phoenixflare/kiwi
    def download_from_repository(self, repo_source, target):
        """
        Download given source file from the repository and store
        it as target file

        The repo_source location is used relative to the repository
        location and will be part of a mime type source like:
        `file://repo_path/repo_source`

        :param str repo_source: source file in the repo
        :param str target: file path

        :raises KiwiUriOpenError: if the download fails
        """
        try:
            request = Request(
                os.sep.join([self._get_mime_typed_uri(), repo_source])
            )
            if self.user and self.secret:
                credentials = b64encode(
                    format(':'.join([self.user, self.secret])).encode()
                )
                request.add_header(
                    'Authorization', b'Basic ' + credentials
                )
            location = urlopen(request)
        except Exception as e:
            raise KiwiUriOpenError(
                '{0}: {1}'.format(type(e).__name__, format(e))
            )
        with open(target, 'wb') as target_file:
            target_file.write(location.read())
示例#4
0
 def _obs_project_download_link(self, name):
     name_parts = name.split(os.sep)
     repository = name_parts.pop()
     project = os.sep.join(name_parts)
     try:
         download_link = os.sep.join(
             [
                 self.runtime_config.get_obs_download_server_url(),
                 project.replace(':', ':/'), repository
             ]
         )
         if not Defaults.is_buildservice_worker():
             request = requests.get(download_link)
             request.raise_for_status()
             return request.url
         else:
             log.warning(
                 'Using {0} without location verification due to build '
                 'in isolated environment'.format(download_link)
             )
             return download_link
     except Exception as e:
         raise KiwiUriOpenError(
             '{0}: {1}'.format(type(e).__name__, format(e))
         )
示例#5
0
 def _create_request(self, url):
     try:
         request = requests.get(url,
                                auth=HTTPBasicAuth(self.user,
                                                   self.password),
                                verify=self.ssl_verify)
         request.raise_for_status()
     except Exception as issue:
         raise KiwiUriOpenError(f'{type(issue).__name__}: {issue}')
     return request
示例#6
0
文件: uri.py 项目: rabueker/kiwi
 def _resolve_metalink_uri(self, uri: str) -> str:
     selected_repo_source = uri
     namespace_map = dict(metalink="http://www.metalinker.org/")
     expression = '//metalink:file[@name="repomd.xml"]/metalink:resources/*'
     try:
         metalink_location = urlopen(Request(uri))
         xml = etree.parse(metalink_location)
         url_list = xml.getroot().xpath(expression,
                                        namespaces=namespace_map)
         source_dict = {}
         for url in url_list:
             if url.get('protocol') == 'https':
                 source_dict[url.text] = int(url.get('preference'))
         start_preference = 0
         for url in sorted(source_dict.keys()):
             preference = source_dict[url]
             if preference > start_preference:
                 selected_repo_source = url
                 start_preference = preference
     except Exception as issue:
         raise KiwiUriOpenError(f'Failed to resolve metalink URI: {issue}')
     selected_repo_source = selected_repo_source.replace(
         'repodata/repomd.xml', '')
     return selected_repo_source
示例#7
0
 def test_get_repo_type_deb(self, mock_get_deb_packages,
                            mock_get_repomd_xml):
     mock_get_repomd_xml.side_effect = KiwiUriOpenError('error')
     assert self.solver.get_repo_type() == 'apt-deb'