Source code for errata_tool.build

from errata_tool import ErrataConnector
from errata_tool import Erratum


[docs]class Build(ErrataConnector): """Search ET for Details based on a build""" def __init__(self, nvr): """Find build information and advisories where the build is attached. :param nvr: build NVR (name-version-release) """ self.nvr = nvr self.url = self._url + '/api/v1/build/%s' % self.nvr self._released_errata_id = None self._released_errata = None self._all_errata_ids = None self._all_errata = None self._signed_rpms = None self._data = None self._files = [] self._fetch() def _fetch(self): """Fetch build data from Errata Tool API and store to properties""" self._data = self._get(self.url) if self._data: if self._data['released_errata'] is not None: self._released_errata_id = self._data['released_errata']['id'] if 'all_errata' in self._data: self._all_errata_ids = [errata['id'] for errata in self._data['all_errata']] self._signed_rpms = self._data.get('rpms_signed') for et_file in self._data['files']: self._files.append(et_file['path']) self._all_errata = None self._released_errata = None @property def all_errata_ids(self): """List of all Errata IDs where the build is attached :return: list of Errata ids """ return self._all_errata_ids @property def all_errata(self): """List of all Erratas where the build is attached :return: list of Errata objects """ if self._all_errata is None: self._all_errata = [] for errata_id in self.all_errata_ids: errata = Erratum(errata_id=errata_id) self._all_errata.append(errata) return self._all_errata @property def released_errata_id(self): """Released Errata ID :return: Errata id """ return self._released_errata_id @property def released_errata(self): """Released Errata :return: Errata object """ if self.released_errata_id and self._released_errata is None: self._released_errata = Erratum(errata_id=self.released_errata_id) return self._released_errata @property def files(self): """List of file path generated by build :return: list of string paths """ return self._files @property def signed_rpms(self): """Signed rpms flag :return: boolean True/False """ return self._signed_rpms def __getattr__(self, name): return self._data.get(name) def __repr__(self): return 'Build(%s)' % self.nvr def __str__(self): """Convert build object to string representation :return: build info string """ output = "Build NVR: %s\n\n" % self.nvr if self._released_errata and self.released_errata is not None: output += 'Released errata: %s\n' % \ self.released_errata.errata_name else: output += " --- NOT YET LOADED ---" output += "Released errata ids: {0}\n".format( self.released_errata_id) output += "Erratas:\n" if self._all_errata: for errata in self.all_errata: output += str(errata) else: output += " --- NOT YET LOADED ---" output += ','.join([str(errata_id) for errata_id in self.all_errata_ids]) output += '\n' output += 'Files:\n' for et_file in self.files: output += ' - %s' % et_file return output