Skip to content

Commit d49b3f9

Browse files
author
Shiyue Cheng
authored
Merge pull request meraki#79 from coreGreenberet/memory_leak
added calls to response.close() to fix a memory leak
2 parents f082295 + bc2898a commit d49b3f9

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

meraki/rest_session.py

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ def request(self, metadata, method, url, **kwargs):
9595
while retries > 0:
9696
# Make the HTTP request to the API endpoint
9797
try:
98+
if response:
99+
response.close()
98100
response = self._req_session.request(method, abs_url, allow_redirects=False, **kwargs)
99101
reason = response.reason if response.reason else ''
100102
status = response.status_code
@@ -190,7 +192,12 @@ def get(self, metadata, url, params=None):
190192
metadata['url'] = url
191193
metadata['params'] = params
192194
response = self.request(metadata, 'GET', url, params=params)
193-
return response.json() if response and response.text.strip() else None
195+
ret = None
196+
if response:
197+
if response.text.strip():
198+
ret = response.json()
199+
response.close()
200+
return ret
194201

195202
def get_pages(self, metadata, url, params=None, total_pages=-1, direction='next'):
196203
if type(total_pages) == str and total_pages.lower() == 'all':
@@ -217,6 +224,9 @@ def get_pages(self, metadata, url, params=None, total_pages=-1, direction='next'
217224
elif 'rel=last' in l:
218225
last = l[l.find('<')+1:l.find('>')]
219226

227+
response.close()
228+
response = None
229+
220230
# GET the subsequent page
221231
if direction == 'next' and next:
222232
metadata['page'] += 1
@@ -243,24 +253,39 @@ def get_pages(self, metadata, url, params=None, total_pages=-1, direction='next'
243253

244254
total_pages -= 1
245255

256+
if response:
257+
response.close()
258+
246259
return results
247260

248261
def post(self, metadata, url, json=None):
249262
metadata['method'] = 'POST'
250263
metadata['url'] = url
251264
metadata['json'] = json
252265
response = self.request(metadata, 'POST', url, json=json)
253-
return response.json() if response and response.text.strip() else None
266+
ret = None
267+
if response:
268+
if response.text.strip():
269+
ret = response.json()
270+
response.close()
271+
return ret
254272

255273
def put(self, metadata, url, json=None):
256274
metadata['method'] = 'PUT'
257275
metadata['url'] = url
258276
metadata['json'] = json
259277
response = self.request(metadata, 'PUT', url, json=json)
260-
return response.json() if response and response.text.strip() else None
278+
ret = None
279+
if response:
280+
if response.text.strip():
281+
ret = response.json()
282+
response.close()
283+
return ret
261284

262285
def delete(self, metadata, url):
263286
metadata['method'] = 'DELETE'
264287
metadata['url'] = url
265-
self.request(metadata, 'DELETE', url)
288+
response = self.request(metadata, 'DELETE', url)
289+
if response:
290+
response.close()
266291
return None

0 commit comments

Comments
 (0)