From b760a6b9d5c809c11c61e5f7500d129107de1671 Mon Sep 17 00:00:00 2001 From: Robert Kern Date: Wed, 19 Jul 2017 07:22:54 +1200 Subject: [PATCH 1/3] #11 - Updating url decorator to allow for place.scope/exact --- predicthq/endpoints/decorators.py | 5 ++++- tests/endpoints/v1/events_tests.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/predicthq/endpoints/decorators.py b/predicthq/endpoints/decorators.py index 5a1b4a5..63f449c 100644 --- a/predicthq/endpoints/decorators.py +++ b/predicthq/endpoints/decorators.py @@ -22,7 +22,10 @@ def _to_url_params(data, glue=".", separator=","): params[key] = separator.join(map(six.text_type, value)) elif isinstance(value, dict): for subkey, subvalue in six.iteritems(value): - params[glue.join((key, subkey))] = subvalue + if isinstance(subvalue, list): + params[glue.join((key, subkey))] = separator.join(map(six.text_type, subvalue)) + else: + params[glue.join((key, subkey))] = subvalue else: params[key] = value return params diff --git a/tests/endpoints/v1/events_tests.py b/tests/endpoints/v1/events_tests.py index 517fb2b..a273e1e 100644 --- a/tests/endpoints/v1/events_tests.py +++ b/tests/endpoints/v1/events_tests.py @@ -16,13 +16,17 @@ def test_search_params(self, client): client.events.search(id="id", q="query", rank_level=[4,5], rank__gt=85, country=["NZ", "AU"], within__radius="2km", within__longitude=-71.0432, within__latitude=42.346, label=["label1", "label2"], category="category", + place__scope=["place1", "place2"], place__exact=["place3"], start__gte="2016-03-01", start__lt=datetime(2016, 4, 1), start__tz="Pacific/Auckland", + active__gte="2016-03-01", active__lt=datetime(2016, 4, 1), active__tz="Pacific/Auckland", signal__id='zVNLr8tHvWQw', signal__explain=datetime(2016, 4, 1)) client.request.assert_called_once_with('get', '/v1/events/', params={ 'id': 'id', 'rank.gt': 85, 'rank_level': '4,5', 'category': 'category', 'country': 'NZ,AU', 'within': '2km@42.346,-71.0432', 'label': 'label1,label2', 'q': 'query', + 'place.scope': 'place1,place2', 'place.exact': 'place3', 'start.lt': '2016-04-01T00:00:00.000000', 'start.gte': '2016-03-01T00:00:00.000000', 'start.tz': 'Pacific/Auckland', + 'active.lt': '2016-04-01T00:00:00.000000', 'active.gte': '2016-03-01T00:00:00.000000', 'active.tz': 'Pacific/Auckland', 'signal.id': 'zVNLr8tHvWQw', 'signal.explain': '2016-04-01'}) @with_mock_client() From a8cee49f3e2fdc208bbd47483063f51b0e96e99b Mon Sep 17 00:00:00 2001 From: Robert Kern Date: Wed, 19 Jul 2017 09:28:29 +1200 Subject: [PATCH 2/3] Updating tests to use dict for place param and updating readme example request --- README.rst | 8 ++++---- tests/endpoints/v1/events_tests.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 286313e..ff4eb31 100644 --- a/README.rst +++ b/README.rst @@ -27,12 +27,12 @@ Usage .. code-block:: python from predicthq import Client - + phq = Client(access_token="$ACCESS_TOKEN") - - for event in phq.events.search(q="Foo Fighters", rank_level=[4, 5], country='US'): + + for event in phq.events.search(q="Foo Fighters", rank_level=[4, 5], place={"scope": ["5391959", "5368361"]}): print(event.rank, event.category, event.title, event.start.strftime('%Y-%m-%d'))) - + Endpoints ######### diff --git a/tests/endpoints/v1/events_tests.py b/tests/endpoints/v1/events_tests.py index a273e1e..7feeee4 100644 --- a/tests/endpoints/v1/events_tests.py +++ b/tests/endpoints/v1/events_tests.py @@ -16,7 +16,7 @@ def test_search_params(self, client): client.events.search(id="id", q="query", rank_level=[4,5], rank__gt=85, country=["NZ", "AU"], within__radius="2km", within__longitude=-71.0432, within__latitude=42.346, label=["label1", "label2"], category="category", - place__scope=["place1", "place2"], place__exact=["place3"], + place={"scope": ["place1", "place2"], "exact": "place3"}, start__gte="2016-03-01", start__lt=datetime(2016, 4, 1), start__tz="Pacific/Auckland", active__gte="2016-03-01", active__lt=datetime(2016, 4, 1), active__tz="Pacific/Auckland", signal__id='zVNLr8tHvWQw', signal__explain=datetime(2016, 4, 1)) From 2e7afe5b385ae23a36cbd8a674dada785e5e4728 Mon Sep 17 00:00:00 2001 From: Robert Kern Date: Wed, 19 Jul 2017 09:42:18 +1200 Subject: [PATCH 3/3] Updating tests to check both underscores and dicts for event params --- tests/endpoints/v1/events_tests.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tests/endpoints/v1/events_tests.py b/tests/endpoints/v1/events_tests.py index 7feeee4..0b3c241 100644 --- a/tests/endpoints/v1/events_tests.py +++ b/tests/endpoints/v1/events_tests.py @@ -12,14 +12,32 @@ class EventsTest(unittest.TestCase): @with_mock_client() - def test_search_params(self, client): + def test_search_params_underscores(self, client): client.events.search(id="id", q="query", rank_level=[4,5], rank__gt=85, country=["NZ", "AU"], within__radius="2km", within__longitude=-71.0432, within__latitude=42.346, label=["label1", "label2"], category="category", - place={"scope": ["place1", "place2"], "exact": "place3"}, + place__scope=["place1", "place2"], place__exact=["place3"], start__gte="2016-03-01", start__lt=datetime(2016, 4, 1), start__tz="Pacific/Auckland", active__gte="2016-03-01", active__lt=datetime(2016, 4, 1), active__tz="Pacific/Auckland", - signal__id='zVNLr8tHvWQw', signal__explain=datetime(2016, 4, 1)) + signal__id="zVNLr8tHvWQw", signal__explain=datetime(2016, 4, 1)) + + client.request.assert_called_once_with('get', '/v1/events/', params={ + 'id': 'id', 'rank.gt': 85, 'rank_level': '4,5', 'category': 'category', 'country': 'NZ,AU', + 'within': '2km@42.346,-71.0432', 'label': 'label1,label2', 'q': 'query', + 'place.scope': 'place1,place2', 'place.exact': 'place3', + 'start.lt': '2016-04-01T00:00:00.000000', 'start.gte': '2016-03-01T00:00:00.000000', 'start.tz': 'Pacific/Auckland', + 'active.lt': '2016-04-01T00:00:00.000000', 'active.gte': '2016-03-01T00:00:00.000000', 'active.tz': 'Pacific/Auckland', + 'signal.id': 'zVNLr8tHvWQw', 'signal.explain': '2016-04-01'}) + + @with_mock_client() + def test_search_params_dicts(self, client): + client.events.search(id="id", q="query", rank_level=[4,5], rank={"gt": 85}, country=["NZ", "AU"], + within={"radius": "2km", "longitude": -71.0432, "latitude": 42.346}, + label=["label1", "label2"], category="category", + place={"scope": ["place1", "place2"], "exact": "place3"}, + start={"gte": "2016-03-01", "lt": datetime(2016, 4, 1), "tz": "Pacific/Auckland"}, + active={"gte": "2016-03-01", "lt": datetime(2016, 4, 1), "tz": "Pacific/Auckland"}, + signal={"id": "zVNLr8tHvWQw", "explain": datetime(2016, 4, 1)}) client.request.assert_called_once_with('get', '/v1/events/', params={ 'id': 'id', 'rank.gt': 85, 'rank_level': '4,5', 'category': 'category', 'country': 'NZ,AU',