def test_use_one_at_random(self): Backend.objects.create(name="backend1") Backend.objects.create(name="backend2") conn = best_connection_for_phone_number('1234', ["backend1"]) self.assertEqual("backend1", conn.backend.name) conn = best_connection_for_phone_number('2345', ["backend2"]) self.assertEqual("backend2", conn.backend.name)
def test_matching_number(self): self.assertEqual('backend1', best_connection_for_phone_number('1234').backend.name) self.assertEqual('backend2', best_connection_for_phone_number('2345').backend.name) # Doesn't blow up for some other number best_connection_for_phone_number('3456')
def test_freshest_connection(self): # If there are connection objects, use most recent backend1 = Backend.objects.create(name="backend1") backend2 = Backend.objects.create(name="backend2") Connection.objects.create(identity=self.number, backend=backend1, modified_on=datetime(2014, 3, 4, 12, 9)) conn2 = Connection.objects.create(identity=self.number, backend=backend2, modified_on=datetime( 2014, 3, 4, 12, 10)) self.assertEqual(conn2, best_connection_for_phone_number(self.number))
def test_freshest_connection(self): # If there are connection objects, use most recent backend1 = Backend.objects.create(name="backend1") backend2 = Backend.objects.create(name="backend2") Connection.objects.create( identity=self.number, backend=backend1, modified_on=datetime(2014, 3, 4, 12, 9) ) conn2 = Connection.objects.create( identity=self.number, backend=backend2, modified_on=datetime(2014, 3, 4, 12, 10) ) self.assertEqual(conn2, best_connection_for_phone_number(self.number))
def send_message_by_id(bmsg_pk): """ Send a specific ``BulkMessage`` object based on the provided primary key, ``bmsg_pk``. Intended to be called from a separate process or thread that might not inherit the caller's database connection. Returns the number of messages sent (0 or 1). """ num_sent = 0 try: # include a few sanity checks when retrieving this message, just in case # the database changed since this ``bmsg_pk`` was queued bmsg = BulkMessage.objects.unsent().select_related('batch')\ .get(pk=bmsg_pk, batch__status=Batch.APPROVED) except BulkMessage.DoesNotExist: bmsg = None if bmsg: connection = best_connection_for_phone_number(bmsg.phone_number, settings.BULKSMS_BACKENDS) # create a RapidSMS message object router = get_router() out_msg = router.new_outgoing_message(text=bmsg.message, connections=[connection]) # setup the from_number out_msg.fields['endpoint'] = bmsg.from_shortcode # process the RapidSMS outgoing phases continue_sending = router.process_outgoing_phases(out_msg) if continue_sending: try: router.send_to_backend(backend_name=connection.backend.name, id_=out_msg.id, text=out_msg.text, identities=[connection.identity], context=out_msg.fields) except MessageSendingError: logger.exception("Error sending bulk_sms message: id %d, batch %s" % (bmsg.pk, bmsg.batch)) else: BulkMessage.objects.filter(pk=bmsg_pk).update(sms=out_msg.sms) num_sent = 1 return num_sent