Merge branch 'develop' of https://github.com/fritzy/SleekXMPP into sleek-merge
Conflicts: README.rst examples/IoT_TestDevice.py examples/disco_browser.py setup.py sleekxmpp/jid.py sleekxmpp/plugins/google/auth/stanza.py sleekxmpp/plugins/google/gmail/notifications.py sleekxmpp/plugins/google/nosave/stanza.py sleekxmpp/plugins/google/settings/settings.py sleekxmpp/thirdparty/__init__.py sleekxmpp/thirdparty/socks.py sleekxmpp/thirdparty/statemachine.py sleekxmpp/util/__init__.py sleekxmpp/xmlstream/xmlstream.py slixmpp/basexmpp.py slixmpp/plugins/xep_0004/stanza/form.py slixmpp/plugins/xep_0009/rpc.py slixmpp/plugins/xep_0050/adhoc.py slixmpp/plugins/xep_0065/proxy.py slixmpp/plugins/xep_0084/stanza.py slixmpp/plugins/xep_0202/time.py slixmpp/plugins/xep_0323/sensordata.py slixmpp/plugins/xep_0325/control.py slixmpp/plugins/xep_0325/stanza/control.py slixmpp/roster/single.py slixmpp/stanza/atom.py slixmpp/stanza/rootstanza.py slixmpp/test/slixtest.py slixmpp/util/sasl/mechanisms.py slixmpp/version.py slixmpp/xmlstream/stanzabase.py tests/test_stanza_xep_0323.py tests/test_stanza_xep_0325.py tests/test_stream_xep_0323.py tests/test_stream_xep_0325.py
This commit is contained in:
@@ -21,7 +21,10 @@ class Device(object):
|
||||
request_fields
|
||||
"""
|
||||
|
||||
def __init__(self, nodeId, fields={}):
|
||||
def __init__(self, nodeId, fields=None):
|
||||
if not fields:
|
||||
fields = {}
|
||||
|
||||
self.nodeId = nodeId
|
||||
self.fields = fields # see fields described below
|
||||
# {'type':'numeric',
|
||||
|
||||
@@ -22,7 +22,6 @@ from slixmpp.plugins.base import BasePlugin
|
||||
from slixmpp.plugins.xep_0323 import stanza
|
||||
from slixmpp.plugins.xep_0323.stanza import Sensordata
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -108,7 +107,6 @@ class XEP_0323(BasePlugin):
|
||||
|
||||
default_config = {
|
||||
'threaded': True
|
||||
# 'session_db': None
|
||||
}
|
||||
|
||||
def plugin_init(self):
|
||||
@@ -161,11 +159,11 @@ class XEP_0323(BasePlugin):
|
||||
self.last_seqnr = 0
|
||||
self.seqnr_lock = Lock()
|
||||
|
||||
## For testning only
|
||||
## For testing only
|
||||
self.test_authenticated_from = ""
|
||||
|
||||
def post_init(self):
|
||||
""" Init complete. Register our features in Serivce discovery. """
|
||||
""" Init complete. Register our features in Service discovery. """
|
||||
BasePlugin.post_init(self)
|
||||
self.xmpp['xep_0030'].add_feature(Sensordata.namespace)
|
||||
self.xmpp['xep_0030'].set_items(node=Sensordata.namespace, items=tuple())
|
||||
@@ -301,8 +299,6 @@ class XEP_0323(BasePlugin):
|
||||
self.sessions[session]["commTimers"] = {}
|
||||
self.sessions[session]["nodeDone"] = {}
|
||||
|
||||
#print("added session: " + str(self.sessions))
|
||||
|
||||
iq = iq.reply()
|
||||
iq['accepted']['seqnr'] = seqnr
|
||||
if not request_delay_sec is None:
|
||||
@@ -319,10 +315,8 @@ class XEP_0323(BasePlugin):
|
||||
return
|
||||
|
||||
if self.threaded:
|
||||
#print("starting thread")
|
||||
tr_req = Thread(target=self._threaded_node_request, args=(session, process_fields, req_flags))
|
||||
tr_req.start()
|
||||
#print("started thread")
|
||||
else:
|
||||
self._threaded_node_request(session, process_fields, req_flags)
|
||||
|
||||
@@ -349,7 +343,6 @@ class XEP_0323(BasePlugin):
|
||||
for node in self.sessions[session]["node_list"]:
|
||||
timer = TimerReset(self.nodes[node]['commTimeout'], self._event_comm_timeout, args=(session, node))
|
||||
self.sessions[session]["commTimers"][node] = timer
|
||||
#print("Starting timer " + str(timer) + ", timeout: " + str(self.nodes[node]['commTimeout']))
|
||||
timer.start()
|
||||
self.nodes[node]['device'].request_fields(process_fields, flags=flags, session=session, callback=self._device_field_request_callback)
|
||||
|
||||
@@ -377,7 +370,6 @@ class XEP_0323(BasePlugin):
|
||||
msg['failure']['done'] = 'true'
|
||||
msg.send()
|
||||
# The session is complete, delete it
|
||||
#print("del session " + session + " due to timeout")
|
||||
del self.sessions[session]
|
||||
|
||||
def _event_delayed_req(self, session, process_fields, req_flags):
|
||||
@@ -404,7 +396,7 @@ class XEP_0323(BasePlugin):
|
||||
|
||||
def _all_nodes_done(self, session):
|
||||
"""
|
||||
Checks wheter all devices are done replying to the readout.
|
||||
Checks whether all devices are done replying to the readout.
|
||||
|
||||
Arguments:
|
||||
session -- The request session id
|
||||
@@ -448,7 +440,7 @@ class XEP_0323(BasePlugin):
|
||||
Error details when a request failed.
|
||||
"""
|
||||
if not session in self.sessions:
|
||||
# This can happend if a session was deleted, like in a cancellation. Just drop the data.
|
||||
# This can happen if a session was deleted, like in a cancellation. Just drop the data.
|
||||
return
|
||||
|
||||
if result == "error":
|
||||
@@ -467,7 +459,6 @@ class XEP_0323(BasePlugin):
|
||||
if (self._all_nodes_done(session)):
|
||||
msg['failure']['done'] = 'true'
|
||||
# The session is complete, delete it
|
||||
# print("del session " + session + " due to error")
|
||||
del self.sessions[session]
|
||||
msg.send()
|
||||
else:
|
||||
@@ -491,11 +482,10 @@ class XEP_0323(BasePlugin):
|
||||
if result == "done":
|
||||
self.sessions[session]["commTimers"][nodeId].cancel()
|
||||
self.sessions[session]["nodeDone"][nodeId] = True
|
||||
msg['fields']['done'] = 'true'
|
||||
if (self._all_nodes_done(session)):
|
||||
# The session is complete, delete it
|
||||
# print("del session " + session + " due to complete")
|
||||
del self.sessions[session]
|
||||
msg['fields']['done'] = 'true'
|
||||
else:
|
||||
# Restart comm timer
|
||||
self.sessions[session]["commTimers"][nodeId].reset()
|
||||
@@ -531,19 +521,19 @@ class XEP_0323(BasePlugin):
|
||||
iq['rejected']['error'] = "Cancel request received, no matching request is active."
|
||||
iq.send()
|
||||
|
||||
# =================================================================
|
||||
# =================================================================
|
||||
# Client side (data retriever) API
|
||||
|
||||
def request_data(self, from_jid, to_jid, callback, nodeIds=None, fields=None, flags=None):
|
||||
"""
|
||||
Called on the client side to initiade a data readout.
|
||||
Called on the client side to initiate a data readout.
|
||||
Composes a message with the request and sends it to the device(s).
|
||||
Does not block, the callback will be called when data is available.
|
||||
|
||||
Arguments:
|
||||
from_jid -- The jid of the requester
|
||||
to_jid -- The jid of the device(s)
|
||||
callback -- The callback function to call when data is availble.
|
||||
callback -- The callback function to call when data is available.
|
||||
|
||||
The callback function must support the following arguments:
|
||||
|
||||
@@ -636,7 +626,7 @@ class XEP_0323(BasePlugin):
|
||||
def _get_new_seqnr(self):
|
||||
""" Returns a unique sequence number (unique across threads) """
|
||||
self.seqnr_lock.acquire()
|
||||
self.last_seqnr = self.last_seqnr + 1
|
||||
self.last_seqnr += 1
|
||||
self.seqnr_lock.release()
|
||||
return str(self.last_seqnr)
|
||||
|
||||
@@ -664,7 +654,6 @@ class XEP_0323(BasePlugin):
|
||||
Received Iq with cancelled - this is a cancel confirm.
|
||||
Delete the session.
|
||||
"""
|
||||
#print("Got cancelled")
|
||||
seqnr = iq['cancelled']['seqnr']
|
||||
callback = self.sessions[seqnr]["callback"]
|
||||
callback(from_jid=iq['from'], result="cancelled")
|
||||
@@ -673,7 +662,7 @@ class XEP_0323(BasePlugin):
|
||||
|
||||
def _handle_event_fields(self, msg):
|
||||
"""
|
||||
Received Msg with fields - this is a data reponse to a request.
|
||||
Received Msg with fields - this is a data response to a request.
|
||||
If this is the last data block, issue a "done" callback.
|
||||
"""
|
||||
seqnr = msg['fields']['seqnr']
|
||||
|
||||
@@ -23,7 +23,12 @@ class _TimerReset(Thread):
|
||||
t.cancel() # stop the timer's action if it's still waiting
|
||||
"""
|
||||
|
||||
def __init__(self, interval, function, args=[], kwargs={}):
|
||||
def __init__(self, interval, function, args=None, kwargs=None):
|
||||
if not kwargs:
|
||||
kwargs = {}
|
||||
if not args:
|
||||
args = []
|
||||
|
||||
Thread.__init__(self)
|
||||
self.interval = interval
|
||||
self.function = function
|
||||
|
||||
Reference in New Issue
Block a user