-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathplugin_upload.py
95 lines (80 loc) · 3.21 KB
/
plugin_upload.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/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 getpass
import sys
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)