.. _`files`: Working with files ================== Assuming you have :ref:`connected <connecting>` to your site. Getting info about a file ------------------------- To get information about a file: >>> file = site.images['Example.jpg'] where ``file`` is now an instance of :class:`Image <mwclient.image.Image>` that you can query for various properties: >>> file.imageinfo {'comment': 'Reverted to version as of 17:58, 12 March 2010', 'descriptionshorturl': 'https://commons.wikimedia.org/w/index.php?curid=6428847', 'descriptionurl': 'https://commons.wikimedia.org/wiki/File:Example.jpg', 'height': 178, 'metadata': [{'name': 'MEDIAWIKI_EXIF_VERSION', 'value': 1}], 'sha1': 'd01b79a6781c72ac9bfff93e5e2cfbeef4efc840', 'size': 9022, 'timestamp': '2010-03-14T17:20:20Z', 'url': 'https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg', 'user': 'SomeUser', 'width': 172} You also have easy access to file usage: >>> for page in image.imageusage(): >>> print('Page:', page.name, '; namespace:', page.namespace) See the :class:`API reference <mwclient.image.Image>` for more options. .. caution:: Note that ``Image.exists`` refers to whether a file exists *locally*. If a file does not exist locally, but in a shared repo like Wikimedia Commons, it will return ``False``. To check if a file exists locally *or* in a shared repo, you could test if ``image.imageinfo != {}``. Downloading a file ------------------ The :meth:`Image.download() <mwclient.image.Image.download>` method can be used to download the full size file. Pass it a file object and it will stream the image to it, avoiding the need for keeping the whole file in memory: >>> file = site.images['Example.jpg'] >>> with open('Example.jpg', 'wb') as fd: ... image.download(fd) Uploading a file ---------------- >>> site.upload(open('file.jpg'), 'destination.jpg', 'Image description')