#!/usr/bin/env python # Upload a file to a recent MediaWiki using the API. # # The configuration file ~/.config/wiki-upload.yaml must contain Wiki site # information and credentials. For example: # # --- # site: awesomewiki.com # https: yes # site_opts: # path: /wiki/ # username: UploadBoat # password: VeRySeCuR3 # from __future__ import division, print_function import argparse import mwclient import os.path import termcolor import yaml def login(): config = yaml.load(open(os.path.expanduser('~/.config/wiki-upload.yaml'))) mw_site = ('https', config['site']) if config['https'] else config['site'] mw_site_opts = config['site_opts'] if 'site_opts' in config else {} mw_site_opts['clients_useragent'] = 'wiki-upload' site = mwclient.Site(mw_site, **mw_site_opts) site.login(config['username'], config['password']) return site def parse_args(): parser = argparse.ArgumentParser( description='Upload a file to a recent MediaWiki using the API.') parser.add_argument('images', metavar='image.jpg', nargs='+', help='an image to upload') parser.add_argument('-d', '--description', required=True, help='description of the images') args = parser.parse_args() return args def main(): site = login() args = parse_args() for image in args.images: destination_name = os.path.basename(image) print('Uploading {} ... '.format(destination_name)) ret = site.upload(open(image), destination_name, args.description) color = 'green' if ret['result'] == 'Success' else 'yellow' print(termcolor.colored(' {}'.format(ret['result']), color)) if 'warnings' in ret: for warning, what in ret['warnings'].items(): print(termcolor.colored(' {}: {}'.format(warning, what), 'yellow')) main()