Skip to content

Commit

Permalink
Merge pull request #9 from aericson/save-response-in-client
Browse files Browse the repository at this point in the history
Save response in client
  • Loading branch information
filipeximenes committed Jul 2, 2015
2 parents 41deaa7 + 03764a3 commit 27013df
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion docs/newflavour.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class FacebookClientAdapter(TapiocaAdapter):
return response_data['data']

def get_iterator_next_request_kwargs(self,
iterator_request_kwargs, response_data):
iterator_request_kwargs, response_data, response):
paging = response_data.get('paging')
if not paging:
return
Expand Down
28 changes: 16 additions & 12 deletions tapioca/tapioca.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@ def __call__(self, *args, **kwargs):

class TapiocaClient(object):

def __init__(self, api, data=None, request_kwargs=None, api_params={},
resource=None, *args, **kwargs):
def __init__(self, api, data=None, response=None, request_kwargs=None,
api_params={}, resource=None, *args, **kwargs):
self._api = api
self._data = data
self._response = response
self._api_params = api_params
self._request_kwargs = request_kwargs
self._resource = resource
Expand Down Expand Up @@ -126,7 +127,12 @@ def __next__(self):
def data(self):
return self._data

def _make_request(self, request_method, raw=False, *args, **kwargs):
def response(self):
if self._response is None:
raise Exception("This TapiocaClient instance has no response object")
return self._response

def _make_request(self, request_method, *args, **kwargs):
request_kwargs = self._api.get_request_kwargs(self._api_params)

if 'params' in request_kwargs:
Expand All @@ -144,18 +150,14 @@ def _make_request(self, request_method, raw=False, *args, **kwargs):
request_kwargs['url'] = self._data

response = requests.request(request_method, **request_kwargs)
if not raw:
response = self._api.response_to_native(response)
data = self._api.response_to_native(response)

return TapiocaClient(self._api.__class__(), data=response,
request_kwargs=request_kwargs, api_params=self._api_params)
return TapiocaClient(self._api.__class__(), data=data, response=response,
request_kwargs=request_kwargs, api_params=self._api_params)

def get(self, *args, **kwargs):
return self._make_request('GET', *args, **kwargs)

def raw_get(self, *args, **kwargs):
return self._make_request('GET', raw=True, *args, **kwargs)

def post(self, *args, **kwargs):
return self._make_request('POST', *args, **kwargs)

Expand All @@ -172,12 +174,13 @@ def next(self):
iterator_list = self._api.get_iterator_list(self._data)
if self._iterator_index >= len(iterator_list):
new_request_kwargs = self._api.get_iterator_next_request_kwargs(
self._request_kwargs, self._data)
self._request_kwargs, self._data, self._response)

if new_request_kwargs:
cli = TapiocaClientExecutor(self._api.__class__(), api_params=self._api_params)
response = cli.get(**new_request_kwargs)
self._data = response._data
self._response = response
self._iterator_index = 0
else:
raise StopIteration()
Expand Down Expand Up @@ -217,6 +220,7 @@ def get_request_kwargs(self, api_params):
def get_iterator_list(self, response_data):
raise NotImplementedError()

def get_iterator_next_request_kwargs(self, iterator_request_kwargs, response_data):
def get_iterator_next_request_kwargs(self, iterator_request_kwargs,
response_data, response):
raise NotImplementedError()

2 changes: 1 addition & 1 deletion tests/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def get_iterator_list(self, response_data):
return response_data['data']

def get_iterator_next_request_kwargs(self,
iterator_request_kwargs, response_data):
iterator_request_kwargs, response_data, response):
paging = response_data.get('paging')
if not paging:
return
Expand Down
4 changes: 4 additions & 0 deletions tests/test_tapioca.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ def test_resource_executor_data_should_be_composed_url(self):

self.assertEqual(resource.data(), expected_url)

def test_when_executor_has_no_response(self):
with self.assertRaisesRegexp(Exception, "has no response"):
self.wrapper.test().response()

@responses.activate
def test_get_request(self):
responses.add(responses.GET, self.wrapper.test().data(),
Expand Down

0 comments on commit 27013df

Please sign in to comment.