@@ -73,6 +73,8 @@ class DSpaceClient:
7373 if 'USER_AGENT' in os .environ :
7474 USER_AGENT = os .environ ['USER_AGENT' ]
7575 verbose = False
76+ ITER_PAGE_SIZE = 20
77+ PROXY_DICT = dict (http = os .environ ["PROXY_URL" ],https = os .environ ["PROXY_URL" ]) if "PROXY_URL" in os .environ else dict ()
7678
7779 # Simple enum for patch operation types
7880 class PatchOperation :
@@ -82,7 +84,7 @@ class PatchOperation:
8284 MOVE = 'move'
8385
8486 def __init__ (self , api_endpoint = API_ENDPOINT , username = USERNAME , password = PASSWORD , solr_endpoint = SOLR_ENDPOINT ,
85- solr_auth = SOLR_AUTH , fake_user_agent = False ):
87+ solr_auth = SOLR_AUTH , fake_user_agent = False , proxies = PROXY_DICT ):
8688 """
8789 Accept optional API endpoint, username, password arguments using the OS environment variables as defaults
8890 :param api_endpoint: base path to DSpace REST API, eg. http://localhost:8080/server/api
@@ -95,6 +97,7 @@ def __init__(self, api_endpoint=API_ENDPOINT, username=USERNAME, password=PASSWO
9597 self .USERNAME = username
9698 self .PASSWORD = password
9799 self .SOLR_ENDPOINT = solr_endpoint
100+ self .proxies = proxies
98101 self .solr = None
99102 self ._last_err = None
100103 try :
@@ -128,7 +131,8 @@ def authenticate(self, retry=False):
128131 # Set headers for requests made during authentication
129132 # Get and update CSRF token
130133 r = self .session .post (self .LOGIN_URL , data = {'user' : self .USERNAME , 'password' : self .PASSWORD },
131- headers = self .auth_request_headers )
134+ headers = self .auth_request_headers ,
135+ proxies = self .proxies )
132136 self .update_token (r )
133137
134138 if r .status_code == 403 :
@@ -203,7 +207,8 @@ def api_get(self, url, params=None, data=None, headers=None):
203207 self ._last_err = None
204208 if headers is None :
205209 headers = self .request_headers
206- r = self .session .get (url , params = params , data = data , headers = headers )
210+ r = self .session .get (url , params = params , data = data , headers = headers ,
211+ proxies = self .proxies )
207212 self .update_token (r )
208213 return r
209214
@@ -218,7 +223,8 @@ def api_post(self, url, params, json, retry=False):
218223 @return: Response from API
219224 """
220225 self ._last_err = None
221- r = self .session .post (url , json = json , params = params , headers = self .request_headers )
226+ r = self .session .post (url , json = json , params = params , headers = self .request_headers ,
227+ proxies = self .proxies )
222228 self .update_token (r )
223229
224230 if r .status_code == 403 :
@@ -262,7 +268,8 @@ def api_post_uri(self, url, params, uri_list, retry=False):
262268 @return: Response from API
263269 """
264270 self ._last_err = None
265- r = self .session .post (url , data = uri_list , params = params , headers = self .list_request_headers )
271+ r = self .session .post (url , data = uri_list , params = params , headers = self .list_request_headers ,
272+ proxies = self .proxies )
266273 self .update_token (r )
267274
268275 if r .status_code == 403 :
@@ -291,7 +298,8 @@ def api_put(self, url, params, json, retry=False):
291298 @return: Response from API
292299 """
293300 self ._last_err = None
294- r = self .session .put (url , params = params , json = json , headers = self .request_headers )
301+ r = self .session .put (url , params = params , json = json , headers = self .request_headers ,
302+ proxies = self .proxies )
295303 self .update_token (r )
296304
297305 if r .status_code == 403 :
@@ -321,7 +329,8 @@ def api_delete(self, url, params, retry=False):
321329 @return: Response from API
322330 """
323331 self ._last_err = None
324- r = self .session .delete (url , params = params , headers = self .request_headers )
332+ r = self .session .delete (url , params = params , headers = self .request_headers ,
333+ proxies = self .proxies )
325334 self .update_token (r )
326335
327336 if r .status_code == 403 :
@@ -341,7 +350,7 @@ def api_delete(self, url, params, retry=False):
341350
342351 return r
343352
344- def api_patch (self , url , operation , path , value , retry = False ):
353+ def api_patch (self , url , operation , path , value , params = None , retry = False ):
345354 """
346355 @param url: DSpace REST API URL
347356 @param operation: 'add', 'remove', 'replace', or 'move' (see PatchOperation enumeration)
@@ -377,7 +386,8 @@ def api_patch(self, url, operation, path, value, retry=False):
377386
378387 # set headers
379388 # perform patch request
380- r = self .session .patch (url , json = [data ], headers = self .request_headers )
389+ r = self .session .patch (url , json = [data ], params = params , headers = self .request_headers ,
390+ proxies = self .proxies )
381391 self .update_token (r )
382392
383393 if r .status_code == 403 :
@@ -922,7 +932,7 @@ def get_items(self, page=0, size=20):
922932 r = self .api_get (url , params = params )
923933 r_json = parse_json (response = r )
924934 if '_embedded' in r_json :
925- if 'collections ' in r_json ['_embedded' ]:
935+ if 'items ' in r_json ['_embedded' ]:
926936 for item_resource in r_json ['_embedded' ]['items' ]:
927937 items .append (Item (item_resource ))
928938 elif 'uuid' in r_json :
0 commit comments