def _filter_results(self): # Remove updates for which we already have an equivalent or newer # version installed. Queue the remaining ones to be checked. registry = bundleregistry.get_registry() self._bundles_to_check = [] for bundle_id, data in list(self._parser.results.items()): # filter optional activities for automatic updates if self._auto and data[2] is True: logging.debug('filtered optional activity %s', bundle_id) continue bundle = registry.get_bundle(bundle_id) if bundle: if data[0] <= NormalizedVersion(bundle.get_activity_version()): continue name = bundle.get_name() if bundle else None bundle_update = BundleUpdate(bundle_id, name, data[0], data[1], 0, optional=data[2]) self._bundles_to_check.append(bundle_update) self._total_bundles_to_check = len(self._bundles_to_check) _logger.debug("%d results after filter", self._total_bundles_to_check)
def __data_json_download_complete_cb(self, downloader, result): if self._canceled: return try: activities = json.loads(result.get_data())['activities'] except ValueError: self._error_cb('Can not parse loaded update.json') return updates = [] for i, bundle in enumerate(self._bundles): self._progress_cb(bundle.get_name(), i/len(self._bundles)) if bundle.get_bundle_id() not in activities: logging.debug('%s not in activities' % bundle.get_bundle_id()) continue activity = activities[bundle.get_bundle_id()] try: version = NormalizedVersion(str(activity['version'])) min_sugar = NormalizedVersion(str(activity['minSugarVersion'])) except KeyError: logging.debug('KeyError - %s' % bundle.get_bundle_id()) continue except InvalidVersionError: logging.debug('InvalidVersion - %s' % bundle.get_bundle_id()) continue if NormalizedVersion(bundle.get_activity_version()) >= version: logging.debug('%s is up to date' % bundle.get_bundle_id()) continue if NormalizedVersion(config.version) < min_sugar: logging.debug('Upgrade sugar for %s' % bundle.get_bundle_id()) continue logging.debug('Marked for update: %s' % bundle.get_bundle_id()) u = BundleUpdate(bundle.get_bundle_id(), bundle.get_name(), version, activity['xo_url'], activity.get('xo_size', 1024 * 2)) updates.append(u) self._completion_cb(updates)
def __downloader_complete_cb(self, downloader, result): if isinstance(result, Exception): self.emit('check-complete', result) return if result is None: _logger.error('No XML update data returned from ASLO') return document = XML(result.get_data()) if document.find(_FIND_DESCRIPTION) is None: _logger.debug( 'Bundle %s not available in the server for the ' 'version %s', self._bundle.get_bundle_id(), config.version) version = None link = None size = None self.emit('check-complete', None) return try: version = NormalizedVersion(document.find(_FIND_VERSION).text) except InvalidVersionError: _logger.exception('Exception occurred while parsing version') self.emit('check-complete', None) return link = document.find(_FIND_LINK).text try: size = long(document.find(_FIND_SIZE).text) * 1024 except ValueError: _logger.exception('Exception occurred while parsing size') size = 0 if version > NormalizedVersion(self._bundle.get_activity_version()): result = BundleUpdate(self._bundle.get_bundle_id(), self._bundle.get_name(), version, link, size) else: result = None self.emit('check-complete', result)