Skip to content

Commit f846cd1

Browse files
Pass paging off to the fhir data-server (#683)
1 parent b0f82eb commit f846cd1

File tree

2 files changed

+26
-44
lines changed

2 files changed

+26
-44
lines changed

apps/fhir/bluebutton/tests/test_read.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -277,17 +277,6 @@ def catchall(url, req):
277277

278278
self.assertEqual(response.status_code, 200)
279279
self.assertEqual(response.json()['entry'], expected_response['entry'])
280-
self.assertTrue(len(response.json()['link']) > 0)
281-
self.assertIn("_count=5", response.json()['link'][0]['url'])
282-
283-
response = self.client.get(
284-
reverse(
285-
'bb_oauth_fhir_search',
286-
kwargs={'resource_type': 'Patient'}),
287-
{'_count': 6},
288-
Authorization="Bearer %s" % (first_access_token))
289-
290-
self.assertIn("_count=6", response.json()['link'][0]['url'])
291280

292281
def test_search_request_unauthorized(self):
293282
response = self.client.get(

apps/fhir/bluebutton/views/search.py

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -44,50 +44,43 @@ class SearchView(FhirDataView):
4444
]
4545

4646
def get(self, request, resource_type, *args, **kwargs):
47-
serializer = ParamSerializer(data=request.query_params)
48-
serializer.is_valid(raise_exception=True)
49-
query_params = serializer.data
50-
51-
# Verify paging inputs. Casting an invalid int will throw a ValueError
52-
try:
53-
start_index = int(query_params.get(START_PARAMETER, 0))
54-
except ValueError:
55-
raise exceptions.ParseError(detail='%s must be an integer between zero and the number of results' % START_PARAMETER)
56-
57-
if start_index < 0:
58-
raise exceptions.ParseError()
59-
60-
try:
61-
page_size = int(query_params.get(SIZE_PARAMETER, DEFAULT_PAGE_SIZE))
62-
except ValueError:
63-
raise exceptions.ParseError(detail='%s must be an integer between 1 and %s' % (SIZE_PARAMETER, MAX_PAGE_SIZE))
64-
65-
if page_size <= 0 or page_size > MAX_PAGE_SIZE:
66-
raise exceptions.ParseError()
67-
6847
data = self.fetch_data(request, resource_type, *args, **kwargs)
69-
70-
if data.get('total', 0) > 0:
71-
# TODO update to pagination class
72-
data['entry'] = data['entry'][start_index:start_index + page_size]
73-
replay_parameters = self.build_parameters(request)
74-
data['link'] = get_paging_links(request.build_absolute_uri('?'),
75-
start_index,
76-
page_size,
77-
data['total'],
78-
replay_parameters)
79-
8048
return Response(data)
8149

8250
def build_parameters(self, request, *args, **kwargs):
8351
patient_id = request.crosswalk.fhir_id
8452
resource_type = request.resource_type
53+
8554
get_parameters = {
86-
'_format': 'application/json+fhir'
55+
'_format': 'application/json+fhir',
8756
}
8857

8958
if resource_type == 'ExplanationOfBenefit':
59+
serializer = ParamSerializer(data=request.query_params)
60+
serializer.is_valid(raise_exception=True)
61+
query_params = serializer.data
62+
63+
# Verify paging inputs. Casting an invalid int will throw a ValueError
64+
try:
65+
start_index = int(query_params.get(START_PARAMETER, 0))
66+
except ValueError:
67+
raise exceptions.ParseError(
68+
detail='%s must be an integer between zero and the number of results' % START_PARAMETER)
69+
70+
if start_index < 0:
71+
raise exceptions.ParseError()
72+
73+
try:
74+
page_size = int(query_params.get(SIZE_PARAMETER, DEFAULT_PAGE_SIZE))
75+
except ValueError:
76+
raise exceptions.ParseError(detail='%s must be an integer between 1 and %s' % (SIZE_PARAMETER, MAX_PAGE_SIZE))
77+
78+
if page_size <= 0 or page_size > MAX_PAGE_SIZE:
79+
raise exceptions.ParseError()
80+
9081
get_parameters['patient'] = patient_id
82+
get_parameters['startIndex'] = start_index
83+
get_parameters['_count'] = page_size
9184
elif resource_type == 'Coverage':
9285
get_parameters['beneficiary'] = 'Patient/' + patient_id
9386
elif resource_type == 'Patient':

0 commit comments

Comments
 (0)