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
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'
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())
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)) )
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
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
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'