1- import json
21try :
32 from urlparse import urljoin
43except ImportError :
54 from urllib .parse import urljoin
65
76import requests
87import copy
8+ import json
99
1010UPDATABLE_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
0 commit comments