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

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)