def read(self, query, log=None): self.items = [] for item in self.do_query(query): new_item = self._empty_item() new_item['key'] = item.key new_item['summary'] = Jira.strip_non_ascii( Jira.remove_version_and_platform(item.fields.summary)) new_item['description'] = Jira.strip_non_ascii( item.fields.description) new_item['item'] = item self.items.append(new_item) try: self._add_to_dict(self.items_by_key, new_item['key'], new_item, "key") except KeyError as e: pass # log.logger.warning("%s", e) try: self._add_to_dict(self.items_by_summary, new_item['summary'], new_item, "summary") except KeyError as e: pass # log.logger.warning("%s", e) try: self._add_to_dict(self.items_by_description, new_item['description'], new_item, "description") except KeyError as e: pass
def read_items(query, log=None): """Read items into summary based dictionary, warning on duplicates""" dictionary = {} for item in jira.do_query(query): item_key = Jira.remove_version_and_platform(Jira.strip_non_ascii(item.fields.summary)) if item_key not in dictionary: dictionary[item_key] = [item] else: # So, what we have now is a POTENTIAL duplicate. figure out if it really is. if item.key != dictionary[item_key][0].key: # Yep, it's not the same item key... dictionary[item_key].append(item) log.logger.debug("Item key '%s' : '%s' creates a duplicate entry with key '%s': '%s'", item.key, item.fields.summary, dictionary[item_key][0].key, dictionary[item_key][0].fields.summary) pass return dictionary
def compare_items(item_kind, source_name, source_query, target_name, target_query, log=None): def read_items(query, log=None): """Read items into summary based dictionary, warning on duplicates""" dictionary = {} for item in jira.do_query(query): item_key = Jira.remove_version_and_platform(Jira.strip_non_ascii(item.fields.summary)) if item_key not in dictionary: dictionary[item_key] = [item] else: # So, what we have now is a POTENTIAL duplicate. figure out if it really is. if item.key != dictionary[item_key][0].key: # Yep, it's not the same item key... dictionary[item_key].append(item) log.logger.debug("Item key '%s' : '%s' creates a duplicate entry with key '%s': '%s'", item.key, item.fields.summary, dictionary[item_key][0].key, dictionary[item_key][0].fields.summary) pass return dictionary def scan_dups(source_dict, printit): for k, v in source_dict.items(): if len(v) > 1: keys = [] for item in v: keys.append(item.key) printit(keys, k) return source = read_items(source_query, log) scan_dups(source, lambda x, y: log.logger.error("Duplicate %s summaries: %s '%s'", source_name, x, y)) log.logger.info( "Source has %d items in dictionary", len(source)) target = read_items(target_query, log) scan_dups(target, lambda x, y: log.logger.error("Duplicate %s summaries: %s '%s'", target_name, x, y)) log.logger.info( "Target has %d items in dictionary", len(target)) # -- Everything in source should be copied to target: not_in_target = [{'source': value[0].key, 'summary': key} for key, value in source.items() if Jira.remove_version_and_platform(Jira.strip_non_ascii(key)) not in target] if len(not_in_target) > 0: log.logger.error("") log.logger.error("Could not find %s %s (source) %s summary items in target: ", len(not_in_target), source_name, item_kind) log.logger.error("") for item in not_in_target: log.logger.error("Source '%s', summary text: '%s'", item['source'], item['summary']) log.logger.error("--") # # -- Target should not have stuff in it that's not from the source!: not_in_source = [{'target': value[0].key, 'summary': Jira.remove_version_and_platform(Jira.strip_non_ascii(key))} for key, value in target.items() if Jira.remove_version_and_platform(Jira.strip_non_ascii(key)) not in source] if len(not_in_source) > 0: log.logger.error("") log.logger.error("Could not find %s %s (target) %s summary items in source: ", len(not_in_source), target_name, item_kind) log.logger.error("") for item in not_in_source: log.logger.error("%s Target '%s', summary text: '%s'", item_kind, item['target'], item['summary']) log.logger.error("--") return