From 48fea9e87a24fadcd2b1cfc0cae9f0e1bbeb9427 Mon Sep 17 00:00:00 2001 From: Marcus Ponting Date: Fri, 23 Feb 2018 15:11:45 +0000 Subject: [PATCH] Rework sponsr filter to test for true/false --- PokeAlarm/Filters/EggFilter.py | 15 +++++----- PokeAlarm/Filters/RaidFilter.py | 17 ++++++----- PokeAlarm/Utilities/GymUtils.py | 7 +++++ tests/filters/test_egg_filter.py | 48 +++++++++++++++++++++++++++++-- tests/filters/test_raid_filter.py | 43 +++++++++++++++++++++++++++ tools/webhook_test.py | 22 +++++++------- 6 files changed, 123 insertions(+), 29 deletions(-) diff --git a/PokeAlarm/Filters/EggFilter.py b/PokeAlarm/Filters/EggFilter.py index c7e5adaa4..88d993f15 100644 --- a/PokeAlarm/Filters/EggFilter.py +++ b/PokeAlarm/Filters/EggFilter.py @@ -1,6 +1,5 @@ # Standard Library Imports import operator -import re # 3rd Party Imports # Local Imports from . import BaseFilter @@ -53,16 +52,16 @@ def __init__(self, name, data): GymUtils.create_regex, 'gym_name_excludes', data)) # Gym sponsor - self.gym_sponsor_index_contains = self.evaluate_attribute( - event_attribute='gym_sponsor', eval_func=GymUtils.match_regex_dict, - limit=BaseFilter.parse_as_set( - re.compile, 'gym_sponsor_index_contains', data)) + self.is_sponsor = self.evaluate_attribute( # f.sponsor > 0 + event_attribute='gym_sponsor', eval_func=GymUtils.is_sponsor, + limit=BaseFilter.parse_as_type( + bool, 'is_sponsor', data)) # Gym park self.gym_park_contains = self.evaluate_attribute( # f.gp matches e.gp event_attribute='gym_park', eval_func=GymUtils.match_regex_dict, limit=BaseFilter.parse_as_set( - re.compile, 'gym_park_contains', data)) + GymUtils.create_regex, 'gym_park_contains', data)) # Team Info self.old_team = self.evaluate_attribute( # f.ctis contains m.cti @@ -107,8 +106,8 @@ def to_dict(self): settings['gym_name_matches'] = self.gym_name_contains # Gym Sponsor - if self.gym_sponsor_index_contains is not None: - settings['gym_sponsor_matches'] = self.gym_sponsor_index_contains + if self.is_sponsor is not None: + settings['ym_is_sponsor'] = self.is_sponsor # Gym Park if self.gym_park_contains is not None: diff --git a/PokeAlarm/Filters/RaidFilter.py b/PokeAlarm/Filters/RaidFilter.py index 29a9f79aa..f8f343c1d 100644 --- a/PokeAlarm/Filters/RaidFilter.py +++ b/PokeAlarm/Filters/RaidFilter.py @@ -1,6 +1,5 @@ # Standard Library Imports import operator -import re # 3rd Party Imports # Local Imports from . import BaseFilter @@ -80,16 +79,16 @@ def __init__(self, name, data): GymUtils.create_regex, 'gym_name_excludes', data)) # Gym sponsor - self.gym_sponsor_index_contains = self.evaluate_attribute( - event_attribute='gym_sponsor', eval_func=GymUtils.match_regex_dict, - limit=BaseFilter.parse_as_set( - re.compile, 'gym_sponsor_index_contains', data)) + self.is_sponsor = self.evaluate_attribute( # f.sponsor > 0 + event_attribute='gym_sponsor', eval_func=GymUtils.is_sponsor, + limit=BaseFilter.parse_as_type( + bool, 'is_sponsor', data)) # Gym park - self.gym_park_contains = self.evaluate_attribute( + self.gym_park_contains = self.evaluate_attribute( # f.gp matches e.gp event_attribute='gym_park', eval_func=GymUtils.match_regex_dict, limit=BaseFilter.parse_as_set( - re.compile, 'gym_park_contains', data)) + GymUtils.create_regex, 'gym_park_contains', data)) # Team Info self.old_team = self.evaluate_attribute( # f.ctis contains m.cti @@ -146,8 +145,8 @@ def to_dict(self): settings['gym_name_matches'] = self.gym_name_contains # Gym Sponsor - if self.gym_sponsor_index_contains is not None: - settings['gym_sponsor_matches'] = self.gym_sponsor_index_contains + if self.is_sponsor is not None: + settings['ym_is_sponsor'] = self.is_sponsor # Gym Park if self.gym_park_contains is not None: diff --git a/PokeAlarm/Utilities/GymUtils.py b/PokeAlarm/Utilities/GymUtils.py index 475a8d1db..12d61ce43 100644 --- a/PokeAlarm/Utilities/GymUtils.py +++ b/PokeAlarm/Utilities/GymUtils.py @@ -52,3 +52,10 @@ def not_match_regex_dict(reg_exs, name): if reg_ex.search(name): return False return True + + +def is_sponsor(sponsor_filter, sponsor): + if sponsor_filter: + return sponsor > 0 + else: + return sponsor == 0 diff --git a/tests/filters/test_egg_filter.py b/tests/filters/test_egg_filter.py index 26cfea97d..ae842d464 100755 --- a/tests/filters/test_egg_filter.py +++ b/tests/filters/test_egg_filter.py @@ -39,7 +39,6 @@ def test_gym_names(self): settings = {"gym_name_contains": ["pass"]} egg_filter = Filters.EggFilter('filter1', settings) - # Generate events that should pass # Generate events that should pass pass1 = Events.EggEvent(generate_egg({"name": "pass1"})) pass2 = Events.EggEvent(generate_egg({"name": "2pass"})) @@ -58,6 +57,7 @@ def test_gym_names(self): for e in [fail1, fail2, fail3]: self.assertFalse(egg_filter.check_event(e)) +<<<<<<< HEAD def test_gym_name_excludes(self): # Create the filters settings = {"gym_name_excludes": ["fail"]} @@ -73,6 +73,29 @@ def test_gym_name_excludes(self): event = Events.EggEvent(generate_egg({"name": r})) self.assertFalse(egg_filter.check_event(event)) + def test_gym_park(self): + # Create the filters + settings = {"gym_park_contains": ["pass"]} + egg_filter = Filters.EggFilter('filter1', settings) + + # Generate events that should pass + pass1 = Events.EggEvent(generate_egg({"park": "pass1"})) + pass2 = Events.EggEvent(generate_egg({"park": "2pass"})) + pass3 = Events.EggEvent(generate_egg({"park": "3pass3"})) + + # Test passing events + for e in [pass1, pass2, pass3]: + self.assertTrue(egg_filter.check_event(e)) + + # Generate events that should fail + fail1 = Events.EggEvent(generate_egg({"park": "fail1"})) + fail2 = Events.EggEvent(generate_egg({"park": "failpas"})) + fail3 = Events.EggEvent(generate_egg({"park": "pasfail"})) + + # Test failing events + for e in [fail1, fail2, fail3]: + self.assertFalse(egg_filter.check_event(e)) + def test_current_team(self): # Create the filters settings = {"current_teams": [1, "2", "Instinct"]} @@ -93,6 +116,25 @@ def test_current_team(self): for e in [fail1]: self.assertFalse(egg_filter.check_event(e)) + def test_is_sponsor(self): + # Create the filters + settings = {"is_sponsor": False} + egg_filter = Filters.EggFilter('filter1', settings) + + # Generate events that should pass + pass1 = Events.EggEvent(generate_egg({"sponsor": 0})) + + # Test passing events + for e in [pass1]: + self.assertTrue(egg_filter.check_event(e)) + + # Generate events that should fail + fail1 = Events.EggEvent(generate_egg({"sponsor": 4})) + + # Test failing events + for e in [fail1]: + self.assertFalse(egg_filter.check_event(e)) + def test_missing_info1(self): # Create the filters settings = {"max_dist": "inf", "is_missing_info": True} @@ -189,7 +231,9 @@ def generate_egg(values): "end": 1499246052, "level": 5, "latitude": 37.7876146, - "longitude": -122.390624 + "longitude": -122.390624, + "sponsor": 4, + "gym_park": "Test Park" } egg.update(values) return egg diff --git a/tests/filters/test_raid_filter.py b/tests/filters/test_raid_filter.py index 986e8432e..43e89865f 100755 --- a/tests/filters/test_raid_filter.py +++ b/tests/filters/test_raid_filter.py @@ -122,6 +122,7 @@ def test_gym_names(self): for e in [fail1, fail2, fail3]: self.assertFalse(raid_filter.check_event(e)) +<<<<<<< HEAD def test_gym_name_excludes(self): # Create the filters settings = {"gym_name_excludes": ["fail"]} @@ -137,6 +138,29 @@ def test_gym_name_excludes(self): event = Events.RaidEvent(generate_raid({"name": r})) self.assertFalse(raid_filter.check_event(event)) + def test_gym_park(self): + # Create the filters + settings = {"gym_park_contains": ["pass"]} + raid_filter = Filters.RaidFilter('filter1', settings) + + # Generate events that should pass + pass1 = Events.EggEvent(generate_raid({"park": "pass1"})) + pass2 = Events.EggEvent(generate_raid({"park": "2pass"})) + pass3 = Events.EggEvent(generate_raid({"park": "3pass3"})) + + # Test passing events + for e in [pass1, pass2, pass3]: + self.assertTrue(raid_filter.check_event(e)) + + # Generate events that should fail + fail1 = Events.EggEvent(generate_raid({"park": "fail1"})) + fail2 = Events.EggEvent(generate_raid({"park": "failpas"})) + fail3 = Events.EggEvent(generate_raid({"park": "pasfail"})) + + # Test failing events + for e in [fail1, fail2, fail3]: + self.assertFalse(raid_filter.check_event(e)) + def test_current_team(self): # Create the filters settings = {"current_teams": [1, "2", "Instinct"]} @@ -157,6 +181,25 @@ def test_current_team(self): for e in [fail1]: self.assertFalse(raid_filter.check_event(e)) + def test_is_sponsor(self): + # Create the filters + settings = {"is_sponsor": False} + raid_filter = Filters.RaidFilter('filter1', settings) + + # Generate events that should pass + pass1 = Events.RaidEvent(generate_raid({"sponsor": 0})) + + # Test passing events + for e in [pass1]: + self.assertTrue(raid_filter.check_event(e)) + + # Generate events that should fail + fail1 = Events.RaidEvent(generate_raid({"sponsor": 4})) + + # Test failing events + for e in [fail1]: + self.assertFalse(raid_filter.check_event(e)) + def test_missing_info1(self): # Create the filters settings = {"max_dist": "inf", "is_missing_info": True} diff --git a/tools/webhook_test.py b/tools/webhook_test.py index d44715055..df6359a7b 100644 --- a/tools/webhook_test.py +++ b/tools/webhook_test.py @@ -125,12 +125,13 @@ def set_init(webhook_type): "type": "raid", "message": { "gym_id": 0, - "gym_name": "unknown", + "name": "Test gym", + "team": 1, "park": None, - "sponsor": 4, + "sponsor": 0, "level": 5, "latitude": 37.7876146, - "longitude": -122.390624 + "longitude": -122.390624, } } elif webhook_type == whtypes["5"]: @@ -138,17 +139,18 @@ def set_init(webhook_type): "type": "raid", "message": { "gym_id": 0, - "gym_name": "unknown", - "park": "Test Park", - "sponsor": 4, + "name": "Test gym", + "team": 1, + "park": None, + "sponsor": 0, + "weather": 5, "pokemon_id": 150, "cp": 12345, "move_1": 123, "move_2": 123, "level": 5, "latitude": 37.7876146, - "longitude": -122.390624, - "weather": 0 + "longitude": -122.390624 } } @@ -295,10 +297,10 @@ def get_and_validate_team(): payload = set_init(type) print "What is the URL of where you would like to send the webhook? " \ - + "(default: http://127.0.0.1:4000)\n>", + + "(default: http://127.0.0.1:4022)\n>", url = raw_input() if url == '' or url.isspace(): - url = "http://127.0.0.1:4000" + url = "http://127.0.0.1:4022" print "Assuming " + url + " as webhook URL" print "Does location matter or do you use geofences? (Y/N)\n>",