b958f5b446
* working base with merged ui repo * include project search * widgets * working cards * remove .pyc files * again * add gitignore * nice hovers * interactive background working * beautiful search * working widgets * optimized * project query * all working * models show up but only from the last stream * fixed models * cleaner * model search moved * add models * UI models and bindings * rearrangement * moved folder * cleanup * rearrange * rename1 * rename2 * cleanup * rename1 * rename2 * hide old ui * bindings added * rename * still works * works * works except resize * project scroll working * scroll down * load button fixed * emit sender card to dockwidget * models cards added * model cards recognized * resize * publish works * cards created in the right order * fix order * styling * perfect model card * visuals * remove widget btn * publish button to the bottom * add and remove model cards faster * remove old code * stretch cards
130 lines
3.5 KiB
Python
130 lines
3.5 KiB
Python
#!/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
|
|
from future.standard_library import install_aliases
|
|
|
|
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)
|
|
sys.exit(1)
|
|
except xmlrpc.client.Fault as err:
|
|
print("A fault occurred")
|
|
print("Fault code: %d" % err.faultCode)
|
|
print("Fault string: %s" % err.faultString)
|
|
sys.exit(1)
|
|
|
|
|
|
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)
|