Files
speckle-qgis-v3/plugin_utils/plugin_upload.py
T
KatKatKateryna b958f5b446 Send workflow layout & bindings (#1)
* 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
2024-12-24 20:11:00 +08:00

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)