Example #1
0
 def handle(self, *args, **options):
     phone_number = options['phone_number']
     message = options['message']
     phone_sender = options['phone_sender']
     get_dpw_msg_handler().send_text(phone_number=phone_number,
                                     text=message,
                                     phone_sender=phone_sender)
     return "Sent message '{}' to phone_number {}".format(
         message,
         phone_number,
     )
 def test_send_message_dry_run_param(self):
     MsgHandler.DRY_RUN = False
     sent = get_dpw_msg_handler().send_text("5005550006",
                                            "testing",
                                            dry_run_param=True)
     self.assertFalse(
         sent, "MsgHandler sends no texts when dry_run_param is True")
    def test_get_phone_sender_consistent(self):

        msg_handler = get_dpw_msg_handler()

        numbers = [
            '1234567800',
            '1234567801',
            '1234567802',
            '1234567803',
            '1234567804',
            '1234567805',
            '1234567806',
            '1234567807',
            '1234567808',
            '1234567809',
            '1234567810',
            '1234567811',
            '1234567812',
            '1234567813',
            '1234567814',
            '1234567815',
            '1234567816',
            '1234567817',
            '1234567818',
            '1234567819',
        ]

        for number in numbers:
            key = MsgHandler.get_phone_number_key(number)
            msg_handler.phone_senders[key] = number

        for number in numbers:
            sender = msg_handler.get_phone_sender(dest_phone_number=number)
            self.assertEqual(sender, number,
                             "MsgHandler uses consistent fone numbers")
 def test_send_message_dry_run(self):
     MsgHandler.DRY_RUN = True
     sent = get_dpw_msg_handler().send_text("5005550006", "testing")
     self.assertFalse(sent, "MsgHandler sends no texts when DRY_RUN is set")
 def test_send_message(self):
     MsgHandler.DRY_RUN = False
     sent = get_dpw_msg_handler().send_text("5005550006", "testing")
     self.assertTrue(sent, "MsgHandler sends a text")
 def test_get_phone_sender(self):
     number = get_dpw_msg_handler().get_phone_sender()
     self.assertTrue(
         type(number) is str and len(number) == 12,
         "get_phone_sender() returns a valid phone number")
Example #7
0
    def update_or_create_from_dict(data):
        """
        Using dictionary of form data, update existing subscriber or create new one
        """

        if not data.get('phone_number') or not data.get('address'):
            return None, {"error": "address and phone_number are required"}

        phone_number = data['phone_number']
        street_address = data['address']

        if not re.fullmatch(r'[\d]{10}', phone_number):
            return None, {
                "error": "phone_number must be 9 digits, no punctuation"
            }

        waste_area_ids = data.get('waste_area_ids')
        if not waste_area_ids:
            # Parse address string and get result from AddressPoint geocoder
            location, address = util.geocode_address(
                street_address=street_address)
            if not location:
                invalid_addr_msg = 'Invalid waste reminder text signup: {} from {}'.format(
                    street_address, phone_number)

                CODLogger.instance().log_error(
                    name=__name__,
                    area="waste notifier signup by text",
                    msg=invalid_addr_msg)

                SlackMsgHandler().send_admin_alert(invalid_addr_msg)

                msg = "Unfortunately, address {} could not be located - please text the street address only, for example '1301 3rd ave'".format(
                    street_address)
                text_signup_number = settings.AUTO_LOADED_DATA[
                    "WASTE_REMINDER_TEXT_SIGNUP_NUMBERS"][0]
                get_dpw_msg_handler().send_text(
                    phone_number=phone_number,
                    phone_sender=text_signup_number,
                    text=msg)

                return None, {"error": "Address not found"}

            waste_area_ids = get_waste_area_ids(location=location)

        if type(waste_area_ids) == list:
            waste_area_ids = ''.join(
                [str(num) + ',' for num in waste_area_ids])

        # update existing subscriber or create new one
        subscriber = Subscriber.objects.none()
        previous = Subscriber.objects.filter(phone_number__exact=phone_number)
        if previous.exists():
            subscriber = previous[0]
            subscriber.phone_number = phone_number
            subscriber.waste_area_ids = waste_area_ids
        else:
            # try to create a subscriber with the posted data
            subscriber = Subscriber(phone_number=phone_number,
                                    waste_area_ids=waste_area_ids)

        # set service type
        if data.get("service_type"):
            subscriber.service_type = data['service_type'].replace('|', ',')

        # check for optional values
        for value in ['address', 'latitude', 'longitude']:
            if data.get(value):
                setattr(subscriber, value, data.get(value))

        # validate and save subscriber
        subscriber.clean()
        subscriber.save()

        return subscriber, None