Skip to content

Commit

Permalink
Fix Image.download method
Browse files Browse the repository at this point in the history
- The method has been broken since the move to requests (wrong number of args sent to self.site.connection.get)
- Add option to stream the file to a file object
  • Loading branch information
danmichaelo committed Jul 25, 2015
1 parent 4ea2054 commit 038b222
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions mwclient/image.py
Expand Up @@ -25,13 +25,27 @@ def imageusage(self, namespace=None, filterredir='all', redirect=False,
def duplicatefiles(self, limit=None):
return mwclient.listing.PageProperty(self, 'duplicatefiles', 'df', dflimit=limit)

def download(self):
def download(self, destination=None):
"""
Download the file. If `destination` is given, the file will be written
directly to the stream. Otherwise the file content will be stored in memory
and returned (with the risk of running out of memory for large files).
Recommended usage:
>>> with open(filename, 'wb') as fd:
... image.download(fd)
Args:
destination (file object): Destination file
"""
url = self.imageinfo['url']
if not url.startswith('http://'):
url = 'http://' + self.site.host + url
url = urllib.parse.urlparse(url)
# TODO: query string
return self.site.connection.get(url[1], url[2])
if destination is not None:
res = self.site.connection.get(url, stream=True)
for chunk in res.iter_content(1024):
destination.write(chunk)
else:
return self.site.connection.get(url).content

def __repr__(self):
return "<Image object '%s' for %s>" % (self.name.encode('utf-8'), self.site)

0 comments on commit 038b222

Please sign in to comment.