diff --git a/analyze_wotb_replays.py b/analyze_wotb_replays.py index 04f71c1..72fffa2 100755 --- a/analyze_wotb_replays.py +++ b/analyze_wotb_replays.py @@ -511,10 +511,13 @@ class BattleCategorization(): def get_filter_categories(self, filters: list) -> list: - if type(filters) != list: - filters = [ filters ] - return [ x for x in filters if x in self.get_categories() ] - + try: + if type(filters) != list: + filters = [ filters ] + return [ x for x in filters if x in self.get_categories() ] + except Exception as err: + bu.error('Category: ' + str(self.category_key), exception=err) + return None def help(self): """Help""" @@ -733,7 +736,10 @@ class BattleStringCategorization(BattleCategorization): def get_filter_categories(self, filters: list) -> list: try: - return filters + if type(filters) != list: + filters = [ filters ] + return [ x for x in filters if x in self.get_categories() ] + # return filters except Exception as err: bu.error('Category: ' + str(self.category_key), exception=err) return None @@ -769,11 +775,14 @@ class BattleNumberCategorization(BattleCategorization): def get_filter_categories(self, filters: list) -> list: try: + if type(filters) != list: + filters = [ filters ] return list(map(str,filters)) except Exception as err: bu.error('Category: ' + str(self.category_key), exception=err) return None + def help(self): super().help() print('INTEGER') @@ -1477,7 +1486,7 @@ async def main(argv): parser.add_argument('--replays', action='store_true', default=False, help='Export replay info in JSON format') parser.add_argument('-o','--outfile', type=str, default='-', metavar="OUTPUT", help='File to write results. Default STDOUT') parser.add_argument('--db', action='store_true', default=OPT_DB, help='Use DB - You are unlikely to have it') - parser.add_argument('--filters', type=str, default=None, help='Filter replays based on categories. Filters given in JSON format.\nUse array "[]" for multiple filters/values. see --mode help.\nExample: : [ {"tier" : [8,9,10] }, { "player_wins" : 5 }]') + parser.add_argument('--filters', type=str, default=None, help='Filter replays based on categories. Filters given in JSON format.\nUse array "[]" for multiple filters/values. see --mode help.\nExample: : [ {"tank_tier" : [8,9,10] }, { "player_wins" : 5 }]') parser.add_argument('--filters_db', type=str, default=None, help='[only for DB setup] Filter replays in DB based on categories. Filters given in MongoDB JSON format. See --mode help') parser.add_argument('--min', type=int, default=None, help='Only select replays from players with minimum number of replays in the dataset') parser.add_argument('-d', '--debug', action='store_true', default=False, help='Debug mode') @@ -1841,6 +1850,7 @@ def filter_results(results: list, filter_json : str) -> bool: for category in filter_cats: cat = category.category_key categorization = filter_cats.get_categorization(cat) + bu.debug('Category: ' + cat + ' filters type: ' + str(type(filters)) + ' filters: ' + str(filters)) filters[cat] = categorization.get_filter_categories(filters[cat]) bu.verbose(' ' + cat + ' = ' + ','.join(filters[cat])) bu.verbose('')