| |
@@ -23,7 +23,7 @@
|
| |
import logging
|
| |
|
| |
from fedora.client import ServerError
|
| |
- from bodhi.client.bindings import BodhiClient, BodhiClientException
|
| |
+ from bodhi.client.bindings import BodhiClient
|
| |
|
| |
from blockerbugs import app
|
| |
from blockerbugs.models.update import Update
|
| |
@@ -41,6 +41,21 @@
|
| |
# disable saving session on disk by cache_session=False
|
| |
self.bodhi_interface = BodhiClient(base_url=bodhi_baseurl, cache_session=False)
|
| |
self.log = logging.getLogger('update_sync')
|
| |
+ self._releases = [] # all known releases
|
| |
+
|
| |
+ @property
|
| |
+ def releases(self):
|
| |
+ '''All releases known to Bodhi, as retrieved from /releases/ endpoint'''
|
| |
+ if self._releases:
|
| |
+ # already retrieved
|
| |
+ return self._releases
|
| |
+
|
| |
+ self._releases = self.bodhi_interface.get_releases(
|
| |
+ rows_per_page=100)['releases']
|
| |
+
|
| |
+ self.log.debug('Retrieved %d known releases from Bodhi' %
|
| |
+ (len(self._releases)))
|
| |
+ return self._releases
|
| |
|
| |
def extract_information(self, update):
|
| |
updateinfo = {}
|
| |
@@ -114,23 +129,27 @@
|
| |
self.db.session.commit()
|
| |
|
| |
def search_updates(self, bugids, release_num):
|
| |
+ # not all releases exist all the time (before branching, before bodhi
|
| |
+ # activation point, etc), so drop those which Bodhi doesn't currently
|
| |
+ # know of
|
| |
+ known_releases = [rel['name'].lower() for rel in self.releases]
|
| |
+ query_releases = [
|
| |
+ 'f%d' % release_num, # standard repo
|
| |
+ 'f%df' % release_num, # flatpaks
|
| |
+ 'f%dm' % release_num, # modularity
|
| |
+ ]
|
| |
+ for rel in query_releases.copy():
|
| |
+ if rel not in known_releases:
|
| |
+ self.log.warning("Release %s not found in Bodhi (might be "
|
| |
+ "normal depending on release life cycle)" % rel)
|
| |
+ query_releases.remove(rel)
|
| |
+
|
| |
queries_data = dict(
|
| |
bugs=[str(bug_id) for bug_id in bugids],
|
| |
- release=['f%d' % release_num, 'f%df' % release_num, 'f%dm' % release_num],
|
| |
+ release=query_releases,
|
| |
limit=100,
|
| |
)
|
| |
- try:
|
| |
- result = self.bodhi_interface.query(**queries_data)
|
| |
- except BodhiClientException as e:
|
| |
- # ignore invalid release error so it doesn't blow up when
|
| |
- # bug trackers for a release not present in bodhi are added
|
| |
- if 'Invalid releases' in str(e):
|
| |
- self.log.info("Release %d not found by Bodhi (normal if "
|
| |
- "release not branched yet)" % release_num)
|
| |
- self.log.debug(e)
|
| |
- return []
|
| |
- else:
|
| |
- raise
|
| |
+ result = self.bodhi_interface.query(**queries_data)
|
| |
|
| |
if u'status' in result.keys():
|
| |
raise ServerError('', 200, result['errors'][0].description)
|
| |
Not all releases exist all the time. Currently F33 and F33C releases exist, but
F33M doesn't. With the existing code, that completely breaks all F33 update
querying. So instead, retreive the list of releases known to Bodhi and only
skip those which are not known, instead of all-or-nothing approach. F33 updates
now correctly show up with this patch.