예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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')
예제 #4
0
 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))
예제 #5
0
 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))
예제 #6
0
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
예제 #7
0
 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')