Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 319801c

Browse files
authored
Merge pull request #29 from uc-cdis/feat/add_urls_metadata_in_list_with_params
feat(url_key partial filter): include urls_metadata in list_with_param
2 parents d09e46d + 379c6aa commit 319801c

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

indexclient/client.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import json
21
try:
32
from urlparse import urljoin
43
except ImportError:
54
from urllib.parse import urljoin
65

76
import requests
87
import copy
8+
import json
99

1010
UPDATABLE_ATTRS = [
1111
'file_name', 'urls', 'version',
@@ -58,7 +58,7 @@ def global_get(self, did, no_dist=False):
5858
"""
5959
try:
6060
if no_dist:
61-
response = self._get(did, params={'no_dist':''})
61+
response = self._get(did, params={'no_dist': ''})
6262
else:
6363
response = self._get(did)
6464
except requests.HTTPError as e:
@@ -126,14 +126,20 @@ def list(self, limit=float("inf"), start=None, page_size=100):
126126
""" Returns a generator of document objects. """
127127
return self.list_with_params(limit, start, page_size)
128128

129-
def list_with_params(self, limit=float("inf"), start=None, page_size=100, params=None):
129+
def list_with_params(self, limit=float("inf"), start=None, page_size=100, params=None, negate_params=None):
130130
"""
131131
Return a generator of document object corresponding to the supplied parameters, such
132-
as ``{'hashes': {'md5': '...'}, 'size': '...', 'metadata': {'file_state': '...'}}``.
132+
as ``{'hashes': {'md5': '...'},
133+
'size': '...',
134+
'metadata': {'file_state': '...'},
135+
'urls_metadata': {'s3://url': {'state': '...'}
136+
}``.
133137
"""
134138
params_copy = copy.deepcopy(params) or {}
135139
if 'hashes' in params_copy:
136140
params_copy['hash'] = params_copy.pop('hashes')
141+
if 'urls_metadata' in params_copy:
142+
params_copy['urls_metadata'] = json.dumps(params_copy.pop('urls_metadata'))
137143
reformatted_params = dict()
138144
for param in ['hash', 'metadata']:
139145
if param in params_copy:
@@ -143,21 +149,23 @@ def list_with_params(self, limit=float("inf"), start=None, page_size=100, params
143149
del params_copy[param]
144150
reformatted_params.update(params_copy)
145151
reformatted_params.update({"limit": page_size, "start": start})
152+
if negate_params:
153+
reformatted_params.update({"negate_params": json.dumps(negate_params)})
146154
yielded = 0
147155
while True:
148156
resp = self._get("index", params=reformatted_params)
149157
handle_error(resp)
150-
json = resp.json()
151-
if not json["records"]:
158+
json_str = resp.json()
159+
if not json_str["records"]:
152160
return
153-
for doc in json["records"]:
161+
for doc in json_str["records"]:
154162
if yielded < limit:
155163
yield Document(self, None, json=doc)
156164
yielded += 1
157165
else:
158166
return
159-
if len(json['records']) == page_size:
160-
reformatted_params['start'] = json['records'][-1]['did']
167+
if len(json_str['records']) == page_size:
168+
reformatted_params['start'] = json_str['records'][-1]['did']
161169
else:
162170
# There's no more results
163171
return

test-requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ pytest==3.0.6
22
mock
33
-e git+https://github.com/uc-cdis/cdisutils-test.git@0.2.3#egg=cdisutilstest
44
-e git+https://github.com/uc-cdis/cdis-python-utils.git@0.1.7#egg=cdispyutils
5-
-e git+https://github.com/uc-cdis/indexd.git@1.0.0#egg=indexd
5+
-e git+https://github.com/uc-cdis/indexd.git@1.0.3#egg=indexd
66
-e git+https://github.com/uc-cdis/doiclient.git@1.0.0#egg=doiclient
77
-e git+https://github.com/uc-cdis/dosclient.git@1.0.0#egg=dosclient
88
-e git+https://github.com/uc-cdis/cdislogging.git@0.0.2#egg=cdislogging

tests/test_client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,22 @@ def test_list_with_params(index_client):
6060
assert set(dids) == set(found)
6161

6262

63+
def test_list_with_params_negate(index_client):
64+
doc1 = create_random_index(index_client, version='1'
65+
)
66+
create_random_index(index_client, version='2')
67+
68+
docs = index_client.list_with_params(
69+
negate_params={'version': '2'}
70+
)
71+
72+
dids = {record.did for record in docs}
73+
assert dids == {doc1.did}
74+
75+
76+
77+
78+
6379
def test_get_latest_version(index_client):
6480
"""
6581
Args:

0 commit comments

Comments
 (0)