diff --git a/analyze_wotb_replays.py b/analyze_wotb_replays.py index 9916d70..dca8925 100755 --- a/analyze_wotb_replays.py +++ b/analyze_wotb_replays.py @@ -324,8 +324,7 @@ class BattleCategorizationList(): def __init__(self, cats: list): self.urls = collections.OrderedDict() - self.url_title_max_len = 0 - + self.url_title_max_len = 0 cats = list(set(cats)) # remove duplicates # ordering @@ -355,6 +354,11 @@ class BattleCategorizationList(): bu.error('BattleCategorizationList()', exception=err) + def __iter__(self): + """Returns the Iterator object""" + return BattleCategorizationListIterator(self) + + def get_categorization(self, cat: str): """Return a BattleCategorization for a category""" try: @@ -458,6 +462,20 @@ class BattleCategorizationList(): return None +class BattleCategorizationListIterator(): + def __init__(self, btl_cats: BattleCategorizationList) -> None: + self._btl_cats = btl_cats + self._ndx = 0 + + def __next__(self): + if self._ndx < len(self._btl_cats.categorizations_list): + cat = self._btl_cats.categorizations_list[self._ndx] + res = self._btl_cats.categorizations[cat] + self._ndx += 1 + return res + raise StopIteration + + class BattleCategorization(): RESULT_CAT_HEADER_LEN = 15 @@ -1783,7 +1801,7 @@ def process_battle_results(results: dict, args : argparse.Namespace): try: url = args.url cats = BattleCategorizationList.get_categorizations(args) - + blt_cat_list= None if args.filters != None: results = filter_results(results, args.filters) @@ -1811,20 +1829,19 @@ def filter_results(results: list, filter_json : str) -> bool: try: filters = json.loads(filter_json) bu.debug(str(filters)) - for filter in filters: - if type(filters[filter]) != list: - filters[filter] = [ filters[filter]] - if type(filters) != dict: - bu.error('invalid --filter arguments: ' + str(filters)) + bu.error('invalid --filter arguments: ' + str(filter)) sys.exit(1) filter_cats = BattleCategorizationList(filters.keys()) - for cat in filters: + bu.verbose('Filters applied:') + for category in filter_cats: + cat = category.category_key categorization = filter_cats.get_categorization(cat) filters[cat] = categorization.get_filter_categories(filters[cat]) - bu.verbose('Filter: ' + cat + ': ' + ','.join(filters[cat])) - + bu.verbose(' ' + cat + ' = ' + ','.join(filters[cat])) + bu.verbose('') + res = list() for result in results: try: @@ -2384,7 +2401,6 @@ async def mk_replayQ(queue : asyncio.Queue, args : argparse.Namespace, db : moto Nreplays += 1 except Exception as err: bu.error(exception=err) - bu.verbose('Finished scanning replays: ' + str(Nreplays) + ' replays to process') return Nreplays