Source code for osctiny.extensions.buildresults

"""
Build result extension
----------------------
"""
# pylint: disable=too-few-public-methods
from urllib.parse import urljoin

from ..utils.base import ExtensionBase


[docs]class Build(ExtensionBase): """ Osc extension for retrieving build results """ base_path = "/build"
[docs] def get(self, project, package=None, repo=None, **params): """ Get build infos If no parameters are supplied, a compact list of build states for all packages in the project are returned. If a ``package`` and/or ``repo`` are supplied, an extended list of build results for these particular values is returned. :param project: Project name :param package: Package name :param repo: Repository name :param params: Additional parameters :return: Objectified XML element :rtype: lxml.objectify.ObjectifiedElement .. versionadded:: 0.1.1 """ params["package"] = package params["repository"] = repo response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/_result".format(self.base_path, project)), params=params ) return self.osc.get_objectified_xml(response)
[docs] def get_history(self, project, package, repo, arch="x86_64", **params): """ Get build history :param project: Project name :param package: Package name :param repo: Repository name :param arch: Architecture name :param params: Additional parameters :return: Objectified XML element :rtype: lxml.objectify.ObjectifiedElement .. versionadded:: 0.5.0 """ response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/{}/{}/{}/_history".format(self.base_path, project,repo,arch,package)), params=params ) return self.osc.get_objectified_xml(response)
[docs] def get_log(self, project, repo, arch, package): """ Get the build log of a package :param project: Project name :param repo: Repository name :param arch: Architecture name :param package: Package name :return: The package build log file :rtype: str .. versionadded:: 0.8.0 """ response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/{}/{}/{}/_log".format(self.base_path, project,repo,arch,package)) ) return response.text
[docs] def get_package_list(self, project, repo, arch): """ Get a list of packages for which build results exist :param project: Project name :param repo: Repository name :param arch: Architecture name :return: Objectified XML element :rtype: lxml.objectify.ObjectifiedElement .. versionadded:: 0.2.4 """ response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/{}/{}".format( self.base_path, project, repo, arch )) ) return self.osc.get_objectified_xml(response)
[docs] def get_binary_list(self, project, repo, arch, package, **params): """ Get a list of built RPMs :param project: Project name :param repo: Repository name :param arch: Architecture name :param package: Package name :param params: Additional parameters :return: Objectified XML element :rtype: lxml.objectify.ObjectifiedElement .. versionadded:: 0.1.3 """ response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/{}/{}/{}".format( self.base_path, project, repo, arch, package )), params=params ) return self.osc.get_objectified_xml(response)
# pylint: disable=too-many-arguments
[docs] def get_binary(self, project, repo, arch, package, filename, raw=False): """ Get the content of file .. note:: This method decodes the content of the file and returns a Python string by default. :param project: Project name :param repo: Repository name :param arch: Architecture name :param package: Package name :param filename: File name :param raw: If ``True``, return a byte string. Otherwise, a string is returned :return: Content of binary file :rtype: str or bytes .. versionadded:: 0.2.4 .. versionchanged:: 0.7.0 Added the ``raw`` parameter """ response = self.osc.request( method="GET", url=urljoin(self.osc.url, "{}/{}/{}/{}/{}/{}".format( self.base_path, project, repo, arch, package, filename )), ) return response.content if raw else response.text
[docs] def download_binary(self, project, repo, arch, package, filename, destdir, destfile=None, overwrite=False): """ Download binary file to disk :param project: Project name :param repo: Repository name :param arch: Architecture name :param package: Package name :param filename: File name :param pathlib.Path destdir: Destination directory :param str destfile: Target file name. If not specified, it will be taken from the URL :param bool overwrite: switch to overwrite existing downloaded file :return: Path of downloaded file :rtype: pathlib.Path .. versionadded:: 0.7.0 """ return self.osc.download( url=urljoin(self.osc.url, "{}/{}/{}/{}/{}/{}".format( self.base_path, project, repo, arch, package, filename )), destdir=destdir, destfile=destfile, overwrite=overwrite )
[docs] def cmd(self, project, cmd, **params): """ Execute ``cmd`` for ``project`` and get response .. versionadded:: 0.6.2 :param str project: Project name :param str cmd: Command to execute :param params: Additional parameters """ allowed_cmds = ["rebuild", "abortbuild", "restartbuild", "unpublish", "sendsysrq", "wipe"] if cmd not in allowed_cmds: raise ValueError(f"Invalid command: '{cmd}'. Use one of: {', '.join(allowed_cmds)}") params["cmd"] = cmd response = self.osc.request( url=urljoin(self.osc.url, f"{self.base_path}/{project}"), method="POST", params=params ) return self.osc.get_objectified_xml(response)