plugin uri finder, jp (merge-request): labels handling:

- a label can now be specified as metadata after specifing a "xmpp:" URI in doc (with « use "[label]" label" » after the URI)
- updated jp to handle new signature of URIFind
- jp (merge-request/set): labels can now be specified using --label
This commit is contained in:
Goffi 2018-04-01 20:17:00 +02:00
commit e4c56da671
3 changed files with 41 additions and 10 deletions

View file

@ -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

View file

@ -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

View file

@ -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<key>{keys_re})[ :]? +(?P<uri>xmpp:\S+)'.format(keys_re=keys_re))
label_re = r'"(?P<label>[^"]+)"'
uri_re = re.compile(ur'(?P<key>{keys_re})[ :]? +(?P<uri>xmpp:\S+)(?:.*use {label_re} label)?'.format(
keys_re=keys_re, label_re = label_re))
path = os.path.normpath(path)
if not os.path.isdir(path) or not os.path.isabs(path):
raise ValueError(u'path must be an absolute path to a directory')
@ -79,10 +82,13 @@ class URIFinder(object):
for m in uri_re.finditer(f.read()):
key = m.group(u'key')
uri = m.group(u'uri')
label = m.group(u'label')
if key in found_uris:
log.warning(_(u"Ignoring already found uri for key \"{key}\"").format(key=key))
else:
found_uris[key] = uri
uri_data = found_uris[key] = {u'uri': uri}
if label is not None:
uri_data[u'labels'] = json.dumps([label])
if found_uris:
break
path = os.path.dirname(path)