Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 8dcd341

Browse files
authored
Merge pull request #488 from edx/alangsto/remove_custom_pagination
Fix: return first 10000 matches from ES search
2 parents 0065946 + 34dbc5e commit 8dcd341

2 files changed

Lines changed: 26 additions & 13 deletions

File tree

analytics_data_api/v0/documents.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,14 @@ def get_users_in_course(
160160
}
161161
for sort_policy in sort_policies
162162
])
163-
return search_request.execute()
163+
164+
# by default, ES will only return the first 10 documents, we want to get as many as possible
165+
count = search_request.count()
166+
if count > 10000:
167+
logger.info('Cannot return more than 10,000 learners for course_id=%s', course_id)
168+
count = 10000
169+
total_search_requests = search_request[0:count]
170+
return total_search_requests.execute()
164171

165172
@classmethod
166173
def get_course_metadata(cls, course_id):

analytics_data_api/v0/tests/views/test_learners.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -441,34 +441,40 @@ def test_sort(self, learners, order_by, sort_order, expected_users):
441441
self.assert_learners_returned(response, expected_users)
442442

443443
def test_pagination(self):
444-
usernames = ['a', 'b', 'c', 'd', 'e']
445-
self.create_learners([{'username': username, 'course_id': self.course_id} for username in usernames])
444+
num_users = 16
445+
learner_list = [{'username': 'test' + str(num), 'course_id': self.course_id} for num in range(num_users)]
446+
self.create_learners(learner_list)
446447

447-
response = self._get(self.course_id, page_size=2)
448+
response = self._get(self.course_id, page_size=5)
448449
payload = json.loads(response.content.decode('utf-8'))
449450
self.assertDictContainsSubset(
450451
{
451-
'count': len(usernames),
452+
'count': num_users,
452453
'previous': None,
453-
'next': self.expected_page_url(self.course_id, page=2, page_size=2),
454-
'num_pages': 3
454+
'next': self.expected_page_url(self.course_id, page=2, page_size=5),
455+
'num_pages': 4
455456
},
456457
payload
457458
)
458-
self.assert_learners_returned(response, [{'username': 'a'}, {'username': 'b'}])
459+
self.assertEqual(response.status_code, 200)
460+
returned_learners = json.loads(response.content.decode('utf-8'))['results']
461+
self.assertEqual(len(returned_learners), 5)
459462

460-
response = self._get(self.course_id, page_size=2, page=3)
463+
response = self._get(self.course_id, page_size=5, page=4)
461464
payload = json.loads(response.content.decode('utf-8'))
462465
self.assertDictContainsSubset(
463466
{
464-
'count': len(usernames),
465-
'previous': self.expected_page_url(self.course_id, page=2, page_size=2),
467+
'count': num_users,
468+
'previous': self.expected_page_url(self.course_id, page=3, page_size=5),
466469
'next': None,
467-
'num_pages': 3
470+
'num_pages': 4
468471
},
469472
payload
470473
)
471-
self.assert_learners_returned(response, [{'username': 'e'}])
474+
475+
self.assertEqual(response.status_code, 200)
476+
returned_learners = json.loads(response.content.decode('utf-8'))['results']
477+
self.assertEqual(len(returned_learners), 1)
472478

473479
# Error cases
474480
@ddt.data(

0 commit comments

Comments
 (0)