def iter_types(self): price_map = dict(self.Prices) for kind, parsed in self.result_list(): for item in iter_types(kind, parsed): details = get_type_by_name(item['name']) item['prices'] = None if details: item.update(details) item['prices'] = price_map.get(item['typeID']) if 'BLUEPRINT COPY' in item.get('details', ''): item['bpc'] = True item['prices'] = None item['quantity'] = item.get('quantity', 1) yield item
def iter_types(self): price_map = dict(self.Prices) for kind, parsed in self.result_list(): for item in iter_types(kind, parsed): details = get_type_by_name(item["name"]) item["prices"] = None if details: item.update(details) item["prices"] = price_map.get(item["typeID"]) if "BLUEPRINT COPY" in item.get("details", ""): item["bpc"] = True item["prices"] = None item["quantity"] = item.get("quantity", 1) yield item
def parse(raw_paste): unique_items = set() results = [] representative_kind = 'unknown' largest_kind_num = 0 parser_list = [('loot_history', parsers.parse_loot_history), ('survey_scanner', parsers.parse_survey_scanner), ('pi', parsers.parse_pi), ('dscan', dscan_parser), ('killmail', parsers.parse_killmail), ('chat', parsers.parse_chat), ('eft', parsers.parse_eft), ('fitting', parsers.parse_fitting), ('contract', parsers.parse_contract), ('assets', parsers.parse_assets), ('view_contents', parsers.parse_view_contents), ('wallet', parsers.parse_wallet), ('cargo_scan', parsers.parse_cargo_scan), ('listing', listing_parser), ('heuristic', tryhard_parser)] iterations = 0 while iterations < 10: iterations += 1 try: if not parser_list: break kind, result, bad_lines = evepaste.parse(raw_paste, parsers=parser_list) if result: # Verify the results has some valid items and gather unique # items item_count = 0 for item in iter_types(kind, result): details = get_type_by_name(item['name']) if details: unique_items.add(details['typeID']) item_count += 1 if item_count == 0: # Narrow down the parser_list to those that didn't get a # chance last time used_parser_list = list(takewhile(lambda p: kind != p[0], parser_list)) parser_list = parser_list[len(used_parser_list)+1:] continue results.append([kind, result]) # Determine if this is the representative type if item_count >= largest_kind_num: representative_kind = kind largest_kind_num = item_count raw_paste = '\n'.join(bad_lines) else: # We found zero results, we're done parsing break # We're finished parsing because we've consumed all of our data if not bad_lines: break except evepaste.Unparsable: if results: break else: raise return {'representative_kind': representative_kind, 'results': results, 'bad_lines': bad_lines, 'unique_items': unique_items}
def parse(raw_paste): unique_items = set() results = [] representative_kind = "unknown" largest_kind_num = 0 parser_list = list(evepaste.PARSER_TABLE) + [("listing", listing_parser), ("heuristic", tryhard_parser)] iterations = 0 while iterations < 10: iterations += 1 try: if not parser_list: break kind, result, bad_lines = evepaste.parse(raw_paste, parsers=parser_list) if result: # Verify the results has some valid items and gather unique # items item_count = 0 for item in iter_types(kind, result): details = get_type_by_name(item["name"]) if details: unique_items.add(details["typeID"]) item_count += 1 if item_count == 0: # Narrow down the parser_list to those that didn't get a # chance last time used_parser_list = list(takewhile(lambda p: kind != p[0], parser_list)) parser_list = parser_list[len(used_parser_list) + 1 :] continue results.append([kind, result]) # Determine if this is the representative type if item_count >= largest_kind_num: representative_kind = kind largest_kind_num = item_count raw_paste = "\n".join(bad_lines) else: # We found zero results, we're done parsing break # We're finished parsing because we've consumed all of our data if not bad_lines: break except evepaste.Unparsable: if results: break else: raise return { "representative_kind": representative_kind, "results": results, "bad_lines": bad_lines, "unique_items": unique_items, }