Example #1
0
    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
Example #2
0
    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
Example #3
0
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}
Example #4
0
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,
    }