def find_setup(srcname): if os.path.isabs(srcname): return srcname user_dir = resource.user_resource_dir(resource.setup_dir) release_dir = resource.get_release_dir('state') user_setups = [ os.path.basename(x) for x in resource.glob_glob(os.path.join(user_dir, '*')) ] factory_setups = [ os.path.basename(x) for x in resource.glob_glob(os.path.join(release_dir, '*')) ] for s in user_setups: if s == srcname: return os.path.join(user_dir, s) s2 = upgrade.split_setup(s) if s2[1] == srcname: return os.path.join(user_dir, s) for s in factory_setups: if s == srcname: return os.path.join(release_dir, s) s2 = upgrade.split_setup(s) if s2[1] == srcname: return os.path.join(release_dir, s) return None
def upgradeable_old_setups(): md = resource.user_resource_dir(resource.setup_dir) slots = [ upgrade.split_setup(os.path.basename(s))[1] for s in resource.glob_glob(os.path.join(md, '*')) ] releases = {} for v in resource.find_installed_versions(filter_upgradeable_version): rd = resource.user_resource_dir(resource.setup_dir, version=v) (vs, ts) = resource.split_version(v) for (sp, sd, sn) in resource.safe_walk(rd): sd = () for s in filter(filter_valid_setup, sn): slot = upgrade.split_setup(s)[1] if slot in slots: continue vf = os.path.join(rd, s) mf = os.path.join(md, s) if not s in releases or vs > releases[s][0]: if s not in releases: releases[s] = (vs, vf, v) slots.append(slot) mapping = [] for (n, (vs, vf, v)) in releases.items(): mapping.append((os.path.join(md, n), vf, v)) return mapping
def delete_user_slot(slot): slot = slot.strip() rd = resource.user_resource_dir(resource.setup_dir) for (sp, sd, sn) in resource.safe_walk(rd): for s in sn: s3 = upgrade.split_setup(s) if s3[1] == slot: resource.os_unlink(os.path.join(rd, s))
def filter_valid_setup(s): if s.startswith('tmpsetup') or '.' in s or '#' in s or s.startswith('~'): return False s2 = upgrade.split_setup(s) if translate.words_to_notes(s2[1]): return True return False
def find_factory_setups(): rd = resource.get_release_dir('state') m = Menu('Factory Setups') for (sp, sd, sn) in resource.safe_walk(rd): for s in filter(filter_valid_setup, sn): s3 = upgrade.split_setup(s) m.add_setup(urllib.unquote(s3[0]), s3[1], os.path.join(rd, s), False, False) return m
def find_user_setups(): rd = resource.user_resource_dir(resource.setup_dir) m = Menu('User Setups') for (sp, sd, sn) in resource.safe_walk(rd): for s in filter(filter_valid_setup, sn): s3 = upgrade.split_setup(s) m.add_setup(urllib.unquote(s3[0]), s3[1], os.path.join(rd, s), False, True) return m
def get_setup_slot(slot): slot = slot.strip() rd = resource.user_resource_dir(resource.setup_dir) for (sp, sd, sn) in resource.safe_walk(rd): for s in filter(filter_valid_setup, sn): s3 = upgrade.split_setup(s) if s3[1] == slot: # unencode url encoded illegal chars to display them properly return urllib.unquote(s3[0]) or 'none' return ''
def find_old_setups(): m = Menu("Previous Versions") for v in resource.find_installed_versions(filter_upgradeable_version): rd = resource.user_resource_dir(resource.setup_dir, version=v) for (sp, sd, sn) in resource.safe_walk(rd): sd = () sv = filter(filter_valid_setup, sn) if sv: m2 = Menu(v) for s in sv: s3 = upgrade.split_setup(s) m2.add_setup(urllib.unquote(s3[0]), s3[1], os.path.join(rd, s), True, False) m.add_child(m2) return m
def find_user_setups_flat(): rd = resource.user_resource_dir(resource.setup_dir) t = piw.term("tree", 0) t.add_arg(-1, piw.term(piw.makestring('user setups', 0))) for (sp, sd, sn) in resource.safe_walk(rd): for s in filter(filter_valid_setup, sn): t3 = piw.term('leaf', 0) s3 = upgrade.split_setup(s) # unencode url encoded illegal chars to display them properly name = piw.term(piw.makestring(urllib.unquote(s3[0]), 0)) if s3[0] else piw.term() slot = piw.term(piw.makestring(s3[1], 0)) t3.add_arg(-1, name) t3.add_arg(-1, slot) t3.add_arg(-1, piw.term(piw.makestring(os.path.join(rd, s), 0))) t3.add_arg(-1, piw.term(piw.makebool(False, 0))) t3.add_arg(-1, piw.term(piw.makebool(True, 0))) t.add_arg(-1, t3) return t
def load_file(self,path,upgrade_flag = False,post_load = True): while self.__busy is not None: print 'waiting for current load/save operation to complete' r = async.Deferred() self.__busy.append(r) self.__abort = True self.call_load_status() yield r self.__busy = [] self.__abort = False label = upgrade.split_setup(os.path.basename(path))[1] self.__backend.load_started(label) self.__backend.stop_gc() self.call_load_status('Preparing',0) if self.__abort: yield async.Coroutine.success('aborted') snapshot = self.__backend.run_foreground_sync(upgrade.prepare_file,path,version.version) print 'loading from version',snapshot.version(),'in',path agents = set(all_agents(snapshot)) for m in self.index.members(): if self.__abort: yield async.Coroutine.success('aborted') ma = m.address m.enable_save(False) if ma in agents: qa = self.index.to_absolute(ma) r = rpc.invoke_rpc(qa,'preload',path) yield r r = self.__load1(snapshot,label,path) yield r yield self.index.sync() e = r.args()[0] if post_load: self.call_load_status('Final Initialisation',100) yield self.post_load(path) self.call_load_status('Cleaning up',100) yield timeout.Timer(1000) self.__backend.start_gc() if e: self.__backend.load_ended(e) else: self.__backend.load_ended() if self.__busy: busy_copy = self.__busy[:] self.__busy = None for b in busy_copy: b.succeeded() else: self.__busy = None yield async.Coroutine.completion(r.status(),e)