url, daemon=True) yield df try: available_version = df.getResult() except BTFailure, e: self.debug(debug_prefix + 'failed to load %s' % url) self._restart() return if available_version.is_beta(): if available_version[1] != self.current_version[1]: available_version = self.current_version if self.current_version.is_beta(): stable_url = self.version_site + 'stable' df = ThreadedDeferred(wrap_task(self.rawserver.external_add_task), self._get_available, stable_url) yield df try: available_stable_version = df.getResult() except BTFailure, e: self.debug(debug_prefix + 'failed to load %s' % url) self._restart() return if available_stable_version > available_version: available_version = available_stable_version self.debug(debug_prefix + 'got %s' % str(available_version)) if available_version <= self.current_version: self.debug(debug_prefix + 'not updating old version %s' % str(available_version))
def get_tracker_ips(self, wrap_task): """Returns the list of tracker IP addresses or the empty list if the torrent is trackerless. This extracts the tracker ip addresses from the urls in the announce or announce list.""" df = ThreadedDeferred(wrap_task, self._get_tracker_ips, daemon=True) return df
def smart_gettext_and_install(domain, localedir, languages, fallback=False, unicode=False): try: t = gettext.translation(domain, localedir, languages=languages, fallback=fallback) except Exception, e: # if we failed to find the language, fetch it from the web async-style running_count = 0 running_deferred = {} # Get some reasonable defaults for arguments that were not supplied if languages is None: languages = [] for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): val = os.environ.get(envar) if val: languages = val.split(':') break if 'C' not in languages: languages.append('C') # now normalize and expand the languages nelangs = [] for lang in languages: for nelang in gettext._expand_lang(lang): if nelang not in nelangs: nelangs.append(nelang) languages = nelangs for lang in languages: d = ThreadedDeferred(None, get_language, lang) def translate_and_install(r, td=d): running_deferred.pop(td) # only let the last one try to install if len(running_deferred) == 0: t = gettext.translation(domain, localedir, languages=languages, fallback=True) t.install(unicode) def failed(e, tlang=lang, td=d): if td in running_deferred: running_deferred.pop(td) # don't raise an error, just continue untranslated sys.stderr.write( 'Could not find translation for language "%s"\n' % tlang) #traceback.print_exc(e) d.addCallback(translate_and_install) d.addErrback(failed) # accumulate all the deferreds first running_deferred[d] = 1 # start them all, the last one finished will install the language for d in running_deferred: d.start() return