def update(self): """Get info and communicate any change.""" local_suites = SuiteId.get_checked_out_suite_ids() if local_suites == self.local_suites: return self.local_suites = local_suites self.queue.put(local_suites)
def query_local_copies(self, user=None): """Returns details of the local suites. As if they had been obtained using a search or query. """ suite_ids = [] for suite_id in SuiteId.get_checked_out_suite_ids(user=user): if suite_id.prefix in self.prefixes: suite_ids.append(suite_id) if not suite_ids: return [] # Simple query results = [] queued_suite_ids = list(suite_ids) while queued_suite_ids: # Batch up queries q_list = [] for _ in range(self.MAX_LOCAL_QUERIES): if not queued_suite_ids: break suite_id = queued_suite_ids.pop() q_list.append("or ( idx eq %s" % suite_id.idx) q_list.append("and branch eq %s )" % suite_id.branch) for data, _ in self.query(q_list): results.extend(data) result_idx_branches = [] for result in results: result_idx_branches.append((result[u"idx"], result[u"branch"])) # A branch may have been deleted - query with all_revs=1. # We only want to use all_revs on demand as it's slow. queued_suite_ids = [] for suite_id in suite_ids: if (suite_id.idx, suite_id.branch) not in result_idx_branches: queued_suite_ids.append(suite_id) if not queued_suite_ids: return results while queued_suite_ids: # Batch up queries q_list = [] for _ in range(self.MAX_LOCAL_QUERIES): if not queued_suite_ids: break suite_id = queued_suite_ids.pop() q_list.append("or ( idx eq %s" % suite_id.idx) q_list.append("and branch eq %s )" % suite_id.branch) more_results = [] for data, _ in self.query(q_list, all_revs=1): more_results.extend(data) new_results = {} for result in more_results: idx_branch = (result[u"idx"], result[u"branch"]) if (idx_branch not in new_results or result[u"revision"] > new_results[idx_branch][u"revision"]): new_results.update({idx_branch: result}) for _, result in sorted(new_results.items()): results.append(result) return results
def query_local_copies(self, user=None): """Returns details of the local suites. As if they had been obtained using a search or query. """ suite_ids = [] for suite_id in SuiteId.get_checked_out_suite_ids(user=user): if suite_id.prefix in self.prefixes: suite_ids.append(suite_id) if not suite_ids: return [] q_list = [] for suite_id in suite_ids: q_list.append("or ( idx eq %s" % suite_id.idx) q_list.append("and branch eq %s )" % suite_id.branch) results = [] for data, _ in self.query(q_list): results.extend(data) result_idx_branches = [] for result in results: result_idx_branches.append((result[u"idx"], result[u"branch"])) q_list = [] for suite_id in suite_ids: if (suite_id.idx, suite_id.branch) in result_idx_branches: continue # A branch may have been deleted - we need all_revs=1. # We only want to use all_revs on demand as it's slow. q_list.append("or ( idx eq %s" % suite_id.idx) q_list.append("and branch eq %s )" % suite_id.branch) if q_list: more_results = [] for data, _ in self.query(q_list, all_revs=1): more_results.extend(data) new_results = {} for result in more_results: idx_branch = (result[u"idx"], result[u"branch"]) if (idx_branch not in new_results or result[u"revision"] > new_results[idx_branch][u"revision"]): new_results.update({idx_branch: result}) for _, result in sorted(new_results.items()): results.append(result) return results