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")
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