plugin XEP-0060: use new parseExtra methods from MAM and RSM
This commit is contained in:
parent
39d2409273
commit
8e27547531
1 changed files with 19 additions and 48 deletions
|
|
@ -32,8 +32,6 @@ from wokkel import data_form
|
|||
from zope.interface import implements
|
||||
from collections import namedtuple
|
||||
import urllib
|
||||
import datetime
|
||||
from dateutil import tz
|
||||
|
||||
# XXX: sat_tmp.wokkel.pubsub is actually use instead of wokkel version
|
||||
# mam and rsm come from sat_tmp.wokkel too
|
||||
|
|
@ -43,19 +41,18 @@ from wokkel import mam
|
|||
|
||||
|
||||
PLUGIN_INFO = {
|
||||
C.PI_NAME: "Publish-Subscribe",
|
||||
C.PI_IMPORT_NAME: "XEP-0060",
|
||||
C.PI_TYPE: "XEP",
|
||||
C.PI_PROTOCOLS: ["XEP-0060"],
|
||||
C.PI_NAME: u"Publish-Subscribe",
|
||||
C.PI_IMPORT_NAME: u"XEP-0060",
|
||||
C.PI_TYPE: u"XEP",
|
||||
C.PI_PROTOCOLS: [u"XEP-0060"],
|
||||
C.PI_DEPENDENCIES: [],
|
||||
C.PI_RECOMMENDATIONS: ["XEP-0313"],
|
||||
C.PI_MAIN: "XEP_0060",
|
||||
C.PI_HANDLER: "yes",
|
||||
C.PI_DESCRIPTION: _("""Implementation of PubSub Protocol"""),
|
||||
C.PI_RECOMMENDATIONS: [u"XEP-0059", u"XEP-0313"],
|
||||
C.PI_MAIN: u"XEP_0060",
|
||||
C.PI_HANDLER: u"yes",
|
||||
C.PI_DESCRIPTION: _(u"""Implementation of PubSub Protocol"""),
|
||||
}
|
||||
|
||||
UNSPECIFIED = "unspecified error"
|
||||
MAM_FILTER = "mam_filter_"
|
||||
|
||||
|
||||
Extra = namedtuple("Extra", ("rsm_request", "extra"))
|
||||
|
|
@ -85,6 +82,7 @@ class XEP_0060(object):
|
|||
def __init__(self, host):
|
||||
log.info(_(u"PubSub plugin initialization"))
|
||||
self.host = host
|
||||
self._rsm = host.plugins.get("XEP-0059")
|
||||
self._mam = host.plugins.get("XEP-0313")
|
||||
self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks)
|
||||
self.rt_sessions = sat_defer.RTDeferredSessions()
|
||||
|
|
@ -324,47 +322,20 @@ class XEP_0060(object):
|
|||
extra = {}
|
||||
else:
|
||||
# rsm
|
||||
rsm_args = {}
|
||||
for arg in ("max", "after", "before", "index"):
|
||||
try:
|
||||
argname = "max_" if arg == "max" else arg
|
||||
rsm_args[argname] = extra.pop("rsm_{}".format(arg))
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
if rsm_args:
|
||||
rsm_request = rsm.RSMRequest(**rsm_args)
|
||||
else:
|
||||
if self._rsm is None:
|
||||
rsm_request = None
|
||||
else:
|
||||
rsm_request = self._rsm.parseExtra(extra)
|
||||
|
||||
# mam
|
||||
mam_args = {}
|
||||
for arg in ("start", "end"):
|
||||
try:
|
||||
mam_args[arg] = datetime.datetime.fromtimestamp(
|
||||
int(extra.pop("{}{}".format(MAM_FILTER, arg))), tz.tzutc()
|
||||
)
|
||||
except (TypeError, ValueError):
|
||||
log.warning(u"Bad value for {} filter".format(arg))
|
||||
except KeyError:
|
||||
continue
|
||||
if self._mam is None:
|
||||
mam_request = None
|
||||
else:
|
||||
mam_request = self._mam.parseExtra(extra, with_rsm=False)
|
||||
|
||||
try:
|
||||
mam_args["with_jid"] = jid.JID(extra.pop("{}jid".format(MAM_FILTER)))
|
||||
except (jid.InvalidFormat):
|
||||
log.warning(u"Bad value for jid filter")
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
for name, value in extra.iteritems():
|
||||
if name.startswith(MAM_FILTER):
|
||||
var = name[len(MAM_FILTER) :]
|
||||
extra_fields = mam_args.setdefault("extra_fields", [])
|
||||
extra_fields.append(data_form.Field(var=var, value=value))
|
||||
|
||||
if mam_args:
|
||||
assert "mam" not in extra
|
||||
extra["mam"] = mam.MAMRequest(mam.buildForm(**mam_args))
|
||||
if mam_request is not None:
|
||||
assert u"mam" not in extra
|
||||
extra[u"mam"] = mam_request
|
||||
return Extra(rsm_request, extra)
|
||||
|
||||
def addManagedNode(self, node, **kwargs):
|
||||
|
|
|
|||
Loading…
Reference in a new issue