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

Commit 0ea7188

Browse files
smithszricellis
authored andcommitted
Support '/_search_disk_size' search endpoint
1 parent d9ed603 commit 0ea7188

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

CHANGES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 2.8.0 (Unreleased)
2-
2+
- [NEW] Added support for `/_search_disk_size` endpoint which retrieves disk size information for a specific search index.
33
- [FIXED] Updated default IBM Cloud Identity and Access Management token URL.
44
- [REMOVED] Removed broken source and target parameters that constantly threw `AttributeError` when creating a replication document.
55

src/cloudant/design_document.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,3 +699,15 @@ def search_info(self, search_index):
699699
'/'.join([self.document_url, '_search_info', search_index]))
700700
ddoc_search_info.raise_for_status()
701701
return ddoc_search_info.json()
702+
703+
def search_disk_size(self, search_index):
704+
"""
705+
Retrieves disk size information about a specified search index within
706+
the design document, returns dictionary
707+
708+
GET databasename/_design/{ddoc}/_search_disk_size/{search_index}
709+
"""
710+
ddoc_search_disk_size = self.r_session.get(
711+
'/'.join([self.document_url, '_search_disk_size', search_index]))
712+
ddoc_search_disk_size.raise_for_status()
713+
return ddoc_search_disk_size.json()

tests/unit/design_document_tests.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,46 @@ def test_get_search_info(self):
841841
self.assertTrue(search_index_metadata['pending_seq'] <= 101, 'The pending_seq should be 101 or fewer.')
842842
self.assertTrue(search_index_metadata['disk_size'] >0, 'The disk_size should be greater than 0.')
843843

844+
@unittest.skipUnless(
845+
os.environ.get('RUN_CLOUDANT_TESTS') is not None,
846+
'Skipping Cloudant _search_disk_size endpoint test'
847+
)
848+
def test_get_search_disk_size(self):
849+
"""
850+
Test retrieval of search_disk_size endpoint from the DesignDocument.
851+
"""
852+
self.populate_db_with_documents(100)
853+
ddoc = DesignDocument(self.db, '_design/ddoc001')
854+
ddoc.add_search_index(
855+
'search001',
856+
'function (doc) {\n index("default", doc._id); '
857+
'if (doc._id) {index("name", doc.name, {"store": true}); }\n}'
858+
)
859+
ddoc.save()
860+
861+
ddoc_remote = DesignDocument(self.db, '_design/ddoc001')
862+
ddoc_remote.fetch()
863+
864+
ddoc_remote.search_info('search001') # trigger index build
865+
866+
search_disk_size = ddoc_remote.search_disk_size('search001')
867+
868+
self.assertEqual(
869+
sorted(search_disk_size.keys()), ['name', 'search_index'],
870+
'The search disk size should contain only keys "name" and "search_index"')
871+
self.assertEqual(
872+
search_disk_size['name'], '_design/ddoc001/search001',
873+
'The search index "name" should be correct.')
874+
self.assertEqual(
875+
sorted(search_disk_size['search_index'].keys()), ['disk_size'],
876+
'The search index should contain only key "disk_size"')
877+
self.assertTrue(
878+
isinstance(search_disk_size['search_index']['disk_size'], int),
879+
'The "disk_size" value should be an integer.')
880+
self.assertTrue(
881+
search_disk_size['search_index']['disk_size'] > 0,
882+
'The "disk_size" should be greater than 0.')
883+
844884
@unittest.skipUnless(
845885
os.environ.get('RUN_CLOUDANT_TESTS') is not None,
846886
'Skipping Cloudant _search_info raises HTTPError test'

0 commit comments

Comments
 (0)