Skip to content
Snippets Groups Projects
plugin_upload.py 3.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • unknown's avatar
    unknown committed
    #!/usr/bin/env python
    # coding=utf-8
    """This script uploads a plugin package on the server.
            Authors: A. Pasotti, V. Picavet
            git sha              : $TemplateVCSFormat
    """
    
    import sys
    import getpass
    import xmlrpclib
    from optparse import OptionParser
    
    # Configuration
    PROTOCOL = 'http'
    SERVER = 'plugins.qgis.org'
    PORT = '80'
    ENDPOINT = '/plugins/RPC2/'
    VERBOSE = False
    
    
    def main(parameters, arguments):
        """Main entry point.
    
        :param parameters: Command line parameters.
        :param arguments: Command line arguments.
        """
        address = "%s://%s:%s@%s:%s%s" % (
            PROTOCOL,
            parameters.username,
            parameters.password,
            parameters.server,
            parameters.port,
            ENDPOINT)
        print "Connecting to: %s" % hide_password(address)
    
        server = xmlrpclib.ServerProxy(address, verbose=VERBOSE)
    
        try:
            plugin_id, version_id = server.plugin.upload(
                xmlrpclib.Binary(open(arguments[0]).read()))
            print "Plugin ID: %s" % plugin_id
            print "Version ID: %s" % version_id
        except xmlrpclib.ProtocolError, 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 xmlrpclib.Fault, 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,
            res = raw_input()
            if res != "":
                options.username = res
            else:
                options.username = username
        if not options.password:
            # interactive mode
            options.password = getpass.getpass()
        main(options, args)