#!/usr/bin/env python # coding=utf-8 """This script uploads a plugin package to the plugin repository. Authors: A. Pasotti, V. Picavet git sha : $TemplateVCSFormat """ import sys import getpass import xmlrpc.client from optparse import OptionParser standard_library.install_aliases() # Configuration PROTOCOL = 'https' SERVER = 'plugins.qgis.org' PORT = '443' ENDPOINT = '/plugins/RPC2/' VERBOSE = False def main(parameters, arguments): """Main entry point. :param parameters: Command line parameters. :param arguments: Command line arguments. """ address = "{protocol}://{username}:{password}@{server}:{port}{endpoint}".format( protocol=PROTOCOL, username=parameters.username, password=parameters.password, server=parameters.server, port=parameters.port, endpoint=ENDPOINT) print("Connecting to: %s" % hide_password(address)) server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE) try: with open(arguments[0], 'rb') as handle: plugin_id, version_id = server.plugin.upload( xmlrpc.client.Binary(handle.read())) print("Plugin ID: %s" % plugin_id) print("Version ID: %s" % version_id) except xmlrpc.client.ProtocolError as err: print("A protocol error occurred") print("URL: %s" % hide_password(err.url, 0)) print("HTTP/HTTPS headers: %s" % err.headers) print("Error code: %d" % err.errcode) print("Error message: %s" % err.errmsg) except xmlrpc.client.Fault as err: print("A fault occurred") print("Fault code: %d" % err.faultCode) print("Fault string: %s" % err.faultString) def hide_password(url, start=6): """Returns the http url with password part replaced with '*'. :param url: URL to upload the plugin to. :type url: str :param start: Position of start of password. :type start: int """ start_position = url.find(':', start) + 1 end_position = url.find('@') return "%s%s%s" % ( url[:start_position], '*' * (end_position - start_position), url[end_position:]) if __name__ == "__main__": parser = OptionParser(usage="%prog [options] plugin.zip") parser.add_option( "-w", "--password", dest="password", help="Password for plugin site", metavar="******") parser.add_option( "-u", "--username", dest="username", help="Username of plugin site", metavar="user") parser.add_option( "-p", "--port", dest="port", help="Server port to connect to", metavar="80") parser.add_option( "-s", "--server", dest="server", help="Specify server name", metavar="plugins.qgis.org") options, args = parser.parse_args() if len(args) != 1: print("Please specify zip file.\n") parser.print_help() sys.exit(1) if not options.server: options.server = SERVER if not options.port: options.port = PORT if not options.username: # interactive mode username = getpass.getuser() print("Please enter user name [%s] :" % username, end=' ') res = input() if res != "": options.username = res else: options.username = username if not options.password: # interactive mode options.password = getpass.getpass() main(options, args)