diff --git a/frontends/src/jp/cmd_merge_request.py b/frontends/src/jp/cmd_merge_request.py index ece49550..b33ff8c5 100644 --- a/frontends/src/jp/cmd_merge_request.py +++ b/frontends/src/jp/cmd_merge_request.py @@ -41,6 +41,7 @@ class Set(base.CommandBase): self.parser.add_argument("-i", "--item", type=base.unicode_decoder, default=u'', help=_(u"id or URL of the request to update, or nothing for a new one")) self.parser.add_argument("-r", "--repository", metavar="PATH", type=base.unicode_decoder, default=u'.', help=_(u"path of the repository (DEFAULT: current directory)")) self.parser.add_argument("-f", "--force", action="store_true", help=_(u"publish merge request without confirmation")) + self.parser.add_argument("-l", "--label", dest="labels", type=base.unicode_decoder, action='append', help=_(u"labels to categorize your request")) def mergeRequestSetCb(self, published_id): if published_id: @@ -51,12 +52,15 @@ class Set(base.CommandBase): def sendRequest(self): extra = {'update': 'true'} if self.args.item else {} + values = {} + if self.args.labels is not None: + values[u'labels'] = self.args.labels self.host.bridge.mergeRequestSet( self.args.service, self.args.node, self.repository, u'auto', - {}, + values, u'', self.args.item, extra, diff --git a/frontends/src/jp/common.py b/frontends/src/jp/common.py index 0901343e..7229d1e0 100644 --- a/frontends/src/jp/common.py +++ b/frontends/src/jp/common.py @@ -671,6 +671,13 @@ class URIFinder(object): """Helper class to find URIs in well-known locations""" def __init__(self, command, path, key, callback): + """ + @param command(CommandBase): command instance + args of this instance will be updated with found values + @param path(unicode): absolute path to use as a starting point to look for URIs + @param key(unicode): key to look for + @param callback(callable): method to call once URIs are found (or not) + """ if not command.args.service and not command.args.node: self.host = command.host self.args = command.args @@ -685,12 +692,26 @@ class URIFinder(object): else: callback() - def URIFindCb(self, uri_data): + def URIFindCb(self, uris_data): try: - uri = uri_data[self.key] + uri_data = uris_data[self.key] except KeyError: self.host.disp(_(u"No {key} URI specified for this project, please specify service and node").format(key=self.key), error=True) self.host.quit(C.EXIT_NOT_FOUND) + else: + uri = uri_data[u'uri'] + labels_raw = uri_data.get(u'labels') + + if labels_raw is not None: + try: + labels = self.args.labels + except AttributeError: + raise exceptions.InternalError(u'there is no "labels" arguments') + else: + if labels is None: + labels = [] + labels.extend(json.loads(labels_raw)) + self.args.labels = labels parsed_uri = xmpp_uri.parseXMPPUri(uri) try: self.args.service = parsed_uri[u'path'] diff --git a/src/plugins/plugin_exp_pubsub_schema.py b/src/plugins/plugin_exp_pubsub_schema.py index a027598a..f296609f 100755 --- a/src/plugins/plugin_exp_pubsub_schema.py +++ b/src/plugins/plugin_exp_pubsub_schema.py @@ -430,8 +430,8 @@ class PubsubSchema(object): """Set an item in a node with a schema This method can be used directly by *Set methods added by dependant plugin - @param values(dict[key(unicode), [iterable[object], object]]): values of the items - if not iterable, will be put in a list + @param values(dict[key(unicode), [iterable[object]|object]]): values of the items + if value is not iterable, it will be put in a list 'created' and 'updated' will be forced to current time: - 'created' is set if item_id is None, i.e. if it's a new ticket - 'updated' is set everytime diff --git a/src/plugins/plugin_misc_tickets.py b/src/plugins/plugin_misc_tickets.py index a7a56804..097f51b7 100755 --- a/src/plugins/plugin_misc_tickets.py +++ b/src/plugins/plugin_misc_tickets.py @@ -84,8 +84,8 @@ class Tickets(object): @param node(unicode, None): Pubsub node to use None to use default tickets node - @param values(dict[key(unicode), [iterable[object], object]]): values of the ticket - if not iterable, will be put in a list + @param values(dict[key(unicode), [iterable[object]|object]]): values of the ticket + if value is not iterable, it will be put in a list 'created' and 'updated' will be forced to current time: - 'created' is set if item_id is None, i.e. if it's a new ticket - 'updated' is set everytime diff --git a/src/plugins/plugin_misc_uri_finder.py b/src/plugins/plugin_misc_uri_finder.py index 2369d02a..4c7a895b 100755 --- a/src/plugins/plugin_misc_uri_finder.py +++ b/src/plugins/plugin_misc_uri_finder.py @@ -23,6 +23,7 @@ from sat.core.log import getLogger from twisted.internet import defer import textwrap log = getLogger(__name__) +import json import os.path import os import re @@ -51,7 +52,7 @@ class URIFinder(object): log.info(_(u"URI finder plugin initialization")) self.host = host host.bridge.addMethod("URIFind", ".plugin", - in_sign='sas', out_sign='a{ss}', + in_sign='sas', out_sign='a{sa{ss}}', method=self.find, async=True) @@ -64,7 +65,9 @@ class URIFinder(object): @return (dict[unicode, unicode]): map from key to found uri """ keys_re = u'|'.join(keys) - uri_re = re.compile(ur'(?P{keys_re})[ :]? +(?Pxmpp:\S+)'.format(keys_re=keys_re)) + label_re = r'"(?P