def poll_uri_for_messages(self): with self.reboot_on_exception(): log.msg("Polling %s for new messages to be sent out." % self.poll_uri) if self.modem_is_ready(): deferred = request(self.poll_uri, method='GET') deferred.addCallback(self.poll_uri_for_messages_success) deferred.addErrback(self.poll_uri_for_messages_fail) return deferred else: log.err("Modem is not ready, no use polling.") # reschedule reactor.callLater(self.poll_interval, self.poll_uri_for_messages)
def post_message(self, message): if message: log.msg("Posting %s to %s" % (message, self.uri)) deferred = request(self.uri, data={ 'sender_msisdn': message.sender, 'recipient_msisdn': self.msisdn, 'sms_id': uuid.uuid4(), 'message': message.text, }, method='POST') deferred.addCallback(self.post_message_success) deferred.addErrback(self.post_message_failed, message) else: log.msg("No messages available, checking again after %s seconds" % self.interval) return reactor.callLater(self.interval, self.poll_modem_for_messages)
def poll_uri_for_messages_success(self, result): required_keys = ['recipient', 'text', 'uri'] messages = json.loads(result) for message in messages: # check if the JSON makes any sense if all([k in message for k in required_keys]): # try and send the SMS if self.modem.send_sms(recipient=message['recipient'], text=message['text']): # send an HTTP DELETE to the URI specified in the message log.msg('Message sent, sending DELETE to %(uri)s' % message) deferred = request(str(message['uri']), method='DELETE') deferred.addCallback(self.delete_message_success) deferred.addErrback(log.err) else: log.err('Unable to send SMS, no clue why.') else: log.err("Invalid JSON message received, missing " \ "entries: %s" % (required_keys - message.keys(),))