def async_update_remote(self): future = asyncio.Future() def handle_exception(type, value, traceback): future.set_result(False) logger.error("nvchecker failed to get version of %s", self) raise value.with_traceback(traceback) def cb(name, newver): future.set_result(newver is not None) if newver is None: logger.error("nvchecker failed to get version of %s", self) elif newver != self.raw_remote_version: self.raw_remote_version = newver self.on_remote_update() # ugly work-around to deal with nvchecker vcs handler old_cwd = os.getcwd() if "path" in self._info: os.chdir(os.path.join(os.path.dirname(self.path), "..")) dmparser = configparser.RawConfigParser() dmparser.read_dict({"_": self.nvconfig}) try: with ExceptionStackContext(handle_exception): get_version(self.name, dmparser["_"], cb) finally: os.chdir(old_cwd) return future
def sync_get_version(self, name, config): def get_version_callback(name, version): self.stop(version) if isinstance(config, dict): _config = configparser.ConfigParser(dict_type=dict, allow_no_value=True) _config.read_dict({name: config}) config = _config[name] get_version(name, config, get_version_callback) return self.wait()